- Зачем:
- 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>
- Зачем:
- 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>
- Зачем:
- подготовка к добавлению 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>