File size: 3,198 Bytes
cd4f5e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4562e99
cd4f5e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
09b16a5
cd4f5e2
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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()