Skip to content

Commit cff2ace

Browse files
committed
feat(providers): refresh Qwen3.8 model catalogs
1 parent 1287b6a commit cff2ace

10 files changed

Lines changed: 55 additions & 38 deletions

File tree

open-sse/config/freeModelCatalog.data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
368368
{ provider: "qoder", modelId: "deepseek-v4-pro", displayName: "DeepSeek-V4-Pro", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
369369
{ provider: "qoder", modelId: "deepseek-v4-flash", displayName: "DeepSeek-V4-Flash", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
370370
{ provider: "qoder", modelId: "minimax-m3", displayName: "MiniMax-M3", monthlyTokens: 0, creditTokens: 1000000, freeType: "one-time-initial", poolKey: "qoder", tos: "caution" },
371-
{ provider: "qwen-web", modelId: "qwen3.8-max-preview", displayName: "Qwen3.8 Max Preview", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
371+
{ provider: "qwen-web", modelId: "qwen3.8-max", displayName: "Qwen3.8 Max", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
372372
{ provider: "qwen-web", modelId: "qwen3.7-max", displayName: "Qwen3.7 Max", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
373373
{ provider: "qwen-web", modelId: "qwen3.7-plus", displayName: "Qwen3.7 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
374374
{ provider: "qwen-web", modelId: "qwen3.6-plus", displayName: "Qwen3.6 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },

open-sse/config/providers/registry/alibaba/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { RegistryEntry, RegistryModel } from "../../shared.ts";
22

33
export const ALIBABA_MODEL_STUDIO_MODELS: RegistryModel[] = [
4+
{ id: "qwen3.8-max", name: "Qwen3.8 Max" },
45
{ id: "qwen3.7-max", name: "Qwen3.7 Max" },
56
{ id: "qwen3.7-plus", name: "Qwen3.7 Plus" },
67
{ id: "qwen3.6-plus", name: "Qwen3.6 Plus" },

open-sse/config/providers/registry/clinepass/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export const clinepassProvider: RegistryEntry = {
3232
"HTTP-Referer": "https://cline.bot",
3333
"X-Title": "Cline",
3434
},
35-
// Offline fallback copied from Cline CLI 3.0.46's generated catalog. Live
35+
// Offline fallback copied from Cline CLI 3.0.53's generated catalog. Live
3636
// discovery replaces it with the authored recommended-models order.
3737
models: [
3838
{
@@ -111,6 +111,15 @@ export const clinepassProvider: RegistryEntry = {
111111
maxInputTokens: 1048576,
112112
maxOutputTokens: 131072,
113113
},
114+
{
115+
id: "cline-pass/qwen3.8-max",
116+
name: "Qwen3.8 Max",
117+
toolCalling: true,
118+
supportsReasoning: true,
119+
contextLength: 1000000,
120+
maxInputTokens: 1000000,
121+
maxOutputTokens: 65536,
122+
},
114123
{
115124
id: "cline-pass/qwen3.7-max",
116125
name: "Qwen3.7 Max",

open-sse/config/providers/registry/qwen-cloud-token-plan/index.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,21 @@ export const qwen_cloud_token_planProvider: RegistryEntry = {
1111
authHeader: "bearer",
1212
models: [
1313
{
14-
id: "qwen3.8-max-preview",
15-
name: "Qwen3.8 Max Preview",
14+
id: "qwen3.8-max",
15+
name: "Qwen3.8 Max",
1616
supportsReasoning: true,
1717
supportsVision: true,
1818
toolCalling: true,
1919
contextLength: 1_000_000,
20-
maxOutputTokens: 65_536,
20+
maxOutputTokens: 131_072,
2121
},
2222
{
2323
id: "qwen3.7-max",
2424
name: "Qwen3.7 Max",
2525
supportsReasoning: true,
2626
toolCalling: true,
2727
contextLength: 1_000_000,
28-
maxOutputTokens: 65_536,
28+
maxOutputTokens: 131_072,
2929
},
3030
{
3131
id: "qwen3.7-plus",
@@ -34,7 +34,7 @@ export const qwen_cloud_token_planProvider: RegistryEntry = {
3434
supportsVision: true,
3535
toolCalling: true,
3636
contextLength: 1_000_000,
37-
maxOutputTokens: 65_536,
37+
maxOutputTokens: 131_072,
3838
},
3939
{
4040
id: "qwen3.6-flash",
@@ -43,23 +43,31 @@ export const qwen_cloud_token_planProvider: RegistryEntry = {
4343
supportsVision: true,
4444
toolCalling: true,
4545
contextLength: 1_000_000,
46-
maxOutputTokens: 32_768,
46+
maxOutputTokens: 65_536,
4747
},
4848
{
4949
id: "glm-5.2",
5050
name: "GLM 5.2",
5151
supportsReasoning: true,
5252
toolCalling: true,
5353
contextLength: 1_000_000,
54-
maxOutputTokens: 16_384,
54+
maxOutputTokens: 131_072,
5555
},
5656
{
5757
id: "deepseek-v4-pro",
5858
name: "DeepSeek V4 Pro",
5959
supportsReasoning: true,
6060
toolCalling: true,
61-
contextLength: 163_840,
62-
maxOutputTokens: 32_768,
61+
contextLength: 1_000_000,
62+
maxOutputTokens: 393_216,
63+
},
64+
{
65+
id: "deepseek-v4-flash-0731",
66+
name: "DeepSeek V4 Flash",
67+
supportsReasoning: true,
68+
toolCalling: true,
69+
contextLength: 1_000_000,
70+
maxOutputTokens: 393_216,
6371
},
6472
],
6573
};

open-sse/config/providers/registry/qwen-cloud/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { RegistryEntry, RegistryModel } from "../../shared.ts";
22

33
export const QWEN_CLOUD_TEXT_MODELS: RegistryModel[] = [
4+
{ id: "qwen3.8-max", name: "Qwen3.8 Max" },
45
{ id: "qwen3.7-max-2026-06-08", name: "Qwen3.7 Max (2026-06-08)" },
56
{ id: "qwen3.7-plus", name: "Qwen3.7 Plus" },
67
{ id: "qwen3.6-plus", name: "Qwen3.6 Plus" },

open-sse/config/providers/registry/qwen/web/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ export const qwen_webProvider: RegistryEntry = {
1717
// MODEL_ALIASES map for backward compatibility.
1818
models: [
1919
{
20-
id: "qwen3.8-max-preview",
21-
name: "Qwen3.8 Max Preview",
20+
id: "qwen3.8-max",
21+
name: "Qwen3.8 Max",
2222
toolCalling: false,
2323
supportsReasoning: true,
2424
supportsVision: true,
2525
contextLength: 1_000_000,
26-
maxOutputTokens: 65_536,
26+
maxOutputTokens: 131_072,
2727
},
2828
{
2929
id: "qwen3.7-max",

open-sse/executors/qwen-web.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ const MODEL_ALIASES: Record<string, string> = {
5858
"qwen3-plus": "qwen3.7-plus",
5959
"qwen3-max": "qwen3.7-max",
6060
"qwen3-flash": "qwen3.6-plus",
61+
"qwen3.8-max-preview": "qwen3.8-max",
6162
// Note: `qwen3-coder-plus` is a real upstream model id (Qwen3-Coder) and
6263
// must NOT be aliased — the previous `"qwen3-coder-plus": "qwen3.7-max"`
6364
// entry silently rewrote valid coder requests to the wrong model.
@@ -67,7 +68,7 @@ const MODEL_ALIASES: Record<string, string> = {
6768
};
6869

6970
const DEFAULT_MODEL = "qwen3.7-max";
70-
const REQUIRED_THINKING_MODELS = new Set(["qwen3.8-max-preview"]);
71+
const REQUIRED_THINKING_MODELS = new Set(["qwen3.8-max"]);
7172

7273
function mapModel(modelId: string): string {
7374
return MODEL_ALIASES[modelId] || modelId;

tests/unit/alibaba-provider-regions.test.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ test("Qwen Cloud is a first-class metered API-key provider", () => {
204204
assert.deepEqual(
205205
REGISTRY["qwen-cloud"].models.map((model) => model.id),
206206
[
207+
"qwen3.8-max",
207208
"qwen3.7-max-2026-06-08",
208209
"qwen3.7-plus",
209210
"qwen3.6-plus",
@@ -223,6 +224,7 @@ test("Qwen Cloud is a first-class metered API-key provider", () => {
223224

224225
test("Alibaba Model Studio exposes the curated modern text catalog", () => {
225226
const expectedModels = [
227+
"qwen3.8-max",
226228
"qwen3.7-max",
227229
"qwen3.7-plus",
228230
"qwen3.6-plus",
@@ -272,19 +274,20 @@ test("Qwen Cloud Token Plan remains a flat-rate provider with chat models only",
272274

273275
const modelIds = REGISTRY["qwen-cloud-token-plan"].models.map((model) => model.id);
274276
assert.deepEqual(modelIds, [
275-
"qwen3.8-max-preview",
277+
"qwen3.8-max",
276278
"qwen3.7-max",
277279
"qwen3.7-plus",
278280
"qwen3.6-flash",
279281
"glm-5.2",
280282
"deepseek-v4-pro",
283+
"deepseek-v4-flash-0731",
281284
]);
282285

283-
const preview = REGISTRY["qwen-cloud-token-plan"].models[0];
284-
assert.equal(preview.supportsReasoning, true);
285-
assert.equal(preview.supportsVision, true);
286-
assert.equal(preview.contextLength, 1_000_000);
287-
assert.equal(preview.maxOutputTokens, 65_536);
286+
const qwen38 = REGISTRY["qwen-cloud-token-plan"].models[0];
287+
assert.equal(qwen38.supportsReasoning, true);
288+
assert.equal(qwen38.supportsVision, true);
289+
assert.equal(qwen38.contextLength, 1_000_000);
290+
assert.equal(qwen38.maxOutputTokens, 131_072);
288291
});
289292

290293
test("dashboard folds legacy China connections into the unified Alibaba card", () => {

tests/unit/clinepass-provider.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ test("ClinePass fallback is the official subscription-only catalog", () => {
6868
"cline-pass/kimi-k2.7-code",
6969
"cline-pass/mimo-v2.5-pro",
7070
"cline-pass/mimo-v2.5",
71+
"cline-pass/qwen3.8-max",
7172
"cline-pass/qwen3.7-max",
7273
"cline-pass/qwen3.7-plus",
7374
]);

tests/unit/executor-qwen-web.test.ts

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -288,24 +288,17 @@ describe("QwenWebExecutor (v2 migration)", () => {
288288
"registry must use v2 endpoint"
289289
);
290290
const ids = provider.models.map((m: any) => m.id);
291-
assert.deepEqual(ids.sort(), [
292-
"qwen3.6-plus",
293-
"qwen3.7-max",
294-
"qwen3.7-plus",
295-
"qwen3.8-max-preview",
296-
]);
297-
298-
const qwen38 = provider.models.find(
299-
(model: RegistryModel) => model.id === "qwen3.8-max-preview"
300-
);
291+
assert.deepEqual(ids.sort(), ["qwen3.6-plus", "qwen3.7-max", "qwen3.7-plus", "qwen3.8-max"]);
292+
293+
const qwen38 = provider.models.find((model: RegistryModel) => model.id === "qwen3.8-max");
301294
assert.deepEqual(qwen38, {
302-
id: "qwen3.8-max-preview",
303-
name: "Qwen3.8 Max Preview",
295+
id: "qwen3.8-max",
296+
name: "Qwen3.8 Max",
304297
toolCalling: false,
305298
supportsReasoning: true,
306299
supportsVision: true,
307300
contextLength: 1_000_000,
308-
maxOutputTokens: 65_536,
301+
maxOutputTokens: 131_072,
309302
});
310303

311304
const qwen37Max = provider.models.find((model: RegistryModel) => model.id === "qwen3.7-max");
@@ -315,7 +308,7 @@ describe("QwenWebExecutor (v2 migration)", () => {
315308
it("free-model catalog lists the current qwen-web ids (not the retired ones)", () => {
316309
const qwenModels = (FREE_MODEL_BUDGETS as any[]).filter((m) => m.provider === "qwen-web");
317310
const ids = qwenModels.map((m) => m.modelId);
318-
assert.ok(ids.includes("qwen3.8-max-preview"), "catalog must list qwen3.8-max-preview");
311+
assert.ok(ids.includes("qwen3.8-max"), "catalog must list qwen3.8-max");
319312
assert.ok(ids.includes("qwen3.7-max"), "catalog must list qwen3.7-max");
320313
assert.ok(!ids.includes("qwen-plus"), "retired qwen-plus must be gone");
321314
assert.ok(
@@ -324,7 +317,7 @@ describe("QwenWebExecutor (v2 migration)", () => {
324317
);
325318
});
326319

327-
it("passes qwen3.8-max-preview through unchanged", async () => {
320+
it("uses qwen3.8-max and maps its preview id for compatibility", async () => {
328321
globalThis.fetch = (async (url: string | URL | Request, init: RequestInit = {}) => {
329322
calls.push({ url: String(url), init });
330323
if (String(url).includes("/api/v2/chats/new")) return chatCreatedResponse();
@@ -347,8 +340,8 @@ describe("QwenWebExecutor (v2 migration)", () => {
347340

348341
const newBody = JSON.parse(calls[0].init.body);
349342
const completionBody = JSON.parse(calls[1].init.body);
350-
assert.deepEqual(newBody.models, ["qwen3.8-max-preview"]);
351-
assert.equal(completionBody.model, "qwen3.8-max-preview");
343+
assert.deepEqual(newBody.models, ["qwen3.8-max"]);
344+
assert.equal(completionBody.model, "qwen3.8-max");
352345
assert.equal(completionBody.messages[0].feature_config.thinking_enabled, true);
353346
assert.equal(completionBody.messages[0].feature_config.auto_thinking, true);
354347
});

0 commit comments

Comments
 (0)