Re-freeze phase 3 for the slow mandatory candidate: hard per-model timeout, no client retries, declared unit subset

This commit is contained in:
Claude (backend session) 2026-08-08 22:26:30 +03:00
parent 784e412c24
commit ef797101c1

View file

@ -52,9 +52,22 @@ MANDATORY = "gemini-3.1-pro-preview" # обязательный канди
MAX_EDITORS = 5
# ⚠ ПЕР-МОДЕЛЬНЫЙ ТАЙМАУТ И ЗАПРЕТ SDK-РЕТРАЕВ. Поймано исполнением: `gemini-3.1-pro-preview`
# держал ОДИН вызов 70.8 минуты без ошибки — таймаут 900 с умножался на внутренние ретраи
# клиента, и клетка не закрывалась вовсе (за то же время он отдал 1 клетку из 16). Это тот же
# класс, что его серия HTTP 503 на скрине: модель в этой роли на проводе не работоспособна.
# Здесь она получает жёсткую границу, чтобы отказ БЫЛ ИЗМЕРЕН, а не съел прогон.
SLOW = {"gemini-3.1-pro-preview": 300}
# ⚠ ПОДМНОЖЕСТВО ЕДИНИЦ ДЛЯ МЕДЛЕННОЙ МОДЕЛИ, объявлено ДО покупки: первые 8 по стабильному
# порядку `units_zh`. Основание — замер, а не удобство: при наблюдённой скорости 16 клеток
# недостижимы, а 8 дают парную статистику с честно объявленной мощностью.
SLOW_UNITS = 8
def client(model: str) -> OpenAI:
base, env, *_ = CANDIDATES[model]
return OpenAI(api_key=os.environ[env], base_url=base, timeout=900)
return OpenAI(api_key=os.environ[env], base_url=base,
timeout=SLOW.get(model, 900), max_retries=0)
RESERVE = "glm-5" # ратифицированный резерв D39.22 = арм B эксп-21
@ -159,7 +172,8 @@ def cmd_run(argv: list[str] | None = None) -> None:
if m == BATTLE:
print(f" {m}: клетка куплена в Ф2 (tp2-edit) — не перекупается")
continue
for u in M.units_zh():
us = M.units_zh()[:SLOW_UNITS] if m in SLOW else M.units_zh()
for u in us:
if not base_text(u["uid"]):
print(f"{u['uid'][:6]}: якорной базы нет — клетка пропущена")
continue