adupav commited on
Commit
d8c9651
·
verified ·
1 Parent(s): 65af10c

Upload 3 files

Browse files
Files changed (4) hide show
  1. .gitattributes +1 -0
  2. Code Civil vectorised.json +3 -0
  3. app.py +54 -10
  4. requirements.txt +6 -1
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ Code[[:space:]]Civil[[:space:]]vectorised.json filter=lfs diff=lfs merge=lfs -text
Code Civil vectorised.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3b1bd358abd17993d9c49fd622ce5e353f35eb1d815d87ead88c914e1db18041
3
+ size 47281293
app.py CHANGED
@@ -1,12 +1,43 @@
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
 
 
 
 
3
 
4
  """
5
  For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
6
  """
7
- client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
8
 
 
 
 
 
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  def respond(
11
  message,
12
  history: list[tuple[str, str]],
@@ -14,8 +45,17 @@ def respond(
14
  max_tokens,
15
  temperature,
16
  top_p,
 
 
17
  ):
18
- messages = [{"role": "system", "content": system_message}]
 
 
 
 
 
 
 
19
 
20
  for val in history:
21
  if val[0]:
@@ -26,7 +66,8 @@ def respond(
26
  messages.append({"role": "user", "content": message})
27
 
28
  response = ""
29
-
 
30
  for message in client.chat_completion(
31
  messages,
32
  max_tokens=max_tokens,
@@ -35,15 +76,19 @@ def respond(
35
  top_p=top_p,
36
  ):
37
  token = message.choices[0].delta.content
38
-
39
  response += token
40
  yield response
41
 
42
- """
43
- For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
44
- """
 
 
 
45
  demo = gr.ChatInterface(
46
- respond,
 
 
47
  additional_inputs=[
48
  gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
49
  gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
@@ -58,6 +103,5 @@ demo = gr.ChatInterface(
58
  ],
59
  )
60
 
61
-
62
  if __name__ == "__main__":
63
- demo.launch()
 
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
3
+ import json
4
+ import numpy as np
5
+ from sentence_transformers import SentenceTransformer
6
+ from sklearn.metrics.pairwise import cosine_similarity
7
 
8
  """
9
  For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
10
  """
 
11
 
12
+ # Load embeddings from a JSON file
13
+ def load_embeddings(file_path):
14
+ with open(file_path, 'r', encoding='utf-8') as file:
15
+ return json.load(file)
16
 
17
+ # Function to get relevant articles based on user query
18
+ def get_relevant_documents(query, embeddings_data, model, top_k=3):
19
+ query_embedding = model.encode(query)
20
+ similarities = []
21
+
22
+ for entry in embeddings_data:
23
+ embedding = np.array(entry['embedding'])
24
+ similarity = cosine_similarity([query_embedding], [embedding])[0][0]
25
+ similarities.append((entry, similarity))
26
+
27
+ # Sort by similarity and return top_k relevant entries
28
+ similarities.sort(key=lambda x: x[1], reverse=True)
29
+ top_entries = [entry for entry, _ in similarities[:top_k]]
30
+
31
+ return top_entries
32
+
33
+ # Function to format relevant documents into a string
34
+ def format_documents(documents):
35
+ formatted = ""
36
+ for doc in documents:
37
+ formatted += f"Relevant article: {doc['name']}\n{doc['content']}\n\n"
38
+ return formatted
39
+
40
+ # Main chatbot function that integrates RAG
41
  def respond(
42
  message,
43
  history: list[tuple[str, str]],
 
45
  max_tokens,
46
  temperature,
47
  top_p,
48
+ embeddings_data,
49
+ model
50
  ):
51
+ # Search for relevant documents based on user input
52
+ relevant_docs = get_relevant_documents(message, embeddings_data, model)
53
+ retrieved_context = format_documents(relevant_docs)
54
+
55
+ # Add the retrieved context as part of the system message
56
+ system_message_with_context = system_message + "\n\n" + "Relevant documents:\n" + retrieved_context
57
+
58
+ messages = [{"role": "system", "content": system_message_with_context}]
59
 
60
  for val in history:
61
  if val[0]:
 
66
  messages.append({"role": "user", "content": message})
67
 
68
  response = ""
69
+ client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
70
+
71
  for message in client.chat_completion(
72
  messages,
73
  max_tokens=max_tokens,
 
76
  top_p=top_p,
77
  ):
78
  token = message.choices[0].delta.content
 
79
  response += token
80
  yield response
81
 
82
+ # Load embeddings and model once at startup
83
+ embeddings_file = 'Code Civil vectorised.json'
84
+ embeddings_data = load_embeddings(embeddings_file)
85
+ embedding_model = SentenceTransformer('Lajavaness/bilingual-embedding-small', trust_remote_code=True)
86
+
87
+ # Gradio interface
88
  demo = gr.ChatInterface(
89
+ lambda message, history, system_message, max_tokens, temperature, top_p: respond(
90
+ message, history, system_message, max_tokens, temperature, top_p, embeddings_data, embedding_model
91
+ ),
92
  additional_inputs=[
93
  gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
94
  gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
 
103
  ],
104
  )
105
 
 
106
  if __name__ == "__main__":
107
+ demo.launch()
requirements.txt CHANGED
@@ -1 +1,6 @@
1
- huggingface_hub==0.22.2
 
 
 
 
 
 
1
+ huggingface_hub==0.22.2
2
+ gradio==3.25.0
3
+ huggingface_hub==0.22.2
4
+ sentence-transformers==2.2.2
5
+ scikit-learn==1.3.0
6
+ numpy==1.24.2