|
|
import gradio as gr |
|
|
from sentence_transformers import SentenceTransformer, util |
|
|
|
|
|
|
|
|
model = SentenceTransformer("Clemylia/Nacacia-fine") |
|
|
|
|
|
|
|
|
|
|
|
ZELDO_RESPONSES = { |
|
|
"salutation": { |
|
|
"phrases_cles": ["bonjour", "salut", "hello", "coucou"], |
|
|
"reponse": "Bonjour ! Comment puis-je vous aider ?", |
|
|
}, |
|
|
"merci": { |
|
|
"phrases_cles": ["merci", "merci beaucoup"], |
|
|
"reponse": "De rien, c'est un plaisir ! 😊", |
|
|
}, |
|
|
"question_soleil": { |
|
|
"phrases_cles": ["quelle est la couleur du soleil ?", "de quelle couleur est le soleil ?"], |
|
|
"reponse": "Le soleil est jaune.", |
|
|
}, |
|
|
"question_lune": { |
|
|
"phrases_cles": ["quelle est la couleur de la lune ?", "de quelle couleur est la lune ?"], |
|
|
"reponse": "La lune est grise.", |
|
|
}, |
|
|
"question_chat": { |
|
|
"phrases_cles": ["un chat est il un animal ?", "est-ce qu'un chat est un animal ?"], |
|
|
"reponse": "Oui, un chat est un animal." |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
def reponse_zeldo(message_utilisateur): |
|
|
""" |
|
|
Détermine la réponse du chatbot Zeldo. |
|
|
""" |
|
|
meilleur_score = 0.6 |
|
|
reponse_trouvee = "Désolé, je n'ai pas compris. Pouvez-vous reformuler ?" |
|
|
|
|
|
|
|
|
for categorie, donnees in ZELDO_RESPONSES.items(): |
|
|
phrases_cles = donnees["phrases_cles"] |
|
|
reponse = donnees["reponse"] |
|
|
|
|
|
|
|
|
embeddings = model.encode([message_utilisateur] + phrases_cles, convert_to_tensor=True) |
|
|
embedding_utilisateur = embeddings[0] |
|
|
embeddings_cles = embeddings[1:] |
|
|
|
|
|
|
|
|
scores = util.cos_sim(embedding_utilisateur, embeddings_cles)[0] |
|
|
|
|
|
|
|
|
score_max_categorie = max(scores) |
|
|
|
|
|
|
|
|
if score_max_categorie > meilleur_score: |
|
|
meilleur_score = score_max_categorie |
|
|
reponse_trouvee = reponse |
|
|
|
|
|
|
|
|
if meilleur_score < 0.6: |
|
|
reponse_trouvee = "Désolé, je n'ai pas bien compris. Essayez de poser une autre question." |
|
|
|
|
|
return reponse_trouvee |
|
|
|
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=reponse_zeldo, |
|
|
inputs=gr.Textbox(lines=2, placeholder="Posez une question à Zeldo..."), |
|
|
outputs="text", |
|
|
title="🤖 Zeldo, le chatbot IA", |
|
|
description="Un chatbot simple mais intelligent, capable de comprendre la similarité des phrases grâce au modèle Nacacia-fine de Clemylia. Posez-lui une question pour voir s'il peut y répondre !", |
|
|
theme=gr.themes.Soft(primary_hue="blue", secondary_hue="green") |
|
|
) |
|
|
|
|
|
|
|
|
demo.launch() |