textmachine/docs/architecture/pipeline.puml
Claude (backend session) 9bb00d49f2 Initial commit: documentation, eval polygon, backend step 0 verdict
TextMachine project repository (AI translation of literary books).
Includes: v2 architecture decisions, MVP plan, research 01-12,
polygon experiments 01-03, backend-session revalidation verdict
(03-implementation-notes.md).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 06:50:59 +03:00

80 lines
4.1 KiB
Text
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.

@startuml pipeline
title TextMachine — поток перевода книги (v2 2026-07-04, после ревью)
skinparam wrapWidth 260
start
:Импорт книги (txt / epub v1: текст глав по spine);
:Сегментация: главы -> чанки 1-2k токенов
(по абзацам, перекрытие = read-only контекст);
:Analyst: чтение всей книги (map-reduce) -> book brief
+ translation brief пользователя (18+, слайдер Venuti,
хонорифики, транскрипция) -> brief_hash в ключ TM;
:Terminologist: автогенерация глоссария и style sheet
ДО перевода (паттерн preparation из TransAgents);
note right
Analyst / Terminologist / судья /
книжный QA — батчуемые стадии (-50%);
черновик и редактура чанков —
последовательные (STM-зависимость)
end note
while (Остались главы?) is (да)
while (Остались чанки главы?) is (да)
:Сборка контекста чанка:
кэшируемый префикс (system + brief + style sheet
+ резюме книги/арки), после кэш-брейкпоинта —
селективный глоссарий + STM + чанк;
:NSFW-классификатор (локальный, 0-3);
if (Уровень 3: несовершеннолетние?) then (да)
:Чанк НЕ переводится: скип + флаг в отчёте
(глава и книга продолжаются);
else (нет)
if (Уровень 2?) then (да)
:Канал B: Grok, open-weights,
локальная abliterated
(Anthropic исключён структурно);
else (0-1)
:Канал A: DeepSeek V4 Flash;
endif
:Translator: черновик
(C2/C3: N кандидатов разных семейств, T=0.6-1.0);
if (Ядро C2/C3: селекция?) then (да)
:Judge-селектор: попарное сравнение кандидатов
(T=0, дешёвый прескрининг CometKiwi/MBR);
else (C1)
endif
:Stylist/Editor: художественная редактура
(сильнейшая ru-модель канала, диффы, узкий мандат);
:QA-гейты без LLM: CJK-артефакты,
глоссарная консистентность (approved, по decl),
coverage-гейт v1 (сегментация, длины, refusal-blacklist);
if (Гейт сработал?) then (да)
if (Премиум-бюджет книги не исчерпан?) then (да)
:Эскалация channel-aware:
канал A - Opus / Gemini Pro,
канал B - Grok 4.3 / Gemini safety-off;
else (нет)
:Флаг чанка в отчёт (ненулевой exit code);
endif
else (нет)
endif
:Чекпоинт чанка: сырой ответ -> store (сразу после settle),
перевод -> TM (коммитится только прошедший гейты);
endif
endwhile (нет)
:Граница главы: обновить резюме (глава/арка/книга),
батч-подтверждение новых терминов (auto -> approved),
series-bible-lite (род, матрица ты/вы), телеметрия главы;
note right
Фаза 2+: Line Editor (чек-лист Галь),
Continuity Editor, анти-translationese пасс,
CometKiwi-оценка, морфодетектор канцелярита
end note
endwhile (нет)
:Книжный QA-проход: консистентность имён/терминов
по всей книге, регрессия ты/вы (батчуемая стадия);
:Экспорт txt/epub/TMX + отчёт (стоимость и cache-hit
по стадиям, флаги, журнал творческого вклада);
stop
@enduml