Every generation branch hardcoded language="english", and the endpoint
accepted no language parameter at all. German, French and the rest were
synthesised with English phonology and prosody - which is why the German
samples sounded like an English narrator reading German.
- /v1/tts now accepts a language form field, passed to all four branches.
Default stays "english" so the existing English pipeline is unchanged;
the renderer sends the target language from the model's own
codec_language_id keys (exactly ten: chinese english french german
italian japanese korean portuguese russian spanish).
- A/B on one German line with the same cloned voice: language=english
gives 4.56s, language=german 4.08s, waveforms differing by 151% of
signal amplitude. Audibly different renditions, not a no-op.
Also documented the ICL memory finding in the server comments: the branch
that consumes a cached prompt leaves x_vector_only_mode at its default of
False, so it decodes the 8k ref_code matrix on every request. One such
request takes the footprint from 5.4GB to 19.1GB and does not return. The
ref_audio branch passes x_vector_only_mode=True and is stable - 120 clips,
0 failures, 13.1GB.
Note the language fix does NOT address that; it was tested and still
blows up with language=german. Separate problem.
qwen_tts_server.py stays at its 8 pre-existing ruff errors. Suite: 721
passed, 8 pre-existing.