MathieuGAL commited on
Commit
c86673b
·
verified ·
1 Parent(s): aa33b2f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -40
app.py CHANGED
@@ -21,10 +21,8 @@ TELEGRAM_TOKEN = "8584350410:AAEuXqopGMfgdZ1BvLntA-e6FpoZl5uunEk"
21
  TELEGRAM_CHAT_ID = "1278265595"
22
  # Activer/Désactiver l'envoi de notifications
23
  TELEGRAM_NOTIFICATIONS_ENABLED = True
24
- # 🚨 FIX POUR NAME RESOLUTION ERROR: Utilisation d'une IP connue de Telegram
25
- # La vraie solution est de fixer le DNS dans l'environnement du conteneur.
26
- TELEGRAM_API_HOST = "149.154.167.220"
27
- TELEGRAM_API_DOMAIN = "api.telegram.org"
28
 
29
 
30
  # ======================================================================
@@ -32,8 +30,6 @@ TELEGRAM_API_DOMAIN = "api.telegram.org"
32
  # ======================================================================
33
 
34
  DATA_FILE_PATH = "data/QR.csv"
35
-
36
- # CORRECTION CRITIQUE: Déplacement de la DB vers /tmp
37
  CHROMA_DB_PATH = "/tmp/bdd_ChromaDB"
38
  COLLECTION_NAME = "qr_data_dual_embeddings"
39
 
@@ -47,13 +43,11 @@ SRC_PARAPHRASE = "models/paraphrase-mpnet-base-v2"
47
  N_RESULTS_RETRIEVAL = 10
48
  N_RESULTS_RERANK = 3
49
 
50
- # Récupération de la clé depuis l'environnement
51
  GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "AIzaSyDXXY7uSXryTxZ51jQFsSLcPnC_Ivt9V1g")
52
  GEMINI_MODEL = "gemini-2.5-flash"
53
 
54
  MAX_CONVERSATION_HISTORY = 10
55
 
56
- # Configuration pour l'accès externe (host et port)
57
  API_HOST = '0.0.0.0'
58
  API_PORT = 1212
59
 
@@ -71,21 +65,17 @@ conversation_histories: Dict[str, List[Dict[str, str]]] = {}
71
  conversation_start_times: Dict[str, str] = {}
72
 
73
  # ======================================================================
74
- # 🤖 FONCTION D'ENVOI TÉLÉGRAM (MODIFIÉE)
75
  # ======================================================================
76
 
77
  def send_telegram_message(message: str, token: str, chat_id: str):
78
  """
79
- Fonction générique pour envoyer un message à Telegram.
80
- Utilise l'IP pour contourner la NameResolutionError.
81
  """
82
  if not TELEGRAM_NOTIFICATIONS_ENABLED:
83
  return
84
 
85
- # Construction de l'URL pour la méthode 'sendMessage' en utilisant l'IP de l'hôte
86
- # NOTE: Nous utilisons l'IP mais nous devons injecter le nom d'hôte dans le header
87
- # pour que le serveur Telegram sache à quel domaine la requête est destinée.
88
- url = f"https://{TELEGRAM_API_HOST}/bot{token}/sendMessage"
89
 
90
  params = {
91
  "chat_id": chat_id,
@@ -93,23 +83,21 @@ def send_telegram_message(message: str, token: str, chat_id: str):
93
  "parse_mode": "Markdown"
94
  }
95
 
96
- # IMPORTANT: Nous ajoutons le header Host pour que la requête soit bien traitée
97
- # par l'hôte virtuel sur le serveur Telegram, malgré l'utilisation de l'IP.
98
- headers = {
99
- "Host": TELEGRAM_API_DOMAIN
100
- }
101
-
102
  try:
103
- response = requests.post(url, params=params, headers=headers, timeout=5)
 
104
  response.raise_for_status()
105
 
106
- if response.json().get("ok"):
107
- print(f"✅ Message Telegram envoyé (via IP: {TELEGRAM_API_HOST}).")
 
 
108
  else:
109
- print(f"❌ Échec envoi Telegram: {response.json().get('description')}")
110
 
111
  except requests.exceptions.RequestException as e:
112
- print(f"❌ Erreur connexion Telegram (Vérifiez le TOKEN/IP de secours) : {e}")
 
113
  except Exception as e:
114
  print(f"❌ Erreur inattendue Telegram : {e}")
115
 
@@ -117,7 +105,6 @@ def send_llm_interaction_to_telegram(question: str, reponse_llm: str, session_id
117
  """
118
  Construit le message d'interaction Q/R et l'envoie via Telegram.
119
  """
120
- # Construction du message formaté
121
  MESSAGE = f"""
122
  *🔔 Nouvelle Interaction LLM 🔔*
123
  *Session ID:* `{session_id}`
@@ -127,7 +114,7 @@ def send_llm_interaction_to_telegram(question: str, reponse_llm: str, session_id
127
  {question}
128
 
129
  *Réponse (LLM - Début):*
130
- {reponse_llm[:200]}... (Voir le log pour la réponse complète)
131
  """
132
  send_telegram_message(MESSAGE, token, chat_id)
133
 
@@ -332,7 +319,6 @@ def add_to_history(session_id, role, content):
332
 
333
  conversation_histories[session_id].append({"role": role, "content": content})
334
 
335
- # Limiter la taille de l'historique conservé en mémoire
336
  if len(conversation_histories[session_id]) > MAX_CONVERSATION_HISTORY * 2:
337
  conversation_histories[session_id] = conversation_histories[session_id][-(MAX_CONVERSATION_HISTORY * 2):]
338
 
@@ -428,21 +414,14 @@ def api_get_answer():
428
  generic_message = "Requête vide."
429
  return jsonify({"error": generic_message}), 400
430
 
431
- # Récupère historique
432
  history = get_conversation_history(session_id)
433
-
434
- # Génère prompt RAG
435
  rag_prompt = get_answer(query_text, collection, model_paraphrase, model_cross_encoder, history)
436
-
437
- # Appelle Gemini
438
  response = call_gemini(rag_prompt, system_prompt, gemini_client)
439
 
440
- # Sauvegarde réponse dans l'historique de la session
441
  add_to_history(session_id, "user", query_text)
442
  add_to_history(session_id, "assistant", response)
443
 
444
- # 🚀 ÉTAPE CRUCIALE : ENVOI DE LA NOTIFICATION TÉLÉGRAM
445
- # Ceci archive l'interaction (Question + Réponse)
446
  send_llm_interaction_to_telegram(
447
  question=query_text,
448
  reponse_llm=response,
@@ -450,7 +429,6 @@ def api_get_answer():
450
  token=TELEGRAM_TOKEN,
451
  chat_id=TELEGRAM_CHAT_ID
452
  )
453
- # --------------------------------------------------------
454
 
455
  return jsonify({"generated_response": response})
456
 
@@ -480,10 +458,9 @@ if __name__ == '__main__':
480
  print("start app.py")
481
  if initialize_global_resources():
482
 
483
- # ➡️ ENVOI DE LA NOTIFICATION TÉLÉGRAM AU DÉMARRAGE (même appel que la fonction générique)
484
  startup_message = f"🚀 **Application RAG Démarrée**\nHeure: {time.strftime('%Y-%m-%d %H:%M:%S')}\nToutes les ressources sont chargées."
485
  send_telegram_message(startup_message, TELEGRAM_TOKEN, TELEGRAM_CHAT_ID)
486
- # ------------------------------------------------------
487
 
488
  try:
489
  import socket
 
21
  TELEGRAM_CHAT_ID = "1278265595"
22
  # Activer/Désactiver l'envoi de notifications
23
  TELEGRAM_NOTIFICATIONS_ENABLED = True
24
+ # 🚨 RETOUR À L'URL STANDARD (Celle qui marche dans le notebook)
25
+ TELEGRAM_API_URL_BASE = "https://api.telegram.org/bot"
 
 
26
 
27
 
28
  # ======================================================================
 
30
  # ======================================================================
31
 
32
  DATA_FILE_PATH = "data/QR.csv"
 
 
33
  CHROMA_DB_PATH = "/tmp/bdd_ChromaDB"
34
  COLLECTION_NAME = "qr_data_dual_embeddings"
35
 
 
43
  N_RESULTS_RETRIEVAL = 10
44
  N_RESULTS_RERANK = 3
45
 
 
46
  GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "AIzaSyDXXY7uSXryTxZ51jQFsSLcPnC_Ivt9V1g")
47
  GEMINI_MODEL = "gemini-2.5-flash"
48
 
49
  MAX_CONVERSATION_HISTORY = 10
50
 
 
51
  API_HOST = '0.0.0.0'
52
  API_PORT = 1212
53
 
 
65
  conversation_start_times: Dict[str, str] = {}
66
 
67
  # ======================================================================
68
+ # 🤖 FONCTION D'ENVOI TÉLÉGRAM (SIMPLIFIÉE ET STANDARD)
69
  # ======================================================================
70
 
71
  def send_telegram_message(message: str, token: str, chat_id: str):
72
  """
73
+ Fonction générique pour envoyer un message à Telegram en utilisant l'URL standard.
 
74
  """
75
  if not TELEGRAM_NOTIFICATIONS_ENABLED:
76
  return
77
 
78
+ url = f"{TELEGRAM_API_URL_BASE}{token}/sendMessage"
 
 
 
79
 
80
  params = {
81
  "chat_id": chat_id,
 
83
  "parse_mode": "Markdown"
84
  }
85
 
 
 
 
 
 
 
86
  try:
87
+ # Tente l'envoi avec un timeout standard
88
+ response = requests.post(url, params=params, timeout=10)
89
  response.raise_for_status()
90
 
91
+ response_data = response.json()
92
+
93
+ if response_data.get("ok"):
94
+ print(f"✅ Message Telegram envoyé (URL standard).")
95
  else:
96
+ print(f"❌ Échec envoi Telegram: {response_data.get('description')}")
97
 
98
  except requests.exceptions.RequestException as e:
99
+ # L'erreur de connexion est gérée ici.
100
+ print(f"❌ Erreur connexion Telegram (Vérifiez le TOKEN/Réseau/Pare-feu HF Spaces): {e}")
101
  except Exception as e:
102
  print(f"❌ Erreur inattendue Telegram : {e}")
103
 
 
105
  """
106
  Construit le message d'interaction Q/R et l'envoie via Telegram.
107
  """
 
108
  MESSAGE = f"""
109
  *🔔 Nouvelle Interaction LLM 🔔*
110
  *Session ID:* `{session_id}`
 
114
  {question}
115
 
116
  *Réponse (LLM - Début):*
117
+ {reponse_llm[:200]}...
118
  """
119
  send_telegram_message(MESSAGE, token, chat_id)
120
 
 
319
 
320
  conversation_histories[session_id].append({"role": role, "content": content})
321
 
 
322
  if len(conversation_histories[session_id]) > MAX_CONVERSATION_HISTORY * 2:
323
  conversation_histories[session_id] = conversation_histories[session_id][-(MAX_CONVERSATION_HISTORY * 2):]
324
 
 
414
  generic_message = "Requête vide."
415
  return jsonify({"error": generic_message}), 400
416
 
 
417
  history = get_conversation_history(session_id)
 
 
418
  rag_prompt = get_answer(query_text, collection, model_paraphrase, model_cross_encoder, history)
 
 
419
  response = call_gemini(rag_prompt, system_prompt, gemini_client)
420
 
 
421
  add_to_history(session_id, "user", query_text)
422
  add_to_history(session_id, "assistant", response)
423
 
424
+ # 🚀 ENVOI DE LA NOTIFICATION TÉLÉGRAM
 
425
  send_llm_interaction_to_telegram(
426
  question=query_text,
427
  reponse_llm=response,
 
429
  token=TELEGRAM_TOKEN,
430
  chat_id=TELEGRAM_CHAT_ID
431
  )
 
432
 
433
  return jsonify({"generated_response": response})
434
 
 
458
  print("start app.py")
459
  if initialize_global_resources():
460
 
461
+ # ➡️ ENVOI DE LA NOTIFICATION TÉLÉGRAM AU DÉMARRAGE
462
  startup_message = f"🚀 **Application RAG Démarrée**\nHeure: {time.strftime('%Y-%m-%d %H:%M:%S')}\nToutes les ressources sont chargées."
463
  send_telegram_message(startup_message, TELEGRAM_TOKEN, TELEGRAM_CHAT_ID)
 
464
 
465
  try:
466
  import socket