Skip to navigation

Qwen Audio 3.0 Realtime Plus

Qwen Audio 3.0 Realtime Plus
Alibaba Cloud · Audio Generation
WEBSOCKET /v1/realtime

Duplex speech conversation over one socket, with 19 voices, native web search, tool calling, and separate text and audio token rates.

At a glance

FieldValue
Model idqwen-audio-3-0-realtime-plus
Model release date2026-08-10
Input modalitiesAudio, Text
Output modalitiesAudio, Text
Context window16K
Weight precision-
Max output tokens8,192
RegionSingapore
Featuresrealtime, speech_to_speech, audio_in, audio_out, function_calling, web_search, multilingual
Native inferenceNo
NewYes
Supported endpointsWEBSOCKET /v1/realtime
Alternate model idsqwen-audio-3.0-realtime-plus, alibaba/qwen-audio-3-0-realtime-plus

Pricing

ChargeSpecRate
Input: audioper 1M audio input tokens$12.80
Inputper 1M prompt tokens$1.60
Outputper 1M generated tokens, text-only replies$12.80
Output: audioper 1M generated audio tokens$48.00
Web searchper call when invoked$0.00

Example request

import asyncio, json, os, websockets
URL = "wss://api.empiriolabs.ai/v1/realtime?model=qwen-audio-3-0-realtime-plus"
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"longanqian"Speaking voice for the session. Set it with session.update before the model produces any audio. These voices are specific to this model. · Allowed: longanqian, longanlingxin, longanlufeng, longanlingxi, longanxiaoxin, longanfengyue, longanyuanfei, longanhuan_v3.6, longjielidou_v3.6, longpaopao_v3.6, longhuohuo_v3.6, longchuanshu_v3.6, loongmary, loongeva_v3.6, loongjohn, daniel, echo, hannah, sherry
instructionsstringno-System guidance for how the model should behave and speak during the conversation.
speednumberno-Speaking rate of the reply, from 0.5 to 2. Lower values slow the speech and higher values speed it up. Also accepted as speech_rate. When omitted, the model’s own default applies. · Range: 0.5 – 2
enable_speech_emotionbooleannotrueMore pronounced emotion in the spoken reply. Turn it off for a more even delivery.
max_history_turnsintegerno-How many earlier exchanges the model reads for each reply, from 1 to 50. Fewer exchanges use fewer input tokens. When omitted, the model’s own default applies. · Range: 1 – 50
enable_searchbooleannofalseSearch the web for real-time information. Cannot be used in the same session as function calling. Search results are added to the conversation and count as input tokens.
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. smart_turn also weighs what you said, so filler sounds such as um do not end your turn or interrupt the reply, and smart_turn_v2 also answers bystanders and side remarks less often. threshold is a number from -1 to 1, 0.5 by default; a higher value needs clearer, louder speech to count. With server_vad, silence_duration_ms, from 200 to 6000 and 800 by default, is how long a pause must last to end your turn. Set turn_detection to null to end each turn yourself with input_audio_buffer.commit and response.create.

Notes

Connecting

Full-duplex voice over a WebSocket at wss://api.empiriolabs.ai/v1/realtime?model=qwen-audio-3-0-realtime-plus, authenticated with the ordinary Authorization Bearer header. Configure the session with session.update over the socket: voice, instructions, modalities, turn detection and delivery.

Sending audio

  • Append microphone audio as input_audio_buffer.append events.
  • Voice activity detection decides when you have stopped speaking, so keep streaming for about a second after the speech ends.

Delivery

speed (0.5 to 2) sets the speaking rate, enable_speech_emotion the expressive delivery, and max_history_turns (1 to 50) how many earlier exchanges the model reads. Ask for the reply’s language in your instructions.

Voices

The voices on this model are its own set. Pick one from the voice list rather than carrying a voice across from another model, or leave it unset and the default is supplied for you.

Web search

Web search is off by default. Turn it on with enable_search. It cannot be enabled in the same session as function calling, and search results are added to the conversation and count as input tokens.

Billing

Audio and text tokens are priced separately in both directions. A spoken reply is billed for its audio output tokens only, and the text output rate applies to replies with no audio. Each completed turn is billed on its own from the usage the model reports.


Machine-readable schema: GET https://api.empiriolabs.ai/v1/models/qwen-audio-3-0-realtime-plus.