Task 2109550952129454082: Vietnamese TTS died with 'implausibly short
audio' after two identical attempts even though the model finished the
text (normal EOS at ~7% of its decode budget).
Root causes, both in the plugin-side quality gate:
- _LATIN_WORD only matched ASCII [A-Za-z0-9], so every diacritic letter
split a Vietnamese word into several tokens (chào->2, người->3),
inflating the counted word count 1.5-2.5x.
- The latin_words/5.0 duration floor is English-calibrated; Vietnamese
orthographic words are single syllables spoken at up to ~7 syl/s.
Fixes:
- Unicode-aware word regex so diacritic words count once.
- Vietnamese-diacritic texts (>=3 Vietnamese-specific letters) use a
7 words/s floor; English/other Latin stays at 5, CJK unchanged.
- Error message now reports the applied latin_rate.
Also fix the silent voice-LoRA loss: _resolve_lora_path only searched
voxcpm_lora folders, so a LoRA synced into the shared loras/ directory
never loaded (loading without LoRA). Falls back to the generic 'loras'
folder type by exact filename, and _list_lora_files surfaces
voxcpm-named weights from there so the dropdown and resolution agree.
Verified e2e on a production-class instance: 148-word diacritic
Vietnamese text produced a complete 29.44s read (5.0 words/s), zero
gate trips, LoRA loaded rank=32 with 384 parameters; unit suite 23/23.