Spaces:
Sleeping
Sleeping
Elouarn
commited on
Commit
·
c9d7777
1
Parent(s):
ac67040
firestore added
Browse files- app.py +63 -46
- gradio_cached_examples/14/log.csv +2 -0
- montaillou-bdd-5b8a59219187.json +13 -0
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 |
-
|
67 |
-
|
|
|
|
|
|
|
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 |
+
}
|