fix(llm_qwen): correct stale and invalid DashScope model profiles - #1712
fix(llm_qwen): correct stale and invalid DashScope model profiles#1712chinesepowered wants to merge 4 commits into
Conversation
The model sync could never add a current Qwen model: the provider's
include_prefixes was ["qwen-"], but DashScope names the modern families
qwen3-max, qwen3.6-plus, qwen3.7-max and qwen3.8-max-preview, all of
which start with "qwen3". Every current model was filtered out before
discovery, so the weekly sync only ever churned token counts on stale
profiles.
Match on the bare vendor name so new generations are picked up without
another config change, and widen exclude_patterns to keep the non-chat
families (omni, ocr, asr, tts) out of a text-generation node.
Four profiles carried OpenRouter/HuggingFace model IDs that DashScope
rejects, introduced by OpenRouter fallback discovery: the three
qwen-2.5-* profiles (DashScope writes these without the hyphen) and
qwen-plus-2025-07-28:thinking (":thinking" is OpenRouter variant syntax;
DashScope uses the enable_thinking parameter). Deprecate them with an
accurate migration message rather than deleting, so saved pipelines keep
loading.
qwen-max and qwen-turbo were marked deprecated with the reason "Model no
longer listed in OpenRouter". Both are current DashScope stable aliases;
they were deprecated only because a non-authoritative source stopped
listing them. Un-deprecate both and add all four stable aliases to
protected_profiles so this cannot recur.
Add qwen3.8-max-preview, qwen3.7-max, qwen3.7-plus and qwen3.6-flash.
Token limits on the qwen3.x profiles come from the sync tool.
Add an optional base_url field that overrides the region map, so a
profile can reach an endpoint outside the three compatible-mode hosts
without a code change.
🤖 Internal: Discord sync markerAuto-managed by the Discord notification workflow. Stores the linked Discord message ID and forum thread ID. Do not edit or delete. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThe Qwen node now supports explicit DashScope endpoint overrides, updated current and deprecated model profiles, expanded profile mappings, and broader model synchronization rules and documentation. ChangesQwen provider updates
Estimated code review effort: 3 (Moderate) | ~25 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
nodes/src/nodes/llm_qwen/services.json (1)
301-356: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
base_urloverride is documented as universal but only wired for 2 of 9+ non-deprecated profiles.The README (Fields table, and the Regions section at L92-93) describes
base_urlas a blanket override that works regardless of profile/region choice. Inservices.json, however,qwen.base_urlis only added to theqwen.customandqwen.qwen3-8-max-previewfield-mapping objects — every other newly-added/changed profile (qwen3-7-max,qwen3-7-plus,qwen3-6-flash,qwen-max,qwen-plus,qwen-flash,qwen-turbo) still exposesqwen.regionbut notqwen.base_url, so users selecting those profiles have no UI path to override the endpoint despite what the docs promise.
nodes/src/nodes/llm_qwen/services.json#L301-L356: add"qwen.base_url"to thepropertiesarray ofqwen.qwen3-7-max,qwen.qwen3-7-plus,qwen.qwen3-6-flash,qwen.qwen-max,qwen.qwen-plus,qwen.qwen-flash, andqwen.qwen-turbo(or explicitly scope the feature tocustom/qwen3-8-max-previewonly).nodes/src/nodes/llm_qwen/README.md#L27-L35: if the override truly stays limited tocustom/qwen3-8-max-preview, qualify thebase_urlrow (and the Regions-section sentence at L92-93) accordingly instead of describing it as available on every profile.🛠️ Proposed fix (wire base_url into remaining profiles)
"qwen.qwen3-7-max": { "object": "qwen3-7-max", "properties": [ "llm.cloud.apikey", "qwen.region", + "qwen.base_url", "llm.cloud.modelSource" ] },(repeat for
qwen3-7-plus,qwen3-6-flash,qwen-max,qwen-plus,qwen-flash,qwen-turbo)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@nodes/src/nodes/llm_qwen/services.json` around lines 301 - 356, Add "qwen.base_url" to the properties arrays for qwen.qwen3-7-max, qwen.qwen3-7-plus, qwen.qwen3-6-flash, qwen.qwen-max, qwen.qwen-plus, qwen.qwen-flash, and qwen.qwen-turbo in nodes/src/nodes/llm_qwen/services.json at lines 301-356. Update nodes/src/nodes/llm_qwen/README.md lines 27-35 only if the override remains limited, qualifying the base_url documentation and Regions-section statement accordingly; otherwise no README change is needed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@nodes/src/nodes/llm_qwen/README.md`:
- Around line 44-59: Update the profile titles documented in the README tables
to exactly match the dropdown labels configured in services.json: use “Qwen Max
(latest)”, “Qwen Plus (latest)”, “Qwen Flash (latest)”, and “Qwen Turbo
(latest)” for the corresponding profiles, preserving the existing model and
token values.
---
Outside diff comments:
In `@nodes/src/nodes/llm_qwen/services.json`:
- Around line 301-356: Add "qwen.base_url" to the properties arrays for
qwen.qwen3-7-max, qwen.qwen3-7-plus, qwen.qwen3-6-flash, qwen.qwen-max,
qwen.qwen-plus, qwen.qwen-flash, and qwen.qwen-turbo in
nodes/src/nodes/llm_qwen/services.json at lines 301-356. Update
nodes/src/nodes/llm_qwen/README.md lines 27-35 only if the override remains
limited, qualifying the base_url documentation and Regions-section statement
accordingly; otherwise no README change is needed.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 341f9743-e044-41d2-9bb6-b3f537313b5a
📒 Files selected for processing (4)
nodes/src/nodes/llm_qwen/README.mdnodes/src/nodes/llm_qwen/qwen_client.pynodes/src/nodes/llm_qwen/services.jsontools/sync_models/src/sync_models.config.json
Review feedback on rocketride-org#1712. qwen3.8-max-preview is removed. It was added on request, but Alibaba's primary documentation confirms neither the model ID, its token limits, nor its endpoint — only secondary reporting of the 2026-07-19 preview announcement did, and access appears to be limited-availability. Shipping it would have reintroduced exactly the failure this PR fixes: a profile whose model ID the DashScope API rejects at runtime. base_url was documented as a blanket override but only wired into the custom and qwen3.8 field maps, so seven profiles had no UI path to it. Wire it into every live profile instead of narrowing the documentation: Alibaba Cloud serves DashScope from more regions than the three in the region enum, so the override is useful independently of any one model. Deprecated profiles deliberately do not get it. Align the README profile table with the dropdown labels in services.json, which say "(latest)" on the four stable aliases.
|
Thanks — both findings were valid, fixed in 0d6d983.
README titles vs dropdown labels — agreed, Separately, and not from this review: Re-verified: 41 sync-logic tests pass, the sync dry run is now clean with no pending drift, and profile keys / |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@nodes/src/nodes/llm_qwen/README.md`:
- Line 89: Update the base_url documentation in the Qwen README to state that it
is available on every live profile, including custom, rather than every profile;
preserve the existing regional endpoint guidance and deprecated-profile
behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: e0e2a914-eaf0-45fd-9576-67787bd865f4
📒 Files selected for processing (2)
nodes/src/nodes/llm_qwen/README.mdnodes/src/nodes/llm_qwen/services.json
Review feedback on rocketride-org#1712. The previous commit said base_url is available on "every profile", but the four deprecated profiles deliberately do not expose it, so the claim overstated the surface.
|
Agreed and fixed in eaea690 — the claim overstated the surface. The four deprecated profiles deliberately omit Now reads "every live profile, including Verified against |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
nodes/src/nodes/llm_qwen/README.md (1)
119-122: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winCorrect the discovery fallback instructions.
Without
ROCKETRIDE_QWEN_KEY, the documented command does not automatically fall back to OpenRouter:sync_models.pyrequires the explicit--allow-fallback-discoveryflag. Either add that flag to the command or state that strict mode skips discovery.Proposed fix
-Discovery requires `ROCKETRIDE_QWEN_KEY`. Without it the sync falls back to OpenRouter, which lists HuggingFace-style IDs that DashScope does not accept — the source of the deprecated profiles above. +Discovery requires `ROCKETRIDE_QWEN_KEY`. Without it, strict mode skips discovery. To reproduce fallback discovery, add `--allow-fallback-discovery`; this may introduce OpenRouter/HuggingFace-style IDs that DashScope does not accept.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@nodes/src/nodes/llm_qwen/README.md` around lines 119 - 122, Update the documented sync_models.py discovery command to include the explicit --allow-fallback-discovery flag when describing fallback to OpenRouter, or revise the surrounding text to state that discovery is skipped in strict mode without ROCKETRIDE_QWEN_KEY. Ensure the command and explanation consistently describe the actual fallback behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@nodes/src/nodes/llm_qwen/README.md`:
- Around line 119-122: Update the documented sync_models.py discovery command to
include the explicit --allow-fallback-discovery flag when describing fallback to
OpenRouter, or revise the surrounding text to state that discovery is skipped in
strict mode without ROCKETRIDE_QWEN_KEY. Ensure the command and explanation
consistently describe the actual fallback behavior.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 2b4dfa7e-e4eb-40c9-a1ec-8529e0c8af34
📒 Files selected for processing (1)
nodes/src/nodes/llm_qwen/README.md
Without ROCKETRIDE_QWEN_KEY the sync does not automatically fall back to OpenRouter for discovery. base.py gates non-provider sources behind --allow-fallback-discovery, so a keyless run enriches existing profiles but cannot add any.
|
Agreed — the fallback description was wrong. Fixed in 9a9e6e3.
Reworded to say discovery needs the key, a keyless run is enrichment-only, and On the Linked Issues pre-merge warning: correct catch, the PR does drop The Build / Windows Server 2022 failure is unrelated infrastructure: a 503 from |
Closes #1710
What
The
llm_qwenmodel list is stale and partly invalid. This fixes the root cause in the sync config, retires the profiles DashScope rejects, restores two models that were falsely deprecated, and adds the current generation.Why the list went stale
tools/sync_models/src/sync_models.config.jsonfiltered discovery oninclude_prefixes: ["qwen-"]. Current DashScope models areqwen3-max,qwen3.6-plus,qwen3.7-max,qwen3.8-max-preview— all begin withqwen3, notqwen-, so every one was dropped before discovery. The weeklysync-models.ymlrun could only ever churn token counts on stale profiles.Before:
Nothing added. After widening the prefix, the tool sees the modern families and supplies authoritative token data, which is where the
qwen3.xnumbers in this PR come from:Changes
tools/sync_models/src/sync_models.config.jsoninclude_prefixes→["qwen"]so new generations need no further config changeexclude_patternsgainsomni,ocr,asr,ttsto keep non-chat families out of a text-generation nodeprotected_profileswith a far-future expirynodes/src/nodes/llm_qwen/services.jsonqwen3.8-max-preview,qwen3.7-max,qwen3.7-plus,qwen3.6-flashqwen-maxandqwen-turbobase_urlfieldnodes/src/nodes/llm_qwen/qwen_client.pybase_url, when set, wins over the region mapnodes/src/nodes/llm_qwen/README.mdOn the invalid profiles
These carried
"modelSource": "openrouter"and are OpenRouter/HuggingFace IDs, not DashScope IDs — selecting one produced a runtime error rather than a config-time warning:modelqwen-2-5-72b-instructqwen-2.5-72b-instructqwen2.5-72b-instructqwen-2-5-7b-instructqwen-2.5-7b-instructqwen-2-5-coder-32b-instructqwen-2.5-coder-32b-instructqwen-plus-2025-07-28-thinkingqwen-plus-2025-07-28:thinking:thinkingis OpenRouter variant syntax; DashScope usesenable_thinkingThis is the Loose discovery risk called out in
tools/sync_models/README.md. They are deprecated rather than deleted so saved pipelines keep loading — happy to switch to outright removal if you'd prefer.qwen-maxandqwen-turbowere flaggeddeprecatedwith "Model no longer listed in OpenRouter". Both are current DashScope stable aliases, deprecated only because a non-authoritative source stopped listing them.Testing
pytest tools/sync_models/test/test_sync_logic.py— 41 passedruff check/ruff format --checkonnodes/src/nodes/llm_qwen/— cleanservices*.json/ config files parse as JSON5; profile keys,fieldsentries, andconditionalvalues verified to cross-reference consistently, andpreconfig.defaultresolvesPlease verify before merge
I do not have a
ROCKETRIDE_QWEN_KEY, so provider-source discovery and smoke tests could not run. Specifically worth a maintainer's eyes:qwen3.8-max-preview— added per request. Alibaba's primary docs did not confirm this ID, its token limits (983,616 / 131,072), or its endpoint; those come from secondary reporting of the 2026-07-19 WAIC preview announcement. Access appears to be limited-availability and it may be served from a host outside the three compatible-mode endpoints, which is what the newbase_urlfield is there for. If you can't confirm it, dropping this one profile is fine — the rest of the PR stands without it.qwen-max,qwen-flash,qwen-turbo) are carried over from the existing file, not re-derived. They are conservative rather than wrong, but a real sync would tighten them.sync_models.py --provider llm_qwen --enable-discovery --applywith a key will confirm every ID against the native API and smoke-test the additions. I'll happily fold in whatever it reports.Note on the generated docs block
nodes:docs-generatedeliberately no-ops offmain/stage/develop, so theROCKETRIDE:GENERATED:PARAMSblock in the README does not yet list the newqwen.base_urlfield. It regenerates on merge. Left untouched rather than hand-edited, per the co-located documentation rule.Out of scope
The README's
## Profilestable is hand-written and nothing keeps it in step withservices.json— the generated block emits only Schema, Dependencies and Source. That is why it had drifted (it disagreed withservices.jsonon three context windows and omitted both deprecation flags). 15llm_*nodes share this, so it wants its own change rather than riding along here. Filed as a note in #1710; happy to open a separate issue if useful.Summary by CodeRabbit
base_urloption to override the Qwen OpenAI-compatible endpoint; it takes precedence over region.qwen3-*releases.base_urlvs region behavior, reorganized profile catalog, and clarified deprecated-profile availability and migration guidance.