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>
This commit is contained in:
2026-03-21 23:28:22 +03:00
co-authored by Claude Opus 4.6
parent fae25a7fb3
commit 42bfbe5280
7 changed files with 431 additions and 9 deletions
+3 -2
View File
@@ -8,10 +8,11 @@ if TYPE_CHECKING:
from .base import Backend
def get_backend(device: str) -> Backend:
def get_backend(device: str, *, compute_type_explicit: bool = True) -> Backend:
"""Возвращает экземпляр бэкенда для указанного устройства.
Импорты ленивые — бэкенд загружается только при запросе.
compute_type_explicit: False если compute_type пришёл из дефолтов (влияет на fallback).
"""
if device == "openvino":
try:
@@ -20,7 +21,7 @@ def get_backend(device: str) -> Backend:
raise ValueError(
"OpenVINO бэкенд недоступен. Установите: pip install openvino-genai"
) from None
return OpenVINOBackend()
return OpenVINOBackend(compute_type_explicit=compute_type_explicit)
# cuda, cpu и всё остальное → faster-whisper
from .faster_whisper import FasterWhisperBackend