import type { OpenAICompletionsCompat } from "@mariozechner/pi-ai";
import type { SecretInput } from "./types.secrets.js";
export declare const MODEL_APIS: readonly ["openai-completions", "openai-responses", "openai-codex-responses", "anthropic-messages", "google-generative-ai", "github-copilot", "bedrock-converse-stream", "ollama"];
export type ModelApi = (typeof MODEL_APIS)[number];
type SupportedOpenAICompatFields = Pick<OpenAICompletionsCompat, "supportsStore" | "supportsDeveloperRole" | "supportsReasoningEffort" | "supportsUsageInStreaming" | "supportsStrictMode" | "maxTokensField" | "requiresToolResultName" | "requiresAssistantAfterToolResult" | "requiresThinkingAsText">;
type SupportedThinkingFormat = NonNullable<OpenAICompletionsCompat["thinkingFormat"]> | "openrouter" | "qwen-chat-template";
export type ModelCompatConfig = SupportedOpenAICompatFields & {
    thinkingFormat?: SupportedThinkingFormat;
    supportsTools?: boolean;
    toolSchemaProfile?: "xai";
    nativeWebSearchTool?: boolean;
    toolCallArgumentsEncoding?: "html-entities";
    requiresMistralToolIds?: boolean;
    requiresOpenAiAnthropicToolPayload?: boolean;
};
export type ModelProviderAuthMode = "api-key" | "aws-sdk" | "oauth" | "token";
export type ModelDefinitionConfig = {
    id: string;
    name: string;
    api?: ModelApi;
    reasoning: boolean;
    input: Array<"text" | "image">;
    cost: {
        input: number;
        output: number;
        cacheRead: number;
        cacheWrite: number;
    };
    contextWindow: number;
    maxTokens: number;
    headers?: Record<string, string>;
    compat?: ModelCompatConfig;
};
export type ModelProviderConfig = {
    baseUrl: string;
    apiKey?: SecretInput;
    auth?: ModelProviderAuthMode;
    api?: ModelApi;
    injectNumCtxForOpenAICompat?: boolean;
    headers?: Record<string, SecretInput>;
    authHeader?: boolean;
    models: ModelDefinitionConfig[];
};
export type BedrockDiscoveryConfig = {
    enabled?: boolean;
    region?: string;
    providerFilter?: string[];
    refreshInterval?: number;
    defaultContextWindow?: number;
    defaultMaxTokens?: number;
};
export type ModelsConfig = {
    mode?: "merge" | "replace";
    providers?: Record<string, ModelProviderConfig>;
    bedrockDiscovery?: BedrockDiscoveryConfig;
};
export {};
