- Зачем:
- в одной строке шапки смешивались английские и русские значения, а при неизвестном языке в неё попадало служебное «unknown (не определён)».
- Что:
- формулировки источника языка вынесены константами в formatter и переведены на русский.
- оба бэкенда используют общий признак UNKNOWN_LANGUAGE вместо «auto» и «unknown».
- неизвестный язык печатается одной строкой, без служебного значения.
- Проверка:
- uv run pytest -q: 242 passed, 1 skipped.
- ruff check .: 48 замечаний, столько же, сколько до правки.
BREAKING CHANGE: в шапке транскрипта значения detected и forced заменены на «определён автоматически» и «задан явно»; при неизвестном языке строка выглядит как «- **Язык**: не определён».
- Зачем:
- после смены auto-профиля пользователю нужны явные предупреждения о языковых ограничениях и рабочие пути выбора Whisper-бэкенда.
- Что:
- в MODEL_CATALOG добавлены поддерживаемые языки ONNX-моделей и предупреждение о несовместимом языке.
- для Whisper-имён добавлены подсказки с совместимыми парами backend/model.
- вывод языка различает детекцию, язык моноязычной модели и отсутствие детекции.
- усилены тесты implicit compute type и turbo-каталога, удалены дубли auto-тестов.
- Проверка:
- uv run pytest -q: 241 passed, 1 skipped.
- uv lock --check, compileall и git diff --check.
BREAKING CHANGE: --device auto без NVIDIA теперь выбирает ONNX GigaAM RNN-T; прежний профиль возвращается явным --device или конфигурацией.
- Зачем:
- 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>
- Зачем:
- 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>
- Зачем:
- 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>
- Зачем:
- ускорение транскрипции на 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>