Generate a speech audio file from text and write it to output_path. Models are selected through the speech role and its fallback chain: local-inference runs on-device neural TTS (Kokoro-82M via the bundled ONNX runtime, no network, always WAV/PCM16; voice set by tts.localVoice — {{localVoices}}); xai-tts uses xAI Grok Voice (built-in voices: {{xaiVoices}}; custom voice IDs accepted; MP3 or WAV); openai-speech uses the selected model's compatible cloud endpoint (MP3 or WAV; voice_id is forwarded only when explicitly set). For an MP3 request, unconfigured cloud candidates are tried before unconfigured local candidates; explicitly configured speech candidates keep their order. If the chain reaches local for a non-WAV path, output is written to the sibling .wav file. Cloud codec is inferred from the output_path suffix. Max {{maxLength}} characters.
