Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
- fix(gemini): standard Gemini provider no longer sends tool calls without a thought_signature (falls back to context mode when the signature is unavailable), fixing HTTP 400 on multi-turn thinking-model tool calls (#3688)
- fix(antigravity): preserve gemini-3.1-pro High/Low budget tiers (upstream accepts the suffixed ids; stop collapsing to bare gemini-3.1-pro) (#3696)
- fix: streaming combos now fail over to the next target when an upstream returns an empty/content-filtered response instead of surfacing a blank reply (#3685)
- fix(qwen-web): migrate the Qwen Web provider to the v2 chat API. The legacy `/api/chat/completions` endpoint was retired upstream and returned `504` HTML from Alibaba's gateway for every request regardless of credentials, so no token refresh could help (#3288, discussion #2768). The executor now uses the two-step v2 flow (`/api/v2/chats/new` → `/api/v2/chat/completions?chat_id=`), replays the full browser cookie jar (cna + ssxmod_itna/itna2 + token) required by Alibaba's WAF instead of only a Bearer token, parses the phase-based SSE (think→reasoning, answer→content), and maps the WAF/expired HTML page to a clear actionable auth error instead of surfacing raw HTML. The credential requirement is now a full Cookie header, browser-login capture grabs the WAF cookies, and the model catalog is refreshed to the current upstream ids (`qwen3.7-max`, `qwen3.7-plus`, `qwen3.6-plus`; legacy ids kept as aliases). 17 unit tests.

---

Expand Down
11 changes: 3 additions & 8 deletions open-sse/config/freeModelCatalog.data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -418,14 +418,9 @@ export const FREE_MODEL_BUDGETS: FreeModelBudget[] = [
{ provider: "friendliai", modelId: "meta-llama-3.1-8b-instruct", displayName: "meta-llama-3.1-8b-instruct", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "friendliai", tos: "avoid" },
{ provider: "ai21", modelId: "jamba-large-1.7", displayName: "jamba-large-1.7", monthlyTokens: 0, creditTokens: 10000000, freeType: "one-time-initial", poolKey: "ai21", tos: "avoid" },
{ provider: "ai21", modelId: "jamba-mini-2", displayName: "jamba-mini-2", monthlyTokens: 0, creditTokens: 10000000, freeType: "one-time-initial", poolKey: "ai21", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen-plus", displayName: "Qwen Plus", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen-max", displayName: "Qwen Max", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen-turbo", displayName: "Qwen Turbo", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3-plus", displayName: "Qwen3 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3-max", displayName: "Qwen3 Max", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3-flash", displayName: "Qwen3 Flash", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3-coder-plus", displayName: "Qwen3 Coder Plus", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3-coder-flash", displayName: "Qwen3 Coder Flash", monthlyTokens: 0, creditTokens: 0, freeType: "discontinued", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3.7-max", displayName: "Qwen3.7 Max", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3.7-plus", displayName: "Qwen3.7 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
{ provider: "qwen-web", modelId: "qwen3.6-plus", displayName: "Qwen3.6 Plus", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "qwen-web", tos: "avoid" },
{ provider: "gitlawb", modelId: "mimo-v2.5-pro", displayName: "MiMo-V2.5-Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" },
{ provider: "gitlawb", modelId: "mimo-v2.5", displayName: "MiMo-V2.5", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" },
{ provider: "gitlawb", modelId: "mimo-v2-pro", displayName: "MiMo-V2-Pro", monthlyTokens: 0, creditTokens: 0, freeType: "keyless", poolKey: "gitlawb", tos: "unknown" },
Expand Down
17 changes: 8 additions & 9 deletions open-sse/config/providerRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4011,18 +4011,17 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
alias: "qwen-web",
format: "openai",
executor: "qwen-web",
baseUrl: "https://chat.qwen.ai/api/chat/completions",
// v2 API (the legacy /api/chat/completions endpoint was retired upstream).
baseUrl: "https://chat.qwen.ai/api/v2/chat/completions",
authType: "apikey",
authHeader: "bearer",
// Current upstream catalog (GET https://chat.qwen.ai/api/models). Legacy
// ids (qwen-plus, qwen3-max, ...) still resolve via the executor's
// MODEL_ALIASES map for backward compatibility.
models: [
{ id: "qwen-plus", name: "Qwen Plus" },
{ id: "qwen-max", name: "Qwen Max" },
{ id: "qwen-turbo", name: "Qwen Turbo" },
{ id: "qwen3-plus", name: "Qwen3 Plus" },
{ id: "qwen3-max", name: "Qwen3 Max" },
{ id: "qwen3-flash", name: "Qwen3 Flash" },
{ id: "qwen3-coder-plus", name: "Qwen3 Coder Plus" },
{ id: "qwen3-coder-flash", name: "Qwen3 Coder Flash" },
{ id: "qwen3.7-max", name: "Qwen3.7 Max" },
{ id: "qwen3.7-plus", name: "Qwen3.7 Plus" },
{ id: "qwen3.6-plus", name: "Qwen3.6 Plus" },
],
},

Expand Down
Loading