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,36 +204,50 @@ class AILegalEngine:
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))]
try:
reply_text = await self._query_rest_api(
prompt=prompt,
system_instruction=system_instruction,
model=model_to_use,
audio_path=audio_path
)
last_err = None
for model_to_use in models_cascade:
try:
reply_text = await self._query_rest_api(
prompt=prompt,
system_instruction=system_instruction,
model=model_to_use,
audio_path=audio_path
)
latency = (datetime.now() - start_time).total_seconds()
latency = (datetime.now() - start_time).total_seconds()
return {
"success": True,
"text": reply_text.strip(),
"answer": reply_text.strip(),
"role": role,
"latency_sec": round(latency, 2),
"model": model_to_use
}
return {
"success": True,
"text": reply_text.strip(),
"answer": reply_text.strip(),
"role": role,
"latency_sec": round(latency, 2),
"model": model_to_use
}
except Exception as e:
latency = (datetime.now() - start_time).total_seconds()
log.error(f"Gemini Error: {e}")
return {
"success": False,
"text": f"Ошибка обработки запроса ИИ: {e}",
"role": role,
"latency_sec": round(latency, 2)
}
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()
log.error(f"All Gemini fallback models failed: {last_err}")
return {
"success": False,
"text": f"Шлюз ИИ временно перегружен. Пожалуйста, повторите вопрос через несколько секунд.",
"role": role,
"latency_sec": round(latency, 2)
}
# Глобальный синглтон юридического ядра для роутеров бота
legal_engine = AILegalEngine()