masadonline commited on
Commit
7bf6ead
Β·
verified Β·
1 Parent(s): 714b045

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -15
app.py CHANGED
@@ -5,55 +5,60 @@ from langchain.text_splitter import RecursiveCharacterTextSplitter
5
  from langchain.vectorstores import FAISS
6
  from langchain.embeddings import HuggingFaceEmbeddings
7
  from langchain.chains import RetrievalQA
8
- from langchain_groq import ChatGroq # βœ… Correct import for Groq API
9
 
10
- # App config
11
  st.set_page_config(page_title="SMEHelpBot πŸ€–", layout="wide")
12
  st.title("πŸ€– SMEHelpBot – Your AI Assistant for Small Businesses")
13
 
14
- # API key setup
15
- GROQ_API_KEY = st.secrets.get("GROQ_API_KEY") or os.getenv("GROQ_API_KEY") or "your_groq_api_key_here"
 
 
 
 
16
  os.environ["GROQ_API_KEY"] = GROQ_API_KEY
17
 
18
  # Upload PDF
19
  uploaded_file = st.file_uploader("πŸ“„ Upload a PDF (e.g., SME policies, documents):", type=["pdf"])
20
- user_question = st.text_input("πŸ’¬ Ask a question based on the document:")
21
 
22
  if uploaded_file:
23
  with open("temp.pdf", "wb") as f:
24
  f.write(uploaded_file.read())
25
 
 
26
  loader = PyPDFLoader("temp.pdf")
27
  documents = loader.load()
28
 
29
- # Split into chunks
30
  splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
31
  chunks = splitter.split_documents(documents)
32
 
33
- # Create embeddings
34
  embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
35
  vectorstore = FAISS.from_documents(chunks, embeddings)
36
  retriever = vectorstore.as_retriever()
37
 
38
- # Groq LLaMA3 setup
39
  llm = ChatGroq(temperature=0.3, model_name="llama3-8b-8192")
40
 
41
- # Retrieval QA
42
- qa = RetrievalQA.from_chain_type(
43
  llm=llm,
44
  chain_type="stuff",
45
  retriever=retriever,
46
  return_source_documents=True
47
  )
48
 
 
49
  if user_question:
50
- with st.spinner("Generating answer..."):
51
- result = qa({"query": user_question})
52
- st.success(result["result"])
 
53
 
54
  with st.expander("πŸ“„ Source Snippets"):
55
  for i, doc in enumerate(result["source_documents"]):
56
  st.markdown(f"**Source {i+1}:**\n{doc.page_content[:300]}...")
57
-
58
  else:
59
- st.info("Upload a PDF and enter a question to get started.")
 
5
  from langchain.vectorstores import FAISS
6
  from langchain.embeddings import HuggingFaceEmbeddings
7
  from langchain.chains import RetrievalQA
8
+ from langchain_groq import ChatGroq # βœ… Correct import
9
 
10
+ # Set up Streamlit UI
11
  st.set_page_config(page_title="SMEHelpBot πŸ€–", layout="wide")
12
  st.title("πŸ€– SMEHelpBot – Your AI Assistant for Small Businesses")
13
 
14
+ # Set Groq API key (use .streamlit/secrets.toml or environment variable)
15
+ GROQ_API_KEY = st.secrets.get("GROQ_API_KEY") or os.getenv("GROQ_API_KEY")
16
+ if not GROQ_API_KEY:
17
+ st.error("❌ Please set your GROQ_API_KEY in environment or .streamlit/secrets.toml")
18
+ st.stop()
19
+
20
  os.environ["GROQ_API_KEY"] = GROQ_API_KEY
21
 
22
  # Upload PDF
23
  uploaded_file = st.file_uploader("πŸ“„ Upload a PDF (e.g., SME policies, documents):", type=["pdf"])
24
+ user_question = st.text_input("πŸ’¬ Ask a question about the uploaded document:")
25
 
26
  if uploaded_file:
27
  with open("temp.pdf", "wb") as f:
28
  f.write(uploaded_file.read())
29
 
30
+ # Load PDF and split into chunks
31
  loader = PyPDFLoader("temp.pdf")
32
  documents = loader.load()
33
 
 
34
  splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
35
  chunks = splitter.split_documents(documents)
36
 
37
+ # Create vector store
38
  embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
39
  vectorstore = FAISS.from_documents(chunks, embeddings)
40
  retriever = vectorstore.as_retriever()
41
 
42
+ # Load Groq LLaMA3
43
  llm = ChatGroq(temperature=0.3, model_name="llama3-8b-8192")
44
 
45
+ # Set up RetrievalQA chain
46
+ qa_chain = RetrievalQA.from_chain_type(
47
  llm=llm,
48
  chain_type="stuff",
49
  retriever=retriever,
50
  return_source_documents=True
51
  )
52
 
53
+ # Handle user query
54
  if user_question:
55
+ with st.spinner("πŸ€” Thinking..."):
56
+ result = qa_chain({"query": user_question})
57
+ st.success("βœ… Answer:")
58
+ st.write(result["result"])
59
 
60
  with st.expander("πŸ“„ Source Snippets"):
61
  for i, doc in enumerate(result["source_documents"]):
62
  st.markdown(f"**Source {i+1}:**\n{doc.page_content[:300]}...")
 
63
  else:
64
+ st.info("πŸ“‚ Upload a PDF and ask a question to get started.")