Qwen3.5 Omni Flash
alibaba/qwen3.5-omni-flash — a llm model by Alibaba. Call it through the gateway’s standard OpenAI-compatible door using the catalog slug; the full parameter schema is reproduced in full below.
| Catalog slug | alibaba/qwen3.5-omni-flash |
| Kind | llm |
| Vendor | Alibaba |
| Context window | 1,000,000 tokens |
| Native model id | qwen3.5-omni-flash |
How to call
Section titled “How to call”Through the Sociaro SDK / OpenAI-compatible door
Section titled “Through the Sociaro SDK / OpenAI-compatible door”from sociaro_ai import Sociaro
client = Sociaro(api_key="gw_live_...") # base_url defaults to https://api.sociaro.com
resp = client.chat.completions.create( model="alibaba/qwen3.5-omni-flash", # always the catalog slug messages=[{"role": "user", "content": "Hello"}], # any parameter from the schema below is passed through unchanged)print(resp.choices[0].message.content)TypeScript: client.chat.completions.create({ model: "alibaba/qwen3.5-omni-flash", messages: [...] }) — see the TypeScript SDK.
Through Alibaba DashScope’s native API (advanced)
Section titled “Through Alibaba DashScope’s native API (advanced)”Optional: send Alibaba DashScope’s native request to the /alibaba prefix, using the native model id qwen3.5-omni-flash. The gateway injects the upstream Alibaba DashScope credential and forwards the body unchanged (catalog, pricing and entitlements still apply).
curl https://api.sociaro.com/alibaba/<native-path> \ -H "Authorization: Bearer $SOCIARO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3.5-omni-flash", ... }'The exact path, request body and response shape are documented in full in the schema below.
Parameters — full schema
Section titled “Parameters — full schema”The complete, one-to-one API schema for this model, transcribed from the official source. Nothing omitted. Examples in the schema may use a representative model of the family — for this model use the slug alibaba/qwen3.5-omni-flash (or the native id qwen3.5-omni-flash for the native API) as shown in How to call above.
Coverage map (per-model)
Section titled “Coverage map (per-model)”| model slug | hosting | input modalities | output modalities | thinking | web search | voice cloning | default voice | voice count |
|---|---|---|---|---|---|---|---|---|
qwen3.5-omni-plus | Model Studio (OpenAI-compatible) | text + (image / audio / video), combined | text, audio | no | yes (enable_search, search_strategy=agent) | yes (not snapshots) | Tina | 55 |
qwen3.5-omni-flash | Model Studio (OpenAI-compatible) | text + (image / audio / video), combined | text, audio | no | yes (enable_search, search_strategy=agent) | yes (not snapshots) | Tina | 55 |
qwen3.5-omni-plus-2026-03-15 (snapshot) | Model Studio | as above | text, audio | no | yes | no | Tina | 55 |
qwen3.5-omni-flash-2026-03-15 (snapshot) | Model Studio | as above | text, audio | no | yes | no | Tina | 55 |
qwen3-omni-flash (stable) | Model Studio | text + exactly one of (image / audio / video); 1 media file | text, audio (no audio in thinking) | yes (enable_thinking) | no | no | Cherry | 17 (stable == 2025-09-15 set) |
qwen3-omni-flash-2025-12-01 (snapshot) | Model Studio | same as flash | text, audio (no audio in thinking) | yes | no | no | Cherry | 49 |
qwen3-omni-flash-2025-09-15 (snapshot) | Model Studio | same as flash | text, audio (no audio in thinking) | yes | no | no | Cherry | 17 |
qwen-omni-turbo (legacy, deprecated) | Model Studio | text + one other modality | text, audio | no | no | no | Chelsie | 4 |
qwen3-omni-30b-a3b-captioner | Open-source self-host (HF / ModelScope / vLLM); not a Model Studio hosted endpoint | audio only, single file, single-turn, no text prompt | text only (no audio, no voice) | n/a | n/a | n/a | — | — |
Model names, context windows, exact pricing and the full snapshot list are confirmed in the Model Studio console. Regions: Singapore and Beijing (API keys differ per region).
Critical per-model differences (read first)
Section titled “Critical per-model differences (read first)”- Combined multimodal input (image + audio + video, or any mix, in ONE user message) is supported only by the Qwen3.5-Omni series.
qwen3-omni-flashandqwen-omni-turboaccept text + exactly one other modality and only one media file per request. - Thinking mode (
enable_thinking) exists only forqwen3-omni-flashwithin the Omni family. In thinking mode, audio output is not supported —modalitiesmust be["text"]and theaudioparameter is ignored. Reasoning is streamed indelta.reasoning_content. - Web search (
enable_search) is supported only by the Qwen3.5-Omni series (incl. its dated snapshots). For Omni the applicablesearch_strategyvalue isagent. vl_high_resolution_imagesand the per-frame/per-image pixel knobs that raise the cap to the 16384-token resolution apply to Qwen3.5-Omni.qwen3-omni-flashandqwen-omni-turbodo not supportvl_high_resolution_images. Image token density is 1 token per 32×32 px for the Qwen3.5-Omni series and Qwen3-Omni-Flash, and 1 token per 28×28 px for Qwen-Omni-Turbo.- Streaming is mandatory for every hosted Qwen-Omni call:
stream=trueis required, otherwise the request errors. - Output audio is always PCM 24000 Hz, mono, 16-bit, delivered as base64 fragments in
delta.audio.datato be concatenated and decoded. Outputaudio.formatiswavonly. qwen3-omni-30b-a3b-captioneris open-source self-host, not a Model Studio OpenAI-compatible endpoint. Audio-in / text-out only, single audio file, no text prompt, single-turn.- Input limits diverge sharply by series (audio ≤3 h vs ≤20 min vs ≤3 min; video ≤1 h vs ≤150 s vs ≤40 s; files: Qwen3.5-Omni up to 512/2048 vs Flash & Turbo only 1) — see the input-modality tables below.
Endpoint / transport
Section titled “Endpoint / transport”- Mode: OpenAI-compatible only (DashScope native mode is not supported for Qwen-Omni).
- Endpoint:
POST {base_url}/chat/completions - base_url (Singapore example):
https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1(Beijing region uses a different host/key.) - Auth:
Authorization: Bearer $DASHSCOPE_API_KEY - Min SDK: OpenAI Python ≥ 1.52.0, Node.js ≥ 4.68.0.
- Hard rule: every hosted Qwen-Omni call MUST set
stream: true. Recommended:stream_options: {"include_usage": true}to receiveusagein the final chunk. - extra_body transport: the following are NOT standard OpenAI params and (with the Python/Node SDK) must be passed inside
extra_body:top_k,repetition_penalty,enable_thinking,thinking,thinking_budget,preserve_thinking,reasoning_effort,tool_stream,enable_code_interpreter,enable_search,search_options,vl_high_resolution_images. (Raw HTTP/curl puts them at the top level of the JSON body.)
Request body shape (full, illustrative)
Section titled “Request body shape (full, illustrative)”{ "model": "qwen3.5-omni-plus", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": [ { "type": "text", "text": "Describe the image and the audio." }, { "type": "image_url", "image_url": { "url": "https://.../pic.jpeg" }, "min_pixels": 24576, "max_pixels": 1310720 }, { "type": "input_audio", "input_audio": { "data": "https://.../clip.wav", "format": "wav" } }, { "type": "video_url", "video_url": { "url": "https://.../movie.mp4" }, "fps": 2.0 }, { "type": "video", "video": ["https://.../frame1.jpg", "https://.../frame2.jpg"], "fps": 2.0 }, { "type": "text", "text": "concise please", "cache_control": { "type": "ephemeral" } } ] } ], "modalities": ["text", "audio"], "audio": { "voice": "Tina", "format": "wav" }, "stream": true, "stream_options": { "include_usage": true }, "temperature": 1.0, "top_p": 1.0, "top_k": 20, "presence_penalty": 1.5, "repetition_penalty": 1.0, "max_completion_tokens": 2000, "n": 1, "seed": 1234, "stop": null, "logprobs": false, "top_logprobs": 0, "response_format": { "type": "text" }, "tools": [], "tool_choice": "auto", "parallel_tool_calls": false, "enable_thinking": false, "thinking_budget": 2048, "enable_search": false, "search_options": { "forced_search": false, "search_strategy": "agent", "enable_search_extension": false }, "vl_high_resolution_images": false}
modalitiesaccepts only["text","audio"]or["text"]. Thinking mode (qwen3-omni-flash) forces["text"].enable_thinkingapplies only toqwen3-omni-flash;enable_search/search_optionsonly to Qwen3.5-Omni;vl_high_resolution_imagesonly to Qwen3.5-Omni.
Request parameters (one-to-one with the OpenAI-compatible Chat Completions reference)
Section titled “Request parameters (one-to-one with the OpenAI-compatible Chat Completions reference)”| name | type | required | default | allowed values / range | description & Omni notes |
|---|---|---|---|---|---|
model | string | yes | — | hosted: qwen3.5-omni-plus, qwen3.5-omni-flash (+ snapshots …-2026-03-15), qwen3-omni-flash (+ snapshots …-2025-12-01, …-2025-09-15), qwen-omni-turbo (legacy); open-source: qwen3-omni-30b-a3b-captioner | Model name. For exact names/pricing check the console. |
messages | array | yes | — | objects with role ∈ {system,user,assistant,tool} | Conversation history in chronological order. See message-types below. |
stream | boolean | yes for Qwen-Omni (must be true) | false | true/false; Qwen-Omni rejects non-stream | Streaming output. Non-streaming raises an error for Qwen-Omni. |
stream_options | object | no | — | { "include_usage": boolean } | Effective only when stream=true. include_usage:true ⇒ token usage in the last chunk only. |
stream_options.include_usage | boolean | no | false | true/false | Include usage in the final chunk. |
modalities | array | no | ["text"] | ["text","audio"] or ["text"] | Output modalities; Qwen-Omni only. ["text","audio"] enables speech output. Thinking mode forces ["text"]. |
audio | object | no | — | object with voice+format | Output voice + format; Qwen-Omni only, requires modalities to include "audio". Not supported in thinking mode. |
audio.voice | string | Required when audio is set | — | one of the supported voice IDs for the model series (voice tables below) or a cloned-voice ID | Output voice. If omitted, the model uses the series default voice; supply it explicitly. |
audio.format | string | Required when audio is set | — | wav only | Output audio container. PCM is 24000 Hz, mono, 16-bit. |
temperature | float | no | model-specific | [0, 2) | Sampling temperature. Set only one of temperature/top_p. |
top_p | float | no | model-specific | (0, 1.0] | Nucleus sampling threshold. Set only one of temperature/top_p. |
top_k | integer | no | 50 for the qwen3-omni-flash series; 20 for the other Omni models | integer ≥ 0; null or > 100 disables top_k (only top_p applies) | Candidate-token count. Non-standard → extra_body. |
presence_penalty | float | no | 1.5 for Qwen3.5-Omni; 0.0 for the other Omni models | [-2.0, 2.0] | Penalize already-present content. Positive ↓ repetition; negative ↑. |
repetition_penalty | float | no | 1.0 (= no penalty) | > 0, no strict upper limit | Consecutive-sequence repetition control. Non-standard → extra_body. |
max_tokens | integer | no (Deprecated) | model’s max output length (check console) | ≥ 1 | Deprecated — use max_completion_tokens for new integrations. Does NOT limit chain-of-thought length. finish_reason=length when hit. |
max_completion_tokens | integer | no | model’s max output length (check console) | ≥ 1 | Replacement for max_tokens. Limits total (chain-of-thought + final response) tokens. Recommended for reasoning models. Actual output may differ by up to ~10 tokens. |
n | integer | no | 1 | 1–4 | Number of choices. Only Qwen3 non-thinking models honor n>1; if tools is passed, set n=1. |
seed | integer | no | — (unset ⇒ non-reproducible) | [0, 2^31 − 1] | RNG seed for best-effort reproducibility. |
stop | string | array | no | — | a string/token-id, or an array of strings or token-ids (do NOT mix string and token-id in one array) | Stop sequences; generation halts when matched. |
logprobs | boolean | no | false | true/false | Return log-probabilities of output tokens. reasoning_content has no logprobs. |
top_logprobs | integer | no | 0 | 0–5 | Number of candidate tokens per step. Effective only when logprobs=true. |
response_format | object | no | {"type":"text"} | {"type":"text"} or {"type":"json_object"} | Output format. For json_object you must also instruct JSON in the prompt. |
response_format.type | string | Required in object | text | text, json_object | — |
tools | array | no | — | array of tool objects (see sub-fields) | Function-calling tool definitions. When set and the model decides to call, tool_calls is returned. |
tools[].type | string | Required | — | function only | — |
tools[].function.name | string | Required | — | [A-Za-z0-9_-], ≤ 64 tokens | Tool name. |
tools[].function.description | string | Required | — | — | Helps the model decide when/how to call. |
tools[].function.parameters | object | no | {} | valid JSON Schema | Tool input schema; empty ⇒ no params. |
tool_choice | string | object | no | auto | auto, none, {"type":"function","function":{"name":"<fn>"}} | Tool-selection policy. Thinking mode cannot force a specific tool. |
parallel_tool_calls | boolean | no | false | true/false | Allow parallel tool calls. |
enable_thinking | boolean | no | false | true/false | Hybrid thinking. Within Omni only qwen3-omni-flash. Thinking content returns in reasoning_content; audio output is unsupported in thinking mode (set modalities=["text"]). Non-standard → extra_body. |
thinking | object | no | {"type":"adaptive"} | thinking.type ∈ {adaptive,disabled} | Thinking control for MiniMax/MiniMax-M3 (documented in the same reference; not used by Qwen-Omni). Non-standard → extra_body. |
thinking_budget | integer | no | model’s max chain-of-thought length (check console) | ≥ 1 | Max reasoning tokens (Qwen3.7/3.6/3.5/Qwen3-VL/Qwen3 incl. open-source). Non-standard → extra_body. |
preserve_thinking | boolean | no | false | true/false | Feed prior assistant reasoning_content back as input (billed). Limited model list (qwen3.x-max/plus, kimi-k2.6/k2.7-code); not documented for Omni. Non-standard → extra_body. |
reasoning_effort | string | no | high | high, max (low/medium→high, xhigh→max) | DeepSeek-V4 series reasoning intensity (documented in same reference; not for Omni). Non-standard → extra_body. |
tool_stream | boolean | no | false | true/false (effective only when stream=true) | Stream complex tool arguments (Qwen & GLM series). For Qwen3.5/3.6/3.7 plus/flash text or all modalities. Non-standard → extra_body. |
enable_code_interpreter | boolean | no | false | true/false | Enable code interpreter. Non-standard → extra_body. |
enable_search | boolean | no | false | true/false | Web search. Within Omni only Qwen3.5-Omni. Non-standard → extra_body. |
search_options | object | no | — | object with sub-fields below | Web-search config; effective only when enable_search=true. Non-standard → extra_body. |
search_options.forced_search | boolean | no | false | true/false | Force a web search regardless of model judgment. Effective only when enable_search=true. |
search_options.search_strategy | string | no | turbo | turbo, max, agent, agent_max | Search scale. For Qwen-Omni the search_strategy parameter only accepts agent. |
search_options.enable_search_extension | boolean | no | false | true/false | Domain-specific search. Effective only when enable_search=true. |
vl_high_resolution_images | boolean | no | false | true/false | Raise the input-image cap to the 16384-token resolution (16,777,216 px at 32×32/token for Qwen3.5-Omni); ignores max_pixels when true. Within Omni only Qwen3.5-Omni. Non-standard → extra_body. |
The reference does not list a
frequency_penaltyparameter for this family; it listspresence_penaltyandrepetition_penalty.
messages[] — message types & structure
Section titled “messages[] — message types & structure”System Message object (Optional) — place at start.
contentstring(Required) — system instruction.rolestring(Required) — fixedsystem.
User Message object (Required)
contentstring | array(Required) — string for text-only; array for multi-modal input or when explicit caching is used.rolestring(Required) — fixeduser.
Assistant Message object (Optional) — the model’s reply, fed back as context.
contentstring(Optional) — text of the reply. Can be empty/omitted only iftool_callsis present; otherwise required. (For Qwen-Omni, assistant messages may carry text only — no audio.)rolestring(Required) — fixedassistant.partialboolean(Optional, defaultfalse) — enable partial (prefix-continuation) mode.tool_callsarray(Optional) — echoed from a prior model response; each:id(Required),type=function(Required),function.name(Required),function.argumentsJSON string (Required),index(Required).
Tool Message object (Optional) — tool output.
contentstring(Required) — tool result serialized to a string.rolestring(Required) — fixedtool.tool_call_idstring(Required) — id fromchoices[0].message.tool_calls[$index].id.
messages[].content part types (multi-modal) — full sub-fields
Section titled “messages[].content part types (multi-modal) — full sub-fields”part type | sub-field(s) | type | required | notes / Omni limits |
|---|---|---|---|---|
text | text | string | Required when type=text | Plain text. |
image_url | image_url.url | string | Required when type=image_url | URL or data:image/...;base64,.... |
input_audio | input_audio.data | string | Required when type=input_audio | URL or data:;base64,... audio. |
input_audio | input_audio.format | string | Required | e.g. mp3 or wav (input accepts AMR/WAV/3GP/3GPP/AAC/MP3). |
video | video | array of image-frame URLs/base64 | Required when type=video | Video-as-frame-list. |
video_url | video_url.url | string | Required when type=video_url | URL or data:;base64,... of a video file (Qwen-Omni reads both visual and audio tracks). |
fps | fps | float | Optional | Frames extracted per second / inter-frame interval hint. Range [0.1, 10], default 2.0. Applies to video/video_url. |
min_pixels | min_pixels | integer | Optional | Lower pixel bound per image/frame; upscaled if below. Qwen3.5-Omni image input default & min = 24576 (= 24 tokens × 32×32). For video file / image-list input the default is 65536. |
max_pixels | max_pixels | integer | Optional | Upper pixel bound; downscaled if above. Qwen3.5-Omni image input default 1310720 (= 1280 tokens × 32×32); the high-resolution cap is 16777216. When vl_high_resolution_images=true, max_pixels is ignored and the cap is fixed at 16777216. For video file / image-list input the default is 655360. |
total_pixels | total_pixels | integer | Optional | Total-pixel budget across all extracted video frames (per-frame stays within [min_pixels,max_pixels]). Qwen3.5-Omni default & max = 184549376 (= 180224 image tokens at 32×32/token). |
cache_control | cache_control.type | string (ephemeral only) | Optional (property of a user content part) | Enables explicit caching for that content. |
Combined multimodal input (image+audio+video in one user message) — Qwen3.5-Omni series only.
qwen3-omni-flash/qwen-omni-turbo: text + exactly one other modality, one media file per request. In multi-turn dialogs different user messages may carry different single modalities.
Input-modality limits (per series)
Section titled “Input-modality limits (per series)”Audio input (input_audio): formats AMR, WAV, 3GP, 3GPP, AAC, MP3.
- Files: Qwen3.5-Omni — up to 2048 (URL) / 250 (base64); Flash & Turbo — only 1.
- Size (URL): Qwen3.5-Omni ≤ 2 GB; Flash ≤ 100 MB; Turbo ≤ 10 MB. Base64 string < 10 MB (all).
- Duration: Qwen3.5-Omni ≤ 3 h; Flash ≤ 20 min; Turbo ≤ 3 min. (Billing minimum 1 s.)
Video file input (video_url): formats MP4, AVI, MKV, MOV, FLV, WMV; visual + audio tracks billed separately.
- Files: Qwen3.5-Omni — up to 512 (URL) / 250 (base64); Flash & Turbo — only 1.
- Size (URL): Qwen3.5-Omni ≤ 2 GB; Flash ≤ 256 MB; Turbo ≤ 150 MB. Base64 < 10 MB.
- Duration: Qwen3.5-Omni ≤ 1 h; Flash ≤ 150 s; Turbo ≤ 40 s.
Image-list-as-video (video): frame counts — Qwen3.5-Omni 2–2048; Flash 2–128; Turbo 4–80 frames.
Image input (image_url): up to 2048 (URL) / 250 (base64) images; per-file ≤ 20 MB (Qwen3.5-Omni) / ≤ 10 MB (Flash, Turbo); base64 < 10 MB; both width and height must exceed 10 px; aspect ratio must not exceed 200:1.
Token/billing factors: image token density 1 token per 32×32 px (Qwen3.5-Omni & Flash) / per 28×28 px (Turbo); minimum 24 tokens per image (Qwen3.5-Omni) / 4 tokens (Flash & Turbo); default maximum 1280 tokens per image. Audio: Qwen3.5-Omni input ≈ seconds × 7 tokens, output ≈ seconds × 12.5; Flash ≈ seconds × 12.5 (in and out). Image ≈ 1 token / 32×32 px; video is split into
video_tokens+audio_tokens. (Billing only — not request parameters.)
Response shape
Section titled “Response shape”Non-streaming chat.completion object (for reference; Qwen-Omni itself requires streaming)
Section titled “Non-streaming chat.completion object (for reference; Qwen-Omni itself requires streaming)”{ "choices": [ { "message": { "role": "assistant", "content": "...", "reasoning_content": null, "refusal": null, "audio": null, "function_call": null, "tool_calls": null }, "finish_reason": "stop", "index": 0, "logprobs": null } ], "object": "chat.completion", "usage": { "prompt_tokens": 3019, "completion_tokens": 104, "total_tokens": 3123, "prompt_tokens_details": { "cached_tokens": 2048 } }, "created": 1735120033, "system_fingerprint": null, "service_tier": null, "model": "qwen-plus", "id": "chatcmpl-..." }In the non-stream object,
message.audiois alwaysnullandcompletion_tokens_details.audio_tokens/reasoning_tokensarenull— audio output is delivered via streaming chunks, not the non-stream body.
Streaming chat.completion.chunk objects (SSE data: lines) — the Qwen-Omni path
Section titled “Streaming chat.completion.chunk objects (SSE data: lines) — the Qwen-Omni path”Text chunk:
{"id":"chatcmpl-...","choices":[{"delta":{"content":"I","function_call":null,"refusal":null,"role":"assistant","tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1757647879,"model":"qwen3.5-omni-plus","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}Audio chunk (base64 fragment in delta.audio.data):
{"choices":[{"delta":{"audio":{"data":"/v8AAAAAAA...","expires_at":1757647879,"id":"audio_..."}},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","model":"qwen3.5-omni-plus","id":"chatcmpl-...","usage":null}Thinking chunk (qwen3-omni-flash, reasoning in delta.reasoning_content):
{"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":"Hmm"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","model":"qwen3-omni-flash","id":"chatcmpl-..."}Final / usage chunk (choices empty when include_usage=true):
{"choices":[],"object":"chat.completion.chunk", "usage":{"prompt_tokens":207,"completion_tokens":103,"total_tokens":310, "completion_tokens_details":{"audio_tokens":83,"text_tokens":20}, "prompt_tokens_details":{"text_tokens":207}}, "created":1757940330,"model":"qwen3.5-omni-plus","system_fingerprint":null,"service_tier":null,"id":"chatcmpl-..."}Response fields (streaming chunk + final usage)
Section titled “Response fields (streaming chunk + final usage)”| name | type | description |
|---|---|---|
id | string | Request id; shared by all chunks of one response. |
object | string | chat.completion.chunk (stream) / chat.completion (non-stream). |
created | integer | Unix timestamp; shared across chunks. |
model | string | Model used. |
service_tier | string | Always null. |
system_fingerprint | string | Always null. |
choices | array | Generated choices; empty in the final chunk when include_usage=true. |
choices[].index | integer | Choice index (use with n>1 to reassemble). |
choices[].delta.content | string|null | Incremental text fragment. |
choices[].delta.role | string | assistant; appears only in the first chunk. |
choices[].delta.reasoning_content | string|null | Incremental chain-of-thought (Flash thinking mode). |
choices[].delta.audio | object | Qwen-Omni audio output. |
choices[].delta.audio.data | string | Incremental base64 audio (concatenate across chunks; decode as 24 kHz/mono/16-bit PCM). |
choices[].delta.audio.expires_at | integer | UNIX timestamp (audio id expiry). |
choices[].delta.audio.id | string | Audio segment id. |
choices[].delta.audio.transcript | string | Transcript of the audio, when present. |
choices[].delta.refusal | object | Always null. |
choices[].delta.function_call | object | Always null (legacy; use tool_calls). |
choices[].delta.tool_calls[] | array | Streamed tool calls: index, id (first chunk), type=function, function.name (first chunk), function.arguments (concatenate fragments). |
choices[].finish_reason | string|null | null while generating; then stop / length / tool_calls. |
choices[].logprobs | object|null | {content:[{token,bytes,logprob,top_logprobs:[{token,bytes,logprob}]}]} when logprobs=true. |
usage | object | Final chunk only (with include_usage). |
usage.prompt_tokens | integer | Input tokens. |
usage.completion_tokens | integer | Output tokens. |
usage.total_tokens | integer | Sum. |
usage.completion_tokens_details.audio_tokens | integer | Output audio tokens. |
usage.completion_tokens_details.text_tokens | integer | Output text tokens. |
usage.completion_tokens_details.reasoning_tokens | integer | Thinking tokens (Flash). |
usage.prompt_tokens_details.text_tokens | integer | Input text tokens. |
usage.prompt_tokens_details.audio_tokens | integer | Input audio tokens (also where a video file’s audio-track tokens land). |
usage.prompt_tokens_details.image_tokens | integer | Input image tokens. |
usage.prompt_tokens_details.video_tokens | integer | Input video tokens (image list or video file). |
usage.prompt_tokens_details.cached_tokens | integer | Tokens served from cache. |
usage.cache_creation.ephemeral_5m_input_tokens | integer | Tokens used to create an explicit cache. |
usage.cache_creation.cache_creation_input_tokens | integer | Tokens used to create an explicit cache. |
usage.cache_creation.cache_type | string | ephemeral when explicit caching is used. |
Non-stream
messagealso exposestool_calls[](id, type=function, function.name/arguments, index),refusal(null), andfunction_call(null, deprecated).
Supported voices (audio.voice)
Section titled “Supported voices (audio.voice)”| Model series | default voice | voice count | voice IDs |
|---|---|---|---|
Qwen3.5-Omni (qwen3.5-omni-plus, qwen3.5-omni-flash, and their realtime variants) | Tina | 55 | Tina, Cindy, Liora Mira, Sunnybobi, Raymond, Ethan, Theo Calm, Serena, Harvey, Maia, Evan, Qiao, Momo, Wil, Angel, Li Cassian, Mia, Joyner, Gold, Katerina, Ryan, Jennifer, Aiden, Mione, Sunny, Dylan, Eric, Peter, Joseph Chen, Marcus, Li, Rocky, Sohee, Lenn, Ono Anna, Sonrisa, Bodega, Emilien, Andre, Radio Gol, Alek, Rizky, Roya, Arda, Hana, Dolce, Jakub, Griet, Eliška, Marina, Siiri, Ingrid, Sigga, Bea, Chloe |
Qwen3-Omni-Flash — snapshot qwen3-omni-flash-2025-12-01 | Cherry | 49 | Cherry, Serena, Ethan, Chelsie, Momo, Vivian, Moon, Maia, Kai, Nofish, Bella, Jennifer, Ryan, Katerina, Aiden, Eldric Sage, Mia, Mochi, Bellona, Vincent, Bunny, Neil, Elias, Arthur, Nini, Ebona, Seren, Pip, Stella, Bodega, Sonrisa, Alek, Dolce, Sohee, Ono Anna, Lenn, Emilien, Andre, Radio Gol, Jada, Dylan, Li, Marcus, Roy, Peter, Sunny, Eric, Rocky, Kiki |
Qwen3-Omni-Flash — stable qwen3-omni-flash & snapshot qwen3-omni-flash-2025-09-15 | Cherry | 17 | Cherry, Ethan, Nofish, Jennifer, Ryan, Katerina, Elias, Jada, Dylan, Sunny, Li, Marcus, Roy, Peter, Rocky, Kiki, Eric |
| Qwen-Omni-Turbo (legacy, deprecated) | Chelsie | 4 | Cherry, Serena, Ethan, Chelsie |
qwen3-omni-30b-a3b-captioner | — | — | No audio output / no voice parameter (text-only model). |
If
audio.voiceis omitted, the series default is used; the reference marksaudio.voiceRequired when theaudioobject is supplied, so supply it explicitly.
Voice cloning
Section titled “Voice cloning”- Supported (for Qwen-Omni) only by
qwen3.5-omni-plusandqwen3.5-omni-flash— not their dated snapshots. - Mechanism: create a custom voice from a 10–20 second audio sample, with no model training required. Create via the voice-enrollment API (
model: "voice-enrollment"/"qwen-voice-enrollment",action: "create_voice", settarget_model,prefix, audiourl) → returns avoice_id. Pass thatvoice_idasaudio.voice(Omni).target_modelset during voice creation must exactly match the synthesis model. (Audio sample requirements: WAV (16-bit) / MP3 / M4A, 10–20 s recommended, ≤ 10 MB, sample rate 16 kHz or higher.)
Audio languages
Section titled “Audio languages”- Qwen3.5-Omni: input 113 (74 languages + 39 dialects); output 36 (29 languages + 7 dialects).
- Qwen3-Omni-Flash: input 19 (11 languages + 8 dialects); output 19 (11 + 8).
- Qwen-Omni-Turbo: input Chinese/English; output Chinese/English.
Examples
Section titled “Examples”Minimal (text in, text+audio out)
Section titled “Minimal (text in, text+audio out)”curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \ -H "Authorization: Bearer $DASHSCOPE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3.5-omni-plus", "messages": [{"role":"user","content":"Who are you?"}], "stream": true, "stream_options": {"include_usage": true}, "modalities": ["text","audio"], "audio": {"voice":"Tina","format":"wav"} }'Full (image + audio in, text+audio out, web search) — Qwen3.5-Omni
Section titled “Full (image + audio in, text+audio out, web search) — Qwen3.5-Omni”from openai import OpenAIimport os, base64client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",)completion = client.chat.completions.create( model="qwen3.5-omni-plus", messages=[{ "role": "user", "content": [ {"type": "image_url", "image_url": {"url": "https://.../dog_and_girl.jpeg"}}, {"type": "input_audio", "input_audio": {"data": "https://.../cherry.wav", "format": "wav"}}, {"type": "text", "text": "Describe the image and tell me what the audio is about."}, ], }], modalities=["text", "audio"], audio={"voice": "Tina", "format": "wav"}, temperature=0.7, top_p=0.9, max_completion_tokens=2000, stream=True, stream_options={"include_usage": True}, extra_body={"enable_search": True, "search_options": {"search_strategy": "agent"}},)audio_b64 = ""for chunk in completion: if chunk.choices: d = chunk.choices[0].delta if d.content: print(d.content, end="") if getattr(d, "audio", None): audio_b64 += d.audio.get("data", "") else: print(chunk.usage)# base64.b64decode(audio_b64) -> int16 PCM @ 24000 Hz monoFlash thinking (text-only output; no audio in thinking mode)
Section titled “Flash thinking (text-only output; no audio in thinking mode)”completion = client.chat.completions.create( model="qwen3-omni-flash", messages=[{"role": "user", "content": "Who are you?"}], modalities=["text"], # audio not allowed in thinking mode extra_body={"enable_thinking": True, "thinking_budget": 2048}, stream=True, stream_options={"include_usage": True},)# reasoning streams in chunk.choices[0].delta.reasoning_content; final text in .contentCaptioner (open-source, self-host) — audio in, text out only
Section titled “Captioner (open-source, self-host) — audio in, text out only”# qwen3-omni-30b-a3b-captioner: single-turn, ONE audio input, NO text prompt, text-only output.# Open-source (HF/ModelScope/vLLM); NOT a Model Studio OpenAI-compatible hosted endpoint.# HF Transformers content-part type is "audio":conversation = [{"role": "user", "content": [ {"type": "audio", "audio": "https://.../caption2.mp3"}]}]# Recommended sampling (per model card / vLLM): temperature=0.6, top_p=0.95, top_k=20,# max_tokens=16384, max_model_len=32768. Best practice: audio <= 30 s.# vLLM `vllm serve` exposes an OpenAI /v1/chat/completions endpoint where the part type is "audio_url":# {"type":"audio_url","audio_url":{"url":"https://.../caption2.mp3"}}Sources
Section titled “Sources”- https://www.alibabacloud.com/help/en/model-studio/qwen-omni
- https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions
- https://www.alibabacloud.com/help/en/model-studio/omni-voice-list
- https://www.alibabacloud.com/help/en/model-studio/voice-cloning-user-guide
- https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Captioner
- https://github.com/QwenLM/Qwen3-Omni