Spaces:
Runtime error
Runtime error
Update model_handler.py
Browse files- model_handler.py +71 -2
model_handler.py
CHANGED
|
@@ -1,9 +1,8 @@
|
|
| 1 |
-
# model_handler.py
|
| 2 |
import sys
|
| 3 |
from google import genai
|
| 4 |
from google.genai.errors import APIError
|
| 5 |
from google.genai.types import Part
|
| 6 |
-
# Importez os pour lire la variable d'environnement directement ici
|
| 7 |
import os
|
| 8 |
from config import GEMINI_MODEL_NAME, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE, SYSTEM_PROMPT
|
| 9 |
|
|
@@ -12,6 +11,76 @@ from config import GEMINI_MODEL_NAME, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE, S
|
|
| 12 |
client = None
|
| 13 |
MODEL_LOADED_SUCCESSFULLY = False
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
def get_model_instance():
|
| 16 |
"""Initialise ou retourne l'instance du client Gemini."""
|
| 17 |
global client, MODEL_LOADED_SUCCESSFULLY
|
|
|
|
| 1 |
+
# model_handler.py (Version Corrigée et Améliorée)
|
| 2 |
import sys
|
| 3 |
from google import genai
|
| 4 |
from google.genai.errors import APIError
|
| 5 |
from google.genai.types import Part
|
|
|
|
| 6 |
import os
|
| 7 |
from config import GEMINI_MODEL_NAME, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE, SYSTEM_PROMPT
|
| 8 |
|
|
|
|
| 11 |
client = None
|
| 12 |
MODEL_LOADED_SUCCESSFULLY = False
|
| 13 |
|
| 14 |
+
def run_api_self_test(client_instance):
|
| 15 |
+
"""Effectue un test simple pour vérifier si l'API fonctionne."""
|
| 16 |
+
try:
|
| 17 |
+
print("INFO: Exécution du test de connexion à l'API Gemini...", file=sys.stderr)
|
| 18 |
+
|
| 19 |
+
# Test simple de contenu
|
| 20 |
+
test_content = [
|
| 21 |
+
{"role": "user", "parts": [Part.from_text("Dis bonjour")]}
|
| 22 |
+
]
|
| 23 |
+
|
| 24 |
+
response = client_instance.models.generate_content(
|
| 25 |
+
model=GEMINI_MODEL_NAME,
|
| 26 |
+
contents=test_content,
|
| 27 |
+
config=genai.types.GenerateContentConfig(max_output_tokens=10) # Limiter la réponse
|
| 28 |
+
)
|
| 29 |
+
|
| 30 |
+
if response.text and response.text.strip():
|
| 31 |
+
print("INFO: ✅ Test de connexion API réussi. Le modèle répond.", file=sys.stderr)
|
| 32 |
+
print(f"INFO: Réponse du test (début): {response.text[:30]}...", file=sys.stderr)
|
| 33 |
+
return True
|
| 34 |
+
else:
|
| 35 |
+
print("ALERTE: ❌ Test de connexion API échoué. Réponse vide.", file=sys.stderr)
|
| 36 |
+
return False
|
| 37 |
+
|
| 38 |
+
except APIError as e:
|
| 39 |
+
print(f"ALERTE: ❌ Test de connexion API échoué (APIError). Vérifiez la validité de la clé: {e.message}", file=sys.stderr)
|
| 40 |
+
return False
|
| 41 |
+
except Exception as e:
|
| 42 |
+
print(f"ALERTE: ❌ Test de connexion API échoué (Erreur Générale): {e}", file=sys.stderr)
|
| 43 |
+
return False
|
| 44 |
+
|
| 45 |
+
def get_model_instance():
|
| 46 |
+
"""Initialise ou retourne l'instance du client Gemini."""
|
| 47 |
+
global client, MODEL_LOADED_SUCCESSFULLY
|
| 48 |
+
|
| 49 |
+
if client is None:
|
| 50 |
+
|
| 51 |
+
print("INFO: Tentative d'initialisation du client Gemini...", file=sys.stderr)
|
| 52 |
+
api_key = os.environ.get("GEMINI_API_KEY")
|
| 53 |
+
|
| 54 |
+
if not api_key:
|
| 55 |
+
print("ALERTE: ❌ Variable d'environnement 'GEMINI_API_KEY' non trouvée/vide.", file=sys.stderr)
|
| 56 |
+
MODEL_LOADED_SUCCESSFULLY = False
|
| 57 |
+
# Retourne pour s'assurer que 'client' reste None
|
| 58 |
+
return
|
| 59 |
+
|
| 60 |
+
print("INFO: Clé API 'GEMINI_API_KEY' trouvée dans les variables d'environnement.", file=sys.stderr)
|
| 61 |
+
|
| 62 |
+
try:
|
| 63 |
+
# 1. Initialisation du client
|
| 64 |
+
client = genai.Client(api_key=api_key)
|
| 65 |
+
print("INFO: Client Gemini initialisé. Tentative de self-test...", file=sys.stderr)
|
| 66 |
+
|
| 67 |
+
# 2. Exécution du Self-Test
|
| 68 |
+
if run_api_self_test(client):
|
| 69 |
+
MODEL_LOADED_SUCCESSFULLY = True
|
| 70 |
+
print(f"INFO: Configuration API réussie. Modèle LLM prêt. Utilisant {GEMINI_MODEL_NAME}.", file=sys.stderr)
|
| 71 |
+
else:
|
| 72 |
+
# Le self-test a échoué (clé invalide ou autre problème API)
|
| 73 |
+
client = None # Forcer la réinitialisation si nécessaire
|
| 74 |
+
MODEL_LOADED_SUCCESSFULLY = False
|
| 75 |
+
print("ALERTE: ❌ Client Gemini non initialisé. Le self-test a échoué.", file=sys.stderr)
|
| 76 |
+
|
| 77 |
+
except Exception as e:
|
| 78 |
+
# Ceci attrape les erreurs qui ne sont pas des APIError (ex: problème de librairie, etc.)
|
| 79 |
+
print(f"ALERTE: ❌ Échec critique de l'initialisation du client Gemini: {e}", file=sys.stderr)
|
| 80 |
+
client = None
|
| 81 |
+
MODEL_LOADED_SUCCESSFULLY = False
|
| 82 |
+
|
| 83 |
+
|
| 84 |
def get_model_instance():
|
| 85 |
"""Initialise ou retourne l'instance du client Gemini."""
|
| 86 |
global client, MODEL_LOADED_SUCCESSFULLY
|