3 Commits
Author SHA1 Message Date
Dmitry Dementiev f043f4e3b5 docs(openvino): добавлены результаты сравнения turbo
- Зачем:
  - нужна практическая оценка нового CPU-профиля на русских встречах.
- Что:
  - зафиксированы скорость, WER, пунктуация, нагрузка и отзывчивость.
  - добавлены две независимые оценки качества и рекомендации пользователям.
- Проверка:
  - uv run pytest.
  - реальные прогоны четырёх профилей на трёх записях.
2026-08-12 08:46:46 +03:00
Dmitry Dementiev a65e5039f5 feat(openvino): добавлена модель large-v3-turbo
- Зачем:
  - нужен быстрый качественный профиль Whisper для локального распознавания.
- Что:
  - добавлены официальные варианты large-v3-turbo INT8 и FP16.
  - покрыты каталог, выбор квантизации, ошибка и создание модели.
- Проверка:
  - uv run pytest.
2026-08-12 08:00:46 +03:00
Dmitry Dementiev 2e69c2f33d chore(openvino): обновлён стек до линии 2026.3
- Зачем:
  - нужна поддерживаемая линия OpenVINO для новых моделей Whisper.
- Что:
  - OpenVINO, GenAI и Tokenizers согласованно обновлены до 2026.3.
  - автоматический переход на следующую линию ограничен версией 2026.4.
- Проверка:
  - uv run pytest.
  - реальный прогон medium INT8 на трёх русскоязычных записях.
2026-08-12 07:59:04 +03:00
7 changed files with 286 additions and 22 deletions
+9 -3
View File
@@ -263,7 +263,8 @@ language = "en"
- **Макс. качество (NVIDIA):** `large-v3` + `--compute-type float16` - **Макс. качество (NVIDIA):** `large-v3` + `--compute-type float16`
- **Макс. качество (Intel GPU):** `large-v3` + `--device openvino-gpu` - **Макс. качество (Intel GPU):** `large-v3` + `--device openvino-gpu`
- **Макс. скорость CPU (русский):** `--device onnx --model gigaam-v3` (17-29× RTF, без пунктуации; рекомендуется LLM-нормализация терминов после) - **Макс. скорость CPU (русский):** `--device onnx --model gigaam-v3` (17-29× RTF, без пунктуации; рекомендуется LLM-нормализация терминов после)
- **CPU с пунктуацией (русский):** `--device openvino-cpu --model medium` (5-6× RTF; для встреч ≤30 мин с равномерной громкостью — на длинных файлах с тихими фрагментами возможны галлюцинации) - **Быстрый OpenVINO с низким WER:** `--device openvino-cpu --model large-v3-turbo --compute-type int8` (7,2× RTFx на контрольном Intel CPU; пунктуация может быть слабой)
- **OpenVINO для чтения и конспекта:** `--device openvino-cpu --model medium` (около 6× RTFx; независимая оценка показала лучшую сохранность содержания, чем turbo)
- **Быстрый тест:** `tiny` — для проверки пайплайна - **Быстрый тест:** `tiny` — для проверки пайплайна
<details> <details>
@@ -276,6 +277,7 @@ language = "en"
| `small` | ~460 MB | ~1.5 GB | ★★★ | ★★★ | | `small` | ~460 MB | ~1.5 GB | ★★★ | ★★★ |
| `medium` | ~1.5 GB | ~2.5 GB | ★★ | ★★★★ | | `medium` | ~1.5 GB | ~2.5 GB | ★★ | ★★★★ |
| `large-v3` | ~3 GB | ~2.5 GB | ★ | ★★★★★ | | `large-v3` | ~3 GB | ~2.5 GB | ★ | ★★★★★ |
| `large-v3-turbo` | ~1 GB | — | ★★★★ | ★★★★ |
#### ONNX-модели (`--device onnx`) #### ONNX-модели (`--device onnx`)
@@ -331,11 +333,15 @@ device-aware дефолт недоступен для выбранной мод
`float16`/`fp16` и `float32` значительно стабильнее на записях >20 минут. `float16`/`fp16` и `float32` значительно стабильнее на записях >20 минут.
> Для OpenVINO `--compute-type` выбирает предквантизированную модель (int8 или fp16), > Для OpenVINO `--compute-type` выбирает предквантизированную модель (int8 или fp16),
> а не runtime-параметр. Для `large-v3` по умолчанию выбирается `fp16`. > а не параметр времени выполнения. Для `large-v3` по умолчанию выбирается
> `fp16`; для `large-v3-turbo` доступны явные варианты `int8` и `fp16`, а
> неявный профиль OpenVINO использует `int8`.
</details> </details>
Подробнее: бенчмарки, OpenVINO, совместимость GPU, результаты тестирования — [docs/gpu.md](docs/gpu.md). Подробнее: бенчмарки, OpenVINO, совместимость GPU, результаты тестирования —
[docs/gpu.md](docs/gpu.md). Сравнение `large-v3-turbo` с CPU-профилями:
[OpenVINO 2026.3 и large-v3-turbo](docs/benchmarks/2026-08-12-openvino-large-v3-turbo-comparison.md).
<details> <details>
<summary>Формат вывода</summary> <summary>Формат вывода</summary>
@@ -0,0 +1,188 @@
# Сравнение OpenVINO large-v3-turbo с CPU-профилями
**Дата:** 2026-08-12
**Статус:** завершённое сравнение на трёх русскоязычных встречах
## Цель
Проверить обновление OpenVINO с линии 2026.0 до 2026.3 и определить, даёт ли
`large-v3-turbo` практическое преимущество перед `medium` и быстрым профилем
ONNX на CPU. Модель по умолчанию и порядок выбора `--device auto` в рамках
сравнения не менялись.
## Оборудование и условия
- ноутбук Lenovo 82JD;
- Intel Core i7-11800H, 8 ядер / 16 логических процессоров, 2,30 ГГц;
- 64 ГиБ DDR4-3200, два модуля Kingston по 32 ГиБ;
- Windows 11 Корпоративная, сборка 26200;
- схема питания «Сбалансированная»;
- OpenVINO 2026.3.0, OpenVINO GenAI и Tokenizers 2026.3.0.0;
- Python 3.13.13;
- язык во всех командах задан явно: `--language ru`;
- модели запускались последовательно, без конкурирующих прогонов.
Кэш каждой модели предварительно прогревался. Время измерялось от запуска
команды до её завершения и включает чтение и декодирование локального файла,
но не скачивание модели. Загрузка процессора и свободная память опрашивались
раз в две секунды. Минимум свободной памяти характеризует всю систему, а не
только процесс распознавания.
Во время прогонов система оставалась пригодной для обычной интерактивной
работы. На OpenVINO средняя загрузка составляла 54–62%. ONNX на двух записях
кратковременно занимал процессор полностью, но наблюдаемого зависания системы
не было. Это субъективное наблюдение, а не числовой порог приёмки.
## Контрольный набор
Использованы те же три записи общей длительностью 43:37 и те же внешние
транскрипты, что в [сравнении GigaAM и Whisper](2026-08-11-gigaam-model-comparison.md).
Размеры и SHA-256 всех шести локальных файлов совпали с опубликованным там
манифестом.
Внешние транскрипты сами содержат ошибки, редактируют разговорную речь и
добавляют разделение по говорящим. Поэтому WER служит сравнительным сигналом
внутри одной записи, а не абсолютной оценкой качества.
## Методика
Команды OpenVINO имели следующий вид:
```powershell
uv run transcribe <recording.mp4> `
--device openvino-cpu `
--model <medium|large-v3-turbo> `
--compute-type <int8|fp16> `
--language ru `
--force
```
Для ONNX использовались `--device onnx`, `--model gigaam-v3-e2e-rnnt` и
`--compute-type int8`. WER считался после удаления метаданных, таймкодов и
обозначений говорящих, приведения к нижнему регистру, замены `ё` на `е` и
удаления пунктуации. Итоговый WER — микроусреднение: сумма замен, удалений и
вставок делится на общее число слов во внешних текстах. Плотность пунктуации —
число знаков `.,!?…:;` на 1000 распознанных слов.
## Проверка обновления OpenVINO
До изменения зависимостей OpenVINO 2026.0 `medium` INT8 был повторно запущен
на всём наборе с прогретым кэшем. После обновления тот же профиль успешно
прошёл автоматические проверки и реальный прогон.
| Стек и профиль | Суммарное время | RTFx | WER | Пунктуация / 1000 слов | Предупреждения |
|---|---:|---:|---:|---:|---:|
| OpenVINO 2026.0 medium INT8 | 417,0 с | 6,28× | 28,9% | 191 | 1 |
| OpenVINO 2026.3 medium INT8 | 436,7 с | 5,99× | 25,3% | 185 | 0 |
На линии 2026.0 RSQM содержал 11 одинаковых последовательных сегментов и
получил предупреждение о возможной галлюцинации. После обновления повтор не
воспроизвёлся, а WER этой записи снизился с 34,2% до 23,3%. Суммарное время
выросло на 4,7%; из-за естественного разброса единичных запусков это не следует
считать устойчивой регрессией без серии повторов.
## Результаты после обновления
### Сводка по трём записям
| Профиль | Время | RTFx | WER | Пунктуация / 1000 слов | Средний / пиковый CPU | Минимум свободной памяти |
|---|---:|---:|---:|---:|---:|---:|
| OpenVINO medium INT8 | 436,7 с | 5,99× | 25,3% | 185 | 54,3% / 85% | 36,25 ГиБ |
| **OpenVINO large-v3-turbo INT8** | **365,5 с** | **7,16×** | **24,0%** | 96 | 62,0% / 86% | 35,04 ГиБ |
| OpenVINO large-v3-turbo FP16 | 545,0 с | 4,80× | 24,8% | 103 | 57,1% / 87% | 32,96 ГиБ |
| ONNX GigaAM v3 E2E RNN-T INT8 | **265,7 с** | **9,85×** | 29,1% | **290** | 70,7% / 100% | 35,52 ГиБ |
### По отдельным записям
| Запись | Профиль | Время | RTFx | WER | Пунктуация / 1000 слов |
|---|---|---:|---:|---:|---:|
| BDMA | medium INT8 | 137,0 с | 6,50× | **23,0%** | 194 |
| BDMA | turbo INT8 | **118,7 с** | **7,51×** | 24,4% | 79 |
| BDMA | turbo FP16 | 180,0 с | 4,95× | 26,2% | 60 |
| BDMA | GigaAM RNN-T INT8 | **87,6 с** | **10,17×** | 29,0% | **326** |
| RSQM | medium INT8 | 125,7 с | 6,72× | 23,3% | 171 |
| RSQM | turbo INT8 | 116,9 с | 7,23× | **22,4%** | 4 |
| RSQM | turbo FP16 | 170,2 с | 4,96× | 23,3% | 31 |
| RSQM | GigaAM RNN-T INT8 | **92,9 с** | **9,09×** | 27,4% | **286** |
| DataCat | medium INT8 | 174,0 с | 5,07× | 28,1% | 188 |
| DataCat | turbo INT8 | **129,9 с** | **6,79×** | **24,7%** | 169 |
| DataCat | turbo FP16 | 194,7 с | 4,53× | **24,7%** | 181 |
| DataCat | GigaAM RNN-T INT8 | **85,2 с** | **10,36×** | 30,4% | **265** |
## Качественная оценка
Два независимых субагента читали полные транскрипты без таблицы численных
метрик. Один оценивал читаемость и пригодность для конспекта и протокола,
второй — сохранность содержания и терминов, пропуски, повторы и галлюцинации.
### Читаемость и пригодность результата
| Профиль | Читаемость | Для конспекта | Для протокола |
|---|---:|---:|---:|
| ONNX GigaAM RNN-T INT8 | **4/5** | **4/5** | **3/5** |
| OpenVINO medium INT8 | 3/5 | 3/5 | **3/5** |
| OpenVINO turbo INT8 | 2/5 | 3/5 | 2/5 |
| OpenVINO turbo FP16 | 2/5 | 3/5 | 2/5 |
Проверяющий поставил GigaAM на первое место благодаря пунктуации, отделению
реплик и естественному ритму. Из текста без труда извлекаются решения: собрать
вопросы для архитектуры и сайзинга, не связываться с «дата-рентгеном» в пилоте,
уточнить способ доступа к FineBI. При этом протокол требует сверки терминов:
`XML` превращается в «Максмельная», `Spark` — в «парк», `MPP` — в «MP-шный».
Medium в основном сохраняет ход мысли, но нестабилен в названиях: «бутылочка в
FineBI» вместо учётной записи, `NiFi` как `I5`, `edge cases` как `HKEYS`.
Оба turbo-профиля иногда лучше узнают отдельные имена и термины, включая
«Рома Иваницкий», `Open Lineage` и `DBC tables V`, однако длинные блоки почти
без пунктуации приходится разбирать вручную. Практического преимущества FP16
над INT8 по читаемости не найдено.
### Сохранность содержания
| Профиль | Смысл | Термины | Пропуски | Повторы и выдумки |
|---|---:|---:|---:|---:|
| ONNX GigaAM RNN-T INT8 | **5/5** | **4/5** | **4/5** | **4/5** |
| OpenVINO medium INT8 | 4/5 | 3/5 | **4/5** | **4/5** |
| OpenVINO turbo FP16 | 4/5 | 3/5 | 3/5 | **4/5** |
| OpenVINO turbo INT8 | 3/5 | 3/5 | 3/5 | **4/5** |
Второй проверяющий также поставил GigaAM первым: он лучше удерживает ход
рассуждения, отрицания и поручения. Среди OpenVINO medium оказался надёжнее
обоих turbo-профилей по сохранности содержания, несмотря на худший WER.
Наиболее опасные искажения:
- turbo FP16 в DataCat пропустил оговорку о том, что API-контракт извлечён из
JAR-файлов, а не документации; предположение выглядит установленным фактом;
- turbo INT8 почти потерял обсуждение доступа к DBC, риска перегрузить FineBI
через API и необходимости ограничить частоту запросов;
- medium превратил поручение посчитать объём и квоту Teradata в плохо читаемое
«нам требование это продать… конкретный объём в продате квоту»;
- GigaAM один раз заменил «МТС хочет продать дата-рентген» на «ты хочешь
продать дата-рентген», хотя соседняя фраза восстанавливает инициатора;
- ключ поиска `IMSI плюс время` не сохранился точно ни в одном профиле;
- у medium после фактического окончания RSQM появился одиночный сегмент «В».
Длинных повторяющихся или полностью выдуманных фрагментов после обновления
проверяющие не нашли. Общий недостаток всех профилей — отсутствие надёжного
разделения по участникам, что ограничивает пригодность для формального протокола.
## Вывод
- `large-v3-turbo` реально работает с OpenVINO 2026.3 в вариантах INT8 и FP16.
- Turbo INT8 оказался на 16% быстрее medium INT8 и снизил суммарный WER с
25,3% до 24,0%. Это лучший OpenVINO-профиль по численным показателям на
данном CPU, но не по независимой оценке сохранности содержания и читаемости.
- Turbo FP16 на этом CPU на 49% медленнее turbo INT8 и не дал выигрыша по WER.
Его стоит оставлять доступным для явного выбора и других устройств, но не
рекомендовать как основной CPU-профиль.
- GigaAM RNN-T остаётся самым быстрым и лучше всех расставляет пунктуацию. Он
уступает turbo по WER и сильнее загружает CPU, но оба независимых проверяющих
признали его лучшим для чтения и сохранения делового содержания.
- У turbo INT8 пунктуация нестабильна: на RSQM её почти нет. Для готового
протокола может потребоваться последующая расстановка пунктуации.
- Автоматических предупреждений о повторах или потере хвоста после обновления
не было; ручная проверка нашла у medium одиночный ложный сегмент в конце RSQM.
- Модель по умолчанию и порядок `--device auto` оставлены без изменений. Решение
об их изменении требует отдельной продуктовой задачи.
+13
View File
@@ -28,6 +28,8 @@ OpenVINO ускоряет inference на x86 процессорах (Intel и AM
- **Модели**: предконвертированные из [HuggingFace](https://huggingface.co/OpenVINO) (int8/fp16) - **Модели**: предконвертированные из [HuggingFace](https://huggingface.co/OpenVINO) (int8/fp16)
- **Дефолт**: `medium` + `int8` (для `large-v3` автоматически выбирается `fp16`) - **Дефолт**: `medium` + `int8` (для `large-v3` автоматически выбирается `fp16`)
- **Быстрый профиль с низким WER**: явный `large-v3-turbo` + `int8`; для
читаемости и сохранности содержания `medium` остаётся предпочтительнее
- **Аудиодекодирование**: через PyAV (бандлит FFmpeg), системный ffmpeg не нужен - **Аудиодекодирование**: через PyAV (бандлит FFmpeg), системный ffmpeg не нужен
### Доступные OpenVINO модели ### Доступные OpenVINO модели
@@ -39,9 +41,16 @@ OpenVINO ускоряет inference на x86 процессорах (Intel и AM
| small | OpenVINO/whisper-small-int8-ov | — | | small | OpenVINO/whisper-small-int8-ov | — |
| medium | OpenVINO/whisper-medium-int8-ov | OpenVINO/whisper-medium-fp16-ov | | medium | OpenVINO/whisper-medium-int8-ov | OpenVINO/whisper-medium-fp16-ov |
| large-v3 | OpenVINO/whisper-large-v3-int8-ov | OpenVINO/whisper-large-v3-fp16-ov | | large-v3 | OpenVINO/whisper-large-v3-int8-ov | OpenVINO/whisper-large-v3-fp16-ov |
| large-v3-turbo | OpenVINO/whisper-large-v3-turbo-int8-ov | OpenVINO/whisper-large-v3-turbo-fp16-ov |
### Результаты тестирования OpenVINO ### Результаты тестирования OpenVINO
Актуальное сравнение OpenVINO 2026.3 на трёх русскоязычных встречах:
[medium, large-v3-turbo и GigaAM](benchmarks/2026-08-12-openvino-large-v3-turbo-comparison.md).
На Intel Core i7-11800H `large-v3-turbo` INT8 обработал 43:37 аудио за
365,5 секунды (7,16× RTFx) при WER 24,0%. FP16 занял 545,0 секунды и получил
WER 24,8%, поэтому для CPU рекомендуется INT8.
Реальные записи рабочих созвонов (русский, техтермины: SQL, PostgreSQL, LDAP, DLP и др.). Реальные записи рабочих созвонов (русский, техтермины: SQL, PostgreSQL, LDAP, DLP и др.).
**Скорость (эталонный файл 16 мин, OpenVINO, medium int8):** **Скорость (эталонный файл 16 мин, OpenVINO, medium int8):**
@@ -76,6 +85,10 @@ OpenVINO ускоряет inference на x86 процессорах (Intel и AM
- **small** — для быстрого сканирования большого объёма видео по маске (`*.mp4`). Ошибки в отдельных словах; для обработки ИИ (МОМ, конспект) рискованно — "рецензия" вместо "лицензия" может исказить смысл. - **small** — для быстрого сканирования большого объёма видео по маске (`*.mp4`). Ошибки в отдельных словах; для обработки ИИ (МОМ, конспект) рискованно — "рецензия" вместо "лицензия" может исказить смысл.
- **medium** — для повседневного использования и обработки ИИ. Ключевые термины верные, единичные ляпы не влияют на смысл конспекта. Оптимальный баланс скорости и качества. - **medium** — для повседневного использования и обработки ИИ. Ключевые термины верные, единичные ляпы не влияют на смысл конспекта. Оптимальный баланс скорости и качества.
- **large-v3** — для важных записей, где нужна дословная точность. Лучшая пунктуация и связность. На OpenVINO (416с) быстрее, чем medium на чистом CPU (734с) — лучшее качество при выше скорости. - **large-v3** — для важных записей, где нужна дословная точность. Лучшая пунктуация и связность. На OpenVINO (416с) быстрее, чем medium на чистом CPU (734с) — лучшее качество при выше скорости.
- **large-v3-turbo** — явный профиль для CPU с приоритетом скорости и низкого
WER. В проверенном наборе INT8 быстрее и численно точнее medium, но хуже по
независимой оценке читаемости и сохранности содержания; FP16 на CPU пользы
не показал.
## CPU бэкенд (CTranslate2 / faster-whisper) ## CPU бэкенд (CTranslate2 / faster-whisper)
+1 -1
View File
@@ -10,7 +10,7 @@ dependencies = [
"faster-whisper>=1.2.1,<2", "faster-whisper>=1.2.1,<2",
"socksio>=1.0.0,<2", "socksio>=1.0.0,<2",
"nvidia-cublas-cu12>=12.4,<13; sys_platform == 'linux' and platform_machine == 'x86_64'", "nvidia-cublas-cu12>=12.4,<13; sys_platform == 'linux' and platform_machine == 'x86_64'",
"openvino-genai>=2026.0.0.0,<2026.1; sys_platform != 'darwin' and (platform_machine == 'x86_64' or platform_machine == 'AMD64')", "openvino-genai>=2026.3.0.0,<2026.4; sys_platform != 'darwin' and (platform_machine == 'x86_64' or platform_machine == 'AMD64')",
"onnx-asr[cpu,hub]>=0.12,<0.13", "onnx-asr[cpu,hub]>=0.12,<0.13",
"onnxruntime>=1.28,<2", "onnxruntime>=1.28,<2",
] ]
@@ -23,6 +23,8 @@ MODEL_REPOS: dict[tuple[str, str], str] = {
("medium", "fp16"): "OpenVINO/whisper-medium-fp16-ov", ("medium", "fp16"): "OpenVINO/whisper-medium-fp16-ov",
("large-v3", "int8"): "OpenVINO/whisper-large-v3-int8-ov", ("large-v3", "int8"): "OpenVINO/whisper-large-v3-int8-ov",
("large-v3", "fp16"): "OpenVINO/whisper-large-v3-fp16-ov", ("large-v3", "fp16"): "OpenVINO/whisper-large-v3-fp16-ov",
("large-v3-turbo", "int8"): "OpenVINO/whisper-large-v3-turbo-int8-ov",
("large-v3-turbo", "fp16"): "OpenVINO/whisper-large-v3-turbo-fp16-ov",
} }
# Fallback: если точная пара не найдена, пробуем альтернативный compute_type # Fallback: если точная пара не найдена, пробуем альтернативный compute_type
+55
View File
@@ -17,6 +17,20 @@ from local_transcriber.types import Segment
# === _resolve_repo === # === _resolve_repo ===
def test_model_catalog_contains_supported_profiles():
assert MODEL_REPOS == {
("tiny", "int8"): "OpenVINO/whisper-tiny-int8-ov",
("base", "fp16"): "OpenVINO/whisper-base-fp16-ov",
("small", "int8"): "OpenVINO/whisper-small-int8-ov",
("medium", "int8"): "OpenVINO/whisper-medium-int8-ov",
("medium", "fp16"): "OpenVINO/whisper-medium-fp16-ov",
("large-v3", "int8"): "OpenVINO/whisper-large-v3-int8-ov",
("large-v3", "fp16"): "OpenVINO/whisper-large-v3-fp16-ov",
("large-v3-turbo", "int8"): "OpenVINO/whisper-large-v3-turbo-int8-ov",
("large-v3-turbo", "fp16"): "OpenVINO/whisper-large-v3-turbo-fp16-ov",
}
def test_resolve_repo_exact_match(): def test_resolve_repo_exact_match():
backend = OpenVINOBackend(compute_type_explicit=True) backend = OpenVINOBackend(compute_type_explicit=True)
assert backend._resolve_repo("medium", "int8") == ("OpenVINO/whisper-medium-int8-ov", "int8") assert backend._resolve_repo("medium", "int8") == ("OpenVINO/whisper-medium-int8-ov", "int8")
@@ -60,6 +74,26 @@ def test_resolve_repo_explicit_large_v3_int8_respected():
assert backend._resolve_repo("large-v3", "int8") == ("OpenVINO/whisper-large-v3-int8-ov", "int8") assert backend._resolve_repo("large-v3", "int8") == ("OpenVINO/whisper-large-v3-int8-ov", "int8")
@pytest.mark.parametrize("compute_type", ["int8", "fp16"])
def test_resolve_repo_large_v3_turbo_quantization(compute_type):
backend = OpenVINOBackend(compute_type_explicit=True)
assert backend._resolve_repo("large-v3-turbo", compute_type) == (
f"OpenVINO/whisper-large-v3-turbo-{compute_type}-ov",
compute_type,
)
def test_resolve_repo_large_v3_turbo_unsupported_quantization_raises():
backend = OpenVINOBackend(compute_type_explicit=True)
with pytest.raises(
ValueError,
match="Доступные варианты: fp16, int8",
):
backend._resolve_repo("large-v3-turbo", "float32")
# === ensure_model_available === # === ensure_model_available ===
@@ -101,6 +135,27 @@ def test_ensure_model_available_downloads(mock_download, tmp_path):
assert any("Скачиваю" in s for s in statuses) assert any("Скачиваю" in s for s in statuses)
@patch("local_transcriber.backends.openvino.snapshot_download")
def test_large_v3_turbo_model_is_resolved_and_created(mock_download, tmp_path):
model_dir = tmp_path / "large-v3-turbo"
model_dir.mkdir()
(model_dir / "openvino_encoder_model.xml").write_text("<xml/>")
(model_dir / "openvino_decoder_model.xml").write_text("<xml/>")
mock_download.return_value = str(model_dir)
mock_ov = MagicMock()
backend = OpenVINOBackend(ov_device="openvino-cpu", compute_type_explicit=True)
model_path = backend.ensure_model_available("large-v3-turbo", "int8")
with patch.dict("sys.modules", {"openvino_genai": mock_ov}):
backend.create_model(model_path, "openvino-cpu", "int8")
mock_download.assert_called_once_with(
"OpenVINO/whisper-large-v3-turbo-int8-ov",
local_files_only=True,
)
mock_ov.WhisperPipeline.assert_called_once_with(str(model_dir), "CPU")
# === create_model === # === create_model ===
Generated
+18 -18
View File
@@ -279,7 +279,7 @@ requires-dist = [
{ name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'", specifier = ">=12.4,<13" }, { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'", specifier = ">=12.4,<13" },
{ name = "onnx-asr", extras = ["cpu", "hub"], specifier = ">=0.12,<0.13" }, { name = "onnx-asr", extras = ["cpu", "hub"], specifier = ">=0.12,<0.13" },
{ name = "onnxruntime", specifier = ">=1.28,<2" }, { name = "onnxruntime", specifier = ">=1.28,<2" },
{ name = "openvino-genai", marker = "(platform_machine == 'AMD64' and sys_platform != 'darwin') or (platform_machine == 'x86_64' and sys_platform != 'darwin')", specifier = ">=2026.0.0.0,<2026.1" }, { name = "openvino-genai", marker = "(platform_machine == 'AMD64' and sys_platform != 'darwin') or (platform_machine == 'x86_64' and sys_platform != 'darwin')", specifier = ">=2026.3.0.0,<2026.4" },
{ name = "rich", specifier = ">=14.3.3,<15" }, { name = "rich", specifier = ">=14.3.3,<15" },
{ name = "socksio", specifier = ">=1.0.0,<2" }, { name = "socksio", specifier = ">=1.0.0,<2" },
{ name = "typer", specifier = ">=0.24.1,<1" }, { name = "typer", specifier = ">=0.24.1,<1" },
@@ -416,35 +416,35 @@ wheels = [
[[package]] [[package]]
name = "openvino" name = "openvino"
version = "2026.0.0" version = "2026.3.0"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "numpy" }, { name = "numpy" },
{ name = "openvino-telemetry" }, { name = "openvino-telemetry" },
] ]
wheels = [ wheels = [
{ url = "https://files.pythonhosted.org/packages/71/3f/95b15760d7ae4b7dfefdbadeccae9604985d4335b221350e1bb04701a158/openvino-2026.0.0-20965-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:452902e4b8fba526e8740622cd5638c457d3ae44da7b39e6d4ef7919be0e95d4", size = 53444542, upload-time = "2026-02-23T16:10:46.343Z" }, { url = "https://files.pythonhosted.org/packages/8c/d3/69e7083339f32621359f0bce2be3a7454db3c9a71fa7492f0a0941c00037/openvino-2026.3.0-22451-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:b7d09f20f009b9167a863f615a2b27400ce025bda8086cc72a2eb6ac3bf1d2af", size = 57480757, upload-time = "2026-08-04T09:06:44.336Z" },
{ url = "https://files.pythonhosted.org/packages/d4/26/82d326f3769c9e5c17d34ef10dd0aff4a94a3b550e1d2efe977e5754b84e/openvino-2026.0.0-20965-cp313-cp313-win_amd64.whl", hash = "sha256:14069e5af2ac8a77f6ea55d7020d34cc7d3538d49ebda91a18c00d4da830ab58", size = 69160606, upload-time = "2026-02-23T16:10:52.9Z" }, { url = "https://files.pythonhosted.org/packages/48/f8/f71508784562a3d427f52f59d74a6364d559e6e82bb112cab5d6a6a677bb/openvino-2026.3.0-22451-cp313-cp313-win_amd64.whl", hash = "sha256:1c41f2d1072d600c260741b350aaf4a09d53f821a9a8fc8989bdc79a46b50a2c", size = 75797507, upload-time = "2026-08-04T09:06:51.858Z" },
{ url = "https://files.pythonhosted.org/packages/fe/8e/52df01e8687f4711259729433226219c6839a0495988ddeb7e27af59aba8/openvino-2026.0.0-20965-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:79ce4b5d7f3a7f84de878752d97620b84e0c4a8ee550fb3bca9fc36fe5669450", size = 53449059, upload-time = "2026-02-23T16:10:59.54Z" }, { url = "https://files.pythonhosted.org/packages/d7/97/fdace942843da232ea06a5a67cc3a70d292873657dc933408fdb9bb796a8/openvino-2026.3.0-22451-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:81a64aebd1a80da93bc9413b3ba9c93846c7cac57161cd4d7b287b354d77ad19", size = 57482441, upload-time = "2026-08-04T09:06:59.277Z" },
{ url = "https://files.pythonhosted.org/packages/f7/a8/bc8e75d3f75ee2529a12be9522f52a8d0e5614f24c00f95a20b69f587d3c/openvino-2026.0.0-20965-cp314-cp314-win_amd64.whl", hash = "sha256:6d33440d290e67836825418134ecf9e17f150d50d3d9c07cf481997f5b1f0e6d", size = 69165824, upload-time = "2026-02-23T16:11:03.127Z" }, { url = "https://files.pythonhosted.org/packages/60/cb/ed637225c7373d9a4267e7fa7252c1f3767fbc9853a906d78068a279b73a/openvino-2026.3.0-22451-cp314-cp314-win_amd64.whl", hash = "sha256:07a8c1cb32e3f7942aab4a0c48404b591e63c89813906c7bc5b001f94bed447c", size = 75798958, upload-time = "2026-08-04T09:07:07.28Z" },
{ url = "https://files.pythonhosted.org/packages/a8/06/1a2caa07bfcb4e057048b8d5515a7aff35a2aa53ab5379762c1685cbeacc/openvino-2026.0.0-20965-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8cbe36e0dacd8676eb69c9a4b564fa430d784f6e2b0e18e7ebc363599256c184", size = 53502042, upload-time = "2026-02-23T16:11:09.744Z" }, { url = "https://files.pythonhosted.org/packages/f0/3c/40c0bbd5c57fc0b5c0c41f9e6f0ec722f231ff25c37d20240d2baf446409/openvino-2026.3.0-22451-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:65f34103c28107e830e1fb70cb9c62afdb31cfde4f8b6056c942761796b1d4fe", size = 57526976, upload-time = "2026-08-04T09:07:15.131Z" },
{ url = "https://files.pythonhosted.org/packages/2c/dd/6a05a399d90ad4e8b15e0d5a4dd7de90c10484cb1585bd65e7e69e779762/openvino-2026.0.0-20965-cp314-cp314t-win_amd64.whl", hash = "sha256:a9e5524322c42f6a1283148fb70085aba8640a7d3067ede896085abbff5e33fe", size = 69325734, upload-time = "2026-02-23T16:11:13.283Z" }, { url = "https://files.pythonhosted.org/packages/dc/ca/927354fa957dd0e8c8f53401dcd1239c4cd50d95a26ff5da3bc4b502f4dc/openvino-2026.3.0-22451-cp314-cp314t-win_amd64.whl", hash = "sha256:17581c5acbdaf9bf503cd21d5ad852df7e547073ad7a529661b19f40ab3c8db6", size = 75963071, upload-time = "2026-08-04T09:07:24.796Z" },
] ]
[[package]] [[package]]
name = "openvino-genai" name = "openvino-genai"
version = "2026.0.0.0" version = "2026.3.0.0"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "openvino-tokenizers" }, { name = "openvino-tokenizers" },
] ]
wheels = [ wheels = [
{ url = "https://files.pythonhosted.org/packages/d3/98/fe5716b9dc2f29286b68b98a4c67bc33003e3b02cf4d92236345a2d7280e/openvino_genai-2026.0.0.0-2050-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:08f73852a455d63453e7f74f22b0aebd0c3579f8cb89133e66e438c09df26b71", size = 4930444, upload-time = "2026-02-23T16:17:33.953Z" }, { url = "https://files.pythonhosted.org/packages/0f/94/6968a1b95f6b9931741ef1a302c2e7ab2d3193f76224fead0ed736506db3/openvino_genai-2026.3.0.0-2495-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cd9f7bc035d2a23f01617e64f8963477335f15e048c6c9fcf1cce6c925fedf3e", size = 6211947, upload-time = "2026-08-04T09:34:59.252Z" },
{ url = "https://files.pythonhosted.org/packages/02/80/bc87545dfbbd7f4a3bd1667a4c9b5f1d8e1b476fec34225692bca6a86590/openvino_genai-2026.0.0.0-2050-cp313-cp313-win_amd64.whl", hash = "sha256:ada030b34a9e2fe0c6c406c2af2ce7b6e8cb16654329a469055fdac8a3eba19d", size = 2900293, upload-time = "2026-02-23T16:17:37.673Z" }, { url = "https://files.pythonhosted.org/packages/50/74/cec114195adf6237c000fabd6c5da61f04edf3b1d719db7601e452977e4f/openvino_genai-2026.3.0.0-2495-cp313-cp313-win_amd64.whl", hash = "sha256:08411eb51bd0bddc717e2d97c541cc5cc946bde70e74da6dd7428149e5e0cdbb", size = 3669271, upload-time = "2026-08-04T09:35:02.699Z" },
{ url = "https://files.pythonhosted.org/packages/af/09/18e678f2d0ac4ee993244d3cf0e6a80ec7013add2972153ad355d889d8cc/openvino_genai-2026.0.0.0-2050-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:77b73d1947d7f62a672857ef35d187074c6918de1db1d3f981452c2d67511c13", size = 4931196, upload-time = "2026-02-23T16:17:40.423Z" }, { url = "https://files.pythonhosted.org/packages/ed/02/ed9f6773a40cc8b0fc166979abf6b56aed3a9f5840f9f0bf76fbf82cc349/openvino_genai-2026.3.0.0-2495-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:2df610ec970b66b95cc4987d888c543e979bda515aed0c8ffda99954d10b4133", size = 6213490, upload-time = "2026-08-04T09:35:05.799Z" },
{ url = "https://files.pythonhosted.org/packages/a4/be/3f02a70a16147b08b933908ef1c8af930ecd5c65ba78e14f988112d3d691/openvino_genai-2026.0.0.0-2050-cp314-cp314-win_amd64.whl", hash = "sha256:c59aeab5993c78194dc552cc9249bab509f7e44b1fb2f0d5a90c5e61869f06b8", size = 2900527, upload-time = "2026-02-23T16:17:43.244Z" }, { url = "https://files.pythonhosted.org/packages/0d/9d/9e877a92ff22e9cec0cb930bcccd58013050726af91a9c1b8ff15264ed27/openvino_genai-2026.3.0.0-2495-cp314-cp314-win_amd64.whl", hash = "sha256:9331df790dcf57d796b6486ce9d9219ad4172c851cd657fafb9c5c0c82177c43", size = 3670597, upload-time = "2026-08-04T09:35:09.064Z" },
{ url = "https://files.pythonhosted.org/packages/6d/e8/7da6a1b86e3178e825560442ea4460ba4c92bb417fb8edda9e2210febec6/openvino_genai-2026.0.0.0-2050-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d807c5cabdea20bab2199ffa736831f57baaf0571e80d19cf4b65004f6b00747", size = 4943971, upload-time = "2026-02-23T16:17:46.021Z" }, { url = "https://files.pythonhosted.org/packages/72/98/a4747cc685a5d2cc252ccb337c022e455f5761041e0d19980d0884ecadd9/openvino_genai-2026.3.0.0-2495-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:58a9e7493391ce8478440fbc14610968255a06a2717068f476b1ba519fe488a1", size = 6222203, upload-time = "2026-08-04T09:35:11.83Z" },
{ url = "https://files.pythonhosted.org/packages/e3/19/221256ce3b0276bb3ba3ce7e8fc57b2968a662c2acde7427c342d917867f/openvino_genai-2026.0.0.0-2050-cp314-cp314t-win_amd64.whl", hash = "sha256:bb537f5a65203eee12326e6bb9578e834d96d94ab3fa48c806990ef04a455935", size = 2900592, upload-time = "2026-02-23T16:17:47.452Z" }, { url = "https://files.pythonhosted.org/packages/33/27/af5aee755635dc1cd19bb7406410a099364205c3a35e49766e54ca174c15/openvino_genai-2026.3.0.0-2495-cp314-cp314t-win_amd64.whl", hash = "sha256:0d3770d721f336549747b3ce054ad6bc726609e1fc3f5ce90c4954c63f23e4b9", size = 3670880, upload-time = "2026-08-04T09:35:14.895Z" },
] ]
[[package]] [[package]]
@@ -458,14 +458,14 @@ wheels = [
[[package]] [[package]]
name = "openvino-tokenizers" name = "openvino-tokenizers"
version = "2026.0.0.0" version = "2026.3.0.0"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "openvino" }, { name = "openvino" },
] ]
wheels = [ wheels = [
{ url = "https://files.pythonhosted.org/packages/45/22/2b976c129d43b214034a16a999d54eb659d5b2f15c12b2be52ab44e3235d/openvino_tokenizers-2026.0.0.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:84ee496d9fe4ff7866ed9a1370cb71bf3af9526601a701c59d269854a2b0dfc7", size = 13693316, upload-time = "2026-02-23T16:12:13.41Z" }, { url = "https://files.pythonhosted.org/packages/0b/68/c1ba2177f4ce1f455aae858548aece8b6491b862a6458b03c5d5dbf356ef/openvino_tokenizers-2026.3.0.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:9d35bb52d353a30d1194cd21c43d3949d0fac853b5bd3721994f70acfea051e4", size = 1829895, upload-time = "2026-08-04T09:28:12.083Z" },
{ url = "https://files.pythonhosted.org/packages/24/86/4e7428a2fb350311a7f616c897ee1427d70cd814a2d64b2af9efb81fb881/openvino_tokenizers-2026.0.0.0-py3-none-win_amd64.whl", hash = "sha256:90f77c203c40623733e867754b952e8f0b86d9c86782abdbe9cf4bf2c82ce693", size = 13988492, upload-time = "2026-02-23T16:12:19.586Z" }, { url = "https://files.pythonhosted.org/packages/c9/65/707874d377a245fbc5fbeaeac77e4aaf878f4e0938ab9d1203f8b01e5aab/openvino_tokenizers-2026.3.0.0-py3-none-win_amd64.whl", hash = "sha256:7c6fb2f1e9b6c3c4b2bdb992e69ef97869787d8486b193d155d24aaa9cd5fed0", size = 1541664, upload-time = "2026-08-04T09:28:15.307Z" },
] ]
[[package]] [[package]]