import { TranscriptionModelV2, ProviderV2 } from '@ai-sdk/provider';
import { FetchFunction } from '@ai-sdk/provider-utils';

type ElevenLabsConfig = {
    provider: string;
    url: (options: {
        modelId: string;
        path: string;
    }) => string;
    headers: () => Record<string, string | undefined>;
    fetch?: FetchFunction;
    generateId?: () => string;
};

type ElevenLabsTranscriptionModelId = 'scribe_v1' | 'scribe_v1_experimental' | (string & {});

interface ElevenLabsTranscriptionModelConfig extends ElevenLabsConfig {
    _internal?: {
        currentDate?: () => Date;
    };
}
declare class ElevenLabsTranscriptionModel implements TranscriptionModelV2 {
    readonly modelId: ElevenLabsTranscriptionModelId;
    private readonly config;
    readonly specificationVersion = "v2";
    get provider(): string;
    constructor(modelId: ElevenLabsTranscriptionModelId, config: ElevenLabsTranscriptionModelConfig);
    private getArgs;
    doGenerate(options: Parameters<TranscriptionModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<TranscriptionModelV2['doGenerate']>>>;
}

interface ElevenLabsProvider extends ProviderV2 {
    (modelId: 'scribe_v1', settings?: {}): {
        transcription: ElevenLabsTranscriptionModel;
    };
    /**
  Creates a model for transcription.
     */
    transcription(modelId: ElevenLabsTranscriptionModelId): TranscriptionModelV2;
}
interface ElevenLabsProviderSettings {
    /**
  API key for authenticating requests.
       */
    apiKey?: string;
    /**
  Custom headers to include in the requests.
       */
    headers?: Record<string, string>;
    /**
  Custom fetch implementation. You can use it as a middleware to intercept requests,
  or to provide a custom fetch implementation for e.g. testing.
      */
    fetch?: FetchFunction;
}
/**
Create an ElevenLabs provider instance.
 */
declare function createElevenLabs(options?: ElevenLabsProviderSettings): ElevenLabsProvider;
/**
Default ElevenLabs provider instance.
 */
declare const elevenlabs: ElevenLabsProvider;

export { type ElevenLabsProvider, type ElevenLabsProviderSettings, createElevenLabs, elevenlabs };
