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