Zeldo / app.py
Erzo-ai's picture
Update app.py
4562e99 verified
import gradio as gr
from sentence_transformers import SentenceTransformer, util
# Charge le modèle de Clemylia pour la similarité de phrases
model = SentenceTransformer("Clemylia/Nacacia-fine")
# Réponses pré-définies de Zeldo et les phrases clés pour y accéder
# C'est ici que vous pouvez ajouter toutes les réponses que vous voulez
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."
}
}
# Fonction principale du chatbot
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 ?"
# Compare la phrase de l'utilisateur avec toutes les phrases clés
for categorie, donnees in ZELDO_RESPONSES.items():
phrases_cles = donnees["phrases_cles"]
reponse = donnees["reponse"]
# Encode la phrase de l'utilisateur et les phrases clés
embeddings = model.encode([message_utilisateur] + phrases_cles, convert_to_tensor=True)
embedding_utilisateur = embeddings[0]
embeddings_cles = embeddings[1:]
# Calcule les scores de similarité pour toutes les phrases clés
scores = util.cos_sim(embedding_utilisateur, embeddings_cles)[0]
# Trouve le score de similarité le plus élevé pour cette catégorie
score_max_categorie = max(scores)
# Si ce score est le meilleur que nous ayons trouvé jusqu'à présent
if score_max_categorie > meilleur_score:
meilleur_score = score_max_categorie
reponse_trouvee = reponse
# Vous pouvez ajuster ce seuil si vous voulez que Zeldo soit plus ou moins strict
if meilleur_score < 0.6: # Un seuil pour ne pas répondre n'importe comment
reponse_trouvee = "Désolé, je n'ai pas bien compris. Essayez de poser une autre question."
return reponse_trouvee
# Crée l'interface Gradio pour Zeldo
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")
)
# Lance l'application
demo.launch()