Skip to content

Commit a69fb71

Browse files
Le LILe LI
authored andcommitted
fix: expose qwen3.6-plus on coding plan endpoints
1 parent f5a7632 commit a69fb71

4 files changed

Lines changed: 36 additions & 46 deletions

File tree

docs/providers/qwen.md

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ compatibility alias.
2626
- API style: OpenAI-compatible
2727

2828
<Tip>
29-
If you want `qwen3.6-plus`, prefer the **Standard (pay-as-you-go)** endpoint.
30-
Coding Plan support can lag behind the public catalog.
29+
`qwen3.6-plus` is exposed on both Standard (pay-as-you-go) and Coding Plan
30+
endpoints. Availability still depends on the upstream account plan and rollout
31+
status, so providers may occasionally return a vendor-side unsupported-model
32+
error until Alibaba fully enables it for a given tenant.
3133
</Tip>
3234

3335
## Getting started
@@ -85,7 +87,7 @@ Choose your plan type and follow the setup steps.
8587
</Tab>
8688

8789
<Tab title="Standard (pay-as-you-go)">
88-
**Best for:** pay-as-you-go access through the Standard Model Studio endpoint, including models like `qwen3.6-plus` that may not be available on the Coding Plan.
90+
**Best for:** pay-as-you-go access through the Standard Model Studio endpoint.
8991

9092
<Steps>
9193
<Step title="Get your API key">
@@ -154,21 +156,19 @@ You can override with a custom `baseUrl` in config.
154156

155157
## Built-in catalog
156158

157-
OpenClaw currently ships this bundled Qwen catalog. The configured catalog is
158-
endpoint-aware: Coding Plan configs omit models that are only known to work on
159-
the Standard endpoint.
160-
161-
| Model ref | Input | Context | Notes |
162-
| --------------------------- | ----------- | --------- | -------------------------------------------------- |
163-
| `qwen/qwen3.5-plus` | text, image | 1,000,000 | Default model |
164-
| `qwen/qwen3.6-plus` | text, image | 1,000,000 | Prefer Standard endpoints when you need this model |
165-
| `qwen/qwen3-max-2026-01-23` | text | 262,144 | Qwen Max line |
166-
| `qwen/qwen3-coder-next` | text | 262,144 | Coding |
167-
| `qwen/qwen3-coder-plus` | text | 1,000,000 | Coding |
168-
| `qwen/MiniMax-M2.5` | text | 1,000,000 | Reasoning enabled |
169-
| `qwen/glm-5` | text | 202,752 | GLM |
170-
| `qwen/glm-4.7` | text | 202,752 | GLM |
171-
| `qwen/kimi-k2.5` | text, image | 262,144 | Moonshot AI via Alibaba |
159+
OpenClaw currently ships this bundled Qwen catalog.
160+
161+
| Model ref | Input | Context | Notes |
162+
| --------------------------- | ----------- | --------- | -------------------------------------------------------- |
163+
| `qwen/qwen3.5-plus` | text, image | 1,000,000 | Default model |
164+
| `qwen/qwen3.6-plus` | text, image | 1,000,000 | Availability still depends on upstream tenant enablement |
165+
| `qwen/qwen3-max-2026-01-23` | text | 262,144 | Qwen Max line |
166+
| `qwen/qwen3-coder-next` | text | 262,144 | Coding |
167+
| `qwen/qwen3-coder-plus` | text | 1,000,000 | Coding |
168+
| `qwen/MiniMax-M2.5` | text | 1,000,000 | Reasoning enabled |
169+
| `qwen/glm-5` | text | 202,752 | GLM |
170+
| `qwen/glm-4.7` | text | 202,752 | GLM |
171+
| `qwen/kimi-k2.5` | text, image | 262,144 | Moonshot AI via Alibaba |
172172

173173
<Note>
174174
Availability can still vary by endpoint and billing plan even when a model is
@@ -225,15 +225,13 @@ See [Video Generation](/tools/video-generation) for shared tool parameters, prov
225225
</Accordion>
226226

227227
<Accordion title="Qwen 3.6 Plus availability">
228-
`qwen3.6-plus` is available on the Standard (pay-as-you-go) Model Studio
229-
endpoints:
230-
231-
- China: `dashscope.aliyuncs.com/compatible-mode/v1`
232-
- Global: `dashscope-intl.aliyuncs.com/compatible-mode/v1`
228+
`qwen3.6-plus` is exposed in OpenClaw on both Standard (pay-as-you-go)
229+
and Coding Plan endpoints.
233230

234-
If the Coding Plan endpoints return an "unsupported model" error for
235-
`qwen3.6-plus`, switch to Standard (pay-as-you-go) instead of the Coding Plan
236-
endpoint/key pair.
231+
If a Coding Plan endpoint still returns an upstream "unsupported model"
232+
error for `qwen3.6-plus`, that usually means Alibaba has not enabled the
233+
model for that tenant yet. In that case you can either wait for the rollout
234+
or switch to the Standard (pay-as-you-go) endpoint/key pair.
237235

238236
</Accordion>
239237

extensions/qwen/index.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { defineSingleProviderPluginEntry } from "openclaw/plugin-sdk/provider-entry";
22
import { applyQwenNativeStreamingUsageCompat } from "./api.js";
33
import { buildQwenMediaUnderstandingProvider } from "./media-understanding-provider.js";
4-
import { isQwenCodingPlanBaseUrl, QWEN_36_PLUS_MODEL_ID, QWEN_BASE_URL } from "./models.js";
4+
import { QWEN_BASE_URL } from "./models.js";
55
import {
66
applyQwenConfig,
77
applyQwenConfigCn,
@@ -109,7 +109,7 @@ export default defineSingleProviderPluginEntry({
109109
"Manage API keys: https://home.qwencloud.com/api-keys",
110110
"Docs: https://docs.qwencloud.com/",
111111
"Endpoint: coding.dashscope.aliyuncs.com",
112-
"Models: qwen3.5-plus, glm-5, kimi-k2.5, MiniMax-M2.5, etc.",
112+
"Models: qwen3.6-plus, qwen3.5-plus, glm-5, kimi-k2.5, MiniMax-M2.5, etc.",
113113
].join("\n"),
114114
noteTitle: "Qwen Cloud Coding Plan (China)",
115115
wizard: {
@@ -132,7 +132,7 @@ export default defineSingleProviderPluginEntry({
132132
"Manage API keys: https://home.qwencloud.com/api-keys",
133133
"Docs: https://docs.qwencloud.com/",
134134
"Endpoint: coding-intl.dashscope.aliyuncs.com",
135-
"Models: qwen3.5-plus, glm-5, kimi-k2.5, MiniMax-M2.5, etc.",
135+
"Models: qwen3.6-plus, qwen3.5-plus, glm-5, kimi-k2.5, MiniMax-M2.5, etc.",
136136
].join("\n"),
137137
noteTitle: "Qwen Cloud Coding Plan (Global/Intl)",
138138
wizard: {
@@ -160,14 +160,8 @@ export default defineSingleProviderPluginEntry({
160160
applyNativeStreamingUsageCompat: ({ providerConfig }) =>
161161
applyQwenNativeStreamingUsageCompat(providerConfig),
162162
wrapStreamFn: wrapQwenProviderStream,
163-
normalizeConfig: ({ providerConfig }) => {
164-
if (!isQwenCodingPlanBaseUrl(providerConfig.baseUrl)) {
165-
return undefined;
166-
}
167-
const models = providerConfig.models?.filter((model) => model.id !== QWEN_36_PLUS_MODEL_ID);
168-
return models && models.length !== providerConfig.models?.length
169-
? { ...providerConfig, models }
170-
: undefined;
163+
normalizeConfig: () => {
164+
return undefined;
171165
},
172166
},
173167
register(api) {

extensions/qwen/models.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,16 +123,14 @@ export function isQwenCodingPlanBaseUrl(baseUrl: string | undefined): boolean {
123123
}
124124
}
125125

126-
export function isQwen36PlusSupportedBaseUrl(baseUrl: string | undefined): boolean {
127-
return !isQwenCodingPlanBaseUrl(baseUrl);
126+
export function isQwen36PlusSupportedBaseUrl(_baseUrl: string | undefined): boolean {
127+
return true;
128128
}
129129

130130
export function buildQwenModelCatalogForBaseUrl(
131-
baseUrl: string | undefined,
131+
_baseUrl: string | undefined,
132132
): ReadonlyArray<ModelDefinitionConfig> {
133-
return isQwen36PlusSupportedBaseUrl(baseUrl)
134-
? QWEN_MODEL_CATALOG
135-
: QWEN_MODEL_CATALOG.filter((model) => model.id !== QWEN_36_PLUS_MODEL_ID);
133+
return QWEN_MODEL_CATALOG;
136134
}
137135

138136
export function isNativeQwenBaseUrl(baseUrl: string | undefined): boolean {

extensions/qwen/provider-catalog.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ describe("qwen provider catalog", () => {
1515
expect(provider.api).toBe("openai-completions");
1616
expect(provider.models?.length).toBeGreaterThan(0);
1717
expect(provider.models?.find((model) => model.id === QWEN_DEFAULT_MODEL_ID)).toBeTruthy();
18-
expect(provider.models?.find((model) => model.id === "qwen3.6-plus")).toBeFalsy();
18+
expect(provider.models?.find((model) => model.id === "qwen3.6-plus")).toBeTruthy();
1919
});
2020

21-
it("only advertises qwen3.6-plus on Standard endpoints", () => {
21+
it("advertises qwen3.6-plus on both Coding Plan and Standard endpoints", () => {
2222
const coding = buildQwenProvider({ baseUrl: QWEN_BASE_URL });
2323
const standard = buildQwenProvider({ baseUrl: QWEN_STANDARD_GLOBAL_BASE_URL });
2424

25-
expect(coding.models?.find((model) => model.id === "qwen3.6-plus")).toBeFalsy();
25+
expect(coding.models?.find((model) => model.id === "qwen3.6-plus")).toBeTruthy();
2626
expect(standard.models?.find((model) => model.id === "qwen3.6-plus")).toBeTruthy();
2727
});
2828

0 commit comments

Comments
 (0)