masadonline commited on
Commit
1725afa
Β·
verified Β·
1 Parent(s): 713588d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -29
app.py CHANGED
@@ -1,58 +1,61 @@
 
1
  import streamlit as st
2
  from langchain_community.document_loaders import PyPDFLoader
3
  from langchain.text_splitter import RecursiveCharacterTextSplitter
4
  from langchain.vectorstores import FAISS
5
  from langchain.embeddings import HuggingFaceEmbeddings
6
  from langchain.chains import RetrievalQA
7
- from langchain_community.llms import HuggingFaceEndpoint
8
- import os
9
 
10
- # --- UI ---
11
- st.set_page_config(page_title="SMEHelpBot", layout="wide")
12
- st.title("πŸ€– SMEHelpBot – Your AI Assistant for Small Business")
13
 
14
- uploaded_file = st.file_uploader("πŸ“„ Upload an industry-specific PDF (policy, FAQ, etc.):", type=["pdf"])
15
- user_query = st.text_input("πŸ’¬ Ask a business-related question:")
 
 
 
 
 
16
 
17
- # --- Process PDF + RAG ---
18
  if uploaded_file:
 
19
  with open("temp.pdf", "wb") as f:
20
  f.write(uploaded_file.read())
21
-
 
22
  loader = PyPDFLoader("temp.pdf")
23
- pages = loader.load()
24
 
25
  splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
26
- chunks = splitter.split_documents(pages)
27
 
 
28
  embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
29
- db = FAISS.from_documents(chunks, embeddings)
 
30
 
31
- retriever = db.as_retriever()
32
-
33
- # --- Groq API (LLaMA3 via HuggingFaceEndpoint) ---
34
- os.environ["HUGGINGFACEHUB_API_TOKEN"] = st.secrets.get("HF_TOKEN") or "your_api_token_here"
35
-
36
- llm = HuggingFaceEndpoint(
37
- repo_id="meta-llama/Meta-Llama-3-8B-Instruct",
38
- temperature=0.6,
39
- max_new_tokens=512
40
- )
41
 
42
- qa_chain = RetrievalQA.from_chain_type(
 
43
  llm=llm,
 
44
  retriever=retriever,
45
  return_source_documents=True
46
  )
47
 
48
- if user_query:
49
- with st.spinner("Generating response..."):
50
- result = qa_chain({"query": user_query})
51
  st.success(result["result"])
52
 
53
- with st.expander("πŸ“š Sources"):
54
  for doc in result["source_documents"]:
55
- st.markdown(f"β€’ Page content: {doc.page_content[:300]}...")
56
 
57
  else:
58
- st.info("Upload a PDF and type your question to get started.")
 
1
+ import os
2
  import streamlit as st
3
  from langchain_community.document_loaders import PyPDFLoader
4
  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_community.chat_models import ChatGroq
 
9
 
10
+ # Set Streamlit page config
11
+ st.set_page_config(page_title="SMEHelpBot πŸ€–", layout="wide")
12
+ st.title("πŸ€– SMEHelpBot – Your AI Assistant for Small Businesses")
13
 
14
+ # File uploader
15
+ uploaded_file = st.file_uploader("πŸ“„ Upload a PDF (e.g., SME policy, business doc, etc.):", type=["pdf"])
16
+ user_question = st.text_input("πŸ’¬ Ask a question related to your document or SME operations:")
17
+
18
+ # Set Groq API key securely (use Streamlit secrets or env var)
19
+ #GROQ_API_KEY = st.secrets.get("GROQ_API_KEY") or os.getenv("GROQ_API_KEY") or "your_groq_api_key_here"
20
+ GROQ_API_KEY = Groq(api_key=os.environ.get("GROQ_API_KEY")) # Initialize client here with API key
21
 
 
22
  if uploaded_file:
23
+ # Save uploaded file temporarily
24
  with open("temp.pdf", "wb") as f:
25
  f.write(uploaded_file.read())
26
+
27
+ # Load PDF and split into chunks
28
  loader = PyPDFLoader("temp.pdf")
29
+ documents = loader.load()
30
 
31
  splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
32
+ chunks = splitter.split_documents(documents)
33
 
34
+ # Create vector store using MiniLM embeddings
35
  embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
36
+ vectorstore = FAISS.from_documents(chunks, embeddings)
37
+ retriever = vectorstore.as_retriever()
38
 
39
+ # Set up LLM using Groq + LLaMA3
40
+ os.environ["GROQ_API_KEY"] = GROQ_API_KEY
41
+ llm = ChatGroq(temperature=0.3, model_name="llama3-8b-8192")
 
 
 
 
 
 
 
42
 
43
+ # QA chain with retrieval
44
+ qa = RetrievalQA.from_chain_type(
45
  llm=llm,
46
+ chain_type="stuff",
47
  retriever=retriever,
48
  return_source_documents=True
49
  )
50
 
51
+ if user_question:
52
+ with st.spinner("Generating answer..."):
53
+ result = qa({"query": user_question})
54
  st.success(result["result"])
55
 
56
+ with st.expander("πŸ“„ Sources"):
57
  for doc in result["source_documents"]:
58
+ st.markdown(f"β€’ {doc.page_content[:300]}...")
59
 
60
  else:
61
+ st.info("Upload a PDF and enter a question to begin.")