mihirjadhav commited on
Commit
c01ae6c
·
verified ·
1 Parent(s): 3303090

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +117 -0
app.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from dotenv import load_dotenv
3
+ from PyPDF2 import PdfReader
4
+ from langchain.text_splitter import CharacterTextSplitter
5
+ from langchain.embeddings import OpenAIEmbeddings, HuggingFaceInstructEmbeddings
6
+ from langchain.vectorstores import FAISS
7
+ from langchain.chat_models import ChatOpenAI
8
+ from langchain.memory import ConversationBufferMemory
9
+ from langchain.chains import ConversationalRetrievalChain
10
+ from htmlTemplates import css, bot_template, user_template
11
+ from langchain.llms import HuggingFaceHub
12
+
13
+ def get_pdf_text(pdf_docs):
14
+ text = ""
15
+ for pdf in pdf_docs:
16
+ pdf_reader = PdfReader(pdf)
17
+ for page in pdf_reader.pages:
18
+ text += page.extract_text()
19
+ return text
20
+
21
+
22
+ def get_text_chunks(text):
23
+ text_splitter = CharacterTextSplitter(
24
+ separator="\n",
25
+ chunk_size=1000,
26
+ chunk_overlap=200,
27
+ length_function=len
28
+ )
29
+ chunks = text_splitter.split_text(text)
30
+ return chunks
31
+
32
+
33
+ def get_vectorstore(text_chunks):
34
+ # embeddings = OpenAIEmbeddings()
35
+ embeddings = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-xl")
36
+ vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)
37
+ return vectorstore
38
+
39
+
40
+ def get_conversation_chain(vectorstore):
41
+ # llm = ChatOpenAI()
42
+ llm = HuggingFaceHub(repo_id="google/flan-t5-xxl", model_kwargs={"temperature":0.5, "max_length":512})
43
+
44
+ memory = ConversationBufferMemory(
45
+ memory_key='chat_history', return_messages=True)
46
+ conversation_chain = ConversationalRetrievalChain.from_llm(
47
+ llm=llm,
48
+ retriever=vectorstore.as_retriever(),
49
+ memory=memory
50
+ )
51
+ return conversation_chain
52
+
53
+ # def get_conversation_chain(vectorstore):
54
+ # # Load your LLM with Ollama, specifying the port
55
+ # llm = Ollama(server="localhost:9000")
56
+
57
+ # memory = ConversationBufferMemory(
58
+ # memory_key='chat_history', return_messages=True)
59
+ # conversation_chain = ConversationalRetrievalChain.from_llm(
60
+ # llm=llm,
61
+ # retriever=vectorstore.as_retriever(),
62
+ # memory=memory
63
+ # )
64
+ # return conversation_chain
65
+
66
+
67
+ def handle_userinput(user_question):
68
+ response = st.session_state.conversation({'question': user_question})
69
+ st.session_state.chat_history = response['chat_history']
70
+
71
+ for i, message in enumerate(st.session_state.chat_history):
72
+ if i % 2 == 0:
73
+ st.write(user_template.replace(
74
+ "{{MSG}}", message.content), unsafe_allow_html=True)
75
+ else:
76
+ st.write(bot_template.replace(
77
+ "{{MSG}}", message.content), unsafe_allow_html=True)
78
+
79
+
80
+ def main():
81
+ load_dotenv()
82
+ st.set_page_config(page_title="Chat with multiple PDFs",
83
+ page_icon=":books:")
84
+ st.write(css, unsafe_allow_html=True)
85
+
86
+ if "conversation" not in st.session_state:
87
+ st.session_state.conversation = None
88
+ if "chat_history" not in st.session_state:
89
+ st.session_state.chat_history = None
90
+
91
+ st.header("Chat with multiple PDFs :books:")
92
+ user_question = st.text_input("Ask a question about your documents:")
93
+ if user_question:
94
+ handle_userinput(user_question)
95
+
96
+ with st.sidebar:
97
+ st.subheader("Your documents")
98
+ pdf_docs = st.file_uploader(
99
+ "Upload your PDFs here and click on 'Process'", accept_multiple_files=True)
100
+ if st.button("Process"):
101
+ with st.spinner("Processing"):
102
+ # get pdf text
103
+ raw_text = get_pdf_text(pdf_docs)
104
+
105
+ # get the text chunks
106
+ text_chunks = get_text_chunks(raw_text)
107
+
108
+ # create vector store
109
+ vectorstore = get_vectorstore(text_chunks)
110
+
111
+ # create conversation chain
112
+ st.session_state.conversation = get_conversation_chain(
113
+ vectorstore)
114
+
115
+
116
+ if __name__ == '__main__':
117
+ main()