- Зачем:
- закрыты замечания независимого review по воспроизводимости и VAD-приёмке.
- Что:
- рабочая версия Python точно зафиксирована на 3.13.13.
- нулевые и обратные VAD-сегменты исключены из результата.
- в README записаны наблюдаемые скорости новых моделей с указанием CPU.
- Проверка:
- uv run pytest -q: 224 passed, 1 skipped.
- ограниченная проверка Ruff и uv lock --check завершены успешно.
- Зачем:
- добавлена локальная транскрипция смешанной речи и русского текста с пунктуацией.
- Что:
- onnx-asr обновлён до 0.12 и зарегистрированы три модели GigaAM.
- выбор compute_type учитывает опубликованные квантизации и явность настройки.
- обновлены тесты, README и требования PRD.
- Проверка:
- uv run pytest -q: 223 passed, 1 skipped.
- выполнены smoke- и полные прогоны четырёх GigaAM-моделей.
При adversarial review (gpt-5.5) обнаружено: пользователь с config
compute_type = "float32" и --device onnx падал на старте.
HARDCODED_DEFAULTS["compute_type"] = "float32", apply_device_defaults не
заменяет значение если оно есть в config — старая проверка
(compute_type in ("int8", "fp16", "float32")) пропускала "float32"
дальше как onnx_asr quantization, что заставляло искать несуществующий
файл с суффиксом _float32.
- _normalize_quantization() — explicit маппинг в onnx-asr quantization.
- float32/fp32 → None (unquantized loading в onnx-asr — это None, не строка).
- float16 → fp16 (CUDA-naming → onnx-asr-naming).
- int8/fp16 → pass-through.
- Неизвестные compute_type (например, int8_float32 от CTranslate2) → ValueError
вместо silent fallback на int8 — пользователь раньше получал не ту
модель без предупреждения.
4 новых теста: float32→None, fp32→None, float16→fp16, unknown→raises.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Зачем:
- при 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.
- Зачем:
- Основной метод бэкенда — транскрипция аудиофайла в сегменты с временными метками.
- Что:
- метод transcribe декодирует аудио через faster_whisper.decode_audio, затем вызывает model.recognize() с VAD-сегментацией.
- каждый VAD-сегмент преобразуется в проектную структуру Segment.
- поддержка колбэков on_segment, on_status.
- написаны 4 теста: сбор сегментов, вызов on_segment, передача языка, обработка пустого аудио.
- Проверка:
- uv run pytest tests/test_onnx_asr.py -v (14 passed)
- Зачем:
- onnx-asr модель должна создаваться с квантизацией и VAD для разбивки аудио на сегменты.
- Что:
- метод create_model вызывает onnx_asr.load_model с квантизацией и cpu_preprocessing=True.
- подгружается Silero VAD, прикрепляется к модели через with_vad.
- написаны 3 теста: проверка аргументов load_model, загрузка VAD, передача fp16.
- Проверка:
- uv run pytest tests/test_onnx_asr.py -v
- Зачем:
- Бэкенд должен резолвить алиасы моделей и сохранять compute_type для дальнейшего использования.
- Что:
- добавлен конструктор __init__ с полями actual_compute_type, _resolved_model_id, _vad.
- метод ensure_model_available валидирует алиас и возвращает идентификатор модели onnx-asr.
- написаны 3 теста на резолвинг и сохранение compute_type.
- Проверка:
- uv run pytest tests/test_onnx_asr.py -v
- Зачем:
- onnx-asr бэкенд должен распознавать короткие алиасы (gigaam-v3, parakeet-v3) и raw-имена (nemo-canary-1b-v2).
- Что:
- создан файл backends/onnx_asr.py с MODEL_ALIASES и классом OnnxAsrBackend.
- метод _resolve_model: преобразует алиасы, пропускает raw-имена, выдаёт ValueError для неизвестных.
- написаны 4 теста на разрешение алиасов.
- Проверка:
- uv run pytest tests/test_onnx_asr.py::TestModelAliases -v