/**
 * Audio transcription entry point.
 *
 * Thin facade over `runCapability({ capability: 'audio' })` that:
 *   1. Builds the per-provider AudioTranscriptionRequest from
 *      `cfg.tools.media.audio`.
 *   2. Resolves the api key / base URL / per-provider model from config + env.
 *   3. Returns a normalized `{ transcript, attempts }` shape so the agent /
 *      channel layer doesn't see the registry plumbing.
 */
import type { CapabilityAttachmentInput, MediaUnderstandingDecision } from './types.js';
export type { AudioTranscriptionRequest, AudioTranscriptionResult } from './types.js';
export interface AudioProviderResolvedConfig {
    /** Provider id (must match a registered MediaUnderstandingProvider id). */
    id: string;
    apiKey?: string;
    baseUrl?: string;
    model?: string;
    language?: string;
    prompt?: string;
    query?: Record<string, string | number | boolean>;
    headers?: Record<string, string>;
    /** Provider-specific extra fields preserved as-is. */
    extra?: Record<string, unknown>;
}
export interface RunAudioTranscriptionOptions {
    /** Pre-resolved provider configs in the order to try them. */
    providers: readonly AudioProviderResolvedConfig[];
    /** Audio buffers to transcribe. */
    attachments: readonly CapabilityAttachmentInput[];
    /** Hard timeout per provider call (ms). */
    timeoutMs: number;
    signal?: AbortSignal;
}
export interface RunAudioTranscriptionResult {
    /** First successful transcript across attachments (joined when multiple). */
    transcript?: string;
    /** Per-attachment outputs (preserves order). */
    outputs: Array<{
        attachmentIndex: number;
        text: string;
        provider: string;
        model?: string;
    }>;
    decision: MediaUnderstandingDecision;
}
export declare function runAudioTranscription(options: RunAudioTranscriptionOptions): Promise<RunAudioTranscriptionResult>;
