ADR-002 и ADR-003 отражают Transcriber как единственного владельца загрузки и fallback; README получил раздел «Диагностика исполнения» и уточнение --threads для ONNX; AGENTS.md — новые тестовые паттерны. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.5 KiB
ADR-002: Batch mode и config
Статус: Принято Дата: 2026-03-18 Обновлено: 2026-09-21 — решения 2 и 4 пересмотрены (см. пометки)
Контекст
После завершения MVP (шаги 1–7) пользователям не хватает:
- Обработки нескольких файлов за один вызов (batch mode)
- Конфигурационного файла для хранения дефолтов (модель, язык, устройство)
Решения
1. Prescan-first: валидация до загрузки модели
Модель загружается только если есть файлы для обработки. Перед загрузкой модели выполняется полный prescan: валидация всех файлов и проверка существующих транскриптов.
Почему: загрузка модели (large-v3) занимает ~10 секунд и ~3 GB RAM/VRAM. Повторный запуск по уже обработанным файлам должен быть дешёвым no-op.
2. Состояние модели между файлами
Пересмотрено 2026-09-21. Исходное решение: _transcribe_file() возвращал
TranscribeFileResult с обновлёнными model, backend, model_path
и actual_device, а CLI переносил их в следующий файл после mid-stream
fallback. Это делало caller владельцем согласованности четырёх полей.
Теперь состояние не покидает module выполнения: Transcriber создаётся один
раз на запуск после prescan, загружает модель при первом файле и сам держит
загруженную модель, adapter и фактическое исполнение. Fallback меняет
состояние внутри module, и следующий файл батча идёт уже по нему. Caller
получает TranscribeResult и ExecutionInfo (запрошенное и выбранное
исполнение, движок, модель, квантизация, потоки, версии runtime).
Альтернатива: mutable-контейнер с моделью, передаваемый по ссылке, — отклонена тогда же; owner-объект решает ту же задачу явно и тестируется через свой interface.
3. Конфиг: CWD → глобальный, без мержа
Порядок поиска:
.transcriber.tomlв текущей директории (проектный конфиг)~/.config/transcriber/config.toml(глобальный конфиг)
Первый найденный побеждает, мержа между файлами нет.
Почему: CWD-конфиг удобен для per-project дефолтов (language = "ru" для русскоязычного проекта), глобальный — для машинных дефолтов (device = "cpu" на ноутбуке без GPU). Мерж усложняет предсказуемость.
Приоритет значений: CLI > конфиг > хардкод.
4. Публичный transcribe() — путь одного файла
Пересмотрено 2026-09-21. Внутренние helpers load_model()
и _transcribe_file() удалены. transcribe() сохранён и стал обёрткой над
тем же Transcriber: model_name и compute_type без значения берут
умолчания выбранного исполнения, device="auto" означает ONNX CPU, как в CLI.
Последствия
- Обратная совместимость CLI:
transcribe file.mp4работает как раньше - Batch mode: модель загружается один раз для всех файлов; CLI не переносит состояние между файлами
- Fallback из CLI недостижим: явный device — strict,
auto— ONNX CPU без переходов. Механизм сохранён дляtranscribe(..., strict_device=False) --forceфлаг для перезаписи существующих транскриптов в батч-режиме