Vitor Cepeda Lopes
93b3f4c45b
feat(xai): add native streaming TTS (#103993)
* feat(xai): add streaming TTS via wss://api.x.ai/v1/tts
Expose streamSynthesize on the bundled xAI speech provider so Talk and
Discord streaming playback can use xAI alongside batch REST synthesis.
Adds ws runtime dependency, byte-cap enforcement, and provider tests.
* fix(xai): harden streaming TTS per review feedback
Restrict streaming WS to api.x.ai, decode WebSocket payloads explicitly,
refresh idle timeout on audio.delta, add lifecycle/security tests, and
document the official xAI streaming contract plus non-realtime-voice scope.
* fix(xai): bound streaming TTS text deltas
* fix(xai): require secure native TTS streaming endpoint
* docs(tts): remove duplicate output formats section
* fix(xai): preserve surrogate pairs in tts frames
* fix(xai): bound streaming TTS websocket payloads
* fix(xai): align TTS websocket decoding with ws types
* fix(xai): pin native streaming TTS endpoint
* test(xai): cover native streaming TTS live path
* fix(xai): preserve streaming codec compatibility
* style(xai): format streaming endpoint guard
* docs(tts): describe xAI streaming output policy [skip ci]
* fix(xai): own voice-note TTS format policy [skip ci]
* docs(tts): keep provider summary concise [skip ci]
* test(xai): use explicit placeholder credentials [skip ci]
* test(xai): keep fixtures scanner-safe [skip ci]
---------
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-13 06:08:28 -07:00
..
2026-07-05 00:32:47 -04:00
2026-07-11 17:26:26 -07:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-06 17:19:49 -07:00
2026-07-06 17:19:49 -07:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-10 13:00:50 +01:00
2026-07-05 00:32:47 -04:00
2026-07-09 11:07:50 +01:00
2026-07-08 21:11:08 -05:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-10 03:41:33 +01:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-06 16:17:44 -07:00
2026-07-05 00:32:47 -04:00
2026-07-08 18:59:41 -07:00
2026-07-05 00:32:47 -04:00
2026-07-09 13:37:16 +01:00
2026-07-12 09:43:22 +01:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-06 16:17:44 -07:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-06 10:07:08 -07:00
2026-07-10 05:24:14 -07:00
2026-07-05 00:32:47 -04:00
2026-07-09 08:16:50 +01:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-09 13:09:38 -07:00
2026-07-05 00:32:47 -04:00
2026-07-06 00:06:06 +01:00
2026-07-11 15:26:48 -07:00
2026-07-10 06:49:09 +01:00
2026-07-05 00:32:47 -04:00
2026-07-09 22:10:44 +01:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-09 22:07:01 +01:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-09 07:14:46 +01:00
2026-07-05 00:32:47 -04:00
2026-07-06 04:29:48 +00:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-13 06:08:28 -07:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00