diff --git a/docs/experiments/23-editor-tier.md b/docs/experiments/23-editor-tier.md index 3dbd5565..2d93c8a3 100644 --- a/docs/experiments/23-editor-tier.md +++ b/docs/experiments/23-editor-tier.md @@ -3429,3 +3429,33 @@ RK grok-4.3 xAI 16 $0.4136 Английская глава впятеро короче; бюджет вывода 32000. Обрыв `finish=length` — объявляется числом. * Эхо-мина: гейт годности `C.draft_defect` стоит на каждой клетке; эхо на этих вендорах не мерено ни разу, и частота печатается как результат арма. + +### Д25.1 ⛔ ЭРРАТА, ОБЪЯВЛЕНА ПОСЛЕ 32 КУПЛЕННЫХ КЛЕТОК И ДО СУДЕЙСТВА: `RG` шёл БЕЗ РАЗМЫШЛЕНИЯ + +Проверка купленного (а не заявленного) вскрыла конфаунд, которого пре-рег Д25 не предусмотрел. + +``` +арм модель $/клетка размышление/клетка знаков/клетка +RN deepseek-v4-pro 0.0278 6 139 1 530 +RK grok-4.3 0.0068 737 1 567 +RG glm-5 0.0029 0 1 600 ← НОЛЬ +``` + +Ноль не аномалия провода и не молчание вендора: **ростер гасит размышление `glm-5` по умолчанию** +(`extra_body: {"thinking": {"type": "disabled"}}`, квирк-бюллетень :53, подтверждено живыми армами +эксп-18/21). Проверено чтением кода, а не догадкой. + +**Почему это ломает именно ЭТОТ замер.** Трейс 20.08 показал: `dspro` пишет 88–94% финального +текста ВНУТРИ размышления, то есть промт-роль опирается ровно на тот механизм, который у `glm-5` +выключен. Сравнение «промт на dspro с думанием» против «того же промта на glm-5 без думания» +мерило бы думание, а не переносимость промта — и вывод «промт не переносим» был бы артефактом +конфигурации. + +**Лечение — арм, а не правка.** Заведён `RGT`: тот же `glm-5` с ВЕНДОР-ДЕФОЛТНЫМ размышлением. +`RG` остаётся в панели: разность `RG`/`RGT` — цена размышления у этого вендора, замеренная попутно +и бесплатно, и это самостоятельный результат. + +⚠ **Что при этом уже видно и не зависит от эрраты.** Смета Д25 ($0.7007) завышена в 4.5 раза: +факт **$0.1546** за 32 клетки, все `finish=stop`, гейт годности не поднял ни одной. Оба чужих +вендора оказались кратно дешевле `dspro` в этой роли: `glm-5` в 9.6 раза, `grok-4.3` в 4.1 раза. +Риск «grok разгонит размышление ×163» НЕ реализовался: 737 токенов против 6 139 у `dspro`. diff --git a/eval/dovodka/rol.py b/eval/dovodka/rol.py index d8758159..4c5ffc52 100644 --- a/eval/dovodka/rol.py +++ b/eval/dovodka/rol.py @@ -119,7 +119,7 @@ PAIRS["zh"]["restore"] = None # модели не схлопнулись в один тег: кэш `purchase` смотрит на существование файла и вернул бы # первую клетку второй раз. ARMS = {"RN": ("deepseek-v4-pro", 1), "RN2": ("deepseek-v4-pro", 2), - "RG": ("glm-5", 1), "RK": ("grok-4.3", 1), + "RG": ("glm-5", 1), "RGT": ("glm-5", 1), "RK": ("grok-4.3", 1), "RA": ("deepseek-v4-pro", 1), # тот же промт, ВОССТАНОВЛЕННЫЕ абзацы исходника "RC": ("deepseek-v4-pro", 1), # промт МИНУС рамка оценки, см. CUT "RB": ("deepseek-v4-pro", 1)} # рамка оценки ПЕРЕВЁРНУТА: брак = чужой язык @@ -434,10 +434,26 @@ def chosen(p: str) -> list[dict]: return ZK.chosen(p) -def call_kwargs(model: str, msgs: list[dict]) -> dict: +# ⚠ РАЗМЫШЛЕНИЕ У `glm-5` РОСТЕР ГАСИТ ПО УМОЛЧАНИЮ (`extra_body:{thinking:{type:disabled}}`, +# квирк-бюллетень :53). Для этого замера это КОНФАУНД, а не деталь: трейс 20.08 показал, что +# `dspro` пишет 88–94% финального текста ВНУТРИ размышления, то есть промт-роль опирается ровно на +# тот механизм, который у `glm-5` выключен. Сравнивать «промт на dspro с думанием» с «тем же промтом +# на glm-5 без думания» значит мерить думание, а не переносимость промта. +# ⇒ арм `RGT` — тот же `glm-5` с ВЕНДОР-ДЕФОЛТНЫМ размышлением. `RG` остаётся: разность RG/RGT и +# есть цена размышления у этого вендора, замеренная попутно и бесплатно. +THINK_ON = ("RGT",) + + +def call_kwargs(model: str, msgs: list[dict], arm: str = "") -> dict: """Боевая конфигурация модели. Отступлений нет: у `grok-4.3` вендор-дефолт = размышление ON, а запрет D30.1 прямой — reasoning-off в редакторской роли даёт no-op-редактора.""" - return ROSTER.call_kwargs(model, msgs, max_out=MAX_OUT) + kw = ROSTER.call_kwargs(model, msgs, max_out=MAX_OUT) + if arm in THINK_ON and isinstance(kw.get("extra_body"), dict): + eb = {k: v for k, v in kw["extra_body"].items() if k != "thinking"} + kw["extra_body"] = eb if eb else None # пустой extra_body вендору не шлём + if kw["extra_body"] is None: + del kw["extra_body"] + return kw # ── ПОКУПКА ────────────────────────────────────────────────────────────────────────────────── @@ -469,7 +485,7 @@ def buy(p: str, which: list[str]) -> None: # часами, и пересёкший 16:00 UTC цикл писал бы вызовы по вчерашнему прайсу. ZK.price_gate(quiet=True) rec = MONEY.purchase(led, tg, model, ED22.client(model), - call_kwargs(model, rol_msgs(p, src_of(p, arm, u), arm)), + call_kwargs(model, rol_msgs(p, src_of(p, arm, u), arm), arm), role="onepass", uid=u["uid"], arm=arm, gen=gen, pair=p, podacha="абзацы" if arm in RESTORE_ARMS else "плоско") if rec.get("skipped"):