Озвучка без паузы: Qwen3-TTS в vLLM-Omni на SageMaker AI

Голосовой агент, который молчит, пока не соберёт целую реплику, быстро теряет доверие пользователя. В walkthrough AWS собрали выходной контур для SageMaker AI: текст уходит в Qwen3-TTS через vLLM-Omni, PCM 24 кГц возвращается чанками по тому же двустороннему соединению — воспроизведение можно включать до конца генерации.
Образ vLLM-Omni DLC v1.5 добавляет middleware маршрутизации и метку bidirectional streaming. Клиент подключается к Runtime на порту 8443, inference sidecar прокидывает HTTP/2 WebSocket на нативный маршрут v1/audio/speech/stream внутри контейнера.
Рядом с прошлым материалом про Voxtral-Mini-4B Realtime это закрывает пару «микрофон → текст → ответ → речь»: распознавание уже было, связку между STT и TTS держит приложение. Скрипт деплоя, транспорт и Gradio-клиент лежат в sagemaker-genai-hosting-examples, каталог 03-features/bidirectional-streaming-vLLM-Omni.
Как идёт стрим
Gradio-клиент открывает полно-дуплексный канал: сначала session.config с голосом, языком, response_format: pcm и stream_audio: true, затем input.text и input.done. Ответ — события жизненного цикла аудио и куски PCM; UI проигрывает каждый чанк по мере прихода, в статусе видны счётчик чанков и суммарные байты.
Деплой без сюрпризов по квоте
deploy_bidi_stream.pyсоздаёт модель из DLC, конфигурацию и real-time endpoint;SM_VLLM_MODELзадаёт загружаемую модель- Instance pool: сначала
ml.g6.xlarge, при нехватке ёмкости —ml.g6e.xlarge,ml.g5.xlargeилиml.g4dn.xlarge; квоту проверяют для каждого типа из списка - После деплоя — smoke-тест с
validation-output.wav; локальноsagemaker_bidi_tts_client.pyи браузер наhttp://127.0.0.1:6006
Тот же vLLM-Omni DLC умеет не только TTS — omni-модели, ASR, картинки и видео; вторая часть серии как раз про image/video. Живой GPU после эксперимента лучше снести флагом --delete-endpoint.
Источник: Build real-time voice applications with vLLM-Omni on SageMaker AI – Part 1.