import os import streamlit as st from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import CharacterTextSplitter from langchain_community.vectorstores import FAISS from langchain.embeddings import HuggingFaceEmbeddings from langchain.chains import RetrievalQA from langchain_groq import ChatGroq # NEW import # ------------------------------- # Sidebar for API key input # ------------------------------- st.set_page_config(page_title="Groq PDF Chatbot") st.title("📄 Chat with your PDF using Groq + LLaMA3") api_key = st.sidebar.text_input("🔑 Enter your Groq API Key", type="password") if not api_key: st.warning("Please enter your Groq API key in the sidebar.") st.stop() os.environ["GROQ_API_KEY"] = api_key # ------------------------------- # Load and split the PDF # ------------------------------- pdf_path = "docs/acca.pdf" # Make sure this file is in your Space loader = PyPDFLoader(pdf_path) pages = loader.load() text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200) docs = text_splitter.split_documents(pages) # ------------------------------- # Vector store using FAISS # ------------------------------- embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") vectorstore = FAISS.from_documents(docs, embeddings) # ------------------------------- # Groq LLM setup # ------------------------------- llm = ChatGroq( temperature=0.7, model_name="llama3-8b-8192", # Make sure to use correct lowercase name groq_api_key=api_key ) qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=vectorstore.as_retriever(), return_source_documents=True ) # ------------------------------- # User input and response # ------------------------------- query = st.text_input("Ask a question based on the PDF:") if query: with st.spinner("Generating answer..."): result = qa_chain.invoke(query) st.subheader("📌 Answer") st.write(result["result"])