import { OpenAICompatibleProviderSettings } from '@ai-sdk/openai-compatible';
import { LanguageModelV2, EmbeddingModelV2, ImageModelV2, TranscriptionModelV2 } from '@ai-sdk/provider';

type ModelType = 'stt' | 'llm' | 'image' | 'embedding';
type InfoStatus = 'ready' | 'coming_soon' | (string & {});
type InfomaniakSTTModelId = 'whisper' | 'whisperV2' | (string & {});
type InfomaniakChatModelId = 'llama3' | 'granite' | 'reasoning' | 'mistral24b' | 'mistral3' | 'qwen3' | 'gemma3n' | (string & {});
type InfomaniakImageModelId = 'photomaker' | 'flux' | (string & {});
type InfomaniakEmbeddingModelId = 'bge_multilingual_gemma2' | 'mini_lm_l12_v2' | (string & {});
type InfomaniakModelId = InfomaniakSTTModelId | InfomaniakChatModelId | InfomaniakImageModelId | InfomaniakEmbeddingModelId;
interface InfomaniakModel {
    description: string;
    documentation_link: string;
    id: number;
    info_status: InfoStatus;
    last_updated_at: string;
    logo_url: string;
    max_token_input: number | null;
    name: string;
    type: ModelType;
    version: string;
}
type InfomaniakModels = InfomaniakModel[];
declare const MODEL_NAMES: {
    readonly WHISPER: "whisper";
    readonly LLAMA3: "llama3";
    readonly PHOTOMAKER: "photomaker";
    readonly WHISPERV2: "whisperV2";
    readonly FLUX: "flux";
    readonly GRANITE: "granite";
    readonly BGE_MULTILINGUAL_GEMMA2: "bge_multilingual_gemma2";
    readonly MINI_LM_L12_V2: "mini_lm_l12_v2";
    readonly REASONING: "reasoning";
    readonly MISTRAL24B: "mistral24b";
    readonly MISTRAL3: "mistral3";
    readonly QWEN3: "qwen3";
    readonly GEMMA3N: "gemma3n";
};
declare function getModelsByType<T extends ModelType>(models: InfomaniakModels, type: T): InfomaniakModel[];
declare function getReadyModels(models: InfomaniakModels): InfomaniakModels;
declare function getTranscriptionModels(models: InfomaniakModels): InfomaniakModels;
declare function getChatModels(models: InfomaniakModels): InfomaniakModels;
declare function getImageModels(models: InfomaniakModels): InfomaniakModels;
declare function getEmbeddingModels(models: InfomaniakModels): InfomaniakModels;

interface InfomaniakProviderSettings {
    /**
    API key for authenticating requests. If specified, adds an `Authorization`
    header to request headers with the value `Bearer <apiKey>`. This will be added
    before any headers potentially specified in the `headers` option. Defaults to
    `INFOMANIAK_API_KEY` env variable
     */
    apiKey?: OpenAICompatibleProviderSettings['apiKey'];
    /**
    Custom headers to include in the requests.
     */
    headers?: OpenAICompatibleProviderSettings['headers'];
    /**
    Infomaniak product ID.
     */
    productId?: 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?: OpenAICompatibleProviderSettings['fetch'];
    /**
    Include usage information in streaming responses.
     */
    includeUsage?: OpenAICompatibleProviderSettings['includeUsage'];
}
interface InfomaniakProvider {
    (modelId: InfomaniakChatModelId): LanguageModelV2;
    languageModel: (modelId: InfomaniakChatModelId) => LanguageModelV2;
    chatModel: (modelId: InfomaniakChatModelId) => LanguageModelV2;
    textEmbeddingModel: (modelId: InfomaniakEmbeddingModelId) => EmbeddingModelV2<string>;
    imageModel: (modelId: InfomaniakImageModelId) => ImageModelV2;
    /**
     * Creates a model for transcription.
     * @experimental
     */
    transcription: (modelId: InfomaniakSTTModelId) => TranscriptionModelV2;
}
declare function createInfomaniak(options?: InfomaniakProviderSettings): InfomaniakProvider;
declare const infomaniak: InfomaniakProvider;

export { type InfoStatus, type InfomaniakChatModelId, type InfomaniakEmbeddingModelId, type InfomaniakImageModelId, type InfomaniakModel, type InfomaniakModelId, type InfomaniakModels, type InfomaniakProvider, type InfomaniakProviderSettings, type InfomaniakSTTModelId, MODEL_NAMES, type ModelType, createInfomaniak, getChatModels, getEmbeddingModels, getImageModels, getModelsByType, getReadyModels, getTranscriptionModels, infomaniak };
