Leo71288 commited on
Commit
28772d2
·
verified ·
1 Parent(s): d7e02ef

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -86
app.py CHANGED
@@ -3,89 +3,63 @@ import json
3
  import gradio as gr
4
  from difflib import SequenceMatcher
5
 
6
- # Charger les réponses depuis le fichier JSON
7
- def load_responses():
8
- if os.path.exists('response.json'):
9
- with open('response.json', 'r', encoding='utf-8') as file:
10
- return json.load(file)
11
- else:
12
- return {}
13
-
14
- # Sauvegarder les réponses dans le fichier JSON
15
- def save_responses(responses):
16
- with open('response.json', 'w', encoding='utf-8') as file:
17
- json.dump(responses, file, ensure_ascii=False, indent=4)
18
-
19
- # Fonction pour obtenir la meilleure réponse possible basée sur l'entrée de l'utilisateur
20
- def get_response(user_input, responses):
21
- user_input = user_input.lower() # Mettre l'entrée en minuscule pour la recherche
22
- best_match = None
23
- highest_ratio = 0
24
-
25
- # Recherche de la meilleure correspondance parmi les réponses existantes
26
- for question, response in responses.items():
27
- ratio = SequenceMatcher(None, user_input, question).ratio()
28
- if ratio > highest_ratio:
29
- highest_ratio = ratio
30
- best_match = response
31
-
32
- return best_match, highest_ratio
33
-
34
- # Fonction principale pour la conversation
35
- def chatbot_conversation(user_input):
36
- responses = load_responses()
37
-
38
- # Recherche d'une réponse existante dans le fichier JSON
39
- response, ratio = get_response(user_input, responses)
40
-
41
- if response and ratio > 0.5: # Si une correspondance est trouvée avec une confiance de 50% ou plus
42
- return response, None # Pas besoin d'une nouvelle réponse, retourner None pour 'user_answer'
43
- else:
44
- # Si aucune bonne réponse n'est trouvée, demander à l'utilisateur de fournir une réponse
45
- return f"Désolé, je ne connais pas la réponse à '{user_input}'. Pouvez-vous me dire la bonne réponse?", True
46
-
47
- # Fonction pour enregistrer une nouvelle réponse dans le fichier JSON
48
- def save_new_answer(user_input, new_answer):
49
- responses = load_responses()
50
-
51
- # Ajouter la nouvelle question et la réponse fournie
52
- responses[user_input] = new_answer
53
-
54
- # Sauvegarder les modifications dans le fichier JSON
55
- save_responses(responses)
56
-
57
- return f"La réponse à '{user_input}' a été ajoutée.", None
58
-
59
- # Interface Gradio
60
- def interface():
61
- with gr.Blocks() as demo:
62
- gr.Markdown("## Chatbot avec ajout de réponses personnalisées")
63
-
64
- with gr.Row():
65
- user_input = gr.Textbox(label="Votre question", placeholder="Posez une question...")
66
- chatbot_output = gr.Textbox(label="Réponse du chatbot", interactive=False)
67
-
68
- user_answer = gr.Textbox(label="Entrez la bonne réponse", placeholder="Votre réponse ici", visible=False)
69
-
70
- def respond_and_save(user_input):
71
- response, show_user_answer = chatbot_conversation(user_input)
72
-
73
- if show_user_answer:
74
- user_answer.visible = True # Afficher la zone de texte pour la nouvelle réponse
75
- else:
76
- user_answer.visible = False # Cacher la zone de texte si aucune réponse n'est nécessaire
77
-
78
- return response, user_answer
79
-
80
- def save_answer(user_input, user_answer):
81
- return save_new_answer(user_input, user_answer)
82
-
83
- user_input.submit(respond_and_save, [user_input], [chatbot_output, user_answer])
84
- user_answer.submit(save_answer, [user_input, user_answer], [chatbot_output])
85
-
86
- return demo
87
-
88
- # Lancer l'interface
89
- if __name__ == "__main__":
90
- demo = interface()
91
- demo.launch()
 
3
  import gradio as gr
4
  from difflib import SequenceMatcher
5
 
6
+ # Désactiver l'utilisation du GPU pour TensorFlow (si nécessaire)
7
+ os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # Désactive le GPU
8
+ os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # Réduit les logs de TensorFlow
9
+
10
+ class HuggingFaceChatbot:
11
+ def __init__(self, responses_file="responses.json"):
12
+ """Initialisation du chatbot, chargement des réponses."""
13
+ self.responses = self.load_responses(responses_file)
14
+
15
+ def load_responses(self, file_path):
16
+ """Charge les réponses depuis un fichier JSON."""
17
+ try:
18
+ with open(file_path, "r") as f:
19
+ return json.load(f)
20
+ except FileNotFoundError:
21
+ print("Aucun fichier de réponses trouvé. Utilisation des réponses par défaut.")
22
+ return {
23
+ "bonjour": "Bonjour! Comment puis-je vous aider?",
24
+ "comment ça va?": "Je suis une IA, je vais toujours bien! Et vous?",
25
+ }
26
+
27
+ def find_best_response(self, user_input):
28
+ """Trouve la meilleure correspondance basée sur la similarité."""
29
+ max_similarity = 0
30
+ best_match = None
31
+ for key in self.responses.keys():
32
+ similarity = SequenceMatcher(None, user_input.lower(), key).ratio()
33
+ if similarity > max_similarity:
34
+ max_similarity = similarity
35
+ best_match = key
36
+
37
+ # Retourne la réponse si une correspondance suffisante est trouvée
38
+ if max_similarity > 0.4: # Seuil ajustable
39
+ return self.responses[best_match]
40
+ return "Je ne suis pas sûr de comprendre. Pouvez-vous reformuler?"
41
+
42
+ def __call__(self, user_input):
43
+ """Permet d'utiliser l'instance comme une fonction pour répondre."""
44
+ return self.find_best_response(user_input)
45
+
46
+ # Charger le chatbot
47
+ chatbot = HuggingFaceChatbot()
48
+
49
+ # Fonction pour l'interface Gradio
50
+ def chatbot_interface(user_input):
51
+ """Fonction pour interagir avec Gradio."""
52
+ return chatbot(user_input)
53
+
54
+ # Créer l'interface Gradio
55
+ iface = gr.Interface(
56
+ fn=chatbot_interface,
57
+ inputs=gr.Textbox(label="Entrez votre message", placeholder="Tapez ici...", lines=2),
58
+ outputs="text",
59
+ title="Chatbot Interactif",
60
+ description="Un chatbot simple qui répond à des questions courantes.",
61
+ allow_flagging="never" # Option pour désactiver le flagging si tu ne veux pas que les utilisateurs signalent des réponses.
62
+ )
63
+
64
+ # Démarrer l'interface Gradio
65
+ iface.launch()