maaz21 commited on
Commit
844bbbd
·
verified ·
1 Parent(s): 99003ea

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -53
app.py CHANGED
@@ -1,57 +1,58 @@
 
1
  import streamlit as st
2
  from langchain_community.document_loaders import PyPDFLoader
 
3
  from langchain_community.vectorstores import FAISS
4
- from langchain_community.embeddings import HuggingFaceEmbeddings
5
  from langchain.chains import RetrievalQA
6
- from groq import Groq
7
- import os
8
-
9
- # Set up page
10
- st.set_page_config(page_title="Chat with PDF")
11
-
12
- # Sidebar: enter Groq API key
13
- st.sidebar.title("Configuration")
14
- groq_api_key = st.sidebar.text_input("Enter your Groq API Key", type="password")
15
-
16
- # Main heading
17
- st.title("📄 PDF Chatbot using LangChain + FAISS + Groq")
18
- st.markdown("This app answers your questions based on a predefined PDF.")
19
-
20
- # Path to your preloaded PDF
21
- PDF_PATH = "docs/acca.pdf"
22
-
23
- # Process PDF and create retriever (cached)
24
- @st.cache_resource
25
- def load_retriever(pdf_path):
26
- loader = PyPDFLoader(pdf_path)
27
- documents = loader.load_and_split()
28
- embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
29
- db = FAISS.from_documents(documents, embeddings)
30
- return db.as_retriever()
31
-
32
- # Validate API key
33
- if not groq_api_key:
34
- st.warning("Please enter your Groq API key.")
35
- else:
36
- retriever = load_retriever(PDF_PATH)
37
-
38
- # Initialize Groq LLM
39
- llm = Groq(
40
- model="llama3-8b-8192",
41
- api_key=groq_api_key,
42
- temperature=0.7,
43
- )
44
-
45
- # QA chain
46
- qa_chain = RetrievalQA.from_chain_type(
47
- llm=llm,
48
- chain_type="stuff",
49
- retriever=retriever
50
- )
51
-
52
- # Input field for questions
53
- user_input = st.text_input("Ask a question about the PDF:")
54
- if user_input:
55
- with st.spinner("Generating response..."):
56
- answer = qa_chain.run(user_input)
57
- st.success(answer)
 
1
+ import os
2
  import streamlit as st
3
  from langchain_community.document_loaders import PyPDFLoader
4
+ from langchain.text_splitter import CharacterTextSplitter
5
  from langchain_community.vectorstores import FAISS
6
+ from langchain.embeddings import HuggingFaceEmbeddings
7
  from langchain.chains import RetrievalQA
8
+ from langchain_community.chat_models import ChatGroq
9
+
10
+ # -------------------------------
11
+ # Sidebar for API key input
12
+ # -------------------------------
13
+ st.set_page_config(page_title="Groq PDF Chatbot")
14
+ st.title("📄 Chat with your PDF using Groq + LLaMA3")
15
+
16
+ api_key = st.sidebar.text_input("🔑 Enter your Groq API Key", type="password")
17
+ if not api_key:
18
+ st.warning("Please enter your Groq API key in the sidebar.")
19
+ st.stop()
20
+
21
+ os.environ["GROQ_API_KEY"] = api_key
22
+
23
+ # -------------------------------
24
+ # Load and split the PDF
25
+ # -------------------------------
26
+ pdf_path = "docs/acca.pdf" # Make sure this file is in your Space
27
+ loader = PyPDFLoader(pdf_path)
28
+ pages = loader.load()
29
+
30
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
31
+ docs = text_splitter.split_documents(pages)
32
+
33
+ # -------------------------------
34
+ # Vector store using FAISS
35
+ # -------------------------------
36
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
37
+ vectorstore = FAISS.from_documents(docs, embeddings)
38
+
39
+ # -------------------------------
40
+ # Groq LLM setup
41
+ # -------------------------------
42
+ llm = ChatGroq(temperature=0, model_name="LLaMA3-8b-8192")
43
+
44
+ qa_chain = RetrievalQA.from_chain_type(
45
+ llm=llm,
46
+ retriever=vectorstore.as_retriever(),
47
+ return_source_documents=True
48
+ )
49
+
50
+ # -------------------------------
51
+ # User input and response
52
+ # -------------------------------
53
+ query = st.text_input("Ask a question based on the PDF:")
54
+ if query:
55
+ with st.spinner("Generating answer..."):
56
+ result = qa_chain.invoke(query)
57
+ st.subheader("📌 Answer")
58
+ st.write(result["result"])