import type { Logger } from "pino";
import type { PaseoOpenAIConfig, PaseoSpeechConfig } from "../bootstrap.js";
import type { LocalSpeechModelId } from "./providers/local/config.js";
import type { SpeechToTextProvider, TextToSpeechProvider } from "./speech-provider.js";
import type { TurnDetectionProvider } from "./turn-detection-provider.js";
export type SpeechReadinessReasonCode = "ready" | "disabled" | "model_download_in_progress" | "models_missing" | "model_download_failed" | "turn_detection_unavailable" | "stt_unavailable" | "tts_unavailable";
export type SpeechReadinessState = {
    enabled: boolean;
    available: boolean;
    reasonCode: SpeechReadinessReasonCode;
    message: string;
    retryable: boolean;
    missingModelIds: LocalSpeechModelId[];
};
export type SpeechReadinessSnapshot = {
    generatedAt: string;
    requiredLocalModelIds: LocalSpeechModelId[];
    missingLocalModelIds: LocalSpeechModelId[];
    download: {
        inProgress: boolean;
        error: string | null;
    };
    realtimeVoice: SpeechReadinessState;
    dictation: SpeechReadinessState;
    voiceFeature: SpeechReadinessState;
};
export type SpeechService = {
    resolveStt: () => SpeechToTextProvider | null;
    resolveTts: () => TextToSpeechProvider | null;
    resolveTurnDetection: () => TurnDetectionProvider | null;
    resolveDictationStt: () => SpeechToTextProvider | null;
    getReadiness: () => SpeechReadinessSnapshot;
    onReadinessChange: (listener: (snapshot: SpeechReadinessSnapshot) => void) => () => void;
    start: () => void;
    stop: () => void;
    ready: Promise<void>;
};
export declare function createSpeechService(params: {
    logger: Logger;
    openaiConfig?: PaseoOpenAIConfig;
    speechConfig?: PaseoSpeechConfig;
}): SpeechService;
//# sourceMappingURL=speech-runtime.d.ts.map