qna1 / app.py
vineethn's picture
Update app.py
e3c9e9f verified
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 = GROQ_API_KEY='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'
# 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()