Summary
Model Studio's Token Plan serves speech recognition under the new model family ID qwen-audio-3.0-asr-flash, but Qwen Code's voice pipeline hardcodes the old IDs, so voice transcription cannot use any Token Plan ASR model. Mic capture itself works; the gate is purely the model-ID allowlist.
Environment
- Qwen Code 0.22.3 (global npm install), Linux
- Provider: OpenAI-compatible, baseUrl
https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1 (Model Studio Token Plan, Global/Intl)
- Settings:
general.voice.enabled: true, voiceModel: "qwen-audio-3.0-asr-flash", model registered in modelProviders.openai with the Token Plan baseUrl
Repro
- Configure the voice model as above.
- Press
Space to start dictation.
- Error:
Voice model 'qwen-audio-3.0-asr-flash' cannot be used for transcription. Configure an OpenAI-compatible model with baseUrl in settings.modelProviders.
Evidence
-
Token Plan docs list qwen-audio-3.0-asr-flash as the supported speech-recognition model (plus qwen-audio-3.0-realtime-plus, qwen-audio-3.0-tts-plus): https://www.alibabacloud.com/help/en/model-studio/token-plan-personal-overview
-
Live endpoint probes against the Token Plan baseUrl (POST /chat/completions with an input_audio message, same shape as transcribeViaQwenAsr):
qwen3-asr-flash → 404 model_not_found (old ID no longer exists on this endpoint)
qwen-audio-3.0-asr-flash → 400 with empty body (model exists; the batch request shape is apparently not accepted for this ID)
-
resolveVoiceTransport in packages/cli/src/services/voice-model.ts (0.22.3, and unchanged on upstream main as of 2026-09-03) only matches:
^qwen3-asr-flash-realtime(?:-|$) → qwen-asr-realtime
^qwen3-asr-flash(?:-\d{4}-\d{2}-\d{2})?$ → qwen-asr-chat
^(fun-asr|paraformer).*realtime(?:-|$) → dashscope-task-realtime
- anything else →
unsupported
So qwen-audio-3.0-asr-flash is rejected before any request is made.
Expected behavior
Qwen Code recognizes the current qwen-audio-3.0-* ASR family (at minimum qwen-audio-3.0-asr-flash) and routes it to the correct transport, so Token Plan subscribers can use voice dictation.
Suggested fix
Extend the resolveVoiceTransport allowlist to accept the qwen-audio-3.0-asr* family. Note the transport choice needs verification: my batch chat/completions probe of qwen-audio-3.0-asr-flash returned 400 {}, so this ID may speak one of the WebSocket protocols instead (/api-ws/v1/realtime or /api-ws/v1/inference) — i.e. it may need mapping to qwen-asr-realtime/dashscope-task-realtime rather than qwen-asr-chat.
Summary
Model Studio's Token Plan serves speech recognition under the new model family ID
qwen-audio-3.0-asr-flash, but Qwen Code's voice pipeline hardcodes the old IDs, so voice transcription cannot use any Token Plan ASR model. Mic capture itself works; the gate is purely the model-ID allowlist.Environment
https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1(Model Studio Token Plan, Global/Intl)general.voice.enabled: true,voiceModel: "qwen-audio-3.0-asr-flash", model registered inmodelProviders.openaiwith the Token Plan baseUrlRepro
Spaceto start dictation.Voice model 'qwen-audio-3.0-asr-flash' cannot be used for transcription. Configure an OpenAI-compatible model with baseUrl in settings.modelProviders.Evidence
Token Plan docs list
qwen-audio-3.0-asr-flashas the supported speech-recognition model (plusqwen-audio-3.0-realtime-plus,qwen-audio-3.0-tts-plus): https://www.alibabacloud.com/help/en/model-studio/token-plan-personal-overviewLive endpoint probes against the Token Plan baseUrl (
POST /chat/completionswith aninput_audiomessage, same shape astranscribeViaQwenAsr):qwen3-asr-flash→404 model_not_found(old ID no longer exists on this endpoint)qwen-audio-3.0-asr-flash→400with empty body (model exists; the batch request shape is apparently not accepted for this ID)resolveVoiceTransportinpackages/cli/src/services/voice-model.ts(0.22.3, and unchanged on upstreammainas of 2026-09-03) only matches:^qwen3-asr-flash-realtime(?:-|$)→qwen-asr-realtime^qwen3-asr-flash(?:-\d{4}-\d{2}-\d{2})?$→qwen-asr-chat^(fun-asr|paraformer).*realtime(?:-|$)→dashscope-task-realtimeunsupportedSo
qwen-audio-3.0-asr-flashis rejected before any request is made.Expected behavior
Qwen Code recognizes the current
qwen-audio-3.0-*ASR family (at minimumqwen-audio-3.0-asr-flash) and routes it to the correct transport, so Token Plan subscribers can use voice dictation.Suggested fix
Extend the
resolveVoiceTransportallowlist to accept theqwen-audio-3.0-asr*family. Note the transport choice needs verification: my batchchat/completionsprobe ofqwen-audio-3.0-asr-flashreturned400 {}, so this ID may speak one of the WebSocket protocols instead (/api-ws/v1/realtimeor/api-ws/v1/inference) — i.e. it may need mapping toqwen-asr-realtime/dashscope-task-realtimerather thanqwen-asr-chat.