Skip to content

feat!: collapse Qwen TTS to qwen-audio-3.1-tts-flash (drop qwen-tts, qwen-audio-3.0-tts-plus/flash) - #56

Open
LingXuanYin wants to merge 6 commits into
mainfrom
feat/retire-qwen-tts
Open

LingXuanYin wants to merge 6 commits into
mainfrom
feat/retire-qwen-tts

Conversation

@LingXuanYin

@LingXuanYin LingXuanYin commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Alibaba retires qwen-tts on 2026-10-10: https://www.alibabacloud.com/en/notice/model_studio_notice_of_retirement_for_selected_legacy_models_7d9

Migration table

Old model id New id Why
qwen-tts (removed) Retiring 2026-10-10; qwen-audio-3.0-tts-plus/flash already covered the same design+clone shape.
qwen-audio-3.0-tts-plus qwen-audio-3.1-tts-flash No qwen-audio-3.1-tts-plus tier exists at DashScope; collapsed onto the one surviving Qwen (non-CosyVoice) model.
qwen-audio-3.0-tts-flash qwen-audio-3.1-tts-flash Renamed in place.

Real capability loss, not an SDK-invented restriction: qwen-tts was the only Qwen model with no minimum text length for voice-design mode. Every remaining model enforces >=15 Unicode code points (also enforced independently in background's qwen_tts_actor.py:186, _MIN_PREVIEW_TEXT_LEN = 15). Callers doing short-text voice design have no Qwen fallback now -- use higgs-tts with a default/reference voice, or lengthen the text. README's Qwen section documents this.

Why the rename to 3.1 and not just deleting plus: background's qwen_tts_actor.py independently collapses every qwen-branded (non-CosyVoice) target_model it receives onto qwen-audio-3.1-tts-flash, so this SDK's declared id now matches what actually executes on the wire instead of silently diverging from it. This requires a new-api channel that recognizes qwen-audio-3.1-tts-flash by name -- confirmed present (verified live against https://new-api.talesofai.com/v1/models, 2026-09-28) before this PR is safe to publish. Release order: new-api channel config → background deploy → publish this package.

Cleanup (review-driven)

  • QWEN_MODELS was a one-element Set; the 15-code-point check inside validateQwen re-checked membership in a set it could only be called from (tautology). Collapsed to a single QWEN_MODEL string constant, dropped the dead check.
  • qwenTtsModel(...) was a factory for 2-3 Qwen tiers with one caller left; inlined to a literal object matching the neighboring higgs-tts entry. Re-exported YAML is byte-identical to the prior factory output.
  • Added an inline comment documenting the cross-repo constraint (adding another Qwen tier here requires changing background's collapsing rule first).
  • Version bumped 0.1.31 → 0.2.0 (two feat! commits on this branch).

Verification

tsc --noEmit clean, vitest run 207/207, biome check --formatter-enabled=false clean (all independently re-run after every commit, not just reported).

Supersedes #55 (closed; that PR's scope -- adding qwen3-tts-vc-2026-01-22 -- was wrong: that model is also on Alibaba's 2026-10-10 retirement list).

Alibaba retires qwen-tts on 2026-10-10
(https://www.alibabacloud.com/en/notice/model_studio_notice_of_retirement_for_selected_legacy_models_7d9).
Pure removal: qwen-audio-3.0-tts-plus/flash already cover the same
design+clone shape and are not retiring, so nothing new is added in
its place. The actual DashScope-side compatibility mapping (qwen-family
target models collapsing onto qwen-audio-3.1-tts-flash) lives in
background's qwen_tts_actor.py, not in this SDK -- callers still bypassing
the SDK with the old wire model name are covered there regardless.
…-flash

Owner decision 2026-09-28: collapse the SDK's Qwen offering down to the
one model background's compat map actually terminates on. There is no
qwen-audio-3.1-tts-plus (Alibaba only ships a flash tier at 3.1), so
plus has no replacement and is removed outright rather than staying on
3.0 as a orphaned tier.
@LingXuanYin

Copy link
Copy Markdown
Collaborator Author

Updating scope: also dropping `qwen-audio-3.0-tts-plus` and moving `qwen-audio-3.0-tts-flash` to `qwen-audio-3.1-tts-flash`. Alibaba doesn't ship a 3.1 `-plus` tier, so plus has no replacement and is removed rather than left orphaned on 3.0. This SDK now exposes exactly one Qwen (non-CosyVoice) model, matching what `background`'s compat map already terminates every qwen-family target_model on.

`tsc --noEmit` clean, `vitest run` 207/207, `biome check --formatter-enabled=false` clean.

…ains

Review findings (Linus-persona pass on this PR):
- QWEN_MODELS was a one-element Set; the length check inside validateQwen
  re-checked membership in a set it could only be called from, making the
  condition a tautology. Collapsed to a single QWEN_MODEL string constant
  and dropped the redundant check.
- qwenTtsModel(...) was a factory built for 2-3 Qwen tiers with only one
  caller left; inlined to a literal declaration object matching the
  neighboring higgs-tts entry's style. Re-exported YAML is byte-identical
  to the prior factory output (verified via CLI export diff).
- README's "no declared Qwen quality/cost ranking" bullet only made sense
  when there were multiple tiers to rank; replaced with the actual
  capability loss this migration introduces (no voice-design path for
  sub-15-code-point text now that qwen-tts is gone).
- Documented the cross-repo constraint inline: background's qwen_tts_actor
  collapses every qwen*-branded target_model onto this one id, so adding
  another Qwen tier here requires changing that rule first.
Two feat! commits landed on this branch (drop qwen-tts/qwen-audio-3.0-tts-plus,
rename flash to qwen-audio-3.1-tts-flash) -- minor bump per this package's
pre-1.0 convention for breaking changes.
@LingXuanYin LingXuanYin changed the title feat!: retire qwen-tts, no replacement id feat!: collapse Qwen TTS to qwen-audio-3.1-tts-flash (drop qwen-tts, qwen-audio-3.0-tts-plus/flash) Sep 28, 2026
@LingXuanYin

Copy link
Copy Markdown
Collaborator Author

Do not publish before new-api's dramatiq adaptor accepts qwen-audio-3.1-tts-flash (it is in the channel model list, but the adaptor's model switch does not know it yet, so every call fails with 'not supported by this channel'). cohub also hardcodes the removed ids and needs updating on upgrade. Order: background #110 -> new-api -> router #208 / this PR.

@neta-zjj neta-zjj left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM (7e29d3b). tsc clean, vitest 207/207, biome check .(含 formatter)现已干净。

发布门槛: new-api 适配器支持 qwen-audio-3.1-tts-flash 之前不要合并/发布(见上方评论)。顺序:background #110 → new-api → router #208 / 本 PR。cohub 升级到 0.2.0 时需同步改硬编码的 qwen-tts / qwen-audio-3.0-* id。

Nit:PR 描述里 "confirmed present ... safe to publish" 和 "biome --formatter-enabled=false" 两句已过时,建议更新。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants