# Промт для сессии «Адаптивный/обучающийся слой памяти» (черновик от сессии валидации банка)

Скопируй в новую сессию Claude Code в `/home/ubuntu/projects/textmachine`. Эта сессия — **исследование, валидация и (опц.) локальное прототипирование**, НЕ продуктовая реализация: ни строки в `backend/`. Прототипы — только в `eval/` (индикативно, как `memory_hotpath.py`/`retrieval_bench.py`).

> _Статус: **черновик, подготовлен сессией «Валидация банка памяти» по запросу владельца**. Готов к запуску владельцем._

---

Проект **TextMachine** — AI-перевод крупной художественной прозы (ранобэ/вебновеллы, zh/ja/en→ru) мультиагентным пайплайном поверх LLM API. Уже спроектирован **детерминированный банк памяти** (SQLite один-файл-на-книгу, горячий путь = Aho-Corasick матч ключей глоссария, без модели; эмбеддинги bge-m3 — low-trust второй эшелон; 3-слойная защита pre-replace→soft-glossary→post-check). Валидация этого банка завершена (см. ниже).

**Твой предмет.** Владелец спрашивает: не будет ли **максимально эффективным гибрид** — отлаженное «старое» детерминированное решение банка **+ «новый» слой, обучающийся ПО ХОДУ перевода книги** (in-context / локальный адаптер / kNN-MT / online-retrieval / само-коррекция). Задача — **адверсариально проверить, стоит ли оно того, и как именно смёржить под наш жёсткий локально-стоимостный контур**, а не поверить в модность.

## Контекст (прочитай в этом порядке)

- `docs/research/13-memory-bank-validation.md` — вердикт валидации банка + §«Честные слабые места» (обязательно) + инвариант D5.2.
- `docs/architecture/06-memory-risk-registry.md` — реестр рисков банка (§Контракт горячего пути, гейты).
- `eval/memory_hotpath.py` — исполняемая спека горячего пути (что нельзя ломать).
- `eval/retrieval_bench.py` + `eval/data/retrieval_bench/` — эмпирика эмбеддингов (bge-m3 дефолт; **разделяющего cosine-порога НЕТ** — критично для «обучаемого» retrieval).
- `docs/experiments/06-local-extraction.md` + `eval/extract_bench.py` — локаль vs облако: спот сущностей решён везде, **рендер zh у локали 0.26** (Палладий-мусор).
- `docs/experiments/03-local-stand.md` — локаль = «спецслужба, не переводчик»; реальные tok/s на GTX 1070 (8b ~27, 30b-a3b ~13.5); thinking-грабли.
- `docs/experiments/00-provider-quirks.md` — как правильно звать провайдеров (deepseek thinking-ON+max_tokens 8000; управление thinking `extra_body={"thinking":{"type":...}}`).
- `docs/architecture/01-decisions.md` Р3/Р4/Р5 (банк, локальный стек, экономика).

## Жёсткий контур (это определяет ВЕСЬ ответ — не проектируй мимо него)

1. **Флагман-переводчик — только API, закрытый.** Нет доступа к логитам/декодеру, нельзя дообучить. → **kNN-MT на декодере флагмана, constrained decoding, frontier-LoRA — ЗАБЛОКИРОВАНЫ.** Не проектируй их для роли переводчика (перепроверь, что за 2026 это не изменилось у наших провайдеров).
2. **Локальный стенд:** GTX 1070 **8 ГБ VRAM** + **32 ГБ RAM**, WSL2. Локаль **можно** дообучать/LoRA и снимать логиты (llama.cpp/vLLM), НО локаль **не переводит на качестве** (exp03) и **рендерит zh мусором** (exp06) → её адаптированная роль — support (reranker/консистентность/спот/локальный kNN-датастор), **не финальный переводчик**.
3. **Деньги:** переводы дорого гонять НЕ хочется. **Локаль-first**; дешёвое API (deepseek-v4-flash ~$0.0005/чанк, gemini-2.5-flash) — можно; премиум-эскалацию в этом исследовании не жечь.
4. **VRAM — арбитр (буквальный «кто побеждает»):** в 8 ГБ уже претендуют bge-m3 (эмбеддинги ~2.4 ГБ) + возможный reranker + возможный адаптированный локальный модуль. Что резидентно, что по требованию, что вытесняет — часть ответа.
5. **Детерминированное ядро НЕПРИКОСНОВЕННО.** Обучающийся слой пускать **только** во второй эшелон / стиль / консистентность / `auto`-термины — **никогда** в точностно-критичный матч approved-имён (иначе вернём тихую-инъекцию, против которой всё строилось).

## Приоритетные вопросы

1. **Огибающая осуществимого.** При контуре выше — какие механизмы «учится-по-ходу-книги» реально запускаемы, а какие вычеркнуть явно (заблокированные). Что влезает в 8 ГБ рядом с bge-m3 и SQLite-банком.
2. **In-context / непараметрическая адаптация (бесплатный выигрыш).** Инъекция накопленных подтверждённых пар книги (src→approved-dst) и прошлых переведённых пассажей как **демонстраций** — бьёт ли статический глоссарий по стилю/консистентности редких терминов (WMT: demonstrations > terminology), и где ВРЕДИТ (раздувание контекста, дистрактор — Power of Noise, 2401.14887). Не требует обучения — только память+промпт. Замерь на zh/ja→ru.
3. **Локальная параметрическая адаптация (LoRA/continual) на стенде.** Можно ли дообучить малую локаль на «книге-до-сих-пор», и для КАКОЙ роли это окупается — reranker 2-го эшелона / консистентность-чекер / локальный kNN-датастор / рендерер-канона — но НЕ переводчик. Цена/латентность/VRAM на 1070, катастрофическое забывание.
4. **Локальный kNN-MT / retrieval-augmented ДЕКОДИНГ — там, где декодер НАШ (локаль).** kNN-MT нужен логит → на флагмане нельзя, на локали **можно** (llama.cpp/vLLM отдают логиты). Может ли локальный kNN-MT-черновик, адаптирующийся к TM-датастору книги, стать достаточным ЧЕРНОВИКОМ (имена чинит банк, реалии — kNN из TM книги), кормящим API-редактора? Это потенциально новый мердж — проверь.
5. **МЕРДЖ и арбитраж («кто побеждает»).** Когда детерминированный банк и обучающийся слой РАСХОДЯТСЯ (рендеринг термина, какие записи инъектить) — кто авторитет? Спроектируй арбитраж: approved+точный-матч — банк неоспорим; обучающийся слой лишь **обогащает** серые зоны (стиль, `auto`/ambiguous, 2-й эшелон, подсказки консистентности). Плюс архитектура сосуществования модуля с текущим SQLite-один-файл-на-книгу и буквальный VRAM-арбитраж.
6. **Адаптивный online-retrieval + само-корректирующая петля консистентности.** Online-обучение, какие записи реально помогают этой книге (adaptive-RAG, бандиты); петля «детект дрейфа → авто-предложение правки → выучивание предпочтённого рендеринга». Насколько без тяжёлого ML.
7. **Академическое и индустриальное заземление** (научный поиск, первоисточники, не вендор-маркетинг — как в валидации банка): kNN-MT (Khandelwal 2021) и продолжения; **adaptive MT — ModernMT / Lilt** (что переносимо на API-only LLM-стек); test-time / continual adaptation для MT; in-context TM; retrieval-augmented generation с online-обновлением. Заявленные метрики проверять независимо. Отдельно — свежее 2025–2026.

## Правило решения (БАР)

Любой предложенный мердж обязан: (а) оставить детерминированный горячий путь авторитетным; (б) влезть в VRAM/стоимостную огибающую (локаль-first); (в) **эмпирически бить eval-валидированный детерминированный базис на zh/ja→ru** по консистентности/fidelity/цене; (г) оправдать добавленную сложность. **Не может пройти (в) → рекомендуй НЕ мёржить** (честно, как валидация банка вышла «не морозить ставку без eval»).

## Творческий мандат

Не только обзор — **спроектируй 1–2 конкретные гибридные архитектуры под НАШ контур** (локаль+дешёвое-API, 8 ГБ VRAM, SQLite-банк, детерминированный костяк) и аргументируй, где каждая бьёт чистый детерминированный базис. Приветствуются нестандартные мерджи (напр., локальный kNN-MT-черновик из TM книги → API-редактор; или книга-LoRA только на reranker). Свобода предлагать, но каждый вариант — против БАРа выше.

## Выход

- `docs/research/14-adaptive-memory.md` — вердикт: стоит ли гибрид, огибающая осуществимого, предложенные архитектуры мерджа, где/когда бьёт базис, VRAM+стоимостный бюджет, арбитраж. Это единственный файл в `research/`, что тебе разрешено создать.
- Опц. индикативный прототип в `eval/` (локальный reranker / kNN-датастор / in-context-demo эксперимент) — как `memory_hotpath`/`retrieval_bench`.
- Краткие итоги — `docs/PROGRESS.md` секция `## Память` (1–2 строки на находку + ссылка); каждое расхождение — пингом оркестратору.

## Правила (и не повтори ошибки сессии-предшественника)

- Не редактируй `backend/` (только читай); прототипы — `eval/` (переиспользуй venv, bge-m3, PD-корпус `eval/data/samples` — не дублируй инфру).
- **Сверься с git HEAD перед выводами** — бэкенд быстро движется, доки начала сессии устаревают (предшественник на этом обжёгся: числил F1 открытым, а он был построен).
- **Верифицируй каждый ответ модели** (пустой/echo/config-error → ретрай+пометка, НЕ засчитывай как данные); квирки — через `eval/refusal_bench.call_provider`+`providers.json`.
- **Индикативно ≠ доказано:** малый N, LLM-судья — помечай честно; не репорть артефакты как находки.
- Тайминг: это **улучшение Фазы 2+**, целься в РЕАЛЬНЫЕ дыры базиса (дрейф консистентности, стиль, 2-й эшелон), не переизобретай базис; идеально — после in-house eval банка.
- Фиксируй версии/даты; проверяй заблокированность методов (логиты/дообуч у наших провайдеров) пробой, а не по памяти.
- Скоординируйся с полигоном по стенду (VRAM у 1070 общий — не выселяй чужие модели молча).
