Обновление OpenVINO до 2026.3, large-v3-turbo и ONNX по умолчанию #6

Merged
ddmitry merged 9 commits from feature/4-openvino-2026-3 into master 2026-08-12 12:43:46 +03:00
2 changed files with 28 additions and 5 deletions
Showing only changes of commit 9ae013ad0f - Show all commits
+18 -5
View File
@@ -55,6 +55,9 @@ _PARAKEET_V3_LANGUAGES = frozenset(
_WHISPER_MODEL_NAMES = frozenset( _WHISPER_MODEL_NAMES = frozenset(
{"tiny", "base", "small", "medium", "large-v3", "large-v3-turbo"} {"tiny", "base", "small", "medium", "large-v3", "large-v3-turbo"}
) )
# faster-whisper не знает turbo, поэтому для cpu и cuda подсказываем medium.
# Источник правды — MODEL_REPOS в backends/faster_whisper.py и backends/openvino.py
_OPENVINO_ONLY_WHISPER_MODELS = frozenset({"large-v3-turbo"})
MODEL_CATALOG: dict[str, OnnxModelSpec] = { MODEL_CATALOG: dict[str, OnnxModelSpec] = {
"gigaam-v3": OnnxModelSpec( "gigaam-v3": OnnxModelSpec(
@@ -253,11 +256,13 @@ class OnnxAsrBackend:
if model_name in MODEL_ALIASES: if model_name in MODEL_ALIASES:
return MODEL_ALIASES[model_name] return MODEL_ALIASES[model_name]
if model_name in _WHISPER_MODEL_NAMES: if model_name in _WHISPER_MODEL_NAMES:
fallback = _whisper_fallback_model(model_name)
raise ValueError( raise ValueError(
f"Модель '{model_name}' относится к Whisper и не поддерживается " f"Модель '{model_name}' относится к Whisper и не поддерживается "
"ONNX-бэкендом. Без CUDA --device auto выбирает ONNX; " "ONNX-бэкендом. Без CUDA --device auto выбирает ONNX; "
f"укажите --device openvino-cpu --model {model_name} " f"укажите --device openvino-cpu --model {model_name} на x86, "
"или --device cuda --model medium." f"--device cpu --model {fallback} на любой платформе "
f"или --device cuda --model {fallback} при NVIDIA GPU."
) )
if "/" in model_name or model_name.count("-") >= 2: if "/" in model_name or model_name.count("-") >= 2:
# Looks like a raw onnx-asr name — allow passthrough # Looks like a raw onnx-asr name — allow passthrough
@@ -280,9 +285,10 @@ class OnnxAsrBackend:
warnings.warn( warnings.warn(
f"Язык '{language}' не поддерживается моделью '{self._model_name}' " f"Язык '{language}' не поддерживается моделью '{self._model_name}' "
f"(поддерживаются: {supported}). Результат может быть некорректным. " f"(поддерживаются: {supported}). Результат может быть некорректным. "
"Для других языков используйте " "Для других языков возьмите Whisper: "
"--device openvino-cpu --model medium " "--device openvino-cpu --model medium на x86, "
"или --device cuda --model medium.", "--device cpu --model medium на любой платформе "
"или --device cuda --model medium при NVIDIA GPU.",
UserWarning, UserWarning,
stacklevel=2, stacklevel=2,
) )
@@ -304,6 +310,13 @@ def _preferred_compute_type(quantizations: frozenset[str | None]) -> str:
raise ValueError("Для ONNX-модели не указаны доступные квантизации") raise ValueError("Для ONNX-модели не указаны доступные квантизации")
def _whisper_fallback_model(model_name: str) -> str:
"""Модель для подсказки про faster-whisper: turbo там недоступен."""
if model_name in _OPENVINO_ONLY_WHISPER_MODELS:
return "medium"
return model_name
def _model_language(spec: OnnxModelSpec | None) -> str | None: def _model_language(spec: OnnxModelSpec | None) -> str | None:
if spec is not None and len(spec.supported_languages) == 1: if spec is not None and len(spec.supported_languages) == 1:
return next(iter(spec.supported_languages)) return next(iter(spec.supported_languages))
+10
View File
@@ -257,6 +257,7 @@ class TestTranscribe:
UserWarning, UserWarning,
match=( match=(
r"Язык 'en'.*--device openvino-cpu --model medium.*" r"Язык 'en'.*--device openvino-cpu --model medium.*"
r"--device cpu --model medium.*"
r"--device cuda --model medium" r"--device cuda --model medium"
), ),
): ):
@@ -460,6 +461,13 @@ class TestModelAliases:
): ):
backend._resolve_model("medium") backend._resolve_model("medium")
def test_whisper_error_offers_platform_independent_backend(self):
"""На macOS и ARM нет ни OpenVINO, ни CUDA — нужен путь через cpu."""
backend = OnnxAsrBackend()
with pytest.raises(ValueError, match=r"--device cpu --model medium"):
backend._resolve_model("medium")
def test_turbo_whisper_error_suggests_models_supported_by_backends(self): def test_turbo_whisper_error_suggests_models_supported_by_backends(self):
backend = OnnxAsrBackend() backend = OnnxAsrBackend()
@@ -469,4 +477,6 @@ class TestModelAliases:
message = str(exc_info.value) message = str(exc_info.value)
assert "--device openvino-cpu --model large-v3-turbo" in message assert "--device openvino-cpu --model large-v3-turbo" in message
assert "--device cuda --model medium" in message assert "--device cuda --model medium" in message
assert "--device cpu --model medium" in message
assert "--device cuda --model large-v3-turbo" not in message assert "--device cuda --model large-v3-turbo" not in message
assert "--device cpu --model large-v3-turbo" not in message