type OpenRouterError = {
    error: {
        message: string;
        code: number;
        metadata?: {
            provider_name: string;
            raw: unknown;
        } | {
            reasons: string[];
            flagged_input: string;
            provider_name: string;
            model_slug: string;
        };
    };
};
type OpenRouterModel = {
    id: string;
    name: string;
    created: number;
    description: string;
    context_length: number;
    architecture: {
        modality: string;
        tokenizer: string;
        instruct_type?: string;
    };
    top_provider: {
        context_length: number;
        /** `null` means it's the same as the context_length */
        max_completion_tokens: number | null;
        is_moderated: boolean;
    };
    pricing: {
        prompt: string;
        completion: string;
        image: string;
        request: string;
        input_cache_read: string;
        input_cache_write: string;
        web_search: string;
        internal_reasoning: string;
    };
    per_request_limits?: Record<string, unknown>;
};
declare function getOpenRouterModels(): Promise<OpenRouterModel[]>;
declare function getOpenRouterModelTokenLimits(modelId: string): Promise<{
    contextLength: number;
    maxCompletionTokens: number;
} | null>;

interface RetryOptions {
    maxRetries: number;
    onError?: (error: unknown) => Promise<void> | void;
    /** Return `false` to stop retrying, `true` to automatically delay the next retry, or a number to set the delay before the next retry */
    isErrorRetryable?: (error: unknown) => Promise<boolean | number> | boolean | number;
}
declare function retry<T>(fn: () => Promise<T>, options: RetryOptions): Promise<T>;

export { type OpenRouterError, type OpenRouterModel, getOpenRouterModelTokenLimits, getOpenRouterModels, retry };
