expAge commited on
Commit
82f7fac
·
1 Parent(s): 2c3fd2e

fix(2.5): pool pick pour TOUS les Gemini (pas seulement NATIVE_REQUIRED)

Browse files

La diag a confirmé : pour 2.5 (qui passe par _build_openai_compat),
override_token=None → fallback sur env GOOGLE_API_KEY qui contient
le CSV brut des 4 clés (159 chars) → Gemini renvoie INVALID_KEY
(évidemment).

Cause : le pick_unblown_gemini_key était limité à GEMINI_NATIVE_REQUIRED
(= {3.1, 3.5}). Pour 2.5, on n'allait jamais chercher dans le pool et
on tombait sur l'env brut.

Fix : changer la condition pour `model in GEMINI_MODELS` (= TOUS les
Gemini natifs, incluant 2.5). Pareil dans chat_with_agent et
run_jarvis_flow. Le fallback final (pool vide) parse le CSV via
_parse_google_keys()[0] au lieu de retomber sur l'env brut.

Files changed (2) hide show
  1. app.py +7 -4
  2. jarvis.py +12 -11
app.py CHANGED
@@ -1028,12 +1028,15 @@ def chat_with_agent(message: str, history: list[dict], api_key: str, model: str,
1028
  # peut être utilisée même hors pool) et on la track quand même —
1029
  # mark_blown ultérieur fonctionne et le dropdown reflète l'état.
1030
  current_gemini_key: Optional[str] = None
1031
- if model in GEMINI_NATIVE_REQUIRED:
 
 
 
1032
  current_gemini_key = pick_unblown_gemini_key(model)
1033
  if not current_gemini_key:
1034
- env_key = os.environ.get("GOOGLE_API_KEY", "").strip()
1035
- if env_key:
1036
- current_gemini_key = env_key
1037
  set_current_gemini_key(current_gemini_key)
1038
  # Annonce le modèle actif → préfixe ✅ devant lui dans le dropdown.
1039
  set_current_model(model)
 
1028
  # peut être utilisée même hors pool) et on la track quand même —
1029
  # mark_blown ultérieur fonctionne et le dropdown reflète l'état.
1030
  current_gemini_key: Optional[str] = None
1031
+ if model in GEMINI_MODELS:
1032
+ # Pick pour TOUS les Gemini (3.1, 3.5, 2.5) — pas seulement
1033
+ # NATIVE_REQUIRED. Sinon 2.5 (OpenAI-compat) tombe sur l'env
1034
+ # GOOGLE_API_KEY brut = CSV du pool non parsé = INVALID_KEY.
1035
  current_gemini_key = pick_unblown_gemini_key(model)
1036
  if not current_gemini_key:
1037
+ keys = _parse_google_keys()
1038
+ if keys:
1039
+ current_gemini_key = keys[0]
1040
  set_current_gemini_key(current_gemini_key)
1041
  # Annonce le modèle actif → préfixe ✅ devant lui dans le dropdown.
1042
  set_current_model(model)
jarvis.py CHANGED
@@ -1111,22 +1111,23 @@ def run_jarvis_flow(
1111
  _app = _get_app_module()
1112
  if _app is None:
1113
  raise RuntimeError("app module unavailable")
1114
- GEMINI_NATIVE_REQUIRED = _app.GEMINI_NATIVE_REQUIRED
1115
  pick_unblown_gemini_key = _app.pick_unblown_gemini_key
1116
  _set_current_key = _app.set_current_gemini_key
1117
  _set_current_model = _app.set_current_model
1118
- if model in GEMINI_NATIVE_REQUIRED:
 
 
 
 
 
1119
  current_gemini_key = pick_unblown_gemini_key(model)
1120
- # Fallback : si toutes les clés du pool sont blown/
1121
- # invalides pour ce modèle, on retombe sur la
1122
- # variable d'env singulière GOOGLE_API_KEY (qui
1123
- # peut être utilisée même hors pool). On la track
1124
- # quand même comme current_gemini_key → mark_blown
1125
- # ultérieur fonctionne et le dropdown reflète l'état.
1126
  if not current_gemini_key:
1127
- env_key = os.environ.get("GOOGLE_API_KEY", "").strip()
1128
- if env_key:
1129
- current_gemini_key = env_key
1130
  _set_current_key(current_gemini_key)
1131
  # Annonce le modèle actif → préfixe ✅ dans le dropdown.
1132
  _set_current_model(model)
 
1111
  _app = _get_app_module()
1112
  if _app is None:
1113
  raise RuntimeError("app module unavailable")
1114
+ GEMINI_MODELS = _app.GEMINI_MODELS
1115
  pick_unblown_gemini_key = _app.pick_unblown_gemini_key
1116
  _set_current_key = _app.set_current_gemini_key
1117
  _set_current_model = _app.set_current_model
1118
+ # Pick pour TOUS les Gemini (3.1, 3.5, 2.5…), pas seulement
1119
+ # NATIVE_REQUIRED. Sinon 2.5 (qui passe par l'endpoint
1120
+ # OpenAI-compat) ne reçoit pas la clé du pool et tombe
1121
+ # sur l'env GOOGLE_API_KEY brut = CSV des 4 clés non
1122
+ # parsé = INVALID_KEY garanti.
1123
+ if model in GEMINI_MODELS:
1124
  current_gemini_key = pick_unblown_gemini_key(model)
1125
+ # Fallback : pool vide env GOOGLE_API_KEY (mais
1126
+ # _parse_google_keys 1ère du CSV, pas CSV brut).
 
 
 
 
1127
  if not current_gemini_key:
1128
+ keys = _app._parse_google_keys()
1129
+ if keys:
1130
+ current_gemini_key = keys[0]
1131
  _set_current_key(current_gemini_key)
1132
  # Annonce le modèle actif → préfixe ✅ dans le dropdown.
1133
  _set_current_model(model)