textmachine/docs/STACK.md

33 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Стек моделей — карта «роль → модель → конфиг → квирки»
> **Топикальный вход, НЕ источник истины.** ⚠ Носители конфига здесь адресуются КЛЮЧОМ модели, а не номером строки (норма формы указателей — D39.179 п.4). При конфликте побеждают D-лог (`architecture/05-decisions-log.md`) и shipping-конфиги `backend/configs/`. Слаги менять ТОЛЬКО с live-фактчеком `/models` + пробный вызов (правило двух направлений, quirks-шапка); ⚠ «слаг живой» ≠ «модель та же» — DeepSeek 31.07 сменил веса flash под слагом (D39.61, quirks §0731). Квирки: `docs/experiments/00-provider-quirks.md` (далее quirks).
| Роль | Модель (слаг) | thinking / effort | Носитель конфига | Статус | Квирки |
|---|---|---|---|---|---|
| **draft** (translator) | `deepseek-v4-flash` | thinking ON, `reasoning:"low"` явно (D39.87/91 «вариант б») | `configs/pipeline-c1.yaml`, стадия `draft` | боевой ИНТЕРИМ (exp13; бейк-офф эксп-22 заленден 10.08 — черновик менять не на что, но выводы заморожены до фазы Д, НЕ ратифицированы) | quirks §0731 п.1 (дефолт-эффорт пробивает флор 8000), п.3а (не слать эффорт = ехать на `high`), п.4 (`low` пере-вооружает эхо), п.6 (эхо стохастично по вызову; ре-ген дешевле эскалации ×7.6). Thinking-OFF — НИКОГДА (эхо-мина, `echoMineViolation`) |
| **+ банкнота** (WHAT-канал драфта) | та же flash, промпт `translator-banknote.md` | как draft | `configs/pipeline-c1.yaml`, блок `gates.banknote`**ВКЛЮЧЕНА в shipping с `b8154cd`** (`enabled: true` + `prompt_override` на банкнотный промпт стадии draft: гейт лишь СРЕЗАЕТ блок, инструкцию его писать несёт промпт) | ⚠0731; включение в c1 ОТРАБОТАЛО — контур ВКЛЮЧЁН с `b8154cd` (строка 140 закрыта и снята; двигало RequestHash, потому и было стоп-решением владельца) | те же |
| **терминолог** | `deepseek-v4-flash` | thinking ON, `gates.terminology.reasoning:"low"` (одна ручка на обе бэнк-роли) | `configs/pipeline-c1.yaml`, блок `gates.terminology`**ВКЛЮЧЁН в shipping с `b8154cd`** (`enabled: true`, `budget_usd: 1.00`); схема — `internal/config/pipeline.go`, греп `type TerminologyGate struct` | боевой по факту прогонов; носитель — конфиг книги | quirks §0731 п.3а: пустой `reasoning` = вендор-`high` → 4/5 `length` с пустым телом; экран `target_script: Cyrillic` обязателен при гейте ON |
| **классификатор** (типы кандидатов) | flash (`classify_model` пуст ⇒ = model) | та же ручка | там же: `classify_types: true` + `classify_budget_usd: 1.00` | **ВКЛЮЧЁН в shipping с `b8154cd`** (прежде — только проба/полигон) | латентный мис-вердикт `cjk_artifact``13-tech-debt-anchors.md` §Б-105 |
| **editor** | `deepseek-v4-pro` **БИЛИНГВ** | thinking ON; `reasoning:"off"` = осознанный NO-OP (ReasoningNone); ⚠ **ручка эффорта у `pro` ЕСТЬ — прежний клейм «ручки НЕТ (`low`→`high`)» СНЯТ 04.09 сверкой с квирк-каноном.** Канон пере-снят полигоном 30.08 живым `curl` (§3а: «ТАБЛИЦА У ВЕНДОРА ИЗМЕНИЛАСЬ, И ЗАПИСЬ НИЖЕ БОЛЬШЕ НЕ ВЕРНА»), а поведенческая проба того же дня (§3г, $0.038276) показала: **параметр `low` на `pro` ТЕПЕРЬ ДОХОДИТ ДО МОДЕЛИ** (79 prompt_tokens). ⚠ **Фиксируем ровно «ручка доходит», НЕ «ручка работает»:** ВЕЛИЧИНА эффекта не установлена (§3д: разброс ×38, причина не установлена), и это живой остаток строки 172(г). ⚠ **ИСПР. 05.09: НОСИТЕЛИ БОЛЬШЕ НЕ ПРОТИВОРЕЧАТ.** Прежняя редакция говорила «`PROGRESS.md` утверждает обратное» — не утверждает: и строка **237**(б), и квирки §3г, и этот файл говорят ОДНО — ручка ДОХОДИТ до модели с вендор-апдейта 13.08. Спор был фантомным и заставлял читателя искать сторону там, где сторон нет. Живой остаток другой и он один: **вендор-сверка САМОГО МАППИНГА (`low`→что именно) и ВЕЛИЧИНА эффекта** — поведенческого замера после 13.08 нет ни у кого. ⚠ **D39.137 про эффорт МОЛЧИТ** (11 строк, ноль упоминаний) — ссылаться на неё как на «ручка появилась 13.08» уже пробовали (испр. №18 20.08): конфабуляция по смежности, `V4-Pro-0813` — чекпойнт ВЕСОВ при вендорском «Model names remain unchanged», а не дата появления ручки. **Закрывается вендор-сверкой, а не выбором стороны**; до неё в силе КАНОН | `configs/pipeline-c1.yaml` блок редактора; floor 16000 — `models.yaml` ключ `deepseek-v4-pro`, поле `min_max_tokens` | боевой ИНТЕРИМ (D30.1/D39.22); D39.117: топология 2-прохода ПОДТВЕРЖДЕНА (`A/F3` +2.50 Holm 0.0004), жильцы dspro/glm-5 неразличимы ⇒ выбор = цена; закон-блок ОБЯЗАТЕЛЕН и ВНЕСЁН (D39.104 п.2, вайр-батч; строка 134 закрыта и снята) | quirks §0731 п.3а (маппинг pro), п.3б (замер `low` на pro ОТОЗВАННЕ УСТАНОВЛЕНО); вахта смены маппинга «early August 2026» — §Б-108 |
| **editor-резерв** | `glm-5` | thinking OFF ЯВНО (`extra_body {thinking:{type:disabled}}`, иначе таймауты ×3) | `configs/pipeline-arm-glm.yaml` блок редактора + `models.yaml` ключ `glm-5` | резерв; флип = один арм-конфиг. mistral-арм есть, но mistral ИСКЛЮЧЁН как редактор (D39.20) | quirks thinking-таблица (glm-5); эхо-экспозиция билингва при thinking-OFF НЕ измерена (`sourceEchoExposure`) |
| **судья Ф2** | Gemini (нативный адаптер — Ф2, строка 33); в C2-скелете провизорно `glm-5` | Gemini: thinking mandatory | `models.yaml` ключ `gemini-3.1-pro-preview`; `pipeline-c2.yaml` блок `select` («DO NOT FLIP») | Ф2/полигон — в движке НЕ построен; C2 неисполняем | quirks: `thinking_budget:0` → HTTP 400; учёт `additive_total`; судья ЭРОТИКИ непригоден (PROHIBITED_CONTENT неконфигурируем, D22.6) → первичный судья 18+ = grok |
| **канал B (18+)** | `mistral-large-2512` (переводчик-дефолт, D19.1) + `grok-4.3` (эскалация reasoning-ON + судья 18+) | mistral: не-reasoning; grok: OFF только явным `reasoning_effort:"none"` | `models.yaml` ключи `mistral-large-2512` (accepts_labels, rate_limit) и `grok-4.3` · c1 `chains.adult:[grok-4.3]` | данные заведены; полный wiring — Ф2; `content_policy` пуст во всех shipping (сознательно) | quirks §Транспорт: mistral rate-limiter (~48% retry-fails → `max_concurrency:2`); grok: вложенная форма эффорта молча глотается; additive-биллинг (think-ON только за резервом D6.2) |
| **эскалация (канал A)** | draft single-hop → `deepseek-v4-pro`; цепочка `[deepseek-v4-pro, glm-5.1, gemini-3.1-pro-preview]` | наследует политику мишени; апекс mandatory-thinking | `configs/pipeline-c1.yaml`, блок `escalation` | заведена, но ⚠ `budget_usd: 0` в shipping ⇒ НЕ исполняется (ран-локальные: 0.10 / 0.015) | слаг ИМЕННО `-preview` (без него 404); C2-цепочка `[kimi-k2.6]` = интерим-заглушка, НЕ контракт |
| **арбитр** | Sol (ChatGPT, внешний контур, руки владельца) · grok-агентские роли полигона | — | строка 150 бэклога + `eval/tenant_panel/sol.py`; кредиты xAI — на владельце (носителя в CURRENT-STATE сегодня НЕТ) | пакет (а) прогнан 09.08 — арбитраж НЕ состоялся (N=3 недомощен, шкала дрейфует ×2.6); пакет (б) заморожен до починки оснастки; возражение Sol по `tier` эксп-23 — на владельце | Sol = LLM: «издательское качество» им не доказывается, человеческий контур — пилот Ф2.5 (D39.117 п.5б) |
## Примечания
- **⚠0731 (D39.61):** развилка решена вариантом (б) — явный `reasoning_effort:"low"` черновику + ручка эффорта бэнк-ролям (код `553f1a3`).
-**РАЗВЁРТЫВАНИЕ КОНТУРА: `mining.contrast_path` — единственный вход, и в git его НЕТ.** Артефакт
крупный, генерируется из jieba (рецепт и SHA — `experiments/16-bank-mining.md`); без него стоп
майнинга возвращается рано и терминолог с классификатором не исполняются ВООБЩЕ, чем бы ни были
заполнены их гейты. ⚠ **ДВЕ РАЗНЫЕ ОШИБКИ РАЗВЁРТЫВАНИЯ, И ГРОМКАЯ — НЕ ТА, О КОТОРОЙ ДУМАЕШЬ** (замер 05.09, `D39.201` п.4;
прежняя редакция этой строки утверждала обратное). Отсутствие КЛЮЧА валит ЗАГРУЗКУ конфига громко на
ВСЕХ путях, включая $0-читающие (`backend/internal/config/pipeline.go`, греп `` `mining.contrast_path` is not set ``):
`exit 10`, манифеста нет вовсе. Отсутствие ФАЙЛА ловит только ПИШУЩИЙ путь — `CheckMiningContrast`
намеренно вне `LoadPipeline` и `CheckRunnable`, зовётся из `backend/internal/pipeline/runner.go`
(греп `CheckMiningContrast`), поэтому `manifest`/`status` на хосте без артефакта молча дают `exit 0`. Носитель — строка бэклога 251.
⚠ И перекос слоя, вскрытый включением: корпус контраста — факт ИСХОДНОГО языка, а лежит в
пар-агностичном конфиге пайплайна. Пара, которой в репо нет, потребует своего корпуса и своего ключа.
- **Вахта эффорта pro:** реестр загейченных триггеров — `architecture/13-tech-debt-anchors.md` §Б-108 (статус ручки — в строке редактора выше).
- **Цена:** ~$0.85/ранобэ (D30.4; тело — `archive/architecture/05-decisions-D1-D38.md`, карта — шапка D-лога) — ⚠ число ДО пере-пина цен 1315.08: таблица запинена ПИКОМ, счёт шиппинга = 100% DeepSeek ⇒ ×4.24.4 в пике и ×2.12.2 в долине (D39.137). ⚠ **Пере-калибровки НЕТ:** первый платный прогон редакторской волной отработал 31.08 (D39.184; числа — `archive/reports/COLDRUN_V16_REPORT_2026-08-31.md`), пересчёта книги из него никто не сделал — фактура и статус довода «редактор не гонялся» в `PROGRESS.md` строка 16. Ставка платформы $0.03/глава (D39.123 п.2г). Цены слагов — `models.yaml` (**`2026-08-15`**: `backend/configs/models.yaml:34`=`prices_checked: "2026-08-15"`; ⚠ бампнут факт-чеком ТОЛЬКО по DeepSeek; катовер 0731 цен не менял).
- **Ключи API:** какой ключ нужен провайдеру — поле `api_key_env` в `models.yaml`, один носитель на факт. **`.env` НЕ читать** (гардрейл CLAUDE.md), `.env.example` можно. Ключи деплоя доезжают до движка аргументом `--keys-file` (движковая половина — D39.158, платформенная — пак P9); в окружение юнита ключи НЕ кладутся, и каталог пользовательского контента их больше не несёт. Строка бэклога **211** ЗАКРЫТА — история дефекта и его разбор в D39.156/D39.162.