fix(onnx-asr): исправлены баги интеграции после smoke-теста

- Зачем:
  - при smoke-тесте выявлены расхождения между onnx-asr API и мок-тестами.
- Что:
  - убран deprecated cpu_preprocessing из load_model.
  - sample_rate передан как keyword-аргумент в recognize().
  - исправлены имена полей SegmentResult: start_ts→start, end_ts→end.
  - добавлен device "onnx" в DEVICE_DEFAULTS и _VALID_DEVICES.
- Проверка:
  - uv run pytest -q (172 passed).
  - uv run transcribe file.mp4 --device onnx --model gigaam-v3.
This commit is contained in:
2026-04-25 21:48:54 +03:00
parent 7d39ab908b
commit b1cbdc3e0b
3 changed files with 9 additions and 11 deletions
+3 -4
View File
@@ -59,7 +59,6 @@ class OnnxAsrBackend:
model = onnx_asr.load_model( model = onnx_asr.load_model(
model=model_path, model=model_path,
quantization=ct, quantization=ct,
cpu_preprocessing=True,
) )
vad = onnx_asr.load_vad("silero") vad = onnx_asr.load_vad("silero")
self._vad = vad self._vad = vad
@@ -89,10 +88,10 @@ class OnnxAsrBackend:
segments: list[Segment] = [] segments: list[Segment] = []
detected_language = language or "unknown" detected_language = language or "unknown"
for vad_seg in model.recognize(audio_array, 16000, language=language): for vad_seg in model.recognize(audio_array, sample_rate=16000, language=language):
seg = Segment( seg = Segment(
start=max(0.0, vad_seg.start_ts), start=max(0.0, vad_seg.start),
end=max(0.0, vad_seg.end_ts), end=max(0.0, vad_seg.end),
text=vad_seg.text, text=vad_seg.text,
) )
if on_segment is not None: if on_segment is not None:
+2 -1
View File
@@ -22,11 +22,12 @@ DEVICE_DEFAULTS: dict[str, dict[str, str]] = {
"openvino": {"model": "medium", "compute_type": "int8"}, "openvino": {"model": "medium", "compute_type": "int8"},
"openvino-gpu": {"model": "medium", "compute_type": "int8"}, "openvino-gpu": {"model": "medium", "compute_type": "int8"},
"openvino-cpu": {"model": "medium", "compute_type": "int8"}, "openvino-cpu": {"model": "medium", "compute_type": "int8"},
"onnx": {"model": "gigaam-v3", "compute_type": "int8"},
} }
# Одно место правды для допустимых ключей конфига # Одно место правды для допустимых ключей конфига
_VALID_KEYS = set(HARDCODED_DEFAULTS) _VALID_KEYS = set(HARDCODED_DEFAULTS)
_VALID_DEVICES = {"auto", "cpu", "cuda", "openvino", "openvino-gpu", "openvino-cpu"} _VALID_DEVICES = {"auto", "cpu", "cuda", "openvino", "openvino-gpu", "openvino-cpu", "onnx"}
def find_config_file() -> Path | None: def find_config_file() -> Path | None:
+4 -6
View File
@@ -10,9 +10,9 @@ from local_transcriber.types import Segment, TranscribeResult
class FakeVadSegment: class FakeVadSegment:
"""Mimics onnx-asr SegmentResult.""" """Mimics onnx-asr SegmentResult."""
def __init__(self, start_ts, end_ts, text): def __init__(self, start, end, text):
self.start_ts = start_ts self.start = start
self.end_ts = end_ts self.end = end
self.text = text self.text = text
@@ -40,10 +40,9 @@ class TestCreateModel:
calls = [] calls = []
def fake_load_model(model=None, path=None, quantization=None, def fake_load_model(model=None, path=None, quantization=None,
cpu_preprocessing=None, **kwargs): **kwargs):
calls.append({ calls.append({
"model": model, "path": path, "quantization": quantization, "model": model, "path": path, "quantization": quantization,
"cpu_preprocessing": cpu_preprocessing,
}) })
return FakeAsrAdapter() return FakeAsrAdapter()
@@ -59,7 +58,6 @@ class TestCreateModel:
assert len(calls) == 1 assert len(calls) == 1
assert calls[0]["quantization"] == "int8" assert calls[0]["quantization"] == "int8"
assert calls[0]["cpu_preprocessing"] is True
assert model is not None assert model is not None
def test_loads_silero_vad(self, monkeypatch): def test_loads_silero_vad(self, monkeypatch):