Skip to navigation

Qwen Audio 3.0 ASR Stream

Qwen Audio 3.0 ASR Stream
Alibaba Cloud · Transcription
WEBSOCKET /v1/realtime

Live transcription over a socket, streaming partial words while the speaker talks and a settled sentence at each pause, priced per hour of audio.

At a glance

FieldValue
Model idqwen-audio-3-0-asr-stream
Model release date2026-07-30
Input modalitiesAudio
Output modalitiesText
Context window-
Weight precision-
RegionSingapore
Featurestranscription, speech_to_text, realtime, streaming_asr, multilingual
Native inferenceNo
NewYes
Supported endpointsWEBSOCKET /v1/realtime
Alternate model idsqwen-audio-3.0-asr-stream, alibaba/qwen-audio-3-0-asr-stream

Pricing

ChargeSpecRate
Transcriptionper hour of audio$0.648

Example request

import asyncio, json, os, websockets
URL = "wss://api.empiriolabs.ai/v1/realtime?model=qwen-audio-3-0-asr-stream"
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
input_audio_formatenumno"pcm16"Encoding of the audio you append to the input buffer: base64 16-bit PCM, mono, at 16 kHz. · Allowed: pcm16
languageenumno"auto"Language of the speech, or auto to detect it from the audio. Set it with the language query parameter of the connection URL, or as input_audio_transcription.language in session.update. · Allowed: auto, zh, en, ja, ko, vi, th, id, ms, tl, hi, ar, fr, de, es, pt, ru, it, nl, sv, da, fi, no, el, pl, cs, hu, ro, bg, hr, sk
promptstringno-Text that guides recognition, up to 400 characters: the names and terms the speaker uses, or the text spoken just before this audio. Write the words exactly as they should appear in the transcript. Also accepted as input_audio_transcription.prompt.
silence_duration_msintegerno800The pause, in milliseconds, that ends a sentence, from 200 to 6000. A shorter pause settles each sentence sooner; a longer one keeps a pause inside a sentence. Also accepted as turn_detection.silence_duration_ms. · Range: 200 – 6000
thresholdnumberno-How clear speech must be before it is transcribed, from 0.0 to 1.0. A higher value ignores more background noise and can miss quiet speech. When omitted, the model’s own default applies. Also accepted as turn_detection.threshold. · Range: 0 – 1
noise_reductionenumno"far_field"The microphone the speech detection is tuned for: near_field for a headset or a phone held close, far_field for a laptop or room microphone. Also accepted as input_audio_noise_reduction.type. · Allowed: far_field, near_field
keep_dialectbooleannofalseKeeps Chinese dialect words as spoken. When off, dialect speech is written as standard Mandarin.

Notes

Connecting

Live transcription over a WebSocket at wss://api.empiriolabs.ai/v1/realtime?model=qwen-audio-3-0-asr-stream, authenticated with the ordinary Authorization Bearer header.

Sending audio

Stream 16 kHz mono pcm16 audio with input_audio_buffer.append. Voice activity detection decides where each sentence ends, so there is no commit to send.

Session settings

Send session.update right after session.created, before the first audio, with any of these settings: input_audio_transcription.language (or the language query parameter of the connection URL; auto by default), input_audio_transcription.prompt with the names and terms the speaker uses (up to 400 characters), turn_detection.silence_duration_ms (200 to 6000, default 800) and turn_detection.threshold (0.0 to 1.0), and input_audio_noise_reduction (near_field or far_field). keep_dialect keeps Chinese dialect words as spoken. A setting changed while audio is streaming ends the sentence in progress and applies to the audio sent after it.

What comes back

conversation.item.input_audio_transcription.delta events carry the sentence so far while the speaker is still talking, and conversation.item.input_audio_transcription.completed carries the settled sentence at each pause.

Billing

Billed per second of the audio you stream, silence included, at the hourly rate shown. The session is billed when it ends.


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