diff --git a/docs/BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md b/docs/BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md index bb4527b7..9f08e18a 100644 --- a/docs/BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md +++ b/docs/BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md @@ -17,27 +17,50 @@ медицинская. **Не выключай его.** Первая редакция этого промта утверждала обратное, и сессия, исполнившая её буквально, отключила бы восстановление трёх чанков из четырёх. -**Настоящая находка — в том, что двойных оплат ДВЕ РАЗНЫХ, а движок применяет к ним одно лекарство.** -Пере-снято мною по базе прогона (`bk_ROEHZBD46ALFI43E/project.db`, стадии `draft`/`edit`, `tm_hit=0`): +⛔⛔ **РЕЛЕЙ 11.09, РЕДАКЦИЯ 3 — ЭХО СЕССИИ ОПРОВЕРГЛО РАСКЛАДКУ РЕДАКЦИИ 2, И Я СОГЛАСИЛСЯ. Читай ЭТО, а +таблицу ниже — через эту поправку.** -| единица | 1-я попытка | 2-я попытка | что это значит | -|---|---|---|---| -| `draft` ch1u0 | comp **8496** · `length` · пусто · $0.012044 | **15869** · `stop` ✓ | потолка не хватило | -| `draft` ch2u1 | comp **8496** · `length` · обрезок · $0.011637 | **13004** · `stop` ✓ | потолка не хватило | -| `draft` ch3u0 | comp **8496** · `length` · пусто · $0.011782 | **14034** · `stop` ✓ | потолка не хватило | -| `edit` ch2u0 | comp **16000** · `length` · пусто · **$0.071009** | **11717** · `stop` ✓ | потолка ХВАТАЛО | +Редакция 2 делила четыре двойные оплаты 3:1 — «трижды потолка не хватило, один раз съело размышление». +**Это неверно, и опровергается полем, которое движок пишет САМ.** Пере-снято мною по той же базе: -⭐ **Контроль, и он режет популяцию без единого исключения.** Успешных черновых вызовов в прогоне ШЕСТЬ, -их размеры: `6468 · 7932 · 8243 · 13004 · 14034 · 15869`. **Все три, что уложились в 8496, прошли с первого -раза. Все три, что не уложились, с первого раза упали и прошли на удвоенном потолке. 6 из 6, исключений -ноль.** ⇒ на черновике это НЕ болезнь размышления и не случайность: **первый потолок просто меньше того, -что эта стадия реально производит на половине единиц**, и удвоение делает работу, которую должна была -сделать оценка бюджета. +| id | стадия | comp 1-й | `finish` | `degraded` | цена | +|---|---|---|---|---|---| +| 1 | `draft` ch1u0 | 8496 | `length` | **`empty`** | $0.012044 | +| 5 | `draft` ch2u1 | 8496 | `length` | **`length`** | $0.011637 | +| 7 | `draft` ch3u0 | 8496 | `length` | **`empty`** | $0.011782 | +| 31 | `edit` ch2u0 | 16000 | `length` | **`empty`** | $0.071009 | -⛔ **А четвёртый случай — противоположный, и он стоит ДВУХ ТРЕТЕЙ всей потери в ОДНОМ вызове.** У `edit` -потолок 16000 был заведомо достаточен: вторая попытка уложилась в 11717. Значит первый вызов выкупил 16000 -токенов чего-то, что не было текстом. Это размышление — у DeepSeek оно считается ВНУТРИ выходных токенов -(`reasoning ⊆ completion`), и здесь удвоение потолка действительно даёт ему вдвое больше места. +⇒ **`empty` ×3 = $0.094835 = 89 % всей потери; `length` ×1 = $0.011637.** Раскладка ОБРАТНАЯ моей. +И порядок решения в коде это подтверждает: `disposition.go` проверяет пустоту ДО обрезания +(`if out == "" → FlagEmpty`, и только потом `finish == FinishLength → FlagLength`), то есть +`degraded='empty'` значит РОВНО НОЛЬ знаков — весь потолок ушёл до того, как начался текст. + +**Почему мой довод был неверен, дословно из эхо сессии:** у DeepSeek `reasoning ⊆ completion`, значит +`completion_tokens` ВТОРОЙ попытки тоже содержит размышление. ⇒ из «вторая дала 15869 > потолка 8496» НЕ +следует «потолка не хватило ТЕКСТУ»: 15869 — это текст ПЛЮС неизвестное размышление. + +⛔ **И мой «контроль 6 из 6 без исключений» — ТАВТОЛОГИЯ, а не улика.** «Кто уложился в потолок — прошёл, +кто не уложился — упал» верно ПО ПОСТРОЕНИЮ (`comp ≤ cap ⇒ stop`, иначе `length`). Он говорит, что потолок +бьётся с `comp`, и ничего — про то, чем `comp` занят. Из акта и заказа снят. + +⭐ **И вот что делает пак ИСПОЛНИМЫМ, а мою редакцию делало неисполнимой.** Мой дискриминатор +(«2-я больше/меньше потолка 1-й») **РЕТРОСПЕКТИВЕН**: он известен только после того, как вторая попытка +ОПЛАЧЕНА, и лекарство им выбрать нельзя. А различение, которое нужно, **уже есть в дереве и снимается ДО +ретрая**: `FlagEmpty` против `FlagLength`. ⇒ **слепо именно ЛЕКАРСТВО**, а не классификация: +`maxTokensForAttempt(base, escalations)` принимает счётчик удвоений и больше ничего. Это и есть «дать +существующему лекарству прочитать существующий класс», буквально. + +⛔ **ЧЕТВЁРТАЯ ПОПРАВКА: «шаг вниз по нейтральному словарю вырожден» — НЕВЕРНО, и снимается.** Словарь +упорядочен лексически (`"" · off · low · medium · high`), но ЭФФЕКТИВНЫЙ порядок размышления у +`ReasoningNone` другой: **`low < medium < high = off = ""`** — `off` не эмитит ничего и едет +вендор-дефолт `high`. ⇒ **`off` есть ВЕРХ шкалы, и шаг вниз с него на `low` существует**, а носитель +самого дорогого случая (`edit`, $0.071009 = две трети потери) стоит именно на `off`. Строй ступень +ПАРАМЕТРОМ; боевое значение по-прежнему не трогай (§4.2). + +⇒ **ЧИТАЙ ТАБЛИЦУ §4.1 ТАК:** строка «потолок мал» применима к ОДНОМУ случаю (`degraded='length'`, +обрезок с текстом), строка «размышление съело потолок» — к ТРЁМ, и класс берётся из `degraded`, а не из +сравнения потолков. Коллизия, которую я вводил поправкой (б) в §4.1, **исчезает вместе с моим +дискриминатором**: `degraded` относит каждую единицу ровно к одному классу. **Что решит твой результат.** Движок научится отличать «не хватило потолка» от «потолок съело размышление» и перестанет платить за первое по цене второго. Плюс причина станет ВИДНА: сегодня спросить «что