Spaces:
Sleeping
Sleeping
import os | |
from dotenv import load_dotenv | |
import streamlit as st | |
from langchain_groq import ChatGroq | |
from langchain.document_loaders import PyPDFLoader | |
from langchain.text_splitter import RecursiveCharacterTextSplitter | |
from langchain.embeddings import HuggingFaceEmbeddings | |
from langchain.vectorstores import FAISS | |
from langchain.chains import RetrievalQA | |
# Load environment variables from .env file | |
load_dotenv() | |
def main(): | |
# Retrieve API key from environment variables | |
groq_api_key = os.getenv("GROQ_API_KEY") | |
# Verify API key is loaded | |
if not groq_api_key: | |
st.error("GROQ API Key not found. Please check your .env file.") | |
return | |
st.title("PDF Chat with Groq LLM") | |
# File uploader | |
uploaded_file = st.file_uploader("Upload a PDF", type="pdf") | |
if uploaded_file is not None: | |
# Save the uploaded PDF temporarily | |
with open("temp.pdf", "wb") as f: | |
f.write(uploaded_file.getbuffer()) | |
# Load the PDF | |
loader = PyPDFLoader("temp.pdf") | |
pages = loader.load() | |
# Split the text | |
text_splitter = RecursiveCharacterTextSplitter( | |
chunk_size=1000, | |
chunk_overlap=200 | |
) | |
texts = text_splitter.split_documents(pages) | |
# Create embeddings | |
embeddings = HuggingFaceEmbeddings( | |
model_name="sentence-transformers/all-MiniLM-L6-v2" | |
) | |
# Create vector store | |
vectorstore = FAISS.from_documents(texts, embeddings) | |
# Initialize Groq LLM with API key | |
llm = ChatGroq( | |
temperature=0.7, | |
model_name='llama3-70b-8192', | |
api_key=groq_api_key | |
) | |
# Create QA chain | |
qa_chain = RetrievalQA.from_chain_type( | |
llm=llm, | |
chain_type="stuff", | |
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}) | |
) | |
# Chat input | |
query = st.text_input("Ask a question about the PDF:") | |
if query: | |
# Get response | |
response = qa_chain.invoke(query) | |
st.write("Response:", response['result']) | |
if __name__ == "__main__": | |
main() |