MarcdeFalco commited on
Commit
2920e24
·
1 Parent(s): 94788eb

Move to faiss

Browse files
Files changed (3) hide show
  1. .gitattributes +1 -0
  2. app.py +21 -34
  3. requirements.txt +4 -2
.gitattributes CHANGED
@@ -34,3 +34,4 @@ saved_model/**/* 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
  *.ann 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
  *.ann filter=lfs diff=lfs merge=lfs -text
37
+ *.faiss filter=lfs diff=lfs merge=lfs -text
app.py CHANGED
@@ -1,9 +1,8 @@
1
  import gradio as gr
2
  from huggingface_hub import login, InferenceClient
3
  import os
4
- import cohere
5
- import pickle
6
- from annoy import AnnoyIndex
7
 
8
  HF_TOKEN = os.getenv("HUGGINGFACE_TOKEN")
9
 
@@ -24,14 +23,13 @@ Voici comment tu dois procéder :
24
  * Si plusieurs articles pourraient s'appliquer, présente les différentes
25
  interprétations possibles."""
26
 
27
- co = cohere.Client(os.getenv("COHERE_API_KEY"))
28
- articles = pickle.load(open('articles.pkl', 'rb'))
29
- #embeds = pickle.load(open('articles_embeds.pkl', 'rb'))
30
- #embeds_path = pickle.load(open('articles_path_embeds.pkl', 'rb'))
31
- search_index = AnnoyIndex(1024, 'angular')
32
- search_index.load('articles_embeds.ann')
33
- search_index_path = AnnoyIndex(1024, 'angular')
34
- search_index_path.load('articles_path_embeds.ann')
35
 
36
  system_prompt = """Tu es un assistant juridique spécialisé dans le Code de l'éducation français.
37
  Ta mission est d'aider les utilisateurs à comprendre la législation en répondant à leurs questions.
@@ -47,25 +45,15 @@ Voici comment tu dois procéder :
47
  * Si plusieurs articles pourraient s'appliquer, présente les différentes interprétations possibles."""
48
 
49
 
50
- def query_rag(query, model, with_paths=True):
51
- # Get the query's embedding
52
- query_embed = co.embed(texts=[query],
53
- model="embed-multilingual-v3.0",
54
- input_type="search_document").embeddings
55
-
56
- # Retrieve the nearest neighbors
57
- index = search_index
58
- if with_paths:
59
- index = search_index_path
60
- similar_item_ids = index.get_nns_by_vector(query_embed[0],10,
61
- include_distances=True)
62
 
63
  article_dict = {}
64
  context_list = []
65
- for i in reversed(similar_item_ids[0][:5]):
66
- article = articles[i]
67
- context_list.append(article['path']+'\n'+article['text']+'\n---\n')
68
- article_dict[article['article']] = '**' + article['path'] + '** ' + article['text']
69
 
70
  user = 'Question de l\'utilisateur : ' + query + '\nContexte législatif :\n' + '\n'.join(context_list)
71
 
@@ -76,17 +64,19 @@ def query_rag(query, model, with_paths=True):
76
  messages=messages,
77
  model=model,
78
  max_tokens=1024)
 
79
  return chat_completion.choices[0].message.content, article_dict
80
 
81
  def create_context_response(response, article_dict):
82
  response += '\n\n**Références**\n\n'
83
  for i, article in enumerate(article_dict):
84
- response += '* ' + article_dict[article].replace('\n', '\n ')+'\n'
 
85
 
86
  return response
87
 
88
- def chat_interface(query, model, with_paths):
89
- response, article_dict = query_rag(query, model, with_paths)
90
  response_with_context = create_context_response(response, article_dict)
91
  return response_with_context
92
 
@@ -116,15 +106,12 @@ with gr.Blocks(title="Assistant Juridique pour le Code de l'éducation (Beta)")
116
  ],
117
  value="HuggingFaceH4/zephyr-7b-beta")
118
 
119
- with_paths = gr.Checkbox(label="Utiliser les chemins d'accès aux articles dans le code pour interroger le modèle.",
120
- value=True)
121
-
122
  submit_button = gr.Button("Envoyer")
123
 
124
  response_box = gr.Markdown()
125
 
126
  submit_button.click(chat_interface,
127
- inputs=[query_box, model, with_paths],
128
  outputs=[response_box])
129
 
130
  demo.launch()
 
1
  import gradio as gr
2
  from huggingface_hub import login, InferenceClient
3
  import os
4
+ from langchain_community.vectorstores import FAISS
5
+ from langchain.embeddings.huggingface import HuggingFaceEmbeddings
 
6
 
7
  HF_TOKEN = os.getenv("HUGGINGFACE_TOKEN")
8
 
 
23
  * Si plusieurs articles pourraient s'appliquer, présente les différentes
24
  interprétations possibles."""
25
 
26
+
27
+
28
+ embeddings = HuggingFaceEmbeddings(model_name="OrdalieTech/Solon-embeddings-large-0.1")
29
+
30
+ db_code = FAISS.load_local("faiss_code_education",
31
+ embeddings,
32
+ allow_dangerous_deserialization=True)
 
33
 
34
  system_prompt = """Tu es un assistant juridique spécialisé dans le Code de l'éducation français.
35
  Ta mission est d'aider les utilisateurs à comprendre la législation en répondant à leurs questions.
 
45
  * Si plusieurs articles pourraient s'appliquer, présente les différentes interprétations possibles."""
46
 
47
 
48
+ def query_rag(query, model):
49
+ docs = db_code.similarity_search(query, 10)
 
 
 
 
 
 
 
 
 
 
50
 
51
  article_dict = {}
52
  context_list = []
53
+ for doc in docs:
54
+ article = doc.metadata
55
+ context_list.append(article['chemin']+'\n'+article['texte']+'\n---\n')
56
+ article_dict[article['article']] = article
57
 
58
  user = 'Question de l\'utilisateur : ' + query + '\nContexte législatif :\n' + '\n'.join(context_list)
59
 
 
64
  messages=messages,
65
  model=model,
66
  max_tokens=1024)
67
+
68
  return chat_completion.choices[0].message.content, article_dict
69
 
70
  def create_context_response(response, article_dict):
71
  response += '\n\n**Références**\n\n'
72
  for i, article in enumerate(article_dict):
73
+ art = article_dict[article]
74
+ response += '* **' + art['chemin'] + '** : '+ art['texte'].replace('\n', '\n ')+'\n'
75
 
76
  return response
77
 
78
+ def chat_interface(query, model):
79
+ response, article_dict = query_rag(query, model)
80
  response_with_context = create_context_response(response, article_dict)
81
  return response_with_context
82
 
 
106
  ],
107
  value="HuggingFaceH4/zephyr-7b-beta")
108
 
 
 
 
109
  submit_button = gr.Button("Envoyer")
110
 
111
  response_box = gr.Markdown()
112
 
113
  submit_button.click(chat_interface,
114
+ inputs=[query_box, model],
115
  outputs=[response_box])
116
 
117
  demo.launch()
requirements.txt CHANGED
@@ -1,4 +1,6 @@
1
  huggingface_hub==0.22.2
2
  annoy
3
- cohere
4
- groq
 
 
 
1
  huggingface_hub==0.22.2
2
  annoy
3
+ faiss
4
+ langchain_community
5
+ langchain
6
+ sentence_transformers