nklomp commited on
Commit
f32fa37
·
verified ·
1 Parent(s): cf85335

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -21
app.py CHANGED
@@ -3,8 +3,9 @@ import os
3
  from dotenv import load_dotenv
4
  from PyPDF2 import PdfReader
5
  from langchain.text_splitter import CharacterTextSplitter
6
- from langchain_community.embeddings import HuggingFaceInstructEmbeddings
7
  from langchain_openai import OpenAIEmbeddings,ChatOpenAI
 
8
  from langchain_community.vectorstores import FAISS
9
  from langchain.memory import ConversationBufferMemory
10
  from langchain.chains import ConversationalRetrievalChain
@@ -21,7 +22,6 @@ import langchain
21
  langchain.verbose = False
22
 
23
 
24
-
25
  def get_pdf_text(pdf_docs):
26
  text = ""
27
  for pdf in pdf_docs:
@@ -41,35 +41,50 @@ def get_text_chunks(text):
41
  return chunks
42
 
43
  def get_vectorstore(text_chunks,selected_embedding):
 
44
  if selected_embedding == 'OpenAI':
45
- print('OpenAI embedding')
46
  embeddings = OpenAIEmbeddings()
47
  elif selected_embedding == 'Instructor-xl':
48
- print('Instructor-xl embedding')
49
  embeddings = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-xl")
 
 
 
 
 
 
50
 
51
  vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)
52
  vectorstore.save_local("faiss_index")
53
  return vectorstore
54
 
55
  def load_vectorstore(text_chunks,selected_embedding):
 
56
  if selected_embedding == 'OpenAI':
57
- print('OpenAI embedding')
58
  embeddings = OpenAIEmbeddings()
59
  elif selected_embedding == 'Instructor-xl':
60
- print('Instructor-xl embedding')
61
  embeddings = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-xl")
62
  vectorstore = FAISS.load_local("faiss_index", embeddings)
 
 
 
 
 
 
 
 
63
  return vectorstore
64
 
65
- def get_conversation_chain(vectorstore,selected_llm):
66
- if selected_llm == 'OpenAI':
67
- print('OpenAi LLM')
68
- llm = ChatOpenAI()
69
-
70
 
 
 
 
 
71
  elif selected_llm == 'Llama2':
72
- print('Llama2 LLM')
73
  model_id = 'meta-llama/Llama-2-7b-chat-hf'
74
  hf_auth = os.environ.get("HUGGINGFACEHUB_API_TOKEN")
75
 
@@ -96,7 +111,7 @@ def get_conversation_chain(vectorstore,selected_llm):
96
  config=model_config,
97
  quantization_config=bnb_config,
98
  device_map='auto',
99
- token=hf_auth
100
  )
101
  else:
102
  model = transformers.AutoModelForCausalLM.from_pretrained(
@@ -104,7 +119,7 @@ def get_conversation_chain(vectorstore,selected_llm):
104
  trust_remote_code=True,
105
  config=model_config,
106
  device_map='auto',
107
- token=hf_auth
108
  )
109
 
110
  # enable evaluation mode to allow model inference
@@ -113,7 +128,7 @@ def get_conversation_chain(vectorstore,selected_llm):
113
 
114
  tokenizer = transformers.AutoTokenizer.from_pretrained(
115
  model_id,
116
- token=hf_auth
117
  )
118
 
119
  pipeline = transformers.pipeline(
@@ -122,17 +137,20 @@ def get_conversation_chain(vectorstore,selected_llm):
122
  tokenizer=tokenizer,
123
  return_full_text=True, # langchain expects the full text
124
  task='text-generation',
125
- temperature=0.1, # 'randomness' of outputs, 0.0 is the min and 1.0 the max
126
  max_new_tokens=512, # max number of tokens to generate in the output
127
  repetition_penalty=1.1 # without this output begins repeating
128
  )
129
 
130
  llm = HuggingFacePipeline(pipeline=pipeline)
131
 
 
 
132
  # Generic LLM
133
  memory = ConversationBufferMemory(
134
  memory_key='chat_history', return_messages=True)
135
-
 
136
  conversation_chain = ConversationalRetrievalChain.from_llm(
137
  llm=llm,
138
  retriever=vectorstore.as_retriever(),
@@ -178,8 +196,9 @@ def main():
178
  pdf_docs = st.file_uploader(
179
  "Upload your new PDFs here and click on 'Process' or load the last upload by clicking on 'Load'", accept_multiple_files=True)
180
 
181
- selected_embedding = st.radio("Which Embedding?",["OpenAI", "Instructor-xl"])
182
  selected_llm = st.radio("Which LLM?",["OpenAI", "Llama2"])
 
183
 
184
  if st.button("Process"):
185
  with st.spinner("Processing"):
@@ -194,7 +213,7 @@ def main():
194
 
195
  # create conversation chain
196
  st.session_state.conversation = get_conversation_chain(
197
- vectorstore,selected_llm)
198
 
199
  if st.button("Load"):
200
  with st.spinner("Processing"):
@@ -204,7 +223,7 @@ def main():
204
 
205
  # create conversation chain
206
  st.session_state.conversation = get_conversation_chain(
207
- vectorstore,selected_llm)
208
 
209
  if st.session_state.conversation:
210
  st.header("VerAi :books:")
@@ -216,4 +235,3 @@ def main():
216
 
217
  if __name__ == '__main__':
218
  main()
219
-
 
3
  from dotenv import load_dotenv
4
  from PyPDF2 import PdfReader
5
  from langchain.text_splitter import CharacterTextSplitter
6
+ from langchain_community.embeddings import HuggingFaceInstructEmbeddings,HuggingFaceEmbeddings,CohereEmbeddings
7
  from langchain_openai import OpenAIEmbeddings,ChatOpenAI
8
+ from langchain_community.chat_models import ChatCohere
9
  from langchain_community.vectorstores import FAISS
10
  from langchain.memory import ConversationBufferMemory
11
  from langchain.chains import ConversationalRetrievalChain
 
22
  langchain.verbose = False
23
 
24
 
 
25
  def get_pdf_text(pdf_docs):
26
  text = ""
27
  for pdf in pdf_docs:
 
41
  return chunks
42
 
43
  def get_vectorstore(text_chunks,selected_embedding):
44
+ print('Selected Embedding: ' + selected_embedding)
45
  if selected_embedding == 'OpenAI':
 
46
  embeddings = OpenAIEmbeddings()
47
  elif selected_embedding == 'Instructor-xl':
48
+
49
  embeddings = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-xl")
50
+ elif selected_embedding == 'Cohere-multilingual-v3.0':
51
+
52
+ embeddings = CohereEmbeddings(
53
+ model="embed-multilingual-v3.0",
54
+ cohere_api_key=os.environ.get("COHERE_API_KEY")
55
+ )
56
 
57
  vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embeddings)
58
  vectorstore.save_local("faiss_index")
59
  return vectorstore
60
 
61
  def load_vectorstore(text_chunks,selected_embedding):
62
+ print('Selected Embedding: ' + selected_embedding)
63
  if selected_embedding == 'OpenAI':
 
64
  embeddings = OpenAIEmbeddings()
65
  elif selected_embedding == 'Instructor-xl':
 
66
  embeddings = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-xl")
67
  vectorstore = FAISS.load_local("faiss_index", embeddings)
68
+ elif selected_embedding == 'Cohere-multilingual-v3.0':
69
+
70
+ embeddings = CohereEmbeddings(
71
+ model="embed-multilingual-v3.0",
72
+ cohere_api_key=os.environ.get("COHERE_API_KEY")
73
+ )
74
+
75
+ vectorstore = FAISS.load_local("faiss_index", embeddings)
76
  return vectorstore
77
 
78
+ def get_conversation_chain(vectorstore,selected_llm,selected_temperature):
79
+ print('Seleted LLM: ' + selected_llm)
80
+ print('Selected Temperature: ' + str(selected_temperature))
 
 
81
 
82
+ if selected_llm == 'OpenAI':
83
+ #openai_model = "gpt-4-turbo-preview"
84
+ openai_model = "gpt-3.5-turbo"
85
+ llm = ChatOpenAI(model=openai_model,temperature=selected_temperature)
86
  elif selected_llm == 'Llama2':
87
+
88
  model_id = 'meta-llama/Llama-2-7b-chat-hf'
89
  hf_auth = os.environ.get("HUGGINGFACEHUB_API_TOKEN")
90
 
 
111
  config=model_config,
112
  quantization_config=bnb_config,
113
  device_map='auto',
114
+ token=os.environ.get("HUGGINGFACEHUB_API_TOKEN")
115
  )
116
  else:
117
  model = transformers.AutoModelForCausalLM.from_pretrained(
 
119
  trust_remote_code=True,
120
  config=model_config,
121
  device_map='auto',
122
+ token=os.environ.get("HUGGINGFACEHUB_API_TOKEN")
123
  )
124
 
125
  # enable evaluation mode to allow model inference
 
128
 
129
  tokenizer = transformers.AutoTokenizer.from_pretrained(
130
  model_id,
131
+ token=os.environ.get("HUGGINGFACEHUB_API_TOKEN")
132
  )
133
 
134
  pipeline = transformers.pipeline(
 
137
  tokenizer=tokenizer,
138
  return_full_text=True, # langchain expects the full text
139
  task='text-generation',
140
+ temperature=selected_temperature, # 'randomness' of outputs, 0.0 is the min and 1.0 the max
141
  max_new_tokens=512, # max number of tokens to generate in the output
142
  repetition_penalty=1.1 # without this output begins repeating
143
  )
144
 
145
  llm = HuggingFacePipeline(pipeline=pipeline)
146
 
147
+
148
+
149
  # Generic LLM
150
  memory = ConversationBufferMemory(
151
  memory_key='chat_history', return_messages=True)
152
+
153
+
154
  conversation_chain = ConversationalRetrievalChain.from_llm(
155
  llm=llm,
156
  retriever=vectorstore.as_retriever(),
 
196
  pdf_docs = st.file_uploader(
197
  "Upload your new PDFs here and click on 'Process' or load the last upload by clicking on 'Load'", accept_multiple_files=True)
198
 
199
+ selected_embedding = st.radio("Which Embedding?",["Cohere-multilingual-v3.0","OpenAI", "Instructor-xl"])
200
  selected_llm = st.radio("Which LLM?",["OpenAI", "Llama2"])
201
+ selected_temperature = st.slider('Temperature?', 0.0, 1.0, 0.1)
202
 
203
  if st.button("Process"):
204
  with st.spinner("Processing"):
 
213
 
214
  # create conversation chain
215
  st.session_state.conversation = get_conversation_chain(
216
+ vectorstore,selected_llm,selected_temperature)
217
 
218
  if st.button("Load"):
219
  with st.spinner("Processing"):
 
223
 
224
  # create conversation chain
225
  st.session_state.conversation = get_conversation_chain(
226
+ vectorstore,selected_llm,selected_temperature)
227
 
228
  if st.session_state.conversation:
229
  st.header("VerAi :books:")
 
235
 
236
  if __name__ == '__main__':
237
  main()