From 6a34d9b5d6c31f438807978b606f88f282ce08ad Mon Sep 17 00:00:00 2001 From: heaven Date: Fri, 14 Aug 2026 21:52:42 +0300 Subject: [PATCH] Record cash-desk errors and timestamps in the gemini attempt journal so the order verdict rests on a complete log --- eval/dovodka/d1_gemini.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/eval/dovodka/d1_gemini.py b/eval/dovodka/d1_gemini.py index e077c04a..556bae4c 100644 --- a/eval/dovodka/d1_gemini.py +++ b/eval/dovodka/d1_gemini.py @@ -74,7 +74,14 @@ def text_of(uid: str) -> str: def log_attempt(rec: dict) -> None: - """Журнал попытки — ДОПИСЫВАЕТСЯ немедленно. Вердикт без него заказ не принимает.""" + """Журнал попытки — ДОПИСЫВАЕТСЯ немедленно. Вердикт без него заказ не принимает. + + ⚠ ВРЕМЯ ОБЯЗАТЕЛЬНО. Первая редакция писала длительность вызова, но не МЕТКУ ВРЕМЕНИ, и + `--status` считал окно журнала как 0.0 ч на любом числе попыток. Заказ принимает вердикт + «модель не отдаёт» ТОЛЬКО по журналу за ≥24 ч — без метки времени доказать окно нечем, + то есть журнал не выполнял свою единственную задачу. + """ + rec.setdefault("ts", time.time()) JOURNAL.parent.mkdir(parents=True, exist_ok=True) with JOURNAL.open("a", encoding="utf-8") as f: f.write(json.dumps(rec, ensure_ascii=False) + "\n") @@ -130,6 +137,18 @@ def cmd_run() -> None: log_attempt(dict(uid=uid, attempt=i + 1, ok=False, code="GUARD", secs=round(time.time() - t0, 1), cost_usd=0.0)) raise SystemExit(f"⛔ ГАРД ОТКАЗАЛ на {tag(uid)} — СТОП и вопрос владельцу") + # ⚠ ОТКАЗ, ПОЙМАННЫЙ КАССОЙ, — ТОЖЕ ПОПЫТКА. `purchase` перехватывает ошибку API + # сама и пишет карантинную запись `finish="error"`, поэтому мой `except` не + # срабатывает и журнал показывал «отказов 0» при двух реально ошибившихся клетках. + # Вердикт заказа держится на журнале, значит журнал обязан видеть и этот путь. + if rec.get("finish") == "error" or not (rec.get("content") or "").strip(): + log_attempt(dict(uid=uid, attempt=i + 1, ok=False, + code=rec.get("finish") or "empty", + err=str(rec.get("error"))[:200], + secs=round(time.time() - t0, 1), + cost_usd=rec.get("cost_usd", 0.0))) + print(f" {uid}: попытка {i + 1} — касса вернула {rec.get('finish')}") + continue cost = rec.get("cost_usd", 0.0) log_attempt(dict(uid=uid, attempt=i + 1, ok=True, code=200, finish=rec.get("finish"), secs=round(time.time() - t0, 1),