AkshayUmesh commited on
Commit
2c57db1
Β·
verified Β·
1 Parent(s): a40c757

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +57 -51
app.py CHANGED
@@ -1,51 +1,57 @@
1
- import streamlit as st
2
- from langchain_community.document_loaders import PyPDFLoader
3
- from langchain.text_splitter import RecursiveCharacterTextSplitter
4
- from langchain_community.vectorstores import FAISS
5
- from langchain.chains import RetrievalQA
6
- from langchain_community.embeddings import HuggingFaceEmbeddings
7
- from langchain_community.llms import HuggingFaceHub
8
- import tempfile
9
- import os
10
-
11
- # Hugging Face API token (free – just create an account on huggingface.co)
12
- HF_TOKEN = os.getenv("HuggingfacehubAPIToken")
13
-
14
- st.set_page_config(page_title="DocuQuery (Free)", page_icon="πŸ“„", layout="wide")
15
- st.title("πŸ“„ DocuQuery - Free RAG App with Hugging Face Models")
16
-
17
- # Upload PDF
18
- uploaded_file = st.file_uploader("Upload your PDF file", type="pdf")
19
-
20
- if uploaded_file:
21
- with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
22
- tmp_file.write(uploaded_file.read())
23
- file_path = tmp_file.name
24
-
25
- # Load PDF and split text
26
- loader = PyPDFLoader(file_path)
27
- documents = loader.load()
28
-
29
- text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
30
- docs = text_splitter.split_documents(documents)
31
-
32
- # Create embeddings with free Hugging Face model
33
- embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
34
- vectorstore = FAISS.from_documents(docs, embeddings)
35
-
36
- retriever = vectorstore.as_retriever()
37
-
38
- # Use a free Hugging Face LLM (lightweight for Q&A)
39
- llm = HuggingFaceHub(
40
- repo_id="google/flan-t5-base",
41
- huggingfacehub_api_token=HF_TOKEN,
42
- model_kwargs={"temperature":0, "max_length":512}
43
- )
44
-
45
- qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
46
-
47
- query = st.text_input("πŸ” Ask a question about your document:")
48
-
49
- if query:
50
- answer = qa.run(query)
51
- st.markdown(f"**Answer:** {answer}")
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import os
3
+ import tempfile
4
+ from langchain_community.document_loaders import PyPDFLoader
5
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
6
+ from langchain_community.vectorstores import FAISS
7
+ from langchain.chains import RetrievalQA
8
+ from langchain_community.embeddings import HuggingFaceEmbeddings
9
+ from langchain_community.llms import HuggingFaceHub
10
+
11
+ # Fix Streamlit config in Docker
12
+ os.environ["STREAMLIT_HOME"] = "/tmp/.streamlit"
13
+
14
+ HF_TOKEN = os.environ.get("HuggingfacehubAPIToken")
15
+ if HF_TOKEN is None:
16
+ st.error("⚠️ Hugging Face API token not set. Add it in Settings β†’ Secrets.")
17
+ st.stop()
18
+
19
+ st.title("πŸ“„ DocuQuery - Free RAG App")
20
+
21
+ # Upload PDF
22
+ uploaded_file = st.file_uploader("Upload your PDF", type="pdf")
23
+
24
+ if uploaded_file:
25
+ st.info("Processing document...")
26
+ with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file:
27
+ tmp_file.write(uploaded_file.read())
28
+ file_path = tmp_file.name
29
+
30
+ # Load and split PDF
31
+ loader = PyPDFLoader(file_path)
32
+ documents = loader.load()
33
+ st.write(f"Loaded {len(documents)} document(s)")
34
+
35
+ text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
36
+ docs = text_splitter.split_documents(documents)
37
+ st.write(f"Split into {len(docs)} chunks")
38
+
39
+ # Embeddings and vectorstore
40
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
41
+ vectorstore = FAISS.from_documents(docs, embeddings)
42
+ retriever = vectorstore.as_retriever()
43
+
44
+ # LLM
45
+ llm = HuggingFaceHub(repo_id="google/flan-t5-base",
46
+ huggingfacehub_api_token=HF_TOKEN,
47
+ model_kwargs={"temperature": 0, "max_length": 512})
48
+
49
+ qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=retriever)
50
+ st.success("Document processed! You can now ask questions.")
51
+
52
+ # Question input
53
+ query = st.text_input("Ask a question about your document:")
54
+ if query:
55
+ with st.spinner("Generating answer..."):
56
+ answer = qa.run(query)
57
+ st.markdown(f"**Answer:** {answer}")