Обновление OpenVINO до 2026.3, large-v3-turbo и ONNX по умолчанию #6
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user