Commit Graph
154 Commits
Author SHA1 Message Date
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
Dmitry Dementiev d525f5b18a docs(research): уточнены границы поддержки sherpa-onnx
- Зачем:
  - вывод об обычном обновлении должен опираться на проверяемые API и wheel для поддерживаемых сред.
- Что:
  - исправлены ссылки на tagged source и уточнены границы manylinux и будущего CPython 3.15.
  - зафиксирован smoke test CPython 3.13 и практическая польза обновления.
  - вычищены двусмысленные формулировки без изменения фактов и чисел.
- Проверка:
  - uv run pytest -q: 334 passed, 2 skipped.
  - 23 внешние ссылки отвечают HTTP 200; git diff --check.
2026-08-30 23:08:31 +03:00
Dmitry Dementiev a53344dc04 docs(research): исследован шаг окна sherpa-onnx
- Зачем:
  - требовалось определить первый wheel с публичным API для шага окна.
- Что:
  - зафиксирована граница 1.13.5/1.13.6 и матрица Python/платформ.
  - выбрано обычное обновление и задана точная граница прототипа.
- Проверка:
  - git diff --cached --check.
2026-08-30 23:08:31 +03:00
ddmitry 13314f9334 Merge pull request 'docs(research): выбрана схема оценки числа говорящих' (#38) from research/issue-33-speaker-count into master
Reviewed-on: #38
2026-08-30 21:58:59 +03:00
Dmitry Dementiev 66fc264f2d docs(research): уточнена граница прототипа оценки говорящих
- Зачем:
  - исследовательское решение должно однозначно задавать повторное использование эмбеддингов и проверку счетчиков.
- Что:
  - выбран внутренний интерфейс подготовки и финализации sherpa-onnx.
  - закреплены входы, вариант NME и критерии качества.
  - измерения CPU и памяти отделены от будущих гейтов карты.
- Проверка:
  - `uv run pytest -q` (334 passed, 2 skipped).
  - `git diff --check`.
  - 31 внешняя ссылка отвечает HTTP 200.
2026-08-30 21:50:51 +03:00
ddmitry 9fc2dc0c6c Merge pull request 'docs(research): опубликовано исследование embedding-инференса' (#37) from docs/publish-diarization-research into master
Reviewed-on: #37
2026-08-30 21:07:24 +03:00
Dmitry Dementiev 6f0adf2eb0 docs(cpu): вычищены формулировки аппаратных baseline
- Зачем:
  - README и backlog должны одинаково и однозначно описывать границы CPU-замеров перед merge.
- Что:
  - Замер Ryzen ограничен одной зафиксированной тестовой машиной.
  - Из backlog убраны повтор и искусственные противопоставления вокруг целевого SKU.
- Проверка:
  - `git diff --check`.
2026-08-30 21:05:40 +03:00
Dmitry Dementiev bcf264e0aa docs(research): удалена преждевременная записка
- Зачем:
  - Исследование числа говорящих не проходило отдельный Wayfinder-тикет и не должно публиковаться как принятое решение.
- Что:
  - Записка об оценке числа говорящих удалена из publication-ветки.
- Проверка:
  - `git diff --check`.
2026-08-30 21:04:03 +03:00
Dmitry Dementiev 2fc777fdee docs(cpu): уточнена аппаратная матрица
- Зачем:
  - Конкретный Core i5 ошибочно стал обязательной приемочной машиной при разнородном парке пользователей.
- Что:
  - CPU-дефолт отделен от воспроизводимых Intel и AMD baseline.
  - README, backlog и исследование приведены к единой терминологии.
- Проверка:
  - `git diff --check`.
2026-08-30 20:58:18 +03:00
Dmitry Dementiev b09036eaa3 docs(research): выбрана схема оценки числа говорящих
- Зачем:
  - быстрым моделям эмбеддингов нужен автоматический подсчет без повторного инференса.
- Что:
  - проверены возможности повторного использования эмбеддингов в публичном API sherpa-onnx.
  - сопоставлены порог, eigengap, NME-SC и двухшаговая кластеризация.
  - зафиксирована граница NumPy-прототипа без production-зависимости от NeMo.
- Проверка:
  - git diff --cached --check.
2026-08-30 20:56:21 +03:00
Dmitry Dementiev 5c6697ecbf docs(research): уточнены batch-контракты embedding-моделей
- Зачем:
  - вопрос тикета требует проверить формы официальных release-графов, а исходная записка опиралась только на экспортные контракты.
- Что:
  - зафиксированы реальные формы и CPU smoke-test batch size 2 для WeSpeaker, CAMPPlus и TitaNet.
  - уточнены поддержка equal-length batch у CAMPPlus и fallback между S8S8, U8U8 и U8S8.
- Проверка:
  - git diff --check.
2026-08-30 20:56:21 +03:00
Dmitry Dementiev bfabf09c83 docs(research): добавлено исследование embedding-инференса
- Зачем:
  - нужно выбрать реалистичный способ ускорения эмбеддингов на разных x86 CPU.
- Что:
  - зафиксированы ограничения batch, stream/session и static INT8 для трех моделей.
  - рекомендованы два прототипа и минимальная матрица CPU/ISA.
- Проверка:
  - git diff --cached --check.
2026-08-30 20:56:21 +03:00
ddmitry f5c1cb8090 Merge pull request 'test(diarization): добавлен стенд сравнения CPU-моделей' (#30) from issue-25-lightweight-cpu-diarization into master
Reviewed-on: #30
2026-08-30 18:50:50 +03:00
Dmitry Dementiev e3c9040bfe docs(research): выбрана схема оценки числа говорящих
- Зачем:
  - быстрым моделям эмбеддингов нужен автоматический подсчет без повторного инференса.
- Что:
  - проверены возможности повторного использования эмбеддингов в публичном API sherpa-onnx.
  - сопоставлены порог, eigengap, NME-SC и двухшаговая кластеризация.
  - зафиксирована граница NumPy-прототипа без production-зависимости от NeMo.
- Проверка:
  - git diff --cached --check.
2026-08-30 13:42:42 +03:00
Dmitry Dementiev 5b5fd535d6 feat(diarization): добавлена проверка переносимого бенчмарка
- Зачем:
  - новый агент должен проверить приватный набор до дорогого CPU-прогона.
- Что:
  - добавлены режим validate-only, относительные пути и ранняя проверка зависимостей.
  - описано воспроизведение; временные handoff исключены из Git.
- Проверка:
  - .venv/bin/pytest -q: 334 passed, 2 skipped.
  - ruff check, ruff format --check и git diff --check: успешно.
2026-08-30 13:26:16 +03:00
Dmitry Dementiev 1e14f2687a test(diarization): добавлен стенд сравнения CPU-моделей
- Зачем:
  - требовалось сравнить облегченные модели диаризации на старом CPU без изменения рабочей конфигурации.
- Что:
  - добавлен воспроизводимый и возобновляемый прогон матрицы Pyannote FP32/INT8 с WeSpeaker и TitaNet.
  - зафиксированы измерения 108 ячеек, ограничения эксперимента и решение сохранить модель по умолчанию.
  - локальные записи в каталоге tmp исключены из индекса Git.
- Проверка:
  - .venv/bin/python -m pytest.
  - /tmp/local-transcriber-ruff-bin/ruff check scripts/benchmarks/diarization_calibration.py tests/test_diarization_calibration.py.
2026-08-30 12:02:34 +03:00
ddmitry 95f295c37c Merge pull request 'fix(cli): приведён в порядок вывод предупреждений и ONNX' (#29) from feature/7-cli-output into master
Reviewed-on: #29
2026-08-29 08:51:18 +03:00
ddmitry ec6d415114 Merge pull request 'fix(deps): восстановлена установка sherpa-onnx в Linux' (#28) from fix/27-linux-sherpa-dependency into master
Reviewed-on: #28
2026-08-29 08:49:07 +03:00
Dmitry Dementiev d43c3b7c9a fix(cli): добавлена маркировка ONNX в шапке транскрипта
- Зачем:
  - транскрипты ONNX и faster-whisper на CPU имели одинаковую подпись.
- Что:
  - для ONNX добавлено обозначение ONNX (CPU) в метаданных транскрипта.
  - различие движков и пользовательская шапка покрыты тестами.
  - примеры шапки в README и PRD приведены к текущему ONNX-профилю.
- Проверка:
  - env -u FORCE_COLOR -u COLUMNS -u LINES uv run pytest.
2026-08-29 01:21:10 +03:00
Dmitry Dementiev b412b73fc0 fix(cli): добавлен пользовательский вывод предупреждений
- Зачем:
  - предупреждения из задачи #7 выглядели как фрагменты Python traceback.
- Что:
  - на время запуска CLI установлен однострочный Rich-рендер предупреждений.
  - сохранены буквальный текст сообщений и восстановление глобального hook.
  - single- и batch-сценарии покрыты автоматическим тестом.
- Проверка:
  - uv run pytest tests/test_cli.py -q.
2026-08-29 01:20:24 +03:00
Dmitry Dementiev f966d4554b fix(deps): восстановлена установка sherpa-onnx в Linux
- Зачем:
  - в #27 чистая установка Linux не включала sherpa-onnx-core, поэтому import sherpa_onnx падал при загрузке libonnxruntime.so.
  - uv при универсальном резолвинге использовал метаданные armv7 wheel без Requires-Dist и терял обязательную платформенную зависимость.
- Что:
  - версия sherpa-onnx зафиксирована на 1.13.5 вместе с явным metadata override для sherpa-onnx-core==1.13.5.
  - рядом с pin и override записано правило их совместного обновления.
  - uv.lock обновлен с зависимостью на core и wheel-файлами поддерживаемых платформ.
- Проверка:
  - uv lock --check и uv tree --locked --package sherpa-onnx подтвердили зависимость от core 1.13.5.
  - чистые uv sync --frozen, uv pip check и import sherpa_onnx завершились успешно в Linux.
  - uv run pytest -q: 282 passed, 2 skipped.
  - uvx ruff check src/local_transcriber/speaker_diarizer.py tests/test_speaker_diarizer.py завершился успешно.
2026-08-29 00:46:39 +03:00
Dmitry Dementiev c0a74cef35 fix(deps): восстановлена установка sherpa-onnx в Linux
- Зачем:
  - в #27 чистая установка Linux не включала sherpa-onnx-core, поэтому import sherpa_onnx падал при загрузке libonnxruntime.so.
  - uv при универсальном резолвинге использовал метаданные armv7 wheel без Requires-Dist и терял обязательную платформенную зависимость.
- Что:
  - версия sherpa-onnx зафиксирована на 1.13.5 вместе с явным metadata override для sherpa-onnx-core==1.13.5.
  - рядом с pin и override записано правило их совместного обновления.
  - uv.lock обновлен с зависимостью на core и wheel-файлами поддерживаемых платформ.
- Проверка:
  - uv lock --check и uv tree --locked --package sherpa-onnx подтвердили зависимость от core 1.13.5.
  - чистые uv sync --frozen, uv pip check и import sherpa_onnx завершились успешно в Linux.
  - uv run pytest -q: 282 passed, 2 skipped.
  - uvx ruff check src/local_transcriber/speaker_diarizer.py tests/test_speaker_diarizer.py завершился успешно.
2026-08-29 00:42:53 +03:00
ddmitry f17c24ca60 Merge pull request 'feat(diarization): добавлено разделение транскрипта по говорящим' (#26) from codex/24-word-diarization into master
Reviewed-on: #26
2026-08-14 21:57:43 +03:00
Dmitriy Dementiev 98baf55572 docs(diarization): зафиксированы результаты приёмки и анализа
- Зачем:
  - решения по неопределённым словам и CPU-стоимости должны быть проверяемыми до публикации реализации.
- Что:
  - задокументировано отклонение post-hoc сглаживания Speaker ? по соседним кластерам.
  - добавлено исследование стоимости каскада и облегчённых embedding-моделей.
- Проверка:
  - `git diff --cached --check` — без ошибок.
2026-08-14 21:56:10 +03:00
Dmitriy Dementiev 726718197f feat(diarization): добавлено разделение транскрипта по говорящим
Зачем:
- локальным транскриптам нужна структура реплик для конспектов и протоколов.

Что:
- добавлены пословные таймкоды для всех ASR-бэкендов и сведение с Sherpa-ONNX.
- реализованы CLI-флаги, деградация без потери ASR и speaker Markdown.
- добавлены проверяемый кеш моделей, тесты и документация.

Проверка:
- `pytest` — 283 passed, 1 skipped.
- `pyright` — 0 errors.
- Ruff и `git diff --check` — без ошибок.
- выполнены три контрольных прогона на реальных записях.
2026-08-14 18:55:42 +03:00
ddmitry 63ba41d906 Merge pull request 'docs(diarization): собраны исследования и калибровка для карты' (#18) from feature/8-diarization-map into master
Reviewed-on: #18
2026-08-14 17:19:13 +03:00
Dmitriy Dementiev b8347004da docs(diarization): уточнены правила сведения и формат
- Зачем:
  - спецификация не должна оставлять неоднозначности перед реализацией диаризации.
- Что:
  - уточнены сведение слов, таймкоды и предупреждение о малом кластере.
  - очищены терминология и граница между ADR и спецификацией.
  - сохранён результат сравнения WeSpeaker и CAMPPlus.
- Проверка:
  - git diff --cached --check и проверка относительных ссылок.
2026-08-14 17:09:27 +03:00
Dmitriy Dementiev b8333ba583 docs(diarization): зафиксированы ADR и спецификация
- Зачем:
  - решения карты должны стать устойчивой основой для реализации диаризации.
- Что:
  - добавлены ADR-007 и спецификация пословной диаризации.
  - дополнен доменный словарь и удалены закрытые направления из backlog.
- Проверка:
  - git diff --cached --check.
2026-08-14 15:55:25 +03:00
Dmitriy Dementiev b260dab047 docs(domain): добавлена разметка говорящих
- Зачем:
  - потребовалось отделить временный результат диаризации от итоговых реплик транскрипта.
- Что:
  - добавлено определение разметки говорящих и перечислены нежелательные синонимы.
  - уточнено, что разметка не содержит текст, имена участников и голосовые эмбеддинги.
- Проверка:
  - выполнена команда git diff --cached --check.
2026-08-14 15:18:59 +03:00
Dmitriy Dementiev 26d4ca2f4a docs(context): добавлены термины диаризации
- Зачем:
  - решение о пословной привязке должно использовать единый язык во всех документах карты.
- Что:
  - определены сегмент распознавания и слово с временной привязкой.
  - реплика говорящего отделена от единицы запуска модели распознавания.
- Проверка:
  - git diff --check.
2026-08-14 14:16:01 +03:00
Dmitry Dementiev bbc2bdacfe docs(diarization): уточнены условия замера Intel
- Зачем:
  - результат benchmark нужно интерпретировать с учётом ограничения питания ноутбука.
- Что:
  - зафиксировано урезанное питание во время прогонов.
  - визуальная оценка потери производительности около 30% явно отделена от измеренных результатов.
- Проверка:
  - git diff --check.
2026-08-14 13:59:33 +03:00
Dmitry Dementiev 99ddf77af3 perf(diarization): добавлен замер на старом Intel
- Зачем:
  - требовалось оценить стоимость опциональной диаризации на доступном слабом Intel baseline.
- Что:
  - зафиксированы ASR, RTFx и peak RSS на трёх контрольных записях.
  - замер peak RSS адаптирован для Linux и macOS.
  - недоступный Core i5 явно заменён Core i7-6820HQ с сохранением ограничения применимости.
- Проверка:
  - uv run ruff check .scratch/diarization/common.py.
  - uv run pytest -q: 243 passed, 1 skipped.
2026-08-14 13:37:07 +03:00
Dmitriy Dementiev b8092aade5 docs(diarization): подтверждено смешение в ASR-сегментах
- Зачем:
  - требовалось проверить долю смешанных ASR-сегментов на трёх записях, включая разговоры на двоих.
- Что:
  - добавлен отчёт с долями сегментов и времени для трёх рабочих созвонов.
  - обвязка замеров переведена на откалиброванный порог 0,89.
  - исследовательский скрипт приведён к формату ruff.
- Проверка:
  - выполнены три полных прогона bench_conflict.py с WeSpeaker и порогом 0,89.
  - uv run ruff check и ruff format --check прошли успешно.
2026-08-14 11:44:02 +03:00