Skip to navigation

Qwen3.8 Omni Flash Realtime

Qwen3.8 Omni Flash Realtime
Alibaba Cloud · Audio Generation
WEBSOCKET /v1/realtime

Speech and live video frames in, speech out over one socket, with 56 voices, tool calling during the conversation, and separate text and audio token rates.

At a glance

FieldValue
Model idqwen3-8-omni-flash-realtime
Model release date2026-09-21
Input modalitiesAudio, Text, Image, Video
Output modalitiesAudio, Text
Context window192K
Weight precision-
Max output tokens65,536
RegionSingapore
Featuresrealtime, speech_to_speech, audio_in, audio_out, video, function_calling, multilingual
Native inferenceNo
NewYes
Supported endpointsWEBSOCKET /v1/realtime
Alternate model idsqwen3.8-omni-flash-realtime, alibaba/qwen3-8-omni-flash-realtime

Pricing

ChargeSpecRate
Input: audioper 1M audio input tokens$1.86
Inputper 1M prompt tokens$0.46
Outputper 1M generated tokens$1.40
Output: audioper 1M generated audio tokens$3.74

Example request

import asyncio, json, os, websockets
URL = "wss://api.empiriolabs.ai/v1/realtime?model=qwen3-8-omni-flash-realtime"
async def main():
async with websockets.connect(
URL,
additional_headers=[("Authorization", f"Bearer {os.environ['EMPIRIOLABS_API_KEY']}")],
max_size=None,
) as ws:
print(json.loads(await ws.recv())["type"]) # session.created
await ws.send(json.dumps({
"type": "conversation.item.create",
"item": {"type": "message", "role": "user",
"content": [{"type": "input_text", "text": "Say hello."}]},
}))
await ws.send(json.dumps({"type": "response.create"}))
async for raw in ws:
event = json.loads(raw)
if event["type"] == "response.done":
break
asyncio.run(main())

Parameters

ParameterTypeRequiredDefaultDescription
voiceenumno"Tina"Speaking voice for the session. Set it with session.update before the model produces any audio. These voices are specific to this model. · Allowed: Tina, Cindy, Liora Mira, Raymond, Zane, Katerina, Ryan, Mia, Cici, Theo Calm, Serena, Maia, Evan, Qiao, Momo, Wil, Angel, Li Cassian, Joyner, Gold, Jennifer, Aiden, Mione, Sunny, Dylan, Eric, Peter, Joseph Chen, Marcus, Li, Rocky, Kiki, Sohee, Eliška, Alek, Arda, Dolce, Lenn, Ono Anna, Sonrisa, Bodega, Andre, Radio Gol, Rizky, Roya, Hana, Jakub, Griet, Marina, Siiri, Ingrid, Sigga, Bea, Chloe, Emilien, longanlingxin
instructionsstringno-System guidance for how the model should behave and speak during the conversation.
modalitiesstringno["text", "audio"]Which output types the model returns for a turn. Drop audio for a text-only reply.
input_audio_formatenumno"pcm16"Encoding of the audio you append to the input buffer: base64 16-bit PCM at 16 kHz. · Allowed: pcm16
output_audio_formatenumno"pcm24"Encoding of the audio the model streams back: 16-bit PCM at 24 kHz. · Allowed: pcm24
turn_detectionstringno{"type": "server_vad"}Voice activity detection: decides when you have finished speaking and the model should reply. It is on by default as server_vad, which ends your turn after a pause. semantic_vad also judges whether you have finished speaking, so filler sounds and background noise do not end your turn, and semantic_vad_ec does the same and lets you interrupt a reply more readily. threshold is a number from -1 to 1, 0.5 by default; a higher value needs clearer, louder speech to count. silence_duration_ms, from 200 to 6000 and 800 by default, is how long a pause must last to end your turn. idle_timeout_ms, from 5000 to 30000 with server_vad, makes the model speak again when you stay silent that long after its reply. Set turn_detection to null to end each turn yourself with input_audio_buffer.commit and response.create.
max_response_output_tokensnumberno-Largest number of output tokens one reply may use: from 1 to 65536, where a larger number runs at 65536, or “inf” for the model’s own limit. Also accepted as max_output_tokens. When omitted, the model’s own default applies. · Range: 1 – 65536
temperaturenumberno-Sampling temperature. 0 is deterministic and 1.99 is maximum randomness. When omitted, the model’s own default applies. · Range: 0 – 1.99
top_pnumberno-Nucleus sampling probability mass. Lower values make outputs more focused. When omitted, the model’s own default applies. · Range: 0.01 – 1
top_kintegerno-Sample only from the K most likely tokens. When omitted, the model’s own default applies. · Range: 1 – 100
repetition_penaltynumberno-Higher values discourage repeated phrasing, and 1 applies no penalty. When omitted, the model’s own default applies. · Range: 0.1 – 2
presence_penaltynumberno-Penalty for tokens that already appeared in the generated text. Positive values encourage new topics. When omitted, the model’s own default applies. · Range: -2 – 2
seedintegerno-Random seed for more reproducible sampling. Reusing a seed with the same request returns similar, not always identical, output. · Range: 0 – 2147483647
video_representation_compactenumno-How the model reads the video frames you send: none keeps full detail, and normal reads the same frames for a quarter of the input tokens when fine detail is not needed. When omitted, frames keep full detail. Set it before the first audio; it cannot change after that. · Allowed: none, normal

Notes

Connecting

Full-duplex voice over a WebSocket at wss://api.empiriolabs.ai/v1/realtime?model=qwen3-8-omni-flash-realtime, authenticated with the ordinary Authorization Bearer header. Configure the session with session.update over the socket: voice, instructions, modalities, turn detection, sampling and the reply length limit, max_response_output_tokens.

Sending audio and video

  • Append microphone audio as input_audio_buffer.append events.
  • Append live video frames as input_image_buffer.append events. Frames are not message content, so an image inside a conversation item is rejected.
  • Set video_representation_compact to normal before the first audio to read the same frames for a quarter of the input tokens.
  • Voice activity detection decides when you have stopped speaking, so keep streaming for about a second after the speech ends.

Voices

The voices on this model are not the same set as the Qwen3.5 Omni realtime models. Pick one from the voice list rather than carrying a voice across, or leave it unset and the default is supplied for you.

Billing

Audio and text tokens are priced separately in both directions, and each completed turn is billed on its own from the usage the model reports.


Machine-readable schema: GET https://api.empiriolabs.ai/v1/models/qwen3-8-omni-flash-realtime.