/**
 * Provider-neutral speaker turns.
 *
 * Diarizing STT providers disagree about where the speaker label lives:
 * Deepgram and Google put it on every word, ElevenLabs Scribe puts it on
 * every token, the diarization sidecar puts it on each segment. Callers want
 * one shape — a list of turns, each with a speaker, a time range and text —
 * so `STTProcessor` derives it here whenever a provider returned speaker
 * labels on words but no speaker-labelled segments of its own.
 *
 * @module utils/speakerTurns
 */
import type { TranscriptionSegment, WordTiming } from "../types/index.js";
/**
 * Merge consecutive same-speaker words into turns.
 *
 * A word without a speaker continues the current turn (providers emit
 * unlabelled punctuation and spacing tokens); a word with a different
 * speaker starts a new one. Words are joined with single spaces and the
 * result trimmed, so text built from punctuated words reads naturally.
 * Returns `[]` when no word carries a speaker, so callers can tell "no
 * diarization" apart from "one speaker".
 */
export declare function buildSpeakerTurns(words: WordTiming[]): TranscriptionSegment[];
/** Distinct speaker labels in order of first appearance. */
export declare function listSpeakers(items: ReadonlyArray<{
    speaker?: string;
}>): string[];
