Commit Graph
63 Commits
Author SHA1 Message Date
ddadminandClaude Opus 4.7 1c779be139 Merge branch 'experiment/parakeet-backend-opencode'
Эксперимент с DeepSeek V4 Pro: добавление onnx-asr бэкенда (Parakeet/GigaAM/
FastConformer) с независимой валидацией качества через agent-judge.

Реализация:
- backends/onnx_asr.py — третий pluggable backend через onnxruntime + Silero VAD.
- --device onnx с моделями gigaam-v3 (рекомендуется для русского) и parakeet-v3.
- _normalize_quantization() — маппинг compute_type → onnx-asr quantization
  (int8/fp16 pass-through, float16→fp16, float32/fp32→None, остальные→ValueError).
- DEVICE_DEFAULTS для onnx, _VALID_DEVICES расширен.

Документация:
- ADR-006 — итоги: GigaAM v3 как best-CPU choice для русских встреч, Parakeet
  непригоден для русского (воспроизведены три класса проблем из ADR-005), новый
  класс ошибок Whisper medium на длинных файлах с тихими фрагментами.
- backlog.md — устойчивый список будущих экспериментов (GigaAM v3 RNN-T и др.).

Контекст эксперимента:
- ADR-005 (Opus, master) отклонил Parakeet на двух 15-мин файлах с тихим
  микрофоном. ADR-006 повторяет на 22-81-мин файлах + добавляет GigaAM.
- Реализация прошла три фазы валидации: smoke-test (4 mock-API расхождения
  → fix), agent-judge на 9 транскриптах (подтверждение проблем Parakeet,
  обнаружение Whisper-галлюцинаций), adversarial-review через GPT-5.5
  (compute_type=float32 ломал onnx-загрузку → fix + 4 теста).

Не включено в merge: docs/superpowers/specs/ и plans/ от DeepSeek (stale
assumptions, итоговый канон в ADR-006; полные документы — в истории ветки).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 00:33:30 +03:00
ddadminandClaude Opus 4.7 9cfa437b33 fix(onnx-asr): корректный маппинг compute_type в onnx-asr quantization
При adversarial review (gpt-5.5) обнаружено: пользователь с config
compute_type = "float32" и --device onnx падал на старте.
HARDCODED_DEFAULTS["compute_type"] = "float32", apply_device_defaults не
заменяет значение если оно есть в config — старая проверка
(compute_type in ("int8", "fp16", "float32")) пропускала "float32"
дальше как onnx_asr quantization, что заставляло искать несуществующий
файл с суффиксом _float32.

- _normalize_quantization() — explicit маппинг в onnx-asr quantization.
- float32/fp32 → None (unquantized loading в onnx-asr — это None, не строка).
- float16 → fp16 (CUDA-naming → onnx-asr-naming).
- int8/fp16 → pass-through.
- Неизвестные compute_type (например, int8_float32 от CTranslate2) → ValueError
  вместо silent fallback на int8 — пользователь раньше получал не ту
  модель без предупреждения.

4 новых теста: float32→None, fp32→None, float16→fp16, unknown→raises.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 00:06:22 +03:00
ddadminandClaude Opus 4.7 0c3a67c4ea docs: добавлен backlog.md — устойчивый список будущих экспериментов
В проекте не было общего файла для будущих идей: docs/plan.md — историческая
летопись (всё [x]), docs/gpu.md — потенциальные направления привязаны к GPU/CPU
производительности, открытые вопросы из ADR легко теряются среди следующих ADR.

Создан docs/backlog.md как канонический хаб для будущих экспериментов
с обоснованием, цифрами и ссылками на источники. Первые записи:

- GigaAM v3 RNN-T — потенциальная замена CTC-дефолта (WER 2.6% vs 13.2%
  на сложных текстах, e2e_rnnt c пунктуацией, 70:30 vs Whisper-large-v3 LLM-judge)
- Canary 1B — multilingual + пунктуация на CPU
- Whisper medium галлюцинации на длинных файлах (chunk_length / pipeline-фильтры)
- Качественный pipeline для OpenVINO (давно зафиксировано в gpu.md)
- Включение onnx в --device auto после стабилизации

Все направления связаны ссылками на источники (ADR-006, gpu.md, публикации
SberDevices), чтобы при возврате к работе не пришлось воспроизводить контекст.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:48:36 +03:00
ddadminandClaude Opus 4.7 3b7eb603ae docs(adr): ADR-006 onnx-asr — независимая валидация через agent-judge
Переименовано из 005 в 006: на master уже есть ADR-005-parakeet-evaluation
от прошлого эксперимента (Opus, отклонение Parakeet), нумерация бы конфликтовала.

Качество замерено независимым agent-judge'ем по методологии ADR-005
на 9 транскриптах (3 файла × 3 backend), а не субъективными пометками
"Отлично/Хорошо" на одном файле, как в первой версии. Артефакты транскриптов
лежат в /mnt/c/ddmitry/Videos/OBS/ для верификации.

Подтверждены три класса проблем Parakeet из ADR-005 (Mm-hmm-редукция,
иноязычные вставки, искажение IT-терминов) на новом наборе файлов
с конкретными цитатами и таймкодами.

Обнаружен новый класс ошибок Whisper medium: галлюцинации на длинных
файлах с тихими фрагментами (до 17 минут потеряно на одном файле,
многоминутные повторы, приписывание несуществующих имён). Не описано
в ADR-005, потому что там были 15-минутные отрывки.

GigaAM v3 подтверждён как лучший backend для русских встреч на CPU
(summary utility 4/5 на всех файлах, единственный без потерь содержания).
Рекомендация в README уточнена: parakeet-v3 для русского не подходит,
openvino-cpu medium — только для встреч ≤30 мин с равномерной громкостью.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:35:04 +03:00
ddadmin 5990d85a58 chore: удалён скрипт сравнения (не пригодился)
- Зачем:
  - сравнение сделано вручную, скрипт не использовался.
- Что:
  - удалён scripts/compare_backends.py.
- Проверка:
  - uv run pytest -q (172 passed).
2026-04-25 23:17:30 +03:00
ddadmin 503f2a3732 docs(readme): уточнены рекомендации по onnx-моделям
- Зачем:
  - в README не было рекомендаций по выбору между gigaam-v3 и parakeet-v3.
- Что:
  - добавлена таблица ONNX-моделей с RTFx, языками и пунктуацией.
  - пример parakeet-v3 изменён на --language ru.
  - рекомендации: gigaam-v3 для скорости, parakeet-v3 для пунктуации.
- Проверка:
  - uv run pytest -q (172 passed).
2026-04-25 23:16:13 +03:00
ddadmin 854bf55145 docs: задокументировать onnx-бэкенд в README, CLI-help и ADR-005
- Зачем:
  - пользователь должен знать о --device onnx и поддерживаемых моделях.
- Что:
  - CLI help: добавлен onnx в список устройств.
  - README: секция примеров, таблица платформ, device-aware дефолты.
  - ADR-005: результаты parakeet-v3 --language ru, уточнённые рекомендации.
- Проверка:
  - uv run pytest -q (172 passed).
  - uv run transcribe --help показывает onnx.
2026-04-25 23:13:41 +03:00
ddadmin 53142fd341 docs(adr): ADR-005 — результаты эксперимента с onnx-asr бэкендом
- Зачем:
  - задокументировать результаты сравнения gigaam-v3 vs OpenVINO на CPU.
- Что:
  - таблица скорости по 3 файлам (3-5x ускорение).
  - сравнение качества русской речи с GPU faster-whisper.
  - решение: оставить бэкенд как экспериментальный (--device onnx).
- Проверка:
  - просмотр docs/adr/005-onnx-asr-backend.md.
2026-04-25 22:31:51 +03:00
ddadmin b1cbdc3e0b fix(onnx-asr): исправлены баги интеграции после smoke-теста
- Зачем:
  - при smoke-тесте выявлены расхождения между onnx-asr API и мок-тестами.
- Что:
  - убран deprecated cpu_preprocessing из load_model.
  - sample_rate передан как keyword-аргумент в recognize().
  - исправлены имена полей SegmentResult: start_ts→start, end_ts→end.
  - добавлен device "onnx" в DEVICE_DEFAULTS и _VALID_DEVICES.
- Проверка:
  - uv run pytest -q (172 passed).
  - uv run transcribe file.mp4 --device onnx --model gigaam-v3.
2026-04-25 21:48:54 +03:00
ddadmin 7d39ab908b test: добавить скрипт сравнения onnx-asr и OpenVINO бэкендов
- Зачем:
  - Экспериментальное сравнение скорости и качества транскрипции на реальных аудиофайлах.
- Что:
  - скрипт compare_backends.py запускает транскрипцию одного файла через gigaam-v3, parakeet-v3 и OpenVINO medium.
  - выводит время, количество сегментов и превью текста для каждого.
- Проверка:
  - python scripts/compare_backends.py /path/to/audio.mp3
2026-04-25 21:29:08 +03:00
ddadmin 79dbd170ce feat(onnx-asr): зарегистрировать бэкенд для --device onnx
- Зачем:
  - Бэкенд должен быть доступен через CLI по --device onnx.
- Что:
  - в backends/__init__.py добавлена ветка device == "onnx" с ленивым импортом OnnxAsrBackend.
  - при отсутствии onnx-asr выдаётся понятная ошибка.
  - добавлен тест TestBackendRegistration.
- Проверка:
  - uv run pytest -v (172 passed)
2026-04-25 21:25:28 +03:00
ddadmin 9e04dc8c25 feat(onnx-asr): реализовать transcribe с сегментацией через VAD
- Зачем:
  - Основной метод бэкенда — транскрипция аудиофайла в сегменты с временными метками.
- Что:
  - метод transcribe декодирует аудио через faster_whisper.decode_audio, затем вызывает model.recognize() с VAD-сегментацией.
  - каждый VAD-сегмент преобразуется в проектную структуру Segment.
  - поддержка колбэков on_segment, on_status.
  - написаны 4 теста: сбор сегментов, вызов on_segment, передача языка, обработка пустого аудио.
- Проверка:
  - uv run pytest tests/test_onnx_asr.py -v (14 passed)
2026-04-25 21:24:31 +03:00
ddadmin d9c9aefdb3 feat(onnx-asr): реализовать create_model с Silero VAD
- Зачем:
  - onnx-asr модель должна создаваться с квантизацией и VAD для разбивки аудио на сегменты.
- Что:
  - метод create_model вызывает onnx_asr.load_model с квантизацией и cpu_preprocessing=True.
  - подгружается Silero VAD, прикрепляется к модели через with_vad.
  - написаны 3 теста: проверка аргументов load_model, загрузка VAD, передача fp16.
- Проверка:
  - uv run pytest tests/test_onnx_asr.py -v
2026-04-25 21:22:02 +03:00
ddadmin f25a546754 feat(onnx-asr): реализовать ensure_model_available
- Зачем:
  - Бэкенд должен резолвить алиасы моделей и сохранять compute_type для дальнейшего использования.
- Что:
  - добавлен конструктор __init__ с полями actual_compute_type, _resolved_model_id, _vad.
  - метод ensure_model_available валидирует алиас и возвращает идентификатор модели onnx-asr.
  - написаны 3 теста на резолвинг и сохранение compute_type.
- Проверка:
  - uv run pytest tests/test_onnx_asr.py -v
2026-04-25 21:20:35 +03:00
ddadmin a3d0213cb3 feat(onnx-asr): добавить скелет бэкенда с разрешением алиасов моделей
- Зачем:
  - onnx-asr бэкенд должен распознавать короткие алиасы (gigaam-v3, parakeet-v3) и raw-имена (nemo-canary-1b-v2).
- Что:
  - создан файл backends/onnx_asr.py с MODEL_ALIASES и классом OnnxAsrBackend.
  - метод _resolve_model: преобразует алиасы, пропускает raw-имена, выдаёт ValueError для неизвестных.
  - написаны 4 теста на разрешение алиасов.
- Проверка:
  - uv run pytest tests/test_onnx_asr.py::TestModelAliases -v
2026-04-25 21:19:33 +03:00
ddadmin b5c1da24ce build(deps): добавлена зависимость onnx-asr[cpu,hub]>=0.11.0
- Зачем:
  - onnx-asr бэкенд для транскрипции (Parakeet/GigaAM) даёт 30-90x realtime на CPU.
- Что:
  - добавлен пакет onnx-asr[cpu,hub]>=0.11.0 в зависимости проекта.
  - uv.lock обновлён.
- Проверка:
  - uv run python -c "import onnx_asr; print(onnx_asr.__version__)"
2026-04-25 21:17:24 +03:00
ddadmin 82596187a4 docs(superpowers): добавлены spec и план для onnx-asr бэкенда
- Зачем:
  - задизайнить эксперимент с Parakeet/GigaAM через onnx-asr как третий бэкенд.
- Что:
  - spec: архитектура, модель-алиасы (gigaam-v3, parakeet-v3), API, регистрация.
  - plan: 8 задач TDD: зависимость → скелет → ensure → create → transcribe → регистрация.
- Проверка:
  - gh pr diff, ревью spec/plan.
2026-04-25 21:09:43 +03:00
ddadmin 0b5703a0e3 docs(adr): ADR-005 — Parakeet TDT оценён и отклонён для русских ИТ-встреч
- Зачем:
  - зафиксировать в master результат эксперимента с Parakeet-бэкендом:
    что проверяли, какие цифры получили, почему оставили Whisper как дефолт.
    Знания доступны, код — в экспериментальной ветке feature/parakeet-backend.
- Что:
  - docs/adr/005-parakeet-evaluation.md — полный контекст решения: гипотеза,
    методология, метрики скорости (Parakeet 2.7x быстрее, -35% RAM),
    качество (Summary utility 2-3/5 vs 4/5 у Whisper), систематические
    проблемы модели на тихой русской речи, VAD-тюнинг не помог, условия
    пересмотра решения в будущем (английский / live-captioning / русские
    specialized-модели через onnx-asr).
  - docs/gpu.md — короткая заметка под «Потенциальные направления развития»
    со ссылкой на ADR-005.
- Проверка:
  - cat docs/adr/005-parakeet-evaluation.md.
  - grep -A5 "Parakeet TDT — проверено" docs/gpu.md.
  - ветка feature/parakeet-backend сохранена и не удаляется.
2026-04-19 01:26:20 +03:00
ddadmin 2c1d798eeb Revert "docs(specs): дизайн-спек Parakeet backend"
This reverts commit cb6c1d7728.
2026-04-18 20:32:48 +03:00
ddadmin cb6c1d7728 docs(specs): дизайн-спек Parakeet backend
- Зачем:
  - зафиксировать дизайн экспериментального бэкенда до имплементации; гипотеза — Parakeet TDT v3 быстрее/качественнее Whisper на Intel/AMD встройках.
- Что:
  - добавлен docs/superpowers/specs/2026-04-18-parakeet-backend-design.md после 3 раундов adversarial-review.
  - зафиксированы: onnx-asr+Silero VAD как runtime, CPU EP в MVP, --device parakeet, int8/fp32 compute_type, no-fallback политика, long-audio gate с blocker-thresholds (peak RSS ≤4GB, первый status ≤10с, interval ≤30с, offline после первого запуска).
- Проверка:
  - cat docs/superpowers/specs/2026-04-18-parakeet-backend-design.md.
2026-04-18 20:26:56 +03:00
ddadminandClaude Opus 4.6 749ede090c docs(gpu): Quadro M3000M (CC 5.0) — CUDA не работает в CTranslate2 4.x
float16 требует CC ≥ 7.0, float32 падает с ошибкой — пребилды
CTranslate2 4.x не включают sm_50/sm_60. Рекомендация: --device cpu
или --device openvino.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:56:51 +03:00
ddadminandClaude Opus 4.6 59b74f166c docs(gpu): уточнить модель CPU — Intel i7-11800H
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:52:17 +03:00
ddadminandClaude Opus 4.6 857267763c feat(cli): --threads для управления CPU-потоками + бенчмарк CUDA compute_type
- Зачем:
  - CTranslate2 по умолчанию использует 4 потока; на многоядерных CPU (8+ ядер)
    это неоптимально — --threads 8 даёт +13% ускорения.
  - Не было данных по int8_float32/int8_float16 на NVIDIA GPU.

- Что:
  - --threads / -t: новый CLI-флаг, пробрасывается через load_model →
    backend.create_model(cpu_threads=...) → WhisperModel(cpu_threads=...).
  - Валидация min=0 на входе (typer), Backend протокол синхронизирован.
  - docs/gpu.md: результаты бенчмарка 6 комбинаций CUDA compute_type
    (medium/large-v3 × float16/int8_float32/int8_float16) на двух файлах
    (16 мин и 46 мин). Ключевой вывод: float16 — оптимальный дефолт;
    large-v3 ненадёжен на длинных записях.
  - README: --threads добавлен в таблицу опций.
  - Фикс теста: test_resolve_repo_explicit_unsupported_pair_raises обновлён
    под добавление medium fp16 модели.

- Проверка:
  - uv run pytest: 157 passed.
  - transcribe file.mp4 --device cpu --threads 8: 277с vs 320с (дефолт).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 22:49:16 +03:00
Dmitriy DementievandClaude Opus 4.6 8ae74d2748 docs(gpu): потенциальные направления — quality pipeline для OpenVINO, CUDA int8_float32
Зафиксированы два направления развития:
- temperature fallback и фильтры галлюцинаций для OpenVINO бэкенда
- тестирование int8_float32/int8_float16 на CUDA

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:00:31 +03:00
Dmitriy DementievandClaude Opus 4.6 248f260005 docs(gpu): CPU int8_float32, сравнение pipeline-ов, CUDA рекомендации
- Добавлена секция CPU бэкенда: int8_float32 как рекомендация, тюнинг потоков
- Объяснение разницы качества OpenVINO vs CTranslate2 (pipeline декодирования)
- Секция CUDA: int8_float32/int8_float16 как альтернатива для тестирования
- Обновлена таблица OpenVINO моделей (medium fp16)
- Обновлены таблицы скорости и качества

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 10:45:17 +03:00
Dmitriy DementievandClaude Opus 4.6 413cb3e6d8 feat(openvino): добавить medium fp16 модель как опцию
OpenVINO/whisper-medium-fp16-ov доступна через --compute-type fp16.
На CPU fp16 эмулируется программно (медленно), но на Intel Arc GPU
даёт аппаратное ускорение через XMX. Не меняет дефолты.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 09:48:29 +03:00
Dmitriy DementievandClaude Opus 4.6 9d41b893c3 docs(readme): добавить int8_float32 в таблицу compute_type
Бенчмарк показал: int8_float32 даёт 1.5x ускорение на CPU при сохранении
качества float32. Добавлен как рекомендуемый вариант для CPU.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 09:04:24 +03:00
Dmitriy DementievandClaude Opus 4.6 6f7e61c779 docs(adr): ADR-004 — дефолты compute_type и стратегия ускорения
Бенчмарк показал: OpenVINO fp16 даёт 3.7x ускорение, но теряет качество
на русской разговорной речи. CTranslate2 int8_float32 — оптимальный баланс.
Следующий шаг — DirectML бэкенд для AMD Radeon iGPU.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 15:58:12 +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
ddadminandClaude Opus 4.6 dc59d2a620 feat: pluggable backends + OpenVINO для ускорения на x86 CPU
Добавлена pluggable-архитектура бэкендов транскрипции и OpenVINO
как второй движок для ускорения на Intel/AMD CPU в 3-6 раз.

- Backend Protocol (structural typing) + реестр с lazy imports
- FasterWhisperBackend (CUDA/CPU) — рефакторинг без изменения поведения
- OpenVINOBackend — openvino-genai WhisperPipeline, предквантизированные модели
- Auto-detect: CUDA → OpenVINO → CPU
- Cross-backend fallback с сохранением состояния в батч-режиме
- Тесты на 3 CPU: Intel Ultra 7, AMD Ryzen 7, Intel i7 (WSL2)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 12:16:35 +03:00
ddadminandClaude Opus 4.6 aac6b0f3d6 fix(cli): понятный прогресс OpenVINO + единый цвет пути в выводе
- Зачем:
  - индикатор "00:32 / 16:02" был неочевиден — два одинаковых формата.
  - путь в "Транскрипт сохранён" отображался разным цветом из-за Rich bold-разметки.
- Что:
  - формат прогресса: "Транскрибирую 16 мин аудио (OpenVINO)... прошло 00:32".
  - путь выводится в кавычках без bold-разметки, единым цветом.
- Проверка:
  - uv run pytest -q — 124 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 12:04:42 +03:00
ddadminandClaude Opus 4.6 f42d3ae842 fix(openvino): корректный compute_type в CLI + индикатор прогресса
- Зачем:
  - CLI показывал int8, хотя реально использовался fp16 для large-v3.
  - при транскрипции OpenVINO не было индикации прогресса.
- Что:
  - _resolve_repo возвращает (repo_id, actual_compute_type).
  - бэкенды сохраняют actual_compute_type после ensure_model_available.
  - CLI выводит фактический compute_type после load_model, а не дефолтный.
  - generate() запускается в потоке, статус обновляется каждую секунду с elapsed time.
- Проверка:
  - uv run pytest -q — 124 passed.
  - uv run transcribe file.mp4 --device openvino --model large-v3 показывает fp16.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 11:58:29 +03:00
ddadminandClaude Opus 4.6 f5345031ef docs: результаты тестов на 3 CPU + инструкция очистки моделей
- Зачем:
  - сводка бенчмарков OpenVINO на Intel Ultra 7, AMD Ryzen 7, Intel i7.
  - пользователям нужна инструкция по управлению дисковым пространством моделей.
- Что:
  - docs/gpu.md: полная таблица скорости по 3 CPU, small/medium/large-v3.
  - docs/gpu.md: рекомендации по выбору модели для разных сценариев.
  - README.md: секция очистки моделей (Linux + Windows PowerShell).
  - README.md: troubleshooting WinError 1314 (симлинки на Windows).
- Проверка:
  - uv run pytest -q — 124 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 11:50:34 +03:00
ddadminandClaude Opus 4.6 61908604a0 fix(openvino): клампинг отрицательных таймкодов + результаты тестов Intel/AMD
- Зачем:
  - OpenVINO GenAI может вернуть отрицательный end_ts, ломая формат транскрипта.
  - зафиксировать бенчмарки на Intel и AMD CPU для документации.
- Что:
  - backends/openvino.py: start/end клампятся через max(0, ...).
  - docs/gpu.md: полная таблица скорости Intel i7 vs AMD Ryzen 7 8845H.
  - сравнение качества medium int8 vs large-v3 fp16 vs CPU float32 на одном файле.
  - вывод: large-v3 OpenVINO (416с) быстрее medium CPU (734с) при лучшем качестве.
- Проверка:
  - uv run pytest -q — 124 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 11:10:48 +03:00
ddadminandClaude Opus 4.6 29da69c595 docs(gpu): добавлены результаты тестирования OpenVINO на Intel CPU
- Зачем:
  - зафиксировать реальные бенчмарки OpenVINO перед мержем в main.
- Что:
  - скорость: OpenVINO medium int8 в 3-4x быстрее CPU float32 (205с vs 658с на 16 мин файле).
  - качество: сопоставимо с CPU float32 и CUDA float16, галлюцинаций нет.
  - таблица ожидаемой скорости обновлена с OpenVINO строкой.
  - отмечено, что тестирование на AMD CPU пока не проводилось.
- Проверка:
  - uv run transcribe file.mp4 --device openvino.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 00:29:18 +03:00
ddadminandClaude Opus 4.6 2d35bda976 docs: ADR-003, обновлены gpu.md и README для OpenVINO
- Зачем:
  - документация должна отражать новую архитектуру бэкендов и поддержку OpenVINO.
- Что:
  - docs/adr/003-pluggable-backends.md: Protocol, lazy imports, fallback, compute_type контракт.
  - docs/gpu.md: секция OpenVINO с таблицей моделей, таблица бэкендов, CUDA 12 для Windows исправлен везде.
  - README.md: OpenVINO в фичах, платформах, CLI опциях, дефолтах; fp16 документирован как OpenVINO-тип.
- Проверка:
  - uv run pytest -q — 124 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 00:02:52 +03:00
ddadminandClaude Opus 4.6 262bfd91d1 fix(openvino): исправлены баги compute_type, fallback и help text
- Зачем:
  - compute_type из конфига терялся как implicit, ломая выбор модели OpenVINO.
  - узкий матчинг ошибок пропускал реальные OpenVINO runtime failures.
  - ensure_model_available(device="openvino") падал из-за дефолта float32.
  - ensure_model_available не передавал compute_type_explicit, ломая large-v3 → fp16 override.
  - help по --compute-type не отражал дефолт для OpenVINO.
- Что:
  - ct_explicit учитывает и CLI-флаг, и конфиг-файл.
  - публичный API transcribe() передаёт compute_type_explicit=True.
  - _is_openvino_error() ловит любой RuntimeError.
  - ensure_model_available: дефолт compute_type из DEVICE_DEFAULTS, explicit прокинут в get_backend.
  - --compute-type help обновлён: float16 (CUDA) / int8 (OpenVINO) / float32 (CPU).
- Проверка:
  - uv run pytest -v — 124 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:45:27 +03:00
ddadminandClaude Opus 4.6 ee9e017083 feat(transcriber): cross-backend fallback openvino → cpu
- Зачем:
  - если OpenVINO не справляется (ошибка init или mid-stream), нужен автоматический переход на CPU через faster-whisper.
- Что:
  - _is_openvino_error() распознаёт ошибки OpenVINO runtime по паттернам в сообщении.
  - _is_backend_error() теперь маршрутизирует на правильную проверку по device.
  - при fallback: скачивается модель для CPU бэкенда, создаётся новая модель, обновляются backend/model_path.
  - 3 интеграционных теста: openvino→cpu init fallback, midstream fallback, strict_device без fallback.
- Проверка:
  - uv run pytest -v — 122 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:30:50 +03:00
ddadminandClaude Opus 4.6 42bfbe5280 feat(openvino): реализован OpenVINO бэкенд транскрипции
- Зачем:
  - ускорение транскрипции на x86 CPU (Intel/AMD) в 2-4 раза через OpenVINO GenAI.
- Что:
  - создан backends/openvino.py: OpenVINOBackend с ensure_model_available, create_model, transcribe.
  - модели скачиваются из HuggingFace (OpenVINO/whisper-*-ov), формат OpenVINO IR.
  - аудио декодируется через faster_whisper.decode_audio (PyAV) → .tolist() → pipe.generate(return_timestamps=True).
  - контракт compute_type: явный --compute-type уважается; из дефолтов large-v3 получает fp16 автоматически.
  - openvino-genai добавлен в pyproject.toml с platform markers (x86_64/AMD64, не macOS).
  - compute_type_explicit прокинут через get_backend → load_model → CLI.
  - 16 тестов для OpenVINO бэкенда: resolve_repo, ensure, create, transcribe, validate.
- Проверка:
  - uv run pytest -v — 119 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:28:22 +03:00
ddadminandClaude Opus 4.6 fae25a7fb3 feat(config): добавлена поддержка устройства openvino в конфиге и auto-detect
- Зачем:
  - подготовка к OpenVINO бэкенду: config и utils должны знать о новом устройстве.
- Что:
  - config.py: openvino добавлен в _VALID_DEVICES и DEVICE_DEFAULTS (model=medium, compute_type=int8).
  - utils.py: detect_device() расширен цепочкой CUDA → OpenVINO → CPU; _is_openvino_available() проверяет архитектуру (x86_64/AMD64) и наличие openvino_genai.
  - cli.py: --device help text обновлён (auto|cpu|cuda|openvino).
  - добавлены тесты: config с openvino device, device defaults, auto-detect приоритет.
- Проверка:
  - uv run pytest -v — 103 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:22:13 +03:00
ddadminandClaude Opus 4.6 4c5399c2fc refactor(transcriber): введена pluggable-архитектура бэкендов транскрипции
- Зачем:
  - подготовка к добавлению OpenVINO бэкенда для ускорения на x86 CPU без CUDA.
  - архитектура должна позволять добавлять новые бэкенды (CoreML, AMD XDNA) без переписывания кода.
- Что:
  - создан types.py с общими типами (Segment, TranscribeResult, TranscribeFileResult).
  - создан backends/base.py с Backend Protocol (3 метода: ensure_model_available, create_model, transcribe).
  - создан backends/faster_whisper.py — текущий код вынесен из transcriber.py в FasterWhisperBackend.
  - transcriber.py переделан в оркестратор: load_model() владеет полным пайплайном (ensure + create), CLI больше не вызывает ensure_model_available() отдельно.
  - TranscribeFileResult расширен полями backend и model_path для корректного cross-backend fallback в батч-режиме.
  - device_used проставляется оркестратором, а не бэкендом.
  - cli.py: вынесен _format_device_info(), подготовлен к openvino.
  - тесты обновлены: mock-точки перенесены с WhisperModel на get_backend/бэкенд-объекты.
- Проверка:
  - uv run pytest -v — 98 passed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 23:18:39 +03:00
ddadmin 8632960354 chore: добавлена лицензия MIT
- Зачем:
  - формальное указание условий использования проекта.
- Что:
  - создан файл LICENSE с текстом MIT License.
  - добавлено поле license = "MIT" в pyproject.toml.
- Проверка:
  - cat LICENSE && grep license pyproject.toml.
2026-03-18 23:57:35 +03:00
ddadminandClaude Opus 4.6 16b52ca683 docs(readme): добавлена инструкция по удалению
- Зачем:
  - пользователь не знал, как удалить утилиту
- Что:
  - добавлена секция «Удаление» с командой uv tool uninstall
- Проверка:
  - визуальная проверка README.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 23:40:15 +03:00
ddadminandClaude Opus 4.6 364c8db354 fix(transcriber): распознавание cublas/cudnn ошибок и уточнение версии CUDA
- Зачем:
  - cublas64_12.dll not found не распознавалась как CUDA-ошибка, fallback на CPU не срабатывал
- Что:
  - _is_cuda_error теперь матчит cublas и cudnn в дополнение к cuda и out of memory
  - README: добавлен шаг GPU-ускорения в установку, зафиксирована CUDA 12 (ctranslate2 4.7)
- Проверка:
  - uv run pytest (97 passed)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 23:33:43 +03:00
ddadminandClaude Opus 4.6 ac8ea508ce docs: добавлены docstrings и расширен CONTRIBUTING.md
- Зачем:
  - покрытие документацией было неравномерным, отсутствовало архитектурное описание
- Что:
  - добавлены модульные docstrings во все 5 модулей (utils, config, formatter, transcriber, cli)
  - добавлены docstrings для всех публичных функций без документации
  - добавлены inline-комментарии для неочевидной логики (CUDA fallback, strict device, glob, SOCKS proxy)
  - CONTRIBUTING.md: секции «Архитектура», «Ключевые решения», «Тестирование», «Частые задачи»
  - обновлено правило языка комментариев (русский вместо английского)
- Проверка:
  - uv run pytest (97 passed, 1 skipped)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 23:25:17 +03:00
ddadminandClaude Opus 4.6 87f7dc1723 docs(readme): редизайн README и удаление зависимости от ffmpeg
- Зачем:
  - README перегружен деталями GPU/бенчмарков, нет Quick Start, macOS/Windows — второй класс.
  - системный ffmpeg не нужен — PyAV (зависимость faster-whisper) включает FFmpeg в wheels.
- Что:
  - переписан README: Quick Start в первых строках, установка без клонирования через uv tool install, паритет платформ, progressive disclosure через <details>.
  - удалена функция check_ffmpeg() из utils.py, убраны импорт и вызовы из cli.py.
  - убраны моки check_ffmpeg и тест ffmpeg-ошибки из test_cli.py.
  - GPU-контент вынесен в docs/gpu.md, добавлен CONTRIBUTING.md.
- Проверка:
  - uv run pytest — 97 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 23:07:39 +03:00
ddadminandClaude Opus 4.6 b7e6ab634a feat(config): добавлены device-aware дефолты и результаты тестов
- Зачем:
  - тестирование на реальных записях показало, что int8 даёт галлюцинации на длинных файлах, auto-detect языка ошибается — нужны оптимальные дефолты по устройству.
- Что:
  - дефолты: medium float16 (GPU), medium float32 (CPU), language=ru.
  - добавлены DEVICE_DEFAULTS и apply_device_defaults() в config.py.
  - убран preprocessor_config.json из обязательных файлов модели (отсутствует у medium).
  - README обновлён: таблицы скоростей, качества, результаты тестирования compute_type.
- Проверка:
  - uv run pytest — 98 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:43:06 +03:00
ddadminandClaude Opus 4.6 e28232ef50 feat(cli): добавлен батч-режим и конфигурационный файл (шаги 8–12)
- Зачем:
  - обработка нескольких файлов за один вызов с загрузкой модели один раз.
  - хранение дефолтов (модель, язык, устройство) в .transcriber.toml.
- Что:
  - добавлен config.py: поиск .transcriber.toml (CWD → ~/.config), парсинг, валидация, приоритет CLI > конфиг > хардкод.
  - рефакторинг transcriber.py: выделены load_model() и _transcribe_file() с TranscribeFileResult для переиспользования модели в батче.
  - добавлены expand_globs() с дедупликацией и has_existing_transcript() в utils.py.
  - CLI: files: list[Path], --force/-f, prescan-first батч с итоговой статистикой и временем, Status-спиннер для прогресса.
  - README: секции батч-режим, конфигурационный файл, --force в таблице опций.
  - ADR-002: зафиксированы архитектурные решения (prescan-first, TranscribeFileResult, конфиг без мержа).
- Проверка:
  - uv run pytest -q — 94 passed, 1 skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 20:57:19 +03:00
ddadminandClaude Opus 4.6 b46827a283 docs: добавлен README с инструкцией по установке и использованию
- Зачем:
  - чтобы коллега мог установить и запустить проект на Windows/WSL2/Linux без вопросов (шаг 7 plan.md).
- Что:
  - создан README.md: требования, установка через uv tool, примеры CLI, таблицы моделей и квантизаций.
  - описаны настройка GPU/CUDA по платформам, совместимость GPU, ожидаемая скорость.
  - добавлен пример выходного файла, соответствующий реальному формату formatter (HH:MM:SS.ss, группировка абзацев).
  - отмечен шаг 7 как выполненный в plan.md.
- Проверка:
  - uv tool install . && transcribe --help — CLI доступен глобально.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 20:16:33 +03:00