Speech-to-Speech: Hydra V1.1 released, `?model=hydra` deprecated

Hydra V1.1 is now the default speech-to-speech model on the Waves realtime endpoint. New integrations should connect with ?model=hydra-v1.1:

wss://api.smallest.ai/waves/v1/s2s?model=hydra-v1.1&api_key=<SMALLEST_API_KEY>

The session protocol (event catalog, session.configure shape, tool calling, interruption handling) is identical to the original hydra, so switching is a one-parameter change on the query string.

Pulse STT realtime overview: VAD Events, Endpointing, Age & Gender, and Emotion Detection cards

The Realtime features overview now surfaces four capabilities that had dedicated feature pages but were missing from the overview:

  • VAD Events. Acoustic speech_started / speech_ended frames interleaved with the transcription stream.
  • Endpointing. Tune the end-of-utterance silence timeout with eou_timeout_ms.
  • Age & Gender Detection. Optional per-speaker inference alongside the transcript.
  • Emotion Detection. Optional per-utterance classification alongside the transcript.

Speech to Text: VAD events on the live WebSocket API reference

The Pulse STT live WebSocket now models the acoustic voice-activity events in the API reference: speech_started and speech_ended, emitted alongside transcription messages when the connection sets vad_events=true. See VAD events for the payloads and usage.

The events have been in production; this documents them on the WebSocket reference.

Waves: analytics + ops endpoints on the API reference

Ten previously undocumented Waves endpoints now render on the API reference under a new Analytics section (nine endpoints) and an Ops section (one endpoint):

  • GET /waves/v1/analytics/asr/logs: paginated STT request log
  • DELETE /waves/v1/analytics/asr/history/{request_id}: soft-delete a single STT entry
  • GET /waves/v1/analytics/asr/usage/timeseries: STT request count over time
  • GET /waves/v1/analytics/tts/logs: paginated TTS request log
  • GET /waves/v1/analytics/tts/usage/timeseries: TTS request count over time
  • GET /waves/v1/analytics/tts/usage/credits/timeseries: TTS credit spend over time
  • GET /waves/v1/analytics/tts/concurrency/timeseries: TTS peak concurrency over time
  • GET /waves/v1/analytics/tts/ws-connections/timeseries: open TTS WebSocket count over time
  • GET /waves/v1/analytics/webhooks/logs: webhook delivery log (e.g. asr.completed callbacks)
  • GET /waves/v1/health: liveness probe for the Waves control plane

Speech: Post-Call Analysis and voice catalog endpoints on the API reference

Three previously undocumented Speech endpoints now render on the API reference:

Post-Call Analysis

  • POST /waves/v1/pca: extract disposition metrics (BOOLEAN, ENUM, INTEGER, STRING, SUMMARY) from a transcript, each with a value, confidence, and the transcript evidence
  • POST /waves/v1/pca/generate: single-prompt text generation (text in, text out)

STT API-ref: response examples now match the real API

Follow-up to yesterday’s word_timestamps clarification. That PR fixed the description but the response schema itself still drifted from what the live API returns. Postman side-by-side surfaced it.

Corrected on both endpoint schemas (/waves/v1/stt/ and legacy /waves/v1/pulse/get_text):

  • speaker is an integer, not a string. Real responses carry speaker: 0 (zero-indexed), not speaker: "speaker_0".
  • speaker_confidence field added to word entries. Present alongside speaker when diarize=true is set on Pulse.
  • Pulse metadata is {duration, fileSize} only. The old example claimed language, request_id, processing_time_ms, rtfx, and num_chunks on a Pulse response; those are Pulse Pro only.
  • Pulse Pro includes totalBytes, request_id, and language at the top level and richer metadata (processing_time_ms, rtfx, num_chunks). Also does not diarize, so words[] entries omit speaker and speaker_confidence, and there is no utterances[] field.
  • duration is seconds, not minutes. Description on the legacy Pulse endpoint schema said minutes; corrected.
  • Response examples split by scenario. The unified endpoint now shows three named examples: pulse-default (empty arrays), pulse-full (word_timestamps + diarize), and pulse-pro. The legacy endpoint shows two named examples: default and with word_timestamps + diarize.

STT API: clarify that words[] and utterances[] need word_timestamps=true

The STT API-ref example response showed populated words[] and utterances[] arrays, but a default request from the docs explorer or Postman returns both arrays empty (the transcription string is fine).

Both arrays are gated on the word_timestamps=true query parameter. The same flag turns on both. Without it, the API still transcribes but does not attach per-word timings or sentence-level segments.

TTS: opt-in math_notation flag for reading operators as words

Lightning v3.1 and v3.1_pro accept a new math_notation request field on every transport (POST /waves/v1/tts, POST /waves/v1/tts/live, and the wss://.../waves/v1/tts/live WebSocket).

Off by default. Set math_notation: true to have the normalizer read digit-flanked math operators as spoken words: 6 x 7 becomes “6 times 7”, 2 ^ 10 becomes “2 to the power of 10”, 6 ÷ 2 becomes “6 divided by 2”. The operator word follows number_pronunciation_language (Hindi and Marathi localized; every other language falls back to English).

New `x-expire-content` header: opt a request into content deletion (enterprise)

Enterprise plans only. Send x-expire-content: true on a Text to Speech or Speech to Text request and that request’s free-text content is deleted after 7 days, while the usage record is kept - billing, credits, and usage graphs are unaffected.

Documented as a header parameter on the HTTP routes - POST /waves/v1/tts, POST /waves/v1/tts/live, POST /waves/v1/stt/ - and on the WebSocket routes wss://.../waves/v1/tts/live and wss://.../waves/v1/stt/live, where it is sent on the upgrade request.

TTS: latency measurement caveat + legacy /streaming-tts/stream artifacts retired

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.

TTS language surface aligned with product-team canonical

The unified TTS endpoints (POST /waves/v1/tts + wss://api.smallest.ai/waves/v1/tts/live) now document the full language surface the platform accepts, matching the product-team lineup for both lightning_v3.1 (base) and lightning_v3.1_pro.

Added to the language enum on both HTTP and WebSocket:

  • auto - routes the request internally based on input text. Any English or Hindi voice can be used across all supported languages when auto is set; the platform handles language-appropriate routing without needing an explicit code per call. Recommended for cross-language use cases.
  • nl (Dutch) - accepted on both lightning_v3.1 and lightning_v3.1_pro.
  • sv (Swedish) - accepted on both lightning_v3.1 and lightning_v3.1_pro.

Models docs URL migration - waves → models, version dropdown flattened

The Models product now lives under /models/ on the docs site, replacing the older /waves/ prefix. The version dropdown is also gone. There is only one active version (v4.0.0), and it is served from a flat URL - /waves/v-4-0-0/documentation/text-to-speech-lightning/streaming becomes /models/documentation/text-to-speech-lightning/streaming.

Every old URL 301-redirects to its new equivalent. Legacy v2.2.0 and v3.0.1 bookmarks (retired earlier) also land on the same flat /models/* paths. Bookmarks, external links, and search-indexed pages keep resolving.

Waves docs v2.2.0 and v3.0.1 retired; v4.0.0 is now the sole documented surface

The v4.0.0 doc surface is now the only supported view of the Waves models. The version dropdown no longer offers v3.0.1 or v2.2.0, and the pages under those two versions have been removed from the docs site. Old bookmarked and search-indexed URLs 301-redirect to their v4 equivalents; where a specific v3.0.1/v2.2.0 page was renamed or merged in the v4 restructure, the redirect points at the closest v4 page (voice-cloning how-tos land on Instant Clone (API) etc.). The API-reference tabs on the retired versions rendered a completely different OpenAPI (Lightning v1/v2/large focused), so any auto-generated API-ref URLs on those versions land on the v4 API-ref authentication page.

Agno integration guide

Added a documentation page for generating speech with Lightning v3.1 and Lightning v3.1 Pro inside Agno, the open-source Python framework for building multi-agent systems, via the SmallestTools toolkit.

Agno integration

TTS deprecated endpoints hidden from API ref; delete-voice endpoint retired from docs

Nine deprecated TTS endpoints are hidden from the v4 API-reference sidebar. Old bookmarked URLs 301-redirect to the current unified endpoints on /waves/v1/tts and /waves/v1/voice-cloning. Wire-level behavior is unchanged. Existing customer code keeps working.

Hidden from sidebar:

  • POST /waves/v1/lightning-v3.1/get_speech, POST /waves/v1/lightning-v3.1/stream, WSS /waves/v1/lightning-v3.1/get_speech/stream (superseded by POST /waves/v1/tts + POST /waves/v1/tts/live + WSS /waves/v1/tts/live)
  • POST /waves/v1/lightning-v2/get_speech, POST /waves/v1/lightning-v2/stream, WSS /waves/v1/lightning-v2/get_speech/stream (deprecated, superseded by the same unified routes)
  • POST /waves/v1/lightning-large/add_voice (superseded by POST /waves/v1/voice-cloning)
  • GET /waves/v1/lightning-large/get_cloned_voices (superseded by GET /waves/v1/voice-cloning)

Pulse STT: `vad_events` query parameter on the streaming WebSocket

The Pulse STT WebSocket accepts a new query parameter, vad_events. When set to true, the server emits two additional JSON message types: speech_started and speech_ended. They are interleaved with the transcription stream on the same connection.

Usage

Set vad_events=true on the WebSocket URL. Default is false. vad=true is accepted as an alias; when both are set, vad_events takes precedence and vad is ignored.

Lightning v3.1 + Pulse STT API-ref Python snippets - `SmallestAI(api_key=...)` (was `token=...`)

The Python “Try it” snippets attached to the Lightning v3.1 TTS and Pulse STT API reference operations used the pre-4.4.5 SDK constructor signature:

1client = SmallestAI(token="YOUR_API_KEY")

The SDK kwarg was renamed in 4.4.5. Customers copy-pasting the old snippet hit:

WebSocket auth and default URL fixes

Fixed authentication configuration and default server URLs across the WebSocket specs for Lightning TTS, Pulse STT, and related endpoints.

Additional endpoints for v2.2.0 and v3.0.1 are now marked deprecated in the API reference.

Hydra - full-duplex speech-to-speech model

Hydra, Smallest AI’s in-house speech-to-speech model, is now live. A single WebSocket carries microphone audio from your client to the model and streams synthesised response audio back - no STT → LLM → TTS pipeline in the middle.

1import asyncio, base64, json, os, wave
2import websockets
3
4API_KEY = os.environ["SMALLEST_API_KEY"]
5URL = f"wss://api.smallest.ai/waves/v1/s2s?model=hydra&api_key={API_KEY}"

Electron LLM - chat completions on the Waves API

Electron, Smallest AI’s in-house language model, is now generally available on the Waves API. Use it as a drop-in replacement for OpenAI’s chat completions - point the OpenAI SDK at https://api.smallest.ai/waves/v1 and pass "model": "electron".

1import os
2from openai import OpenAI
3
4client = OpenAI(
5 base_url="https://api.smallest.ai/waves/v1",
6 api_key=os.environ["SMALLEST_API_KEY"],