Commit Graph
61 Commits
Author SHA1 Message Date
Dmitry DementievandClaude Opus 5 b315f60746 docs(agents): убрано упоминание GitHub-зеркала как remote
Зеркало поддерживается средствами Gitea и в клоне как remote не существует;
строка вводила агентов в заблуждение.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 10:13:13 +03:00
Dmitry DementievandClaude Opus 5 50787c6531 docs(research): архивировано исследование ускорения на AMD из ветки feature/amd-acceleration
Два документа от 23–24 марта 2026 (DirectML, whisper.cpp + Vulkan на Radeon 780M,
XDNA NPU и бенчмарк качества на Ryzen) перенесены в docs/research и docs/benchmarks
с пометкой «архив». Выводы не реализованы: ADR-003 выбрал OpenVINO GenAI, авто-выбор
устройства закреплён за ONNX CPU. Ветка после переноса удаляется.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 10:06:13 +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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Dmitry Dementiev f043f4e3b5 docs(openvino): добавлены результаты сравнения turbo
- Зачем:
  - нужна практическая оценка нового CPU-профиля на русских встречах.
- Что:
  - зафиксированы скорость, WER, пунктуация, нагрузка и отзывчивость.
  - добавлены две независимые оценки качества и рекомендации пользователям.
- Проверка:
  - uv run pytest.
  - реальные прогоны четырёх профилей на трёх записях.
2026-08-12 08:46:46 +03:00
Dmitry Dementiev a65e5039f5 feat(openvino): добавлена модель large-v3-turbo
- Зачем:
  - нужен быстрый качественный профиль Whisper для локального распознавания.
- Что:
  - добавлены официальные варианты large-v3-turbo INT8 и FP16.
  - покрыты каталог, выбор квантизации, ошибка и создание модели.
- Проверка:
  - uv run pytest.
2026-08-12 08:00:46 +03:00
Dmitry Dementiev 2e69c2f33d chore(openvino): обновлён стек до линии 2026.3
- Зачем:
  - нужна поддерживаемая линия OpenVINO для новых моделей Whisper.
- Что:
  - OpenVINO, GenAI и Tokenizers согласованно обновлены до 2026.3.
  - автоматический переход на следующую линию ограничен версией 2026.4.
- Проверка:
  - uv run pytest.
  - реальный прогон medium INT8 на трёх русскоязычных записях.
2026-08-12 07:59:04 +03:00
Dmitry Dementiev 6f2dbf8e1c fix(cuda): обновлён CTranslate2 для стабильного пакетного режима
- Зачем:
  - CTranslate2 4.7.1 аварийно завершал Windows/CUDA-процесс кодом 0xC0000409 после успешной обработки пакета.
- Что:
  - версия CTranslate2 в uv.lock обновлена до 4.8.1.
  - устранён сбой освобождения CUDA-ресурсов после длинного пакетного прогона.
- Проверка:
  - uv lock --check; uv run pytest -q в Windows и WSL2.
  - полный пакет из трёх записей на Windows/CUDA и полные CUDA, ONNX и OpenVINO-прогоны в WSL2.
2026-08-11 21:49:39 +03:00
Dmitry Dementiev e6210fc73f feat(openvino): поддержка Intel GPU через OpenVINO (#1) 2026-03-22 15:51:40 +03:00
Dmitry DementievandClaude Opus 4.6 617181f2dc feat(openvino): добавлена поддержка Intel GPU через OpenVINO
- Зачем:
  - OpenVINO backend хардкодил "CPU", хотя Intel Arc GPU доступен и даёт ~2x ускорение.
- Что:
  - новые device modes: --device openvino-gpu, openvino-cpu; openvino — авто-детект GPU/CPU.
  - detect_device() проверяет Intel GPU через OpenVINO Core API (с fail-safe).
  - OpenVINOBackend передаёт "GPU"/"CPU" в WhisperPipeline вместо хардкода "CPU".
  - подсказка "Совет: --model large-v3" при наличии GPU и модели не large-v3.
  - .gitattributes для нормализации line endings (eol=lf).
  - 150 тестов, включая GPU detection, routing, fallback, CLI device info.
  - README, docs/gpu.md, docs/PRD.md обновлены для Intel GPU.
- Проверка:
  - uv run pytest (150 passed).
  - uv run transcribe --device openvino-gpu file.mp4 на Intel Arc 140T GPU.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 15:45:27 +03:00