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-05 00:32:47 -04:00
2026-07-07 10:07:13 +01:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-12 06:58:40 +01:00
2026-07-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-06 07:42:02 +01:00
2026-07-12 06:58:40 +01:00
2026-07-11 16:22:58 -07:00
2026-07-07 04:31:52 +01:00
2026-05-07 18:55:08 -07:00
2026-07-10 05:30:23 +01:00
2026-07-05 00:32:47 -04:00
2026-07-11 13:22:27 -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-11 19:59:07 -07:00
2026-07-11 02:58:37 -07:00
2026-07-11 13:36:07 -07:00
2026-07-12 21:04:43 -07:00
2026-07-05 00:32:47 -04:00
2026-07-06 09:42:49 +01:00
2026-07-05 00:32:47 -04:00
2026-07-10 06:06:50 +01:00
2026-07-13 00:22:06 -07:00
2026-07-05 00:32:47 -04:00
2026-07-11 06:30:57 -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-05 00:32:47 -04:00
2026-07-05 00:32:47 -04:00
2026-07-11 06:30:57 -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-10 22:29:37 -05:00
2026-07-05 00:32:47 -04:00
2026-07-13 00:22:06 -07:00
2026-07-09 15:09:09 +01:00
2026-07-13 00:54:14 -07:00
2026-07-13 00:22:06 -07:00
2026-07-11 10:16:34 -07:00
2026-07-10 08:09:48 +01:00
2026-05-23 13:50:08 +01:00
2026-07-11 12:19:02 -07:00
2026-07-05 00:32:47 -04:00
2026-07-10 17:57:50 +01:00
2026-07-05 00:32:47 -04:00
2026-07-10 06:47:56 +01:00
2026-07-11 14:50:37 -07:00
2026-07-13 06:08:28 -07:00
2026-07-10 06:06:50 +01:00
2026-07-05 00:32:47 -04:00
2026-07-10 08:02:18 +01:00