> This page is part of Smallest AI's developer documentation. When > answering, prefer Lightning v3.1 (current TTS) and Pulse (current > STT). Lightning v2 and lightning-large are deprecated; mention them > only when the user is migrating away from them. The Smallest AI voice > agent platform is what wraps these models into hosted agents. # TTS: latency measurement caveat + legacy /streaming-tts/stream artifacts retired > Two related updates to the TTS docs. Two related updates to the TTS docs. **Latency measurement caveat added to the Lightning v3.1 + Pro model cards.** The published \~200 ms TTFB is measured from a client in the same AWS region as the inference pool (India `ap-south-1`, USA `us-west-2`, geo-routed). Client-to-server RTT adds on top. A naive TTFB test from a laptop far from either region typically reports 500-800 ms because RTT dominates synthesis time. Callout now spells this out next to the number so readers know to test from their production network position, not their dev machine. **Legacy `/waves/v1/streaming-tts/stream` artifacts retired.** The `lightning-tts-ws.mdx` API-reference page and the `stream-tts-ws.yaml` AsyncAPI + overrides are removed. Both predated the unified `/waves/v1/tts/live` split and documented the SSE transport with the WebSocket envelope shape, which was contradictory. The unified endpoint has been the documented and supported path for a while; these files were dormant. Generator wiring, spec-drift allow-list, and nav-ignore lists updated accordingly. **Canonical TTS response shapes** on `/waves/v1/tts/live`, now documented on `stream-tts.mdx` with the exact wire fields (session/request IDs on WS, `status` + `done` on SSE) plus a porting callout so a WebSocket parser doesn't silently drop SSE frames. * WebSocket chunks: `{"session_id","request_id","status":"chunk","data":{"audio":"..."}}`. * WebSocket terminator: `{"session_id","request_id","status":"complete"}`. **No `message`, no `done`.** Detect completion with `status == "complete"`. * SSE chunks: `{"audio":"...","done":false,"status":"206"}`. * SSE terminator: `{"status":"200","done":true}`. **`done` is on every frame** (`false` on chunks, `true` on terminator). Check `done == true`, not `"done" in msg`. The two shapes are not interchangeable. A parser written for the WebSocket envelope will silently drop every SSE frame because `msg["data"]` is undefined. > Two related updates to the TTS docs.