Elouarn commited on
Commit
c9d7777
·
1 Parent(s): ac67040

firestore added

Browse files
app.py CHANGED
@@ -1,6 +1,41 @@
1
  from huggingface_hub import InferenceClient
2
  import gradio as gr
3
  import re
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
 
6
  client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
@@ -8,7 +43,6 @@ client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
8
  # Name of the chat
9
  chat_name = "Tavernier 🍺"
10
 
11
-
12
  # Variable globale pour compter les itérations
13
  global_iteration = 0
14
 
@@ -22,7 +56,6 @@ global_context = {
22
  ],
23
  }
24
 
25
-
26
  # Créer une interface avec un champ de texte pour le contexte caché
27
  context_input = gr.Textbox(
28
  label="Contexte caché", value=global_context["static_context"]
@@ -63,8 +96,11 @@ def format_prompt(message, history, user_id=""):
63
  for user_prompt, bot_response in history:
64
  prompt += f"[USER] {user_prompt} [/USER]"
65
  if (
66
- user_prompt == history[-1][0]
67
- ): # N'ajouter les balises [BOT] qu'autour de la dernière réponse du bot
 
 
 
68
  prompt += f" [BOT]{filter_sensitive_info(bot_response)}[/BOT] "
69
  else:
70
  prompt += f" {filter_sensitive_info(bot_response)} "
@@ -76,6 +112,12 @@ def format_prompt(message, history, user_id=""):
76
  return prompt
77
 
78
 
 
 
 
 
 
 
79
  def generate(
80
  prompt,
81
  history,
@@ -100,8 +142,9 @@ def generate(
100
  )
101
 
102
  if request:
103
- # Récupérer l'identifiant unique de l'utilisateur à partir de la requête HTML
104
  user_id = dict(request.query_params).get("user_id")
 
105
  else:
106
  user_id = ""
107
 
@@ -120,12 +163,20 @@ def generate(
120
  return_full_text=False,
121
  )
122
  output = ""
 
123
 
124
  for response in stream:
125
  response_text = filter_sensitive_info(response.token.text)
126
  response_text = remove_length_info(response_text)
127
  output += response_text
 
128
  yield output
 
 
 
 
 
 
129
  return output
130
 
131
 
@@ -143,6 +194,13 @@ def chatbot_interface(request: gr.Request):
143
  title=chat_name,
144
  retry_btn=None,
145
  undo_btn=None,
 
 
 
 
 
 
 
146
  )
147
  return chatbot_interface
148
 
@@ -156,9 +214,6 @@ if __name__ == "__main__":
156
  main(None)
157
 
158
 
159
- # Créer une interface pour le chatbot avec un champ de texte pour le contexte caché
160
-
161
-
162
  # def reset_history(chatbot):
163
  # chatbot.history = []
164
  # return []
@@ -172,41 +227,3 @@ if __name__ == "__main__":
172
  # global global_iteration
173
  # global_iteration = 0
174
  # return None
175
-
176
-
177
- # chatbot_interface = gr.ChatInterface(
178
- # fn=generate,
179
- # chatbot=mychatbot,
180
- # title=chat_name,
181
- # retry_btn=None,
182
- # undo_btn=None,
183
- # )
184
-
185
-
186
- # Ajouter le champ de texte pour le contexte caché à l'interface
187
- # context_interface = gr.Interface(
188
- # fn=update_context,
189
- # inputs=[context_input],
190
- # outputs=None,
191
- # title="Modifier le contexte caché",
192
- # description="Modifie le contexte caché du tavernier",
193
- # article=False,
194
- # )
195
-
196
- # demo = gr.TabbedInterface([chatbot_interface, context_interface], title="Tavernier 🍺")
197
-
198
- # Lancer et afficher l'interface
199
-
200
-
201
- # import gradio as gr
202
-
203
-
204
- # def echo(text, request: gr.Request):
205
- # if request:
206
- # print("Request headers dictionary:", request.headers)
207
- # print("IP address:", request.client.host)
208
- # print("Query parameters:", dict(request.query_params))
209
- # return text
210
-
211
-
212
- # io = gr.Interface(echo, "textbox", "textbox").launch()
 
1
  from huggingface_hub import InferenceClient
2
  import gradio as gr
3
  import re
4
+ import random
5
+ import string
6
+ import firebase_admin
7
+ from firebase_admin import credentials, firestore
8
+ from datetime import datetime
9
+
10
+ # Initialiser Firebase
11
+ cred = credentials.Certificate("./montaillou-bdd-5b8a59219187.json")
12
+ firebase_admin.initialize_app(cred)
13
+
14
+ # Obtenir une référence à la base de données Firestore
15
+ db = firestore.client()
16
+
17
+
18
+ def save_message(user_id, message):
19
+ # Enregistrer le message dans Firestore
20
+ doc_ref = db.collection("conversations").document(user_id)
21
+ doc_ref.set(
22
+ {
23
+ "messages": firestore.ArrayUnion(
24
+ [{"message": message, "timestamp": datetime.now()}]
25
+ )
26
+ }
27
+ )
28
+
29
+
30
+ def load_history(user_id):
31
+ # Charger l'historique de conversation de l'utilisateur
32
+ doc_ref = db.collection("conversations").document(user_id)
33
+ doc = doc_ref.get()
34
+ if doc.exists:
35
+ messages = doc.to_dict()["messages"]
36
+ return messages
37
+ else:
38
+ return []
39
 
40
 
41
  client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
 
43
  # Name of the chat
44
  chat_name = "Tavernier 🍺"
45
 
 
46
  # Variable globale pour compter les itérations
47
  global_iteration = 0
48
 
 
56
  ],
57
  }
58
 
 
59
  # Créer une interface avec un champ de texte pour le contexte caché
60
  context_input = gr.Textbox(
61
  label="Contexte caché", value=global_context["static_context"]
 
96
  for user_prompt, bot_response in history:
97
  prompt += f"[USER] {user_prompt} [/USER]"
98
  if (
99
+ history
100
+ and isinstance(history[-1], dict)
101
+ and user_prompt == history[-1].get("0")
102
+ ):
103
+ # N'ajouter les balises [BOT] qu'autour de la dernière réponse du bot
104
  prompt += f" [BOT]{filter_sensitive_info(bot_response)}[/BOT] "
105
  else:
106
  prompt += f" {filter_sensitive_info(bot_response)} "
 
112
  return prompt
113
 
114
 
115
+ def get_random_string(length):
116
+ # choose from all lowercase letter
117
+ letters = string.ascii_lowercase
118
+ return "".join(random.choice(letters) for i in range(length))
119
+
120
+
121
  def generate(
122
  prompt,
123
  history,
 
142
  )
143
 
144
  if request:
145
+ # Récupérer l'identifiant unique de l'utilisateur à partir de la requête HTML et son historique de conversation
146
  user_id = dict(request.query_params).get("user_id")
147
+ history = load_history(user_id)
148
  else:
149
  user_id = ""
150
 
 
163
  return_full_text=False,
164
  )
165
  output = ""
166
+ bot_response = ""
167
 
168
  for response in stream:
169
  response_text = filter_sensitive_info(response.token.text)
170
  response_text = remove_length_info(response_text)
171
  output += response_text
172
+ bot_response += response_text
173
  yield output
174
+
175
+ if user_id != "":
176
+ # Sauvegarder le message de l'utilisateur et la réponse complète du bot dans Firestore
177
+ save_message(user_id, prompt)
178
+ save_message(user_id, bot_response)
179
+
180
  return output
181
 
182
 
 
194
  title=chat_name,
195
  retry_btn=None,
196
  undo_btn=None,
197
+ examples=[
198
+ [
199
+ "Bonjour",
200
+ "Salutations, voyageur ! Bienvenue dans ma taverne. Que puis-je faire pour toi ?",
201
+ ]
202
+ ],
203
+ cache_examples=True,
204
  )
205
  return chatbot_interface
206
 
 
214
  main(None)
215
 
216
 
 
 
 
217
  # def reset_history(chatbot):
218
  # chatbot.history = []
219
  # return []
 
227
  # global global_iteration
228
  # global_iteration = 0
229
  # return None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
gradio_cached_examples/14/log.csv ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ component 0,flag,username,timestamp
2
+ "[[""Bonjour"", ""Bonjour! Bienvenue dans ma taverne. Assois-toi et repose-toi. Tu veux peut-\u00eatre boire un coup? Nous avons du vin et de la bi\u00e8re. Je ne suis pas un noble, mais je suis fier de ce que je suis: un tavernier qui sert les gens honn\u00eates. Les cathares sont les bienvenus ici. Mais si tu es catholique ou un noble, je ne peux pas te promettre que tu te sentiras \u00e0 l'aise.</s>""]]",,,2024-03-26 11:07:18.013347
montaillou-bdd-5b8a59219187.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type": "service_account",
3
+ "project_id": "montaillou-bdd",
4
+ "private_key_id": "5b8a59219187f785c82f11070f0c0ab1f2fea43a",
5
+ "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDluiD1QdCDFrIF\nCLE/2edjw+f+ZdUWW2QoBpSEqdZB3cIxqmC/+Dt4TbKAvgBoiWuteZoF6jrjhu89\nNNYlSuhZ7ZN6hdiN62GF/2NkZfCGcH+L/AzJ/E8Z7Wu1AAmiEZS7px/BGnkdnF/e\n7EFYxoP10rXws+xdHlmGoGkd85CJIGkA2OxNk7UBADRaxIdSivYB/oJ8aRjebhx2\nTIg+Qn3HS8qQFg4Ni5sAGF2tznfqVE2lSg0GZ/wtMNckJgADWVCcbIYWldSXZ2H6\nSVvQtqPGC8uBllWdKPtGc49+dDTKOP+YDaPoxQ/P0Ci4W58zqW7hiLgHjs8DeXY+\nRKbFrwFNAgMBAAECggEACH6/DELASrCyqZP+Nf3BXEOY1yP94sNDa2V+5X8AUNQ6\nA6sow8CStmqtIKymCDeYt0QJaZGVVuec/jbvelaQTA8Ihp3febQMGa/thX9tixMq\n7ErIUEnXxP4uHvXe5VLgHKZb+sCXXPx04SH8cqN4qsT9fGay5WijZ+KTsItau29Y\n7LtP3FsB+pugvVw7euBnLK+/FrDoEBk4dZiAsp2Uf586OZvES5g+Ib8VSKiVTwYQ\naktu4Fb7uea1Iodi2O+b3FcF6gP/HzuT/dZN80sfZed5BdvaTMj97EXfXmWB3DQ7\nQNnINcGQDuKC+WOD3STn6+ZSPrtxkMhWqivmL4ZhMwKBgQD/rHX2eGmM8H2tdfQw\nPw/+R5h4GKtXwbK3aPcp/QXejV9aB1jIvmssFSk87sj15Kwa+CZaPY+C1oiC3ASC\nPZ5zuVVBQNUrL38JXSRrtI8mt7z9nAdEwjazUyEdBtRjX05GwiC8f8rMAcOGA/rl\nCBYJupXbrvrrMriAQ7tz/nf6wwKBgQDmBTCrZaF8WM3OWvdw5EZpAmU4IpELh5od\nS1f6XfCAd0WpikWZdbs2q20k5KQDQIH3KtujmPTGx3rZxq0Y9xCa30znPZk/EA2c\nVUhz7cYgyH+dN86Iu8EIzqLsjMOMJz/rRDOr1FL2fM+KyhYfxY8ps6AVHiSgqYV+\n0wXOioWyrwKBgQC+XQ5HwUf1pGou6RAzjADAd1ZStSt+X75NSV4eaUIhfmlsguPc\nM8tgOzFFKRV/4A801WbY8dUUud9Sb7b7sh10VJ3hw//z851Gv48KkpmzXkLdIXtX\n+rL3ugGBt0AT7TY/APOW5h983iNSeUwpk2e1PrOtqg8xZ8Zv2f6MUv/KOQKBgCti\nZTietaOneEHopG0VkTYzLnY1Bth+3hGSaWiemUMRvADrRI9aRlJcaPyhZ1H5s8mz\nurOToO9xJnm24GUqDGa5oV6oHqRnWbnX2A+NlGYQiwlTQlBF4XXQy6gEMMnZiVPN\njFVnebJl/hs2XI/nikYaTCJPiicHcldmY9z+AZOfAoGBANSgx/zKIs0CietLSTD2\n66ncJukfA5U1ZKz3Kvnacjp13oBea85V6xooFHWQASoiV4sEybcviDQdPehISrgY\no7XiHjOWsVVSx2PDRJT38qw26vlFs2LtYpf1x8by8YTsrkKvfU1qKsZqyqtYbS/X\n5qCQ4iJ6+wkHTzpqSqLZ2kHs\n-----END PRIVATE KEY-----\n",
6
+ "client_email": "firebase-adminsdk-tgl92@montaillou-bdd.iam.gserviceaccount.com",
7
+ "client_id": "112544598871622022690",
8
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
9
+ "token_uri": "https://oauth2.googleapis.com/token",
10
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
11
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-tgl92%40montaillou-bdd.iam.gserviceaccount.com",
12
+ "universe_domain": "googleapis.com"
13
+ }