Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -7,6 +7,7 @@ from typing import List, Dict
|
|
| 7 |
from flask import Flask, request, jsonify
|
| 8 |
from flask_cors import CORS
|
| 9 |
from datetime import datetime
|
|
|
|
| 10 |
|
| 11 |
# ======================================================================
|
| 12 |
# CONFIGURATION
|
|
@@ -41,6 +42,10 @@ MAX_CONVERSATION_HISTORY = 10
|
|
| 41 |
API_HOST = '0.0.0.0'
|
| 42 |
API_PORT = 1212 # Le port 1212 est conservé, il doit être configuré dans le README.md
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
# ======================================================================
|
| 45 |
# VARIABLES GLOBALES
|
| 46 |
# ======================================================================
|
|
@@ -270,20 +275,34 @@ def clear_history(session_id):
|
|
| 270 |
conversation_histories[session_id] = []
|
| 271 |
|
| 272 |
# ======================================================================
|
| 273 |
-
# CALL GEMINI
|
| 274 |
# ======================================================================
|
| 275 |
|
| 276 |
def call_gemini(rag_prompt, system_prompt, gemini_client):
|
| 277 |
-
"""Appelle Google Gemini."""
|
| 278 |
-
|
| 279 |
-
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
|
| 283 |
-
|
| 284 |
-
|
| 285 |
-
|
| 286 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 287 |
|
| 288 |
# ======================================================================
|
| 289 |
# ANSWER PROCESS
|
|
@@ -369,7 +388,7 @@ def api_get_answer():
|
|
| 369 |
# Génère prompt RAG
|
| 370 |
rag_prompt = get_answer(query_text, collection, model_paraphrase, model_cross_encoder, history)
|
| 371 |
|
| 372 |
-
# Appelle Gemini
|
| 373 |
response = call_gemini(rag_prompt, system_prompt, gemini_client)
|
| 374 |
|
| 375 |
# Sauvegarde réponse
|
|
|
|
| 7 |
from flask import Flask, request, jsonify
|
| 8 |
from flask_cors import CORS
|
| 9 |
from datetime import datetime
|
| 10 |
+
import time
|
| 11 |
|
| 12 |
# ======================================================================
|
| 13 |
# CONFIGURATION
|
|
|
|
| 42 |
API_HOST = '0.0.0.0'
|
| 43 |
API_PORT = 1212 # Le port 1212 est conservé, il doit être configuré dans le README.md
|
| 44 |
|
| 45 |
+
# Configuration retry pour erreur 503
|
| 46 |
+
MAX_RETRIES = 10
|
| 47 |
+
RETRY_DELAY = 1 # secondes entre chaque tentative
|
| 48 |
+
|
| 49 |
# ======================================================================
|
| 50 |
# VARIABLES GLOBALES
|
| 51 |
# ======================================================================
|
|
|
|
| 275 |
conversation_histories[session_id] = []
|
| 276 |
|
| 277 |
# ======================================================================
|
| 278 |
+
# CALL GEMINI AVEC RETRY
|
| 279 |
# ======================================================================
|
| 280 |
|
| 281 |
def call_gemini(rag_prompt, system_prompt, gemini_client):
|
| 282 |
+
"""Appelle Google Gemini avec retry automatique en cas d'erreur 503."""
|
| 283 |
+
for attempt in range(MAX_RETRIES):
|
| 284 |
+
try:
|
| 285 |
+
response = gemini_client.models.generate_content(
|
| 286 |
+
model=GEMINI_MODEL,
|
| 287 |
+
contents=f"{system_prompt}\n\n{rag_prompt}"
|
| 288 |
+
)
|
| 289 |
+
return response.text.replace("*", "")
|
| 290 |
+
except Exception as e:
|
| 291 |
+
error_message = str(e)
|
| 292 |
+
# Vérifie si c'est une erreur 503
|
| 293 |
+
if "503" in error_message or "Service Unavailable" in error_message:
|
| 294 |
+
print(f"⚠️ Erreur 503 détectée (tentative {attempt + 1}/{MAX_RETRIES}). Nouvelle tentative dans {RETRY_DELAY}s...")
|
| 295 |
+
if attempt < MAX_RETRIES - 1: # Pas de sleep à la dernière tentative
|
| 296 |
+
time.sleep(RETRY_DELAY)
|
| 297 |
+
continue
|
| 298 |
+
else:
|
| 299 |
+
# Si ce n'est pas une erreur 503, on arrête et on retourne l'erreur
|
| 300 |
+
print(f"❌ Erreur Gemini (non-503): {e}")
|
| 301 |
+
return f"Erreur: {str(e)}"
|
| 302 |
+
|
| 303 |
+
# Si on arrive ici, c'est qu'on a épuisé toutes les tentatives
|
| 304 |
+
print(f"❌ Échec après {MAX_RETRIES} tentatives")
|
| 305 |
+
return "Erreur: Service temporairement indisponible après plusieurs tentatives"
|
| 306 |
|
| 307 |
# ======================================================================
|
| 308 |
# ANSWER PROCESS
|
|
|
|
| 388 |
# Génère prompt RAG
|
| 389 |
rag_prompt = get_answer(query_text, collection, model_paraphrase, model_cross_encoder, history)
|
| 390 |
|
| 391 |
+
# Appelle Gemini avec retry automatique
|
| 392 |
response = call_gemini(rag_prompt, system_prompt, gemini_client)
|
| 393 |
|
| 394 |
# Sauvegarde réponse
|