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()