import { OpenAICompatibleProviderSettings } from '@ai-sdk/openai-compatible';
import { LanguageModelV3, EmbeddingModelV3, ImageModelV3, TranscriptionModelV3 } from '@ai-sdk/provider';

type ModelType = 'stt' | 'image' | 'embedding' | 'reranker' | 'llm';
type InfoStatus = 'ready' | 'coming_soon' | (string & {});
type InfomaniakSTTModelId = 'whisper' | (string & {});
type InfomaniakImageModelId = 'photomaker' | 'flux' | (string & {});
type InfomaniakEmbeddingModelId = 'bge_multilingual_gemma2' | 'mini_lm_l12_v2' | 'Qwen/Qwen3-Embedding-8B' | (string & {});
type InfomaniakRERANKERModelId = 'BAAI/bge-reranker-v2-m3' | 'Qwen/Qwen3-Reranker-0.6B' | (string & {});
type InfomaniakChatModelId = 'mistralai/Ministral-3-14B-Instruct-2512' | 'Qwen/Qwen3.5-122B-A10B-FP8' | 'google/gemma-4-31B-it' | 'moonshotai/Kimi-K2.6' | 'nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP8' | 'mistralai/Mistral-Small-4-119B-2603' | 'Qwen/Qwen3.5-397B-A17B-FP8' | 'swiss-ai/Apertus-v1.5-70B' | (string & {});
type InfomaniakModelId = InfomaniakSTTModelId | InfomaniakImageModelId | InfomaniakEmbeddingModelId | InfomaniakRERANKERModelId | InfomaniakChatModelId;
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 | null;
}
type InfomaniakModels = InfomaniakModel[];
declare const MODEL_NAMES: {
    readonly WHISPER: "whisper";
    readonly PHOTOMAKER: "photomaker";
    readonly FLUX: "flux";
    readonly BGE_MULTILINGUAL_GEMMA2: "bge_multilingual_gemma2";
    readonly MINI_LM_L12_V2: "mini_lm_l12_v2";
    readonly 'QWEN/QWEN3-EMBEDDING-8B': "Qwen/Qwen3-Embedding-8B";
    readonly 'BAAI/BGE-RERANKER-V2-M3': "BAAI/bge-reranker-v2-m3";
    readonly 'QWEN/QWEN3-RERANKER-0.6B': "Qwen/Qwen3-Reranker-0.6B";
    readonly 'MISTRALAI/MINISTRAL-3-14B-INSTRUCT-2512': "mistralai/Ministral-3-14B-Instruct-2512";
    readonly 'QWEN/QWEN3.5-122B-A10B-FP8': "Qwen/Qwen3.5-122B-A10B-FP8";
    readonly 'GOOGLE/GEMMA-4-31B-IT': "google/gemma-4-31B-it";
    readonly 'MOONSHOTAI/KIMI-K2.6': "moonshotai/Kimi-K2.6";
    readonly 'NVIDIA/NVIDIA-NEMOTRON-3-NANO-30B-A3B-FP8': "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP8";
    readonly 'MISTRALAI/MISTRAL-SMALL-4-119B-2603': "mistralai/Mistral-Small-4-119B-2603";
    readonly 'QWEN/QWEN3.5-397B-A17B-FP8': "Qwen/Qwen3.5-397B-A17B-FP8";
    readonly 'SWISS-AI/APERTUS-V1.5-70B': "swiss-ai/Apertus-v1.5-70B";
};
declare function getModelsByType<T extends ModelType>(models: InfomaniakModels, type: T): InfomaniakModel[];
declare function getReadyModels(models: InfomaniakModels): InfomaniakModels;
declare function getSTTModels(models: InfomaniakModels): InfomaniakModels;
declare function getImageModels(models: InfomaniakModels): InfomaniakModels;
declare function getEmbeddingModels(models: InfomaniakModels): InfomaniakModels;
declare function getRERANKERModels(models: InfomaniakModels): InfomaniakModels;
declare function getChatModels(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): LanguageModelV3;
    languageModel: (modelId: InfomaniakChatModelId) => LanguageModelV3;
    chatModel: (modelId: InfomaniakChatModelId) => LanguageModelV3;
    textEmbeddingModel: (modelId: InfomaniakEmbeddingModelId) => EmbeddingModelV3;
    imageModel: (modelId: InfomaniakImageModelId) => ImageModelV3;
    /**
     * Creates a model for transcription.
     * @experimental
     */
    transcription: (modelId: InfomaniakSTTModelId) => TranscriptionModelV3;
}
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 InfomaniakRERANKERModelId, type InfomaniakSTTModelId, MODEL_NAMES, type ModelType, createInfomaniak, getChatModels, getEmbeddingModels, getImageModels, getModelsByType, getRERANKERModels, getReadyModels, getSTTModels, infomaniak };
