DataWizard9742 commited on
Commit
31234fa
·
1 Parent(s): c6b9aa0

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -0
app.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ add_vertical_space(5)
18
+ st.write('Made at FULL STACK ACADEMY')
19
+
20
+ load_dotenv()
21
+
22
+
23
+ def main():
24
+ st.header("Chat with PDF 💬")
25
+ pdf = st.file_uploader("Upload your PDF", type='pdf')
26
+ if pdf is not None:
27
+ pdf_reader = PdfReader(pdf)
28
+ text = ""
29
+ for page in pdf_reader.pages:
30
+ text += page.extract_text()
31
+ text_splitter = RecursiveCharacterTextSplitter(
32
+ chunk_size=1000,
33
+ chunk_overlap=200,
34
+ length_function=len
35
+ )
36
+ chunks = text_splitter.split_text(text=text)
37
+
38
+ # # embeddings
39
+ store_name = pdf.name[:-4]
40
+ st.write(f'{store_name}')
41
+
42
+ if os.path.exists(f"{store_name}.pkl"):
43
+ with open(f"{store_name}.pkl", "rb") as f:
44
+ VectorStore = pickle.load(f)
45
+ else:
46
+ embeddings = OpenAIEmbeddings()
47
+ VectorStore = FAISS.from_texts(chunks, embedding=embeddings)
48
+ with open(f"{store_name}.pkl", "wb") as f:
49
+ pickle.dump(VectorStore, f)
50
+
51
+ query = st.text_input("Ask questions about your PDF file:")
52
+
53
+ if query:
54
+ docs = VectorStore.similarity_search(query=query, k=3)
55
+ llm = OpenAI()
56
+ chain = load_qa_chain(llm=llm, chain_type="stuff")
57
+ with get_openai_callback() as cb:
58
+ response = chain.run(input_documents=docs, question=query)
59
+ print(cb)
60
+ st.write(response)
61
+
62
+
63
+ if __name__ == '__main__':
64
+ main()