Перейти к содержанию

Локальный Qwen3-ASR-1.7B

Сервис использует уже подготовленные runtime/qwen3-asr-env и models/qwen3-asr-1.7b. Скрипт ничего не устанавливает и не загружает. Тяжёлые файлы модели и окружение остаются локальными; обычный запуск не зависит от каталога artifacts.

Из обычного терминала PowerShell, рабочий каталог E:\five-api:

.\run_qwen3_asr.ps1 -Check
.\run_qwen3_asr.ps1 -GpuDevice 1 -Port 8050

-Check проверяет наличие окружения, версии пакетов, исходник inference и SHA256 всех файлов модели. Он не импортирует Torch, не создаёт CUDA-контекст, не загружает модель и не запускает сервер. Успешная проверка не гарантирует наличия свободной видеопамяти: фактическое размещение проверяется при ручном запуске.

Сервер работает в открытом терминале; остановка — Ctrl+C. По умолчанию это физическая GPU 1, видимая процессу как cuda:0, BF16, SDPA, официальный greedy decoder, batch 1 и максимум 1024 новых токена. Порт занят — скрипт завершится, не останавливая чужой процесс. Перезапуск выполняется пользователем вручную. CPU можно выбрать явно: -Device cpu -Precision float32 (8 потоков, существенно медленнее). Автоматического перехода на CPU нет.

API

Выбор в приложении

В Playground модель называется Qwen3-ASR 1.7B. Публичные файловые API принимают Qwen3-ASR-1.7B: в STT v1 передайте model=Qwen3-ASR-1.7B&lang=en-US, в STT v3 — recognitionModel.model: "Qwen3-ASR-1.7B", а в OpenAI-совместимом API — model="Qwen3-ASR-1.7B" и language="en". Для русского выберите ru-RU или ru соответственно.

В приложении доступны готовые файлы на 30 поддерживаемых языках, включая длинные записи. Результат содержит текст без точных пословных таймкодов и диаризации. Живой поток, режим Текст по мере обработки и уточнение финалов потока для этой модели недоступны. Тариф — 8,75 кредита в минуту, длительность округляется вверх до секунды.

Поддерживаемые языки

Список соответствует официальной карточке Qwen3-ASR-1.7B и локальному worker. В Playground выберите Язык записи, затем Qwen3-ASR 1.7B. STT v1/v3 используют locale из таблицы; OpenAI-совместимый API принимает соответствующий ISO-код. Актуальный список опубликован также в GET /api/stt/capabilities → models.Qwen3-ASR-1.7B.supportedLanguages.

Язык STT v1/v3 ISO-код
Русский ru-RU ru
Английский en-US en
Китайский (мандаринский) zh-CN zh
Кантонский yue-HK yue
Арабский ar-SA ar
Немецкий de-DE de
Французский fr-FR fr
Испанский es-ES es
Португальский pt-PT pt
Индонезийский id-ID id
Итальянский it-IT it
Корейский ko-KR ko
Тайский th-TH th
Вьетнамский vi-VN vi
Японский ja-JP ja
Турецкий tr-TR tr
Хинди hi-IN hi
Малайский ms-MY ms
Нидерландский nl-NL nl
Шведский sv-SE sv
Датский da-DK da
Финский fi-FI fi
Польский pl-PL pl
Чешский cs-CZ cs
Филиппинский fil-PH fil
Персидский fa-IR fa
Греческий el-GR el
Венгерский hu-HU hu
Македонский mk-MK mk
Румынский ro-RO ro

Язык задаётся явно; автоматическое определение в этом маршруте не включено. Узбекский, казахский, кыргызский и таджикский в этот набор Qwen не входят.

Прямой API локального сервиса

Проверка готовности: GET http://127.0.0.1:8050/health. Uvicorn загружает модель до начала приёма HTTP: во время запуска соединение обычно ещё недоступно. После успешного запуска — 200 с точной моделью, ревизией, устройством, декодером и лимитами; 503 возвращается, если endpoint доступен, но worker не готов. GET /v1/models возвращает идентификатор Qwen/Qwen3-ASR-1.7B.

curl.exe http://127.0.0.1:8050/v1/audio/transcriptions `
  -F "file=@E:/audio/clip.wav" `
  -F "model=Qwen/Qwen3-ASR-1.7B" `
  -F "language=ru"

Ключ не нужен; по умолчанию сервер доступен только на loopback. Это совместимый базовый multipart-интерфейс OpenAI: file, model, language, response_format=json|text, temperature=0. Пустой prompt разрешён, непустой отклоняется. SDK, требующий формальный api_key, может передать произвольную непустую строку: сервер её не использует. /transcribe — алиас того же обработчика.

Русский язык выбран по умолчанию; допускаются ISO-коды поддерживаемых языков (en и другие, перечислены в /health) или их английские названия. Язык принудительно задан; это не автоматическое определение языка. Неподдерживаемые параметры, таймкоды, streaming и ненулевая temperature отклоняются, а не игнорируются. JSON содержит text, model, revision, language, duration, complete и информацию о завершении генерации. Формат text возвращает только расшифровку.

Ограничения и проверки

  • Один запрос выполняется за раз; по умолчанию ожидают ещё два. Переполненная очередь — 429, слишком долгое ожидание — 503.
  • В этой версии один клип длительностью 0,1–30 секунд, не более 16 MiB; доступны -MaxAudioSeconds (уменьшение до 1–30) и QWEN3_ASR_MAX_UPLOAD_BYTES. Надёжные входные форматы — WAV/FLAC; декодирование выполняет установленный libsndfile, без внешнего ffmpeg. Стерео усредняется, частота преобразуется в 16 kHz.
  • Более длинное аудио получает явный 413, без обрезки. Это ограничение данной сервисной версии, не архитектурный предел Qwen. В установленном qwen-asr 0.0.6 встроенная разбивка ASR начинается на 1200 секундах и соединяет тексты без разделителя; она не используется в этом коротком маршруте. Для длинных записей нужен отдельный проверенный процесс разбиения и соединения.
  • Каждый ответ обязан завершиться EOS в пределах 1024 токенов. Незавершённая генерация — 502; частичный текст не возвращается как успешный. Нет автоматического повторного распознавания, исправления через LLM, confidence или выдуманных таймкодов.
  • Таймаут запроса — 240 секунд (-RequestTimeoutSeconds). Активную native/CUDA-операцию нельзя безопасно прервать Python-кодом: при отмене или таймауте её завершение дожидаются, сохраняя единственный вычислительный слот. Поэтому фактический возврат ошибки может задержаться до окончания этой операции.

Зафиксированы модель Qwen/Qwen3-ASR-1.7B, ревизия 7278e1e70fe206f11671096ffdd38061171dd6e5, qwen-asr 0.0.6, torch 2.7.0+cu128, transformers 4.57.6, numpy 1.26.4. Хэши хранятся в app/standalone/qwen3_asr_model.py. Настройки соответствуют ранее проверенному локальному batch-декодеру; HTTP-контракт и ошибки проверяются отдельными мок-тестами без запуска сервиса и модели.