masadonline commited on
Commit
714b045
Β·
verified Β·
1 Parent(s): 409f7fc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -18
app.py CHANGED
@@ -5,42 +5,40 @@ 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",
@@ -53,9 +51,9 @@ if uploaded_file:
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.")
 
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",
 
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.")