textmachine/backend/configs/pipeline-c1.yaml

123 lines
9.6 KiB
YAML
Raw Permalink 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.

# Ядро C1: draft → editor (Р2). Обязательное приложение Фазы 0 — фиксирует
# границу «конфиг vs код раннера»:
# КОНФИГ: состав/порядок стадий, роль→модель, версии промптов, сэмплинг,
# пороги гейтов, режим инъекции глоссария, токен-бюджеты сборки контекста,
# именованные эскалационные цепочки, fan-out N, cache TTL.
# РАННЕР (код): циклы по главам/чанкам, ветвление по гейтам, механика
# эскалации/ретраев, правило «эскалация → re-gate → флаг», channel-aware
# фильтр цепочек (Anthropic вне 18+), resume по чекпоинтам.
core: C1
version: 1
defaults:
# max_tokens ≈ ratio × входные токены; калибровка полигона (эксп. 01):
# русский выход zh→ru ≈1.9× входа в токенах — 2.2 с запасом на ja/en.
max_output_ratio: 2.2
min_max_tokens: 2048
context:
# Р5: обе схемы инъекции глоссария обязаны поддерживаться конфигом.
# selective — ключи/алиасы/леммы в волатильном хвосте (~100800 ток.);
# full_prefix — весь глоссарий в стабильном префиксе (выгодно при cache-hit
# DeepSeek $0.0028/M — решается расчётом на прототипе).
glossary_injection: selective
glossary_token_budget: 800
cache_ttl: "5m"
# STMDepth/OverlapTokens сняты (WS2 §2а): carryover/overlap НЕ строится (D39.7/8 — метрики
# под полом когезии 0.126); мёртвые кнобы в снапшоте приглашали тихий «re-activate».
# WS2 (слой 1): бюджет нарезки в ВЫХОДНЫХ (ru) токенах через фертильность (est_out = cjk·CJK +
# other·Other); снапшот-folded (segmentationSnap → громкий --resnapshot при правке). Пропуск блока =
# ратифицированные zh-ru дефолты (см. LoadPipeline). Крупно-главный арм (edit_ceiling_out>3200)
# гейтнут платными Q2a span-судьями (§11) — 3200 = консервативный дефолт.
segmentation:
draft_budget_out: 1797 # мелкий DRAFT-чанк, ru-выход (→ 56 чанков на 25-гл пере-прогоне)
edit_ceiling_out: 3200 # крупная EDIT-единица = глава/группа целых чанков (→ 37 единиц)
fertility: # независимо пере-выведено на пере-прогоне: R²=0.9633
cjk: 1.1978
other: 0.3852
retries:
# Содержательные регенерации после провала гейта ДО эскалации (транспортные
# ретраи — отдельно, в timeouts models.yaml).
regenerate_before_escalate: 1
stages:
- name: draft
role: translator
model: deepseek-v4-flash # интерим — переводчик по exp13 (draft качеством не мерен, D30.6); флип при развязке бейк-оффа
# Слой 2 (D39): промпт резолвится из pair-keyed пакета конвенций по паре книги (Book.LangPair()),
# НЕ из фикс-пути. Наполнена только zh→ru (сегодня); ja/en книга без своей пары — FAIL-LOUD в
# loadTemplates (закрывает латентный баг «ja едет через китайский паратаксис»). Язык промпта —
# свойство пакета. Прод zh→ru резолвит тот же translator.md → тот же SHA (поведение-нейтрально).
prompts:
zh-ru: ../prompts/translator.md
# D30.2 reflow: из translator.md убрано «Сохраняй разбивку на абзацы» (построчная
# вёрстка исходника деструктивна для ru — корень нечитаемости exp12 §2.5-S). Bump
# v0-draft→v1-reflow: сменил SHA промпта, осознанный --resnapshot.
prompt_version: v1-reflow
temperature: 0.3
reasoning: "off"
# single-hop echo-эскалация (D18: deepseek-эхо 25% на 蛊真人 → фолбэк выстрелит). deepseek-v4-pro —
# хоп 1 цепочки A (D3); стреляет ТОЛЬКО при escalation.budget_usd>0 (см. ниже). Escalate_to разрешён
# лишь на translator-роли (editor pinned — D12); результат ре-гейтится.
escalate_to: deepseek-v4-pro
- name: edit
role: editor
# Дефолт-редактор — glm-5 БИЛИНГВ (флип D1→D30.1, supersede D17.в): моно-редактор
# пассивен и структурно слеп к искажениям черновика (exp12 §2.2/2.5); билингв видит
# исходник (editor.md получил {{text}}). glm-5 — кандидат value по exp12 §3 (судейский #1,
# верность 5.0, 0 утечек преамбул; grok reasoning-off из редакторских ролей СНЯТ — no-op).
# gemini-3.1-pro — премиум-эскалация редактора ТОЛЬКО за санитайзером (утечка преамбул 6/6).
model: glm-5
# Слой 2 (D39): pair-keyed пакет конвенций (см. draft-стадию) — наполнена zh→ru.
prompts:
zh-ru: ../prompts/editor.md
# Bump v2-bilingual-reflow→v3-discourse-reflow: в editor.md вшито валидированное P1a-ядро
# ДИСКУРС-ПЕРЕВЁРСТКИ + few-shot (exp14/D37 §2а — претензия-1 «рубленые абзацы» = рычаг ПРОМПТА,
# не модель; P1a реверстает дефект у всех семей). Меняет SHA промпта → осознанный --resnapshot.
# Билингв-каркас (D30.1) и omission-осторожность (D34.3) сохранены. Моно-вариант — prompts/editor-mono.md.
prompt_version: v3-discourse-reflow
temperature: 0.4
reasoning: "off"
gates:
coverage:
# Фаза 1. Пороги полигона (эксп. 02, символы БЕЗ пробелов): нижняя граница
# — подозрение на вырезание, верхняя — аномалия/галлюцинация.
enabled: false
len_ratio_bounds:
zh-ru: [2.2, 4.2]
ja-ru: [1.4, 2.6]
en-ru: [0.70, 1.4]
sent_cov_min: 0.75
min_chunk_chars: 500 # калибровка порогов — на фрагментах 5002500 симв.
sanitizer:
# Output-санитайзер (D30.3): детерминированный вердикт-гейт «мгновенной
# нечитаемости» на ФИНАЛЬНОМ выходе — ведущие служебные преамбулы («Вот
# отредактированный перевод…»), хвостовые блоки заметок/правок, markdown-###,
# латиница-врезки в ru-выходе (порог), битые словоформы («Первок предок»). Ни
# один существующий гейт этот класс не ловит (exp12/флагманы §5). Дисциплина D2
# (flag+skip): дефект → чанк flagged, мусор не течёт в TM/экспорт. precision>recall.
# ВКЛЮЧЁН для пере-прогона 25 глав (gemini течёт преамбулой 6/6 — премиум-редактор
# за санитайзером). Версия — вердикт-ось (переедет в verdictSnapshotID с D15.2).
enabled: true
escalation:
chains:
# D3-цепочка ЗАВЕДЕНА (пакет №3; все слаги live-фактчекнуты 2026-07-10 — /models + пробный вызов):
# канал A: deepseek-v4-pro → glm-5.1 → gemini-3.1-pro-preview (кросс-семейно; апекс — mandatory-thinking Gemini).
# канал B (18+): grok-4.3 reasoning-ON (D19.1; переводчик канала B = Mistral, задаётся channel:adult-стадией — Ф2).
# ⚠️ Именованные цепочки — валидируемый конфиг для мульти-хопа (шаг 7); раннер Ф1 исполняет
# SINGLE-HOP через stage.escalate_to (draft → deepseek-v4-pro выше). Слаг ИМЕННО gemini-3.1-pro-preview
# (gemini-3.1-pro → HTTP 404, live 2026-07-10). adult-цепочка — permissive-провайдеры (D4.1).
default: [deepseek-v4-pro, glm-5.1, gemini-3.1-pro-preview]
adult: [grok-4.3]
# Адресный премиум-бюджет книги, $. Формула «≤2×» из Р5 неоднозначна — [НУЖНО РЕШЕНИЕ] п.1.
# ⚠️ budget_usd=0 ⇒ эскалация НЕ исполняется (НИ chains, НИ stage.escalate_to — escalationBudgetRemains=false;
# CheckKeys не требует её ключей). Приёмочная сессия 蛊真人 ОБЯЗАНА выставить budget_usd>0, иначе echo-эскалация
# черновика (D18) не выстрелит. Дефолт 0 держит CI/Ф0 зелёными без gemini/mistral-ключей.
budget_usd: 0
fanout:
candidates: 1 # C1: один черновик