fix(legal): add model cascade fallback on 503/429 high demand spikes

This commit is contained in:
Admin 2026-10-13 14:55:13 +04:00
parent 2924765624
commit 5c437b78b0

View file

@ -204,8 +204,18 @@ class AILegalEngine:
f"{self.get_role_instructions(role)}" f"{self.get_role_instructions(role)}"
) )
model_to_use = self.model_name # Каскад моделей при перегрузке или временной недоступности (503/429)
models_to_try = [
self.model_name,
"gemini-flash-latest",
"gemini-3-flash-preview"
]
# Убираем дубликаты с сохранением порядка
seen = set()
models_cascade = [m for m in models_to_try if not (m in seen or seen.add(m))]
last_err = None
for model_to_use in models_cascade:
try: try:
reply_text = await self._query_rest_api( reply_text = await self._query_rest_api(
prompt=prompt, prompt=prompt,
@ -226,11 +236,15 @@ class AILegalEngine:
} }
except Exception as e: except Exception as e:
last_err = e
log.warning(f"Model {model_to_use} failed ({e}), trying next fallback...")
await asyncio.sleep(0.5)
latency = (datetime.now() - start_time).total_seconds() latency = (datetime.now() - start_time).total_seconds()
log.error(f"Gemini Error: {e}") log.error(f"All Gemini fallback models failed: {last_err}")
return { return {
"success": False, "success": False,
"text": f"Ошибка обработки запроса ИИ: {e}", "text": f"Шлюз ИИ временно перегружен. Пожалуйста, повторите вопрос через несколько секунд.",
"role": role, "role": role,
"latency_sec": round(latency, 2) "latency_sec": round(latency, 2)
} }