/**
 * @fileoverview OpenAI Whisper speech-to-text provider implementation.
 * Wraps the OpenAI audio transcriptions API (`POST /audio/transcriptions`) to provide
 * STT transcription in multiple languages. TTS is not supported and will throw `MethodNotFound`.
 * Audio is submitted as multipart `FormData`; the 25 MB Whisper file-size limit is enforced
 * before the network call.
 * @module src/services/speech/providers/whisper.provider
 */
import type { ISpeechProvider } from '../core/ISpeechProvider.js';
import type { SpeechProviderConfig, SpeechToTextOptions, SpeechToTextResult, TextToSpeechOptions, TextToSpeechResult, Voice } from '../types.js';
/**
 * OpenAI Whisper STT provider.
 * Implements {@link ISpeechProvider} for speech-to-text only (`supportsSTT = true`,
 * `supportsTTS = false`). Submits audio to the OpenAI transcriptions endpoint via
 * multipart form upload using `fetchWithTimeout`.
 *
 * Default model: `whisper-1`
 * Default timeout: 60 000 ms (audio processing is slower than typical API calls)
 * Maximum audio size: 25 MB (enforced locally before the network call)
 */
export declare class WhisperProvider implements ISpeechProvider {
    readonly name = "openai-whisper";
    readonly supportsTTS = false;
    readonly supportsSTT = true;
    private readonly apiKey;
    private readonly baseUrl;
    private readonly defaultModelId;
    private readonly timeout;
    /**
     * Construct a WhisperProvider.
     *
     * @param config - Provider configuration. `config.apiKey` is required; other fields
     *   fall back to OpenAI API defaults.
     * @throws {McpError} With `InvalidParams` if `config.apiKey` is absent.
     */
    constructor(config: SpeechProviderConfig);
    /**
     * Not supported — Whisper is an STT-only provider.
     *
     * @param _options - Unused.
     * @throws {McpError} Always, with `MethodNotFound`.
     */
    textToSpeech(_options: TextToSpeechOptions): Promise<TextToSpeechResult>;
    /**
     * Transcribe audio to text using the OpenAI Whisper API.
     * Audio may be provided as a raw `Uint8Array` or a base64-encoded string. The data is
     * submitted to `POST /audio/transcriptions` as multipart `FormData`. When
     * `options.timestamps` is `true`, the request uses `verbose_json` format and requests
     * word-level granularity, populating `result.words`.
     *
     * @param options - Transcription options. `options.audio` is required. Optional fields:
     *   `format` (determines MIME type/filename), `language` (ISO-639-1 hint),
     *   `modelId` (overrides provider default), `prompt` (style guide), `temperature`,
     *   and `timestamps` (enables word-level output).
     * @returns Resolved {@link SpeechToTextResult} with `text`, optional `language`,
     *   `duration`, `words` (if timestamps were requested), and `metadata` containing
     *   `modelId`, `provider`, and `task`.
     * @throws {McpError} With `InvalidParams` for missing audio, invalid base64, or audio > 25 MB.
     * @throws {McpError} With `InternalError` if the Whisper API call fails.
     */
    speechToText(options: SpeechToTextOptions): Promise<SpeechToTextResult>;
    /**
     * Not applicable — Whisper is an STT-only provider with no voice concept.
     *
     * @throws {McpError} Always, with `MethodNotFound`.
     */
    getVoices(): Promise<Voice[]>;
    /**
     * Verify OpenAI API connectivity by fetching the models list (`GET /models`).
     * Uses a 5-second timeout regardless of the provider's configured `timeout`,
     * to keep health checks lightweight.
     *
     * @returns `true` if the models endpoint responds with HTTP 200, `false` otherwise.
     *   Never rejects.
     */
    healthCheck(): Promise<boolean>;
    /**
     * Map an {@link AudioFormat} string to a file extension for the multipart upload filename.
     * Defaults to `'mp3'` for unrecognized or absent formats.
     *
     * @param format - Audio format string (e.g., `'wav'`, `'ogg'`).
     * @returns File extension without leading dot (e.g., `'wav'`).
     */
    private getFileExtension;
    /**
     * Map an {@link AudioFormat} string to the corresponding MIME type for the `Blob`
     * used in the multipart upload. Defaults to `'audio/mpeg'` for unrecognized formats.
     *
     * @param format - Audio format string (e.g., `'wav'`, `'ogg'`).
     * @returns MIME type string (e.g., `'audio/wav'`).
     */
    private getMimeType;
}
//# sourceMappingURL=whisper.provider.d.ts.map