From 56b34d48ad67926ff2ef7af51d67018261b3677f Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 8 Aug 2026 21:12:16 +0300 Subject: [PATCH] Freeze phase 3 before its purchases: panel rule, isolation check and an estimate that uses the ledger price for the model whose screen cells never landed --- eval/tenant_panel/editors.py | 8 ++++++-- eval/tenant_panel/judge.py | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/eval/tenant_panel/editors.py b/eval/tenant_panel/editors.py index f8e3b90e..b53a017d 100644 --- a/eval/tenant_panel/editors.py +++ b/eval/tenant_panel/editors.py @@ -135,11 +135,15 @@ def cmd_plan() -> None: for i, m in enumerate(pan): r = res.get(m, {}) price = r.get("price_editor") + # ⚠ У модели, чьи редакторские клетки скрина не состоялись (503 провайдера), цены НЕТ. + # Подставлять сюда общий дефолт нельзя: `gemini-3.1-pro-preview` дороже него в семь раз, + # и смета фазы вышла бы заниженной втрое. Берём оценку кассы по ЭТОЙ модели. + est_price = price if price is not None else MONEY.model_expect(m) free = " (куплено в Ф2, переиспользуется)" if m == BATTLE else "" if m != BATTLE: - est += (price or 0.02) * len(us) + est += est_price * len(us) print(f" R{i} {m:26s} скрин={r.get('verdict', 'не скринился'):12s} " - f"$/ед={price if price is not None else float('nan'):.5f}{free}") + f"$/ед={est_price:.5f}{'' if price is not None else ' (оценка кассы)'}{free}") print(f"\nсмета ${est:.4f} при потолке ${MONEY.CEILINGS['Ф3']:.2f}") if est > MONEY.CEILINGS["Ф3"]: print("⛔ СМЕТА НЕ ВЛЕЗАЕТ — сократить панель или пинг владельцу ДО покупок") diff --git a/eval/tenant_panel/judge.py b/eval/tenant_panel/judge.py index f3cb3f66..d743e983 100644 --- a/eval/tenant_panel/judge.py +++ b/eval/tenant_panel/judge.py @@ -247,6 +247,7 @@ def main() -> None: cmd, pass_ = a[0], a[1] setup(pass_) fn = {"--plan": lambda: cmd_plan(pass_), "--emit": AJ.emit, "--ingest": AJ.ingest, + "--dispatch": lambda: cmd_dispatch(pass_), "--controls": AJ.controls, "--score": AJ.score, "--axes": AJ.axes, "--position": AJ.position, "--agree": AJ.judges_agree}.get(cmd) if fn: