| 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 |
|
|
| |
| |
| |
| 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 |
|
|
| |
| |
| |
| pdf_path = "docs/acca.pdf" |
| loader = PyPDFLoader(pdf_path) |
| pages = loader.load() |
|
|
| text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200) |
| docs = text_splitter.split_documents(pages) |
|
|
| |
| |
| |
| embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") |
| vectorstore = FAISS.from_documents(docs, embeddings) |
|
|
| |
| |
| |
| llm = ChatGroq( |
| temperature=0.7, |
| model_name="llama3-8b-8192", |
| groq_api_key=api_key |
| ) |
|
|
| qa_chain = RetrievalQA.from_chain_type( |
| llm=llm, |
| retriever=vectorstore.as_retriever(), |
| return_source_documents=True |
| ) |
|
|
| |
| |
| |
| 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"]) |
|
|