> 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.

# Pulse STT: diarization response shape correction and rewrite

> Fixed two things the Speaker diarization page and the streaming WS spec got wrong, plus tightened the page for developers rather than marketing.

Fixed two things the [Speaker diarization](/models/speech-to-text/features/diarization) page and the streaming WS spec got wrong, plus tightened the page for developers rather than marketing.

**`speaker` is an integer on both batch and streaming.** The page previously claimed the batch API returned string labels (`speaker_0`, `speaker_1`, ...) while streaming returned integers. Live: both return integers, zero-indexed. Example values in the docs and the response-fields table are updated. The `stt-live-ws.yaml` spec had `speaker` typed as `string` on the streaming word/utterance schemas; corrected to `integer` with `example: 0` on both.

**`speaker_confidence` appears on batch too.** The table previously claimed the field was streaming-only. Live: batch responses also include `speaker_confidence` (0.0–1.0) on `words[]`. Corrected.

**Interim streaming events do not carry `words[]`.** New section clarifies that speaker attribution appears only on `is_final: true` transcription events. Live captions that rely on interim events should hold the speaker from the last final event and update on the next one.

**Pulse Pro carve-out.** `?model=pulse-pro&diarize=true` returns a transcript-only response with no `speaker` fields and no `utterances[]`. Now documented explicitly on the page.

Every claim on the page is verified against live production. Reproduce with `python3 scripts/spec-live-tests/diarization_live_test.py` (new); 16/16 checks pass.