satyam001 commited on
Commit
31df2d1
·
1 Parent(s): 1b57203

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +90 -0
app.py CHANGED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ # from dotenv import load_dotenv
3
+ import pickle
4
+ from PyPDF2 import PdfReader
5
+ from streamlit_extras.add_vertical_space import add_vertical_space
6
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
7
+ from langchain.embeddings.openai import OpenAIEmbeddings
8
+ from langchain.vectorstores import FAISS
9
+ from langchain.llms import OpenAI
10
+ from langchain.chains.question_answering import load_qa_chain
11
+ from langchain.callbacks import get_openai_callback
12
+ import os
13
+
14
+ # Sidebar contents
15
+ with st.sidebar:
16
+ st.title('🤗💬 LLM Chat App')
17
+ st.markdown('''
18
+ ## About
19
+ This app is an LLM-powered chatbot built using:
20
+ - [Streamlit](https://streamlit.io/)
21
+ - [LangChain](https://python.langchain.com/)
22
+ - [OpenAI](https://platform.openai.com/docs/models) LLM model
23
+
24
+ ''')
25
+ add_vertical_space(5)
26
+ st.write(
27
+ 'Made with ❤️ by [Prompt Engineer](https://youtube.com/@engineerprompt)')
28
+
29
+ # load_dotenv()
30
+
31
+ # os.environ['OPEN_AI_APIKEY'] = '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'
32
+
33
+
34
+ def main():
35
+ st.header("Chat with PDF 💬")
36
+
37
+ # upload a PDF file
38
+ pdf = st.file_uploader("Upload your PDF", type='pdf')
39
+
40
+ # st.write(pdf)
41
+ if pdf is not None:
42
+ pdf_reader = PdfReader(pdf)
43
+
44
+ text = ""
45
+ for page in pdf_reader.pages:
46
+ text += page.extract_text()
47
+
48
+ text_splitter = RecursiveCharacterTextSplitter(
49
+ chunk_size=1000,
50
+ chunk_overlap=200,
51
+ length_function=len
52
+ )
53
+ chunks = text_splitter.split_text(text=text)
54
+
55
+ # # embeddings
56
+ store_name = pdf.name[:-4]
57
+ st.write(f'{store_name}')
58
+ # st.write(chunks)
59
+
60
+ if os.path.exists(f"{store_name}.pkl"):
61
+ with open(f"{store_name}.pkl", "rb") as f:
62
+ VectorStore = pickle.load(f)
63
+ # st.write('Embeddings Loaded from the Disk')s
64
+ else:
65
+ embeddings = OpenAIEmbeddings(
66
+ openai_api_key='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')
67
+ VectorStore = FAISS.from_texts(chunks, embedding=embeddings)
68
+ with open(f"{store_name}.pkl", "wb") as f:
69
+ pickle.dump(VectorStore, f)
70
+
71
+ # embeddings = OpenAIEmbeddings()
72
+ # VectorStore = FAISS.from_texts(chunks, embedding=embeddings)
73
+
74
+ # Accept user questions/query
75
+ query = st.text_input("Ask questions about your PDF file:")
76
+ # st.write(query)
77
+
78
+ if query:
79
+ docs = VectorStore.similarity_search(query=query, k=3)
80
+
81
+ llm = OpenAI()
82
+ chain = load_qa_chain(llm=llm, chain_type="stuff")
83
+ with get_openai_callback() as cb:
84
+ response = chain.run(input_documents=docs, question=query)
85
+ print(cb)
86
+ st.write(response)
87
+
88
+
89
+ if __name__ == '__main__':
90
+ main()