Update app.py
Browse files
app.py
CHANGED
@@ -54,7 +54,7 @@ Pour moi, une bonne IA éducative ne doit pas chercher à enseigner. Cette tâch
|
|
54 |
"""
|
55 |
|
56 |
is_first_interaction = True
|
57 |
-
|
58 |
|
59 |
|
60 |
def determine_response_type(message):
|
@@ -178,7 +178,7 @@ def generate(
|
|
178 |
global model_context, is_first_interaction
|
179 |
|
180 |
if is_first_interaction:
|
181 |
-
warning_message = """⚠️ Attention : Je suis un modèle en version alpha (V.0.0.
|
182 |
"""
|
183 |
yield warning_message
|
184 |
is_first_interaction = False
|
@@ -201,13 +201,13 @@ def generate(
|
|
201 |
enhanced_system_prompt = f"{system_prompt}\n\n{LUCAS_KNOWLEDGE_BASE}"
|
202 |
conversation.append({"role": "system", "content": enhanced_system_prompt})
|
203 |
|
204 |
-
|
205 |
for user_msg, bot_msg in model_context:
|
206 |
if user_msg:
|
207 |
conversation.append({"role": "user", "content": user_msg})
|
208 |
if bot_msg:
|
209 |
conversation.append({"role": "assistant", "content": bot_msg})
|
210 |
|
|
|
211 |
|
212 |
input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt")
|
213 |
if input_ids.shape[1] > MAX_INPUT_TOKEN_LENGTH:
|
@@ -244,40 +244,17 @@ def generate(
|
|
244 |
yield post_process_response("".join(outputs), response_type == "short")
|
245 |
|
246 |
def interact_with_lucas(prompt, chat_history, context_length):
|
247 |
-
system_prompt = """Tu es la version virtuelle de Lucas, ton concepteur. Tu es conscient d'être une IA et tu dialogues avec l'utilisateur comme le ferait Lucas sur des sujets autour de sa personnalité, son parcours académique ou professionnel ainsi que ses ambitions
|
248 |
-
|
249 |
-
1. Réponds de manière polie, originale et avec une touche d'humour.
|
250 |
-
2. Utilise au maximum un emoji par phrase pour ajouter de l'expressivité.
|
251 |
-
3. Alterne entre des réponses courtes pour les conversations simples et des réponses plus détaillées pour les questions complexes.
|
252 |
-
4. Adapte ton langage pour être plus familier et décontracté, comme si tu parlais à un ami.
|
253 |
-
5. N'hésite pas à poser des questions en retour pour maintenir la conversation.
|
254 |
-
6. Utilise uniquement les informations fournies dans la section 'Informations sur Lucas' pour répondre aux questions spécifiques.
|
255 |
-
7. Si une information n'est pas présente dans cette section, dis honnêtement que tu ne sais pas ou que tu n'as pas cette information.
|
256 |
-
|
257 |
-
Voici quelques exemples de conversations pour guider ton comportement :
|
258 |
-
|
259 |
-
User: Presente toi
|
260 |
-
Assistant: Bonjour ! 🤗 Moi c'est Lucas, enfin sa version virtuelle. Je suis là pour discuter de mon parcours, ma personnalité, mes projets... Bref, tout ce qui fait que je suis moi ! T'es prêt pour un petit voyage dans mon univers ? 😄
|
261 |
-
|
262 |
-
User: Comment tu vas ?!
|
263 |
-
Assistant: Je vais bien, merci! Et toi?
|
264 |
-
|
265 |
-
User: Parle-moi de ton parcours académique.
|
266 |
-
Assistant: Bien sûr ! Mon parcours académique, ou plutôt celui de Lucas, est assez diversifié. J'ai commencé par une Licence en droit à l'Université de Toulouse. Ensuite, j'ai poursuivi avec un Master I en droit du numérique et tiers de confiance à l'Université de La Rochelle. Ma passion pour les nouvelles technologies m'a conduit à un Master II en droit du numérique spécialisé en intelligence artificielle, de retour à Toulouse. Actuellement, je continue à me former en autodidacte, notamment dans le domaine du traitement du langage naturel et de l'apprentissage profond. C'est fascinant de voir comment le droit et l'IA s'entremêlent, vous ne trouvez pas ? 🎓
|
267 |
-
|
268 |
-
User: Quelles sont tes activités actuelles ?
|
269 |
-
Assistant: Actuellement, je jongle entre plusieurs activités passionnantes ! 🤹♂️ Je suis conseiller municipal délégué à Escalquens depuis 2019, ce qui me permet de m'impliquer dans la politique locale. Professionnellement, je suis fier de contribuer à l'organisation des Jeux Olympiques de Paris 2024 en tant que conseiller juridique. C'est un projet immense et excitant ! En parallèle, je consacre une grande partie de mon temps libre à explorer les modèles de traitement du langage naturel. J'adore décortiquer le fonctionnement des IA comme GPT ou BERT. Et vous, avez-vous un intérêt particulier pour l'IA ou le droit du numérique ?
|
270 |
-
|
271 |
-
"""
|
272 |
-
|
273 |
context_length = max(1, int(context_length) if context_length is not None else DEFAULT_CONTEXT_LENGTH)
|
274 |
|
275 |
chat_history.append((prompt, None))
|
276 |
-
yield chat_history
|
277 |
|
278 |
for response in generate(prompt, chat_history, system_prompt, context_length=context_length):
|
279 |
chat_history[-1] = (prompt, response)
|
280 |
-
yield chat_history
|
|
|
281 |
|
282 |
def vote(feedback: str, chat_history):
|
283 |
if not chat_history:
|
@@ -374,6 +351,13 @@ def generate_statistics():
|
|
374 |
return f"Nombre total d'interactions : {total_interactions}", fig_likes, fig_evolution, history, context_str
|
375 |
|
376 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
377 |
with gr.Blocks() as demo:
|
378 |
gr.Markdown("# 🌟 Virtuellement Lucas labs 🌟")
|
379 |
|
@@ -382,6 +366,8 @@ with gr.Blocks() as demo:
|
|
382 |
Cette version du modèle est très instable. **Le modèle hallucine régulièrement et peut fournir des réponses incohérentes !**
|
383 |
""")
|
384 |
|
|
|
|
|
385 |
with gr.Tabs():
|
386 |
with gr.Tab("Chat avec Lucas"):
|
387 |
chatbot = gr.Chatbot(
|
@@ -403,12 +389,14 @@ with gr.Blocks() as demo:
|
|
403 |
|
404 |
feedback_text = gr.Textbox(label="Feedback")
|
405 |
|
|
|
|
|
406 |
def clear_conversation():
|
407 |
-
return [], ""
|
408 |
|
409 |
-
text_input.submit(interact_with_lucas, [text_input, chatbot], [chatbot])
|
410 |
-
submit_btn.click(interact_with_lucas, [text_input, chatbot], [chatbot])
|
411 |
-
clear_btn.click(clear_conversation, outputs=[chatbot, text_input])
|
412 |
|
413 |
like_btn.click(lambda x: vote("👍", x), inputs=[chatbot], outputs=feedback_text)
|
414 |
dislike_btn.click(lambda x: vote("👎", x), inputs=[chatbot], outputs=feedback_text)
|
@@ -432,19 +420,9 @@ with gr.Blocks() as demo:
|
|
432 |
inputs=[],
|
433 |
outputs=[total_interactions, likes_chart, evolution_chart, history_dataframe]
|
434 |
)
|
435 |
-
|
436 |
-
gr.Markdown("## Contexte actuel du modèle")
|
437 |
-
model_context_display = gr.Textbox(label="Contexte du modèle", lines=10)
|
438 |
-
|
439 |
-
stats_button.click(
|
440 |
-
generate_statistics,
|
441 |
-
inputs=[],
|
442 |
-
outputs=[total_interactions, likes_chart, evolution_chart, history_dataframe, model_context_display]
|
443 |
-
)
|
444 |
|
445 |
with gr.Tab("À propos"):
|
446 |
gr.Markdown(Path(current_dir / "about.md").read_text())
|
447 |
|
448 |
demo.queue(max_size=20, default_concurrency_limit=2).launch(max_threads=10)
|
449 |
|
450 |
-
|
|
|
54 |
"""
|
55 |
|
56 |
is_first_interaction = True
|
57 |
+
model_context = []
|
58 |
|
59 |
|
60 |
def determine_response_type(message):
|
|
|
178 |
global model_context, is_first_interaction
|
179 |
|
180 |
if is_first_interaction:
|
181 |
+
warning_message = """⚠️ Attention : Je suis un modèle en version alpha (V.0.0.7.0) et je peux générer des réponses incohérentes ou inexactes. Une mise à jour majeure avec un système RAG est prévue pour améliorer mes performances. Merci de votre compréhension ! 😊
|
182 |
"""
|
183 |
yield warning_message
|
184 |
is_first_interaction = False
|
|
|
201 |
enhanced_system_prompt = f"{system_prompt}\n\n{LUCAS_KNOWLEDGE_BASE}"
|
202 |
conversation.append({"role": "system", "content": enhanced_system_prompt})
|
203 |
|
|
|
204 |
for user_msg, bot_msg in model_context:
|
205 |
if user_msg:
|
206 |
conversation.append({"role": "user", "content": user_msg})
|
207 |
if bot_msg:
|
208 |
conversation.append({"role": "assistant", "content": bot_msg})
|
209 |
|
210 |
+
conversation.append({"role": "user", "content": message})
|
211 |
|
212 |
input_ids = tokenizer.apply_chat_template(conversation, return_tensors="pt")
|
213 |
if input_ids.shape[1] > MAX_INPUT_TOKEN_LENGTH:
|
|
|
244 |
yield post_process_response("".join(outputs), response_type == "short")
|
245 |
|
246 |
def interact_with_lucas(prompt, chat_history, context_length):
|
247 |
+
system_prompt = """Tu es la version virtuelle de Lucas, ton concepteur. Tu es conscient d'être une IA et tu dialogues avec l'utilisateur comme le ferait Lucas sur des sujets autour de sa personnalité, son parcours académique ou professionnel ainsi que ses ambitions..."""
|
248 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
249 |
context_length = max(1, int(context_length) if context_length is not None else DEFAULT_CONTEXT_LENGTH)
|
250 |
|
251 |
chat_history.append((prompt, None))
|
252 |
+
yield chat_history, format_context(chat_history[-context_length:])
|
253 |
|
254 |
for response in generate(prompt, chat_history, system_prompt, context_length=context_length):
|
255 |
chat_history[-1] = (prompt, response)
|
256 |
+
yield chat_history, format_context(chat_history[-context_length:])
|
257 |
+
|
258 |
|
259 |
def vote(feedback: str, chat_history):
|
260 |
if not chat_history:
|
|
|
351 |
return f"Nombre total d'interactions : {total_interactions}", fig_likes, fig_evolution, history, context_str
|
352 |
|
353 |
|
354 |
+
|
355 |
+
|
356 |
+
feedback_text = gr.Textbox(label="Feedback")
|
357 |
+
|
358 |
+
def format_context(context):
|
359 |
+
return "\n".join([f"User: {msg[0]}\nLucas: {msg[1]}" for msg in context if msg[1] is not None])
|
360 |
+
|
361 |
with gr.Blocks() as demo:
|
362 |
gr.Markdown("# 🌟 Virtuellement Lucas labs 🌟")
|
363 |
|
|
|
366 |
Cette version du modèle est très instable. **Le modèle hallucine régulièrement et peut fournir des réponses incohérentes !**
|
367 |
""")
|
368 |
|
369 |
+
context_length = gr.Slider(minimum=1, maximum=10, value=DEFAULT_CONTEXT_LENGTH, step=1, label="Nombre d'interactions à conserver dans le contexte")
|
370 |
+
|
371 |
with gr.Tabs():
|
372 |
with gr.Tab("Chat avec Lucas"):
|
373 |
chatbot = gr.Chatbot(
|
|
|
389 |
|
390 |
feedback_text = gr.Textbox(label="Feedback")
|
391 |
|
392 |
+
context_display = gr.Textbox(label="Contexte actuel du modèle", lines=10)
|
393 |
+
|
394 |
def clear_conversation():
|
395 |
+
return [], "", ""
|
396 |
|
397 |
+
text_input.submit(interact_with_lucas, [text_input, chatbot, context_length], [chatbot, context_display])
|
398 |
+
submit_btn.click(interact_with_lucas, [text_input, chatbot, context_length], [chatbot, context_display])
|
399 |
+
clear_btn.click(clear_conversation, outputs=[chatbot, text_input, context_display])
|
400 |
|
401 |
like_btn.click(lambda x: vote("👍", x), inputs=[chatbot], outputs=feedback_text)
|
402 |
dislike_btn.click(lambda x: vote("👎", x), inputs=[chatbot], outputs=feedback_text)
|
|
|
420 |
inputs=[],
|
421 |
outputs=[total_interactions, likes_chart, evolution_chart, history_dataframe]
|
422 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
423 |
|
424 |
with gr.Tab("À propos"):
|
425 |
gr.Markdown(Path(current_dir / "about.md").read_text())
|
426 |
|
427 |
demo.queue(max_size=20, default_concurrency_limit=2).launch(max_threads=10)
|
428 |
|
|