Commit Graph
186 Commits
Author SHA1 Message Date
ddmitry 328580abfb feat(transcriber): deep module выполнения транскрипции (#58)
Закрывает #56. Спецификация: docs/specs/2026-09-21-transcription-execution.md.
2026-09-22 09:46:22 +03:00
Dmitry DementievandClaude Opus 5 63307fed01 docs(adr): ADR-003 описывает engine adapter'а вместо удалённой таблицы
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:36:26 +03:00
Dmitry DementievandClaude Opus 5 6f1064ccc4 fix(transcriber): закрыты находки ревью по module выполнения
- неявный compute_type при fallback переразрешается по умолчанию CPU
  (float16 CUDA не переносится на CTranslate2 CPU);
- prepare() помечает module готовым только после проверки пословного
  контракта;
- движок сообщает сам adapter (атрибут engine) вместо параллельной таблицы;
- сбой runtime_info() не роняет запуск;
- каскад конфига оставляет model/compute_type пустыми для module,
  CLI не дублирует CLI > TOML;
- удалены недостижимые из CLI сообщения о mid-stream fallback;
- в --verbose потоки помечены как запрошенные, adapters сообщают
  применённые; OpenVINO прямо говорит, что --threads не применяется;
- тесты: умолчания по устройствам, TOML compute_type, не-strict сценарий
  обычной ошибки; CONTRIBUTING.md и AGENTS.md без устаревших имён.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:32:04 +03:00
Dmitry DementievandClaude Opus 5 f7c0ed9a8c fix(transcriber): пустой язык трактуется как автоопределение, как раньше
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:06:03 +03:00
Dmitry DementievandClaude Opus 5 a8241b1d6b docs(execution): описаны владение выполнением и диагностика
ADR-002 и ADR-003 отражают Transcriber как единственного владельца
загрузки и fallback; README получил раздел «Диагностика исполнения»
и уточнение --threads для ONNX; AGENTS.md — новые тестовые паттерны.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:05:27 +03:00
Dmitry DementievandClaude Opus 5 0f8ecb5bd3 refactor(cli): одиночный файл и батч переведены на module выполнения
CLI строит один ExecutionRequest, создаёт Transcriber после prescan
и получает результат с ExecutionInfo: разрешение auto, device-aware
умолчания, проверка пословного контракта, строка устройства для шапки
и fallback ушли за seam. --verbose печатает движок, потоки и runtime_info().
Удалены load_model, _transcribe_file, TranscribeFileResult,
apply_device_defaults и тесты переноса полей; сценарные тесты CLI идут
через CliRunner с fake adapter на get_backend.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 00:05:27 +03:00
Dmitry DementievandClaude Opus 5 e22b2f1bae feat(onnx): бюджет потоков применяется к сессиям ASR и VAD
--threads больше не игнорируется ONNX adapter'ом: cpu_threads > 0 задаёт
intra_op_num_threads через SessionOptions обеим сессиям, 0 оставляет
настройки onnxruntime. Фактический бюджет виден в runtime_info().

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:55:28 +03:00
Dmitry DementievandClaude Opus 5 4dea7f4bc6 feat(transcriber): добавлен module выполнения с владением моделью и исполнением
Transcriber принимает ExecutionRequest, разрешает auto и device-aware
умолчания, загружает модель один раз на запуск и держит fallback внутри.
Caller получает TranscribeResult и ExecutionInfo вместо model/backend/path.
Публичный transcribe() идёт через тот же module. Adapters отдают
runtime_info() для диагностики; legacy load_model/_transcribe_file пока
остаются для CLI.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-21 23:46:54 +03:00
ddmitry 343a31b35b feat(cuda): добавлен необязательный runtime для Linux и Windows (#57)
Closes #2. Независимое ревью Opus: APPROVED; 524 теста прошли, 2 пропущены. Реальный Windows GPU-прогон без Toolkit остаётся невыполненным и зафиксирован в документации.
2026-09-21 23:31:29 +03:00
Dmitry Dementiev a8b8a8c0c9 fix(cuda): учтён отказ по неподдерживаемому типу вычислений 2026-09-21 23:20:51 +03:00
Dmitry Dementiev 453b5d9dfa docs(cuda): описаны установка extra и проверка Windows DLL 2026-09-21 22:33:51 +03:00
Dmitry Dementiev 99ed5ed92f feat(cuda): добавлен optional runtime для Linux и Windows 2026-09-21 22:31:30 +03:00
Dmitry Dementiev 937eafe8db fix(device): закреплён ONNX CPU для автоматического выбора 2026-09-21 22:20:27 +03:00
Dmitry Dementiev 2b54f5bc9e docs(architecture): согласовано владение выполнением транскрипции 2026-09-21 21:55:04 +03:00
Dmitry DementievandClaude Opus 5 671ac8e5c9 docs(readme): уточнена установка из клона и пункт меню «Отправить»
- Зачем:
  - коллеги ставят инструмент из внутреннего репозитория с другим URL.
- Что:
  - добавлен вариант установки и обновления из склонированного репозитория.
  - шаг с --install-menu вынесен в список установки, шаги перенумерованы.
  - добавлена подсказка открыть новую консоль после установки uv.
- Проверка:
  - git diff --check.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018vByFj9s7qBHB7QRCf6mri
2026-09-14 11:24:10 +03:00
Dmitry DementievandClaude Opus 5 3860f52eb9 docs(claude): добавлены правила стиля и выбора подхода
- Зачем:
  - агенту нужны локальные правила изложения и экономии токенов в этом репозитории.
- Что:
  - добавлены разделы про стиль изложения и удержание выбранного подхода.
  - добавлены указания для Fable 5/5.1: точечные правки и пакетные запросы.
- Проверка:
  - git diff --check.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018vByFj9s7qBHB7QRCf6mri
2026-09-14 11:24:10 +03:00
ddmitry f3d0293120 Merge pull request 'experiment(diarization): сопоставлены W0 и Sortformer на Ryzen' (#53) from experiment/46-streaming-sortformer-ryzen into master
Reviewed-on: #53
2026-09-04 22:08:02 +03:00
Dmitry Dementiev 78960120fd docs(benchmark): добавлено сравнение W0 и Sortformer
- Зачем:
  - формальный stop W0 не отвечал на практический вопрос о скорости и качестве кандидата.
- Что:
  - добавлены результаты одной диагностической пары на трех фрагментах.
  - сопоставлены скорость, число кластеров, purity, слова без говорящего и память.
  - границы вывода отделены от формального расписания эксперимента.
- Проверка:
  - сравнительные агрегаты сверены с закрытыми результатами обеих моделей.
  - git diff --check.
2026-09-04 22:00:31 +03:00
Dmitry Dementiev b8bb78103a docs(benchmark): зафиксирован stop Ryzen-прогона
- Зачем:
  - задача #46 должна завершиться воспроизводимым решением по каноническому Ryzen-эксперименту.
- Что:
  - записан stop из-за несовпадения числа кластеров свежего W0.
  - сохранены безопасные агрегаты W0 и вторичный провал проверки swap.
  - отмечено, что Sortformer не запускался и данных об ускорении нет.
- Проверка:
  - uv run pytest -q.
  - независимая сверка отчета с закрытым результатом и проверка литературного русского.
2026-09-04 21:38:42 +03:00
Dmitry Dementiev 4c4a8be07b fix(experiment): уточнено определение активной подкачки
- Зачем:
  - занятые, но неизменные swap-страницы ошибочно блокировали канонический Ryzen-прогон.
- Что:
  - active swap определяется изменением счетчиков sin/sout во время ячейки.
  - сохранены memory gates для OOM, RSS plateau, линейного роста и пикового RSS.
- Проверка:
  - uv run pytest -q tests/test_streaming_sortformer_experiment.py tests/test_benchmark_experiment.py tests/test_speaker_diarizer.py tests/test_diarization.py.
2026-09-04 18:50:31 +03:00
Dmitry Dementiev d71aec4ab2 fix(experiment): устранен повторный gate принятия опоры
- Зачем:
  - канонический Ryzen-прогон не должен повторно запрашивать уже данное решение владельца до порога 30%.
- Что:
  - восстановлен короткий контракт approval и удалена лишняя схема owner-package.
  - разрешена парная nullable-опора для диагностик без ослабления обязательных gates.
  - NUL в путях отклоняется обезличенной ошибкой до загрузки моделей.
- Проверка:
  - uv run pytest -q: 457 passed, 2 skipped.
  - обязательный набор эксперимента: 110 passed; целевой Ruff пройден.
  - независимые code и task/taste review закрыты.
2026-09-04 17:48:36 +03:00
Dmitry Dementiev 0cd105927b chore(repo): ветка синхронизирована с origin/master
- Зачем:
  - source commit эксперимента должен включать актуальное состояние master.
- Что:
  - в рабочую ветку влиты изменения конфигурации диаризации и документации.
- Проверка:
  - слияние завершено без конфликтов, рабочее дерево чистое.
2026-09-04 17:21:42 +03:00
Dmitry Dementiev 16e5372f2d chore(repo): новые материалы .scratch исключены из Git
Зачем:
- хранить локальные handoff и launcher в постоянном каталоге без риска случайного коммита
- не терять временно закрепленный стенд диаризации между компьютерами

Что:
- весь корневой .scratch добавлен в ignore
- существующие диагностические скрипты оставлены отслеживаемыми
- описание локальных и переносимых артефактов приведено к новой политике

Проверка:
- git check-ignore -v --no-index .scratch/new-local-artifact
- git ls-files .scratch
- git diff --check
2026-09-04 16:01:39 +03:00
ddmitry 7d672a7dc8 Merge pull request 'feat(config): добавлена настройка диаризации в TOML' (#52) from fix/51-diarize-config into master
Reviewed-on: #52
2026-09-02 14:11:19 +03:00
Dmitriy Dementiev 2e30d668ce refactor(config): уточнены типы каскада настроек
- Зачем:
  - общий union допускал несоответствие между ключом настройки и его типом.
- Что:
  - разделены типы TOML, CLI и полностью разрешённой конфигурации.
  - каскад значений сохранён в типобезопасной generic-функции.
- Проверка:
  - mypy src/local_transcriber/config.py.
  - pytest tests/test_config.py tests/test_cli.py: 109 passed.
2026-09-02 12:52:33 +03:00
Dmitriy Dementiev ef61ced2e5 feat(config): добавлена настройка диаризации в TOML
- Зачем:
  - пользователю нужна постоянная настройка диаризации с явным CLI-переопределением.
- Что:
  - добавлен булев ключ diarize и каскад CLI > TOML > false.
  - добавлены --no-diarize и проверка конфликта с --speakers.
  - обновлены документация и поведенческие тесты single/batch.
- Проверка:
  - uv run pytest tests/test_config.py tests/test_cli.py -v.
  - uv run pytest: 452 passed, 1 skipped, 1 несвязанный Windows-сбой.
2026-09-02 12:45:57 +03:00
ddmitry 5ec9c77dfa Merge pull request 'docs(install): указан Python 3.13 для uv tool' (#50) from codex/docs-uv-python into master
Reviewed-on: #50
2026-09-02 12:16:33 +03:00
Dmitriy Dementiev 78f2a8aecc docs(install): указан Python 3.13 для uv tool
- Зачем:
  - uv tool install сохранял Python 3.11 старого окружения и отклонял пакет с требованием Python 3.13.
- Что:
  - в команды установки и обновления добавлен явный выбор Python 3.13.
  - актуализировано описание выбора Python в спецификации.
- Проверка:
  - git diff --check.
2026-09-02 12:11:57 +03:00
Dmitry Dementiev e71b2d1668 feat(experiment): добавлен gate принятия опоры владельцем
Зачем:
- не допустить загрузку W0 и Sortformer без отдельного принятия трёх референсов владельцем
- связать manifest с точными байтами listening package и owner-authored record

Что:
- добавлены строгие схемы трёх reference rows и четырёх решений Step 3
- все внешние файлы проверяются через held fd без symlink и TOCTOU
- добавлены negative tests для подмен, неточных JSON-типов и небезопасных путей

Проверка:
- uv run pytest -q (532 passed, 2 skipped)
- uv run ruff check src/local_transcriber/streaming_sortformer_experiment.py tests/test_streaming_sortformer_experiment.py
- git diff --check
2026-09-02 03:20:42 +03:00
Dmitry Dementiev 0f67da8acf test(diarization): изолирована проверка кеша моделей
- Зачем:
  - детерминированный gate эксперимента не должен загружать native runtime в checksum-only тесте.
- Что:
  - в тест проверки поврежденного кеша добавлена структурная подмена sherpa_onnx.
- Проверка:
  - uv run pytest -q tests/test_streaming_sortformer_experiment.py tests/test_benchmark_experiment.py tests/test_speaker_diarizer.py tests/test_diarization.py.
2026-09-01 22:32:21 +03:00
ddmitry 28d0f37b82 Merge pull request 'docs(diarization): опубликован Intel-scout Streaming Sortformer' (#49) from research/46-sortformer-intel-scout into master
Reviewed-on: #49
2026-09-01 22:07:43 +03:00
Dmitry Dementiev fa9908af6f docs(diarization): опубликован Intel-scout Streaming Sortformer
- Зачем:
  - результат локальной разведки нужен для решения о целесообразности Ryzen-прогона.
- Что:
  - опубликованы безопасные агрегаты скорости, памяти и качества.
  - зафиксированы отклонения от приемочной спецификации и открытый статус #46.
  - добавлены хеши закрытых результатов, моделей, runtime и runner-скрипта.
- Проверка:
  - privacy_scan для публичного Markdown прошел.
  - git diff --cached --check прошел.
2026-09-01 21:42:25 +03:00
ddmitry f59efa51b7 Merge pull request 'feat(diarization): добавлен стенд Streaming Sortformer' (#48) from issue-46-streaming-sortformer-experiment into master
Reviewed-on: #48
2026-09-01 20:19:05 +03:00
Dmitry Dementiev cca09aedde feat(diarization): добавлен стенд Streaming Sortformer
- Зачем:
  - для эксперимента из задачи #46 нужен изолированный и воспроизводимый стенд.
- Что:
  - добавлены строгая схема, предварительные проверки и конечный автомат;
  - зафиксированы расписание A/B, пороги, измерения, C ABI и правила приватности;
  - экспериментальный модуль исключён из production wheel.
- Проверка:
  - целевые тесты: 105 passed;
  - полный набор: 438 passed, 2 skipped;
  - Ruff: All checks passed.

Refs: #46
2026-09-01 19:34:39 +03:00
ddmitry b2a2d7d7da Merge pull request 'docs(diarization): спроектировать end-to-end карту' (#47) from research/issue-45-end-to-end-cpu-diarization-map into master
Reviewed-on: #47
2026-09-01 16:52:49 +03:00
Dmitry Dementiev 15f88b1de8 docs(diarization): отложено удаление архивов
- Зачем:
  - старые результаты решено сохранить до завершения и приемки задачи #46.
- Что:
  - архивы задач #41/#42 закреплены как временные и доступные только для чтения;
  - стенду #46 запрещено читать архивы или использовать их как основу A/B;
  - удаление перенесено на момент после приемки нового отчета.
- Проверка:
  - выполнены git diff --check и проверка формулировки в задаче #46.
2026-09-01 16:36:11 +03:00
Dmitry Dementiev 89475b9b97 docs(diarization): спроектирована end-to-end карта
- Зачем:
  - локальные оптимизации каскада не достигли 30%-го порога ускорения;
  - старые закрытые хранилища и капсулы не должны стать будущей зависимостью.
- Что:
  - собран единый реестр результатов задач #41 и #42;
  - опубликовано разложение Ryzen baseline и выбрана архитектурная гипотеза;
  - подготовлены самодостаточная спецификация и ready-for-agent задача #46.
- Проверка:
  - пройдены self-review и две независимые линии ревью;
  - проверены 44 строки реестра, 42 арифметических инварианта и ссылки;
  - выполнены ai-text-lint, privacy scan и post-lint guard.

Refs: #45
2026-09-01 16:26:58 +03:00
ddmitry 312153f4bc Merge pull request 'feat(diarization): завершить Ryzen-этап CPU-эксперимента' (#44) from issue-42-ryzen-cpu-experiment into master
Reviewed-on: #44
2026-09-01 12:53:56 +03:00
Dmitry Dementiev 249b970cc9 docs(diarization): расширен отчет Ryzen-эксперимента
Зачем:
- Сохранить полный ход проверки гипотез и исключить ненужный повтор старой матрицы.

Что:
- Добавлен ledger этапов W/M/Q/E/C с рецептами, числами и причинами отсева.
- Зафиксированы правила переиспользования результатов и границы повторных прогонов.
- Связана следующая end-to-end карта в задаче #45.

Проверка:
- uv run --no-sync pytest -q (389 passed, 2 skipped).
- Codex taste-review и ai-text-lint: APPROVED.
2026-09-01 01:36:45 +03:00
Dmitry Dementiev 38c99855e2 feat(diarization): завершен Ryzen-этап CPU-эксперимента
Зачем:
- Проверить переносимость Intel-handoff на Ryzen и закрыть выбор CPU-профиля.

Что:
- Усилена проверка связи Ryzen-manifest с капсулой и переносимости рецептов.
- Добавлены регрессионные тесты и публичный отчет с исходом new map.

Проверка:
- uv run --no-sync pytest -q (389 passed, 2 skipped).
- uv run --no-sync ruff check src/local_transcriber/benchmark_experiment.py tests/test_benchmark_experiment.py.
2026-09-01 00:58:46 +03:00
ddmitry 68fda7ee89 Merge pull request 'feat(diarization): проверен Intel-профиль CPU-диаризации' (#43) from issue-41-intel-cpu-experiment into master
Reviewed-on: #43
2026-08-31 17:14:41 +03:00
Dmitry Dementiev 42f094ccb9 docs(diarization): опубликован отчет Intel-этапа 2026-08-31 16:49:09 +03:00
Dmitry Dementiev 6345cb6449 fix(diarization): связана переносимая проверка handoff
Зачем:
- капсула должна содержать каждый вход, названный в manifest
- Intel handoff нужно проверять на Ryzen без сравнения чужого SKU

Что:
- входы manifest связаны с индексом и SHA-256 файлов капсулы
- validate-only финального handoff пропускает только проверку машины
- версии Python, пакетов и экспериментальной сборки по-прежнему обязательны

Проверка:
- uv run pytest -q tests/test_benchmark_experiment.py
- uv run ruff check для изменённых файлов
2026-08-31 15:55:40 +03:00
Dmitry Dementiev 0ea4d56c9d fix(diarization): учтён системный power profile
Зачем:
- часть Intel-стендов не публикует ACPI platform_profile
- balanced-режим на таком стенде доступен через power-profiles-daemon

Что:
- добавлен fallback на powerprofilesctl get
- поведение закреплено тестом

Проверка:
- uv run pytest -q tests/test_benchmark_experiment.py
- uv run ruff check для изменённых файлов
2026-08-31 15:16:10 +03:00
Dmitry Dementiev bd0d7e6736 feat(diarization): подготовлен стенд Intel-эксперимента
Зачем:
- нужен воспроизводимый Intel-этап перед проверкой кандидатов на Ryzen
- sherpa-onnx 1.13.6 открывает настройку шага окна

Что:
- добавлены строгий manifest v3, планировщик A/B и проверяемая приватная капсула
- реализованы экспериментальные NME, модели эмбеддингов и режимы worker/session
- версия sherpa-onnx поднята до 1.13.6, зависимости и тесты закреплены

Проверка:
- uv lock --check
- uv run pytest -q
- uv run ruff check для изменённых Python-файлов
- uv build с проверкой состава wheel
2026-08-31 15:12:33 +03:00
Dmitry Dementiev 7dc5723742 docs(research): добавлено сравнение ASR-моделей для русских встреч
- Зачем:
  - нужно оценить локальные ASR-кандидаты для русских встреч с английскими IT-терминами.
- Что:
  - собраны первичные данные по GigaAM, Nemotron, Qwen3-ASR, Canary и Cohere.
  - разделены известные факты, рабочие гипотезы, рекомендация и неизвестные.
  - сопоставлены языки, таймкоды, режимы работы, поставка и лицензии.
- Проверка:
  - выполнено горячее ревью документа и git diff --cached --check.
2026-08-31 01:08:36 +03:00
ddmitry 18d1094d10 Merge pull request 'docs(diarization): спроектирован следующий CPU-эксперимент' (#40) from wayfinder/issue-34-cpu-experiment-matrix into master
Reviewed-on: #40
2026-08-31 01:05:07 +03:00
Dmitry Dementiev 558c1baf89 docs(diarization): разделен CPU-эксперимент по машинам
- Зачем:
  - один агент не может последовательно работать на двух ноутбуках.
- Что:
  - этапы 0-4 закреплены за Intel, этапы 5-6 - за зависимой Ryzen-задачей.
  - добавлен проверяемый handoff через отчет, commit и приватную ZIP-капсулу.
  - устранен штатный возврат с Ryzen на Intel и ограничен финальный бюджет.
- Проверка:
  - `.venv/bin/pytest -q tests/test_diarization_calibration.py tests/test_speaker_diarizer.py tests/test_diarization.py` (61 passed).
2026-08-31 00:59:23 +03:00
Dmitry Dementiev fde4c48859 docs(diarization): спроектирован следующий CPU-эксперимент
- Зачем:
  - нужен ограниченный эксперимент для отсева явных проигрышей без полного перебора и лишней точности.
- Что:
  - зафиксирована поэтапная матрица проверок на Intel и Ryzen.
  - определены пороги скорости, условия качества, контроль памяти и приватности.
  - описаны воспроизводимость стенда, QDQ-происхождение данных и правила решения.
- Проверка:
  - `.venv/bin/pytest -q tests/test_diarization_calibration.py tests/test_speaker_diarizer.py tests/test_diarization.py` (61 passed).
2026-08-31 00:16:09 +03:00
ddmitry e7c6eacb56 Merge pull request 'docs(research): выбрано обновление sherpa-onnx для шага окна' (#39) from research/issue-36-window-shift into master
Reviewed-on: #39
2026-08-30 23:16:31 +03:00