Sean-Case commited on
Commit
8aa3ebb
β€’
1 Parent(s): 6a76923

Minor dependency updates, increased max allowable layers for GPU

Browse files
Files changed (5) hide show
  1. README.md +1 -1
  2. app.py +13 -28
  3. chatfuncs/chatfuncs.py +7 -4
  4. chatfuncs/ingest.py +6 -24
  5. requirements.txt +3 -2
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: 🌍
4
  colorFrom: yellow
5
  colorTo: yellow
6
  sdk: gradio
7
- sdk_version: 3.35.2
8
  app_file: app.py
9
  pinned: false
10
  license: apache-2.0
 
4
  colorFrom: yellow
5
  colorTo: yellow
6
  sdk: gradio
7
+ sdk_version: 3.50.0
8
  app_file: app.py
9
  pinned: false
10
  license: apache-2.0
app.py CHANGED
@@ -1,23 +1,17 @@
1
- # # Load in packages
2
 
3
- # +
4
  import os
5
 
6
- # Need to overwrite version of gradio present in Huggingface spaces as it doesn't have like buttons/avatars (Oct 2023)
7
- #os.system("pip uninstall -y gradio")
8
- os.system("pip install gradio==3.42.0")
9
-
10
- from typing import TypeVar
11
- from langchain.embeddings import HuggingFaceEmbeddings#, HuggingFaceInstructEmbeddings
12
- from langchain.vectorstores import FAISS
13
  import gradio as gr
 
14
 
15
  from transformers import AutoTokenizer
16
-
17
- # Alternative model sources
18
  from ctransformers import AutoModelForCausalLM
19
 
20
- PandasDataFrame = TypeVar('pd.core.frame.DataFrame')
21
 
22
  # Disable cuda devices if necessary
23
  #os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
@@ -29,16 +23,8 @@ import chatfuncs.ingest as ing
29
 
30
  embeddings_name = "BAAI/bge-base-en-v1.5"
31
 
32
- def load_embeddings(embeddings_name = "BAAI/bge-base-en-v1.5"):
33
-
34
 
35
- #if embeddings_name == "hkunlp/instructor-large":
36
- # embeddings_func = HuggingFaceInstructEmbeddings(model_name=embeddings_name,
37
- # embed_instruction="Represent the paragraph for retrieval: ",
38
- # query_instruction="Represent the question for retrieving supporting documents: "
39
- # )
40
-
41
- #else:
42
  embeddings_func = HuggingFaceEmbeddings(model_name=embeddings_name)
43
 
44
  global embeddings
@@ -139,8 +125,8 @@ def load_model(model_type, gpu_layers, gpu_config=None, cpu_config=None, torch_d
139
  return model_type, load_confirmation, model_type
140
 
141
  # Both models are loaded on app initialisation so that users don't have to wait for the models to be downloaded
142
- #model_type = "Mistral Open Orca (larger, slow)"
143
- #load_model(model_type, chatf.gpu_layers, chatf.gpu_config, chatf.cpu_config, chatf.torch_device)
144
 
145
  model_type = "Flan Alpaca (small, fast)"
146
  load_model(model_type, 0, chatf.gpu_config, chatf.cpu_config, chatf.torch_device)
@@ -170,8 +156,8 @@ with block:
170
  ingest_docs = gr.State()
171
 
172
  model_type_state = gr.State(model_type)
173
- embeddings_state = gr.State(globals()["embeddings"])
174
- vectorstore_state = gr.State(globals()["vectorstore"])
175
 
176
  model_state = gr.State() # chatf.model (gives error)
177
  tokenizer_state = gr.State() # chatf.tokenizer (gives error)
@@ -213,8 +199,7 @@ with block:
213
  "What are the 2030 outcomes for Lambeth?"])
214
 
215
 
216
- current_topic = gr.Textbox(label="Feature currently disabled - Keywords related to current conversation topic.", placeholder="Keywords related to the conversation topic will appear here")
217
-
218
 
219
 
220
  with gr.Tab("Load in a different file to chat with"):
@@ -242,7 +227,7 @@ with block:
242
  model_choice = gr.Radio(label="Choose a chat model", value="Flan Alpaca (small, fast)", choices = ["Flan Alpaca (small, fast)", "Mistral Open Orca (larger, slow)"])
243
  change_model_button = gr.Button(value="Load model", scale=0)
244
  with gr.Accordion("Choose number of model layers to send to GPU (WARNING: please don't modify unless you are sure you have a GPU).", open = False):
245
- gpu_layer_choice = gr.Slider(label="Choose number of model layers to send to GPU.", value=0, minimum=0, maximum=5, step = 1, visible=True)
246
 
247
  load_text = gr.Text(label="Load status")
248
 
 
1
+ # Load in packages
2
 
 
3
  import os
4
 
5
+ from typing import Type
6
+ from langchain_community.embeddings import HuggingFaceEmbeddings#, HuggingFaceInstructEmbeddings
7
+ from langchain_community.vectorstores import FAISS
 
 
 
 
8
  import gradio as gr
9
+ import pandas as pd
10
 
11
  from transformers import AutoTokenizer
 
 
12
  from ctransformers import AutoModelForCausalLM
13
 
14
+ PandasDataFrame = Type[pd.DataFrame]
15
 
16
  # Disable cuda devices if necessary
17
  #os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
 
23
 
24
  embeddings_name = "BAAI/bge-base-en-v1.5"
25
 
26
+ def load_embeddings(embeddings_name = embeddings_name):
 
27
 
 
 
 
 
 
 
 
28
  embeddings_func = HuggingFaceEmbeddings(model_name=embeddings_name)
29
 
30
  global embeddings
 
125
  return model_type, load_confirmation, model_type
126
 
127
  # Both models are loaded on app initialisation so that users don't have to wait for the models to be downloaded
128
+ model_type = "Mistral Open Orca (larger, slow)"
129
+ load_model(model_type, chatf.gpu_layers, chatf.gpu_config, chatf.cpu_config, chatf.torch_device)
130
 
131
  model_type = "Flan Alpaca (small, fast)"
132
  load_model(model_type, 0, chatf.gpu_config, chatf.cpu_config, chatf.torch_device)
 
156
  ingest_docs = gr.State()
157
 
158
  model_type_state = gr.State(model_type)
159
+ embeddings_state = gr.State(chatf.embeddings)#globals()["embeddings"])
160
+ vectorstore_state = gr.State(chatf.vectorstore)#globals()["vectorstore"])
161
 
162
  model_state = gr.State() # chatf.model (gives error)
163
  tokenizer_state = gr.State() # chatf.tokenizer (gives error)
 
199
  "What are the 2030 outcomes for Lambeth?"])
200
 
201
 
202
+ current_topic = gr.Textbox(label="Feature currently disabled - Keywords related to current conversation topic.", placeholder="Keywords related to the conversation topic will appear here")
 
203
 
204
 
205
  with gr.Tab("Load in a different file to chat with"):
 
227
  model_choice = gr.Radio(label="Choose a chat model", value="Flan Alpaca (small, fast)", choices = ["Flan Alpaca (small, fast)", "Mistral Open Orca (larger, slow)"])
228
  change_model_button = gr.Button(value="Load model", scale=0)
229
  with gr.Accordion("Choose number of model layers to send to GPU (WARNING: please don't modify unless you are sure you have a GPU).", open = False):
230
+ gpu_layer_choice = gr.Slider(label="Choose number of model layers to send to GPU.", value=0, minimum=0, maximum=100, step = 1, visible=True)
231
 
232
  load_text = gr.Text(label="Load status")
233
 
chatfuncs/chatfuncs.py CHANGED
@@ -1,7 +1,7 @@
1
  import re
2
  import os
3
  import datetime
4
- from typing import TypeVar, Dict, List, Tuple
5
  import time
6
  from itertools import compress
7
  import pandas as pd
@@ -17,8 +17,8 @@ from transformers import pipeline, TextIteratorStreamer
17
 
18
  # Langchain functions
19
  from langchain.prompts import PromptTemplate
20
- from langchain.vectorstores import FAISS
21
- from langchain.retrievers import SVMRetriever
22
  from langchain.text_splitter import RecursiveCharacterTextSplitter
23
  from langchain.docstore.document import Document
24
 
@@ -42,7 +42,7 @@ import gradio as gr
42
 
43
  torch.cuda.empty_cache()
44
 
45
- PandasDataFrame = TypeVar('pd.core.frame.DataFrame')
46
 
47
  embeddings = None # global variable setup
48
  vectorstore = None # global variable setup
@@ -571,6 +571,8 @@ def hybrid_retrieval(new_question_kworded, vectorstore, embeddings, k_val, out_p
571
  vec_rank = [*range(1, docs_keep_length+1)]
572
  vec_score = [(docs_keep_length/x)*vec_weight for x in vec_rank]
573
 
 
 
574
  # 2nd level check on retrieved docs with BM25
575
 
576
  content_keep=[]
@@ -610,6 +612,7 @@ def hybrid_retrieval(new_question_kworded, vectorstore, embeddings, k_val, out_p
610
  bm25_score.append((docs_keep_length/x)*bm25_weight)
611
 
612
  # 3rd level check on retrieved docs with SVM retriever
 
613
  svm_retriever = SVMRetriever.from_texts(content_keep, embeddings, k = k_val)
614
  svm_result = svm_retriever.get_relevant_documents(new_question_kworded)
615
 
 
1
  import re
2
  import os
3
  import datetime
4
+ from typing import Type, Dict, List, Tuple
5
  import time
6
  from itertools import compress
7
  import pandas as pd
 
17
 
18
  # Langchain functions
19
  from langchain.prompts import PromptTemplate
20
+ from langchain_community.vectorstores import FAISS
21
+ from langchain_community.retrievers import SVMRetriever
22
  from langchain.text_splitter import RecursiveCharacterTextSplitter
23
  from langchain.docstore.document import Document
24
 
 
42
 
43
  torch.cuda.empty_cache()
44
 
45
+ PandasDataFrame = Type[pd.DataFrame]
46
 
47
  embeddings = None # global variable setup
48
  vectorstore = None # global variable setup
 
571
  vec_rank = [*range(1, docs_keep_length+1)]
572
  vec_score = [(docs_keep_length/x)*vec_weight for x in vec_rank]
573
 
574
+ print("Number of documents remaining: ", docs_keep_length)
575
+
576
  # 2nd level check on retrieved docs with BM25
577
 
578
  content_keep=[]
 
612
  bm25_score.append((docs_keep_length/x)*bm25_weight)
613
 
614
  # 3rd level check on retrieved docs with SVM retriever
615
+
616
  svm_retriever = SVMRetriever.from_texts(content_keep, embeddings, k = k_val)
617
  svm_result = svm_retriever.get_relevant_documents(new_question_kworded)
618
 
chatfuncs/ingest.py CHANGED
@@ -1,21 +1,4 @@
1
- # ---
2
- # jupyter:
3
- # jupytext:
4
- # formats: ipynb,py:light
5
- # text_representation:
6
- # extension: .py
7
- # format_name: light
8
- # format_version: '1.5'
9
- # jupytext_version: 1.14.6
10
- # kernelspec:
11
- # display_name: Python 3 (ipykernel)
12
- # language: python
13
- # name: python3
14
- # ---
15
-
16
- # # Ingest website to FAISS
17
-
18
- # ## Install/ import stuff we need
19
 
20
  import os
21
  from pathlib import Path
@@ -23,11 +6,11 @@ import re
23
  import requests
24
  import pandas as pd
25
  import dateutil.parser
26
- from typing import TypeVar, List
27
 
28
- from langchain.embeddings import HuggingFaceEmbeddings # HuggingFaceInstructEmbeddings,
29
- from langchain.vectorstores.faiss import FAISS
30
- from langchain.vectorstores import Chroma
31
  from langchain.text_splitter import RecursiveCharacterTextSplitter
32
  from langchain.docstore.document import Document
33
 
@@ -35,8 +18,7 @@ from bs4 import BeautifulSoup
35
  from docx import Document as Doc
36
  from pypdf import PdfReader
37
 
38
- PandasDataFrame = TypeVar('pd.core.frame.DataFrame')
39
- # -
40
 
41
  split_strat = ["\n\n", "\n", ". ", "! ", "? "]
42
  chunk_size = 500
 
1
+ # Import package
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  import os
4
  from pathlib import Path
 
6
  import requests
7
  import pandas as pd
8
  import dateutil.parser
9
+ from typing import Type, List
10
 
11
+ from langchain_community.embeddings import HuggingFaceEmbeddings # HuggingFaceInstructEmbeddings,
12
+ from langchain_community.vectorstores.faiss import FAISS
13
+ #from langchain_community.vectorstores import Chroma
14
  from langchain.text_splitter import RecursiveCharacterTextSplitter
15
  from langchain.docstore.document import Document
16
 
 
18
  from docx import Document as Doc
19
  from pypdf import PdfReader
20
 
21
+ PandasDataFrame = Type[pd.DataFrame]
 
22
 
23
  split_strat = ["\n\n", "\n", ". ", "! ", "? "]
24
  chunk_size = 500
requirements.txt CHANGED
@@ -1,8 +1,9 @@
1
  langchain
 
2
  beautifulsoup4
3
  pandas
4
  transformers
5
- --extra-index-url https://download.pytorch.org/whl/cu113
6
  torch
7
  sentence_transformers
8
  faiss-cpu
@@ -12,5 +13,5 @@ ctransformers[cuda]
12
  keybert
13
  span_marker
14
  gensim
15
- gradio==3.42.0
16
  gradio_client
 
1
  langchain
2
+ langchain-community
3
  beautifulsoup4
4
  pandas
5
  transformers
6
+ --extra-index-url https://download.pytorch.org/whl/cu118
7
  torch
8
  sentence_transformers
9
  faiss-cpu
 
13
  keybert
14
  span_marker
15
  gensim
16
+ gradio==3.50.0
17
  gradio_client