Summary
On the built-in token-plan profile, bl speech synthesize fails for every model/voice/format
combination, while image.generate and video.generate succeed on the same API key. The CLI-side
problem is that nothing in bl makes this discoverable:
bl config show lists speech.synthesize in api_key_capabilities for this profile, so the CLI
presents TTS as supported.
--list-voices for the profile's own default TTS model returns no list, so there is no way to
learn a valid voice ID from the CLI.
--list-voices --model cosyvoice-v3-flash does print a catalogue, but every ID from it fails,
and the model itself 404s on this endpoint. The catalogue is therefore misleading on this profile.
Environment
|
|
bl --version |
1.25.0 |
| skills version |
1.25.0 (bailian-protocol frontmatter) |
| npm latest |
1.25.0 |
| profile |
token-plan |
| base_url |
https://token-plan.ap-southeast-1.maas.aliyuncs.com |
| default_speech_model |
qwen-audio-3.0-tts-plus |
| OS |
macOS 27.0, arm64 |
Reproduction
bl speech synthesize --text "Every product needs a backend." --voice Ethan --language en \
--format mp3 --out out.mp3
Actual
[Model: qwen-audio-3.0-tts-plus] [Voice: Ethan]
Error: [cosyvoice:]Engine error [411]: TTS speak operation failed
Status: HTTP 400 (InvalidParameter)
Exit code: 1
Expected: either an MP3, or an error that names which voice IDs are valid for this model/profile.
What was tried
- Voices
Ethan, Serena, Cherry, Chelsie on the default model — all Engine error [411]
- CosyVoice IDs
longtian_v3, longxiaochun_v3, longcheng_v3, longanyang on the default model —
all Engine error [411]
--format mp3 and --format wav — identical
- With and without
--instruction, --rate, --language
--model cosyvoice-v3-flash → Model not exist (HTTP 404) on this endpoint, although
--list-voices for that model prints 26+ voice IDs
Image and video generation on the same key and profile succeed, so this is not auth or quota.
Request IDs
f1292503-a91f-47b0-841c-aef030aff2e8
c6094826-a2a2-4d8a-9d78-23559139e184
69407cc8-34b6-46ce-942c-25f143782b86
Suggested fix
Whichever way the service behaves, the CLI could avoid the dead end:
- Do not advertise
speech.synthesize in api_key_capabilities for a profile where no voice works, or
- Make
--list-voices return the voices valid for the active profile and its default model, and
scope the cosyvoice-v3-flash catalogue to endpoints where that model exists, and
- Surface
Engine error [411] with a hint that names the likely cause, as other commands do.
Summary
On the built-in
token-planprofile,bl speech synthesizefails for every model/voice/formatcombination, while
image.generateandvideo.generatesucceed on the same API key. The CLI-sideproblem is that nothing in
blmakes this discoverable:bl config showlistsspeech.synthesizeinapi_key_capabilitiesfor this profile, so the CLIpresents TTS as supported.
--list-voicesfor the profile's own default TTS model returns no list, so there is no way tolearn a valid voice ID from the CLI.
--list-voices --model cosyvoice-v3-flashdoes print a catalogue, but every ID from it fails,and the model itself 404s on this endpoint. The catalogue is therefore misleading on this profile.
Environment
bl --versionbailian-protocolfrontmatter)token-planhttps://token-plan.ap-southeast-1.maas.aliyuncs.comqwen-audio-3.0-tts-plusReproduction
bl speech synthesize --text "Every product needs a backend." --voice Ethan --language en \ --format mp3 --out out.mp3Actual
Expected: either an MP3, or an error that names which voice IDs are valid for this model/profile.
What was tried
Ethan,Serena,Cherry,Chelsieon the default model — allEngine error [411]longtian_v3,longxiaochun_v3,longcheng_v3,longanyangon the default model —all
Engine error [411]--format mp3and--format wav— identical--instruction,--rate,--language--model cosyvoice-v3-flash→Model not exist(HTTP 404) on this endpoint, although--list-voicesfor that model prints 26+ voice IDsImage and video generation on the same key and profile succeed, so this is not auth or quota.
Request IDs
f1292503-a91f-47b0-841c-aef030aff2e8c6094826-a2a2-4d8a-9d78-23559139e18469407cc8-34b6-46ce-942c-25f143782b86Suggested fix
Whichever way the service behaves, the CLI could avoid the dead end:
speech.synthesizeinapi_key_capabilitiesfor a profile where no voice works, or--list-voicesreturn the voices valid for the active profile and its default model, andscope the
cosyvoice-v3-flashcatalogue to endpoints where that model exists, andEngine error [411]with a hint that names the likely cause, as other commands do.