Commit Graph
165 Commits
Author SHA1 Message Date
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
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