| | 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"]) |
| |
|