jarif commited on
Commit
4616152
Β·
verified Β·
1 Parent(s): e464f6f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -70
app.py CHANGED
@@ -1,70 +1,81 @@
1
- import os
2
- import logging
3
- import streamlit as st
4
- from langchain.embeddings import HuggingFaceEmbeddings
5
- from langchain.vectorstores import Chroma
6
- from langchain.chains import RetrievalQA
7
- from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
8
-
9
- # Configure logging
10
- logging.basicConfig(level=logging.DEBUG)
11
-
12
- def load_vector_store():
13
- embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
14
- vector_store = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)
15
- return vector_store
16
-
17
- def load_llm():
18
- checkpoint = "LaMini-T5-738M"
19
- tokenizer = AutoTokenizer.from_pretrained(checkpoint)
20
- model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint)
21
- pipe = pipeline(
22
- 'text2text-generation',
23
- model=model,
24
- tokenizer=tokenizer,
25
- max_length=256,
26
- do_sample=True,
27
- temperature=0.3,
28
- top_p=0.95
29
- )
30
- return pipe
31
-
32
- def process_answer(question):
33
- try:
34
- vector_store = load_vector_store()
35
- llm = load_llm()
36
- qa = RetrievalQA.from_chain_type(
37
- llm=llm,
38
- chain_type="stuff",
39
- retriever=vector_store.as_retriever(),
40
- return_source_documents=True
41
- )
42
- result = qa.invoke(question)
43
- answer = result['result']
44
- return answer, result
45
- except Exception as e:
46
- logging.error(f"An error occurred while processing the answer: {e}")
47
- st.error(f"An error occurred while processing the answer: {e}")
48
- return "An error occurred while processing your request.", {}
49
-
50
- def main():
51
- st.title("Search Your PDF πŸ“šπŸ“")
52
- with st.expander("About the App"):
53
- st.markdown(
54
- """
55
- This is a Generative AI powered Question and Answering app that responds to questions about your PDF File.
56
- """
57
- )
58
- question = st.text_area("Enter your Question")
59
- if st.button("Ask"):
60
- st.info("Your Question: " + question)
61
- st.info("Your Answer")
62
- try:
63
- answer, metadata = process_answer(question)
64
- st.write(answer)
65
- st.write(metadata)
66
- except Exception as e:
67
- st.error(f"An unexpected error occurred: {e}")
68
-
69
- if __name__ == '__main__':
70
- main()
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import logging
3
+ import streamlit as st
4
+ from langchain.embeddings import HuggingFaceEmbeddings
5
+ from langchain.vectorstores import Chroma
6
+ from langchain.chains import RetrievalQA
7
+ from langchain_huggingface import HuggingFacePipeline
8
+ from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, pipeline
9
+
10
+ # Configure logging
11
+ logging.basicConfig(level=logging.DEBUG)
12
+
13
+ def load_vector_store():
14
+ # Ensure the directory exists
15
+ persist_directory = "./chroma_db"
16
+ if not os.path.exists(persist_directory):
17
+ logging.error(f"The directory '{persist_directory}' does not exist. Please run the ingestion script.")
18
+ st.error(f"The directory '{persist_directory}' does not exist. Please run the ingestion script.")
19
+ return None
20
+
21
+ embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
22
+ vector_store = Chroma(persist_directory=persist_directory, embedding_function=embeddings)
23
+ return vector_store
24
+
25
+ def load_llm():
26
+ checkpoint = "LaMini-T5-738M"
27
+ tokenizer = AutoTokenizer.from_pretrained(checkpoint)
28
+ model = AutoModelForSeq2SeqLM.from_pretrained(checkpoint)
29
+ pipe = pipeline(
30
+ 'text2text-generation',
31
+ model=model,
32
+ tokenizer=tokenizer,
33
+ max_length=256,
34
+ do_sample=True,
35
+ temperature=0.3,
36
+ top_p=0.95
37
+ )
38
+ return HuggingFacePipeline(pipeline=pipe)
39
+
40
+ def process_answer(question):
41
+ try:
42
+ vector_store = load_vector_store()
43
+ if vector_store is None:
44
+ return "Vector store not found. Please run the ingestion script.", {}
45
+
46
+ llm = load_llm()
47
+ qa = RetrievalQA.from_chain_type(
48
+ llm=llm,
49
+ chain_type="stuff",
50
+ retriever=vector_store.as_retriever(),
51
+ return_source_documents=True
52
+ )
53
+ result = qa.invoke(question)
54
+ answer = result['result']
55
+ return answer, result
56
+ except Exception as e:
57
+ logging.error(f"An error occurred while processing the answer: {e}")
58
+ st.error(f"An error occurred while processing the answer: {e}")
59
+ return "An error occurred while processing your request.", {}
60
+
61
+ def main():
62
+ st.title("Search Your PDF πŸ“šπŸ“")
63
+ with st.expander("About the App"):
64
+ st.markdown(
65
+ """
66
+ This is a Generative AI powered Question and Answering app that responds to questions about your PDF File.
67
+ """
68
+ )
69
+ question = st.text_area("Enter your Question")
70
+ if st.button("Ask"):
71
+ st.info("Your Question: " + question)
72
+ st.info("Your Answer")
73
+ try:
74
+ answer, metadata = process_answer(question)
75
+ st.write(answer)
76
+ st.write(metadata)
77
+ except Exception as e:
78
+ st.error(f"An unexpected error occurred: {e}")
79
+
80
+ if __name__ == '__main__':
81
+ main()