import { MODELS } from "./models.generated.js";
import type { Api, KnownProvider, Model, Usage } from "./types.js";
export interface ModelSearchFilters {
    provider?: KnownProvider | string;
    api?: Api;
    reasoning?: boolean;
    supportsImageInput?: boolean;
    nameIncludes?: string;
}
export interface CostEstimateInput {
    inputTokens: number;
    outputTokens: number;
    cacheReadTokens?: number;
    cacheWriteTokens?: number;
}
export declare class ModelRegistry {
    private readonly registry;
    constructor(seedModels?: typeof MODELS);
    registerCustomModel<TApi extends Api>(model: Model<TApi>): void;
    loadCustomModels<TApi extends Api>(models: Model<TApi>[]): void;
    getModel<TApi extends Api = Api>(provider: string, modelId: string): Model<TApi>;
    tryGetModel<TApi extends Api = Api>(provider: string, modelId: string): Model<TApi> | undefined;
    getProviders(): KnownProvider[];
    getModels<TApi extends Api = Api>(provider: string): Model<TApi>[];
    findModels(filters?: ModelSearchFilters): Model<Api>[];
    estimateCost<TApi extends Api>(model: Model<TApi>, estimate: CostEstimateInput): Usage["cost"];
    calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage["cost"];
}
export declare const modelRegistry: ModelRegistry;
export declare function getModel<TApi extends Api = Api>(provider: string, modelId: string): Model<TApi>;
export declare function tryGetModel<TApi extends Api = Api>(provider: string, modelId: string): Model<TApi> | undefined;
export declare function getProviders(): KnownProvider[];
export declare function getModels<TApi extends Api = Api>(provider: string): Model<TApi>[];
export declare function findModels(filters?: ModelSearchFilters): Model<Api>[];
export declare function estimateCost<TApi extends Api>(model: Model<TApi>, estimate: CostEstimateInput): Usage["cost"];
export declare function registerCustomModel<TApi extends Api>(model: Model<TApi>): void;
export declare function loadCustomModels<TApi extends Api>(models: Model<TApi>[]): void;
export declare function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage["cost"];
/** Reports whether the given model offers the "xhigh" reasoning level. */
export declare function supportsXhigh<TApi extends Api>(model: Model<TApi>): boolean;
export declare function modelsAreEqual<TApi extends Api>(a: Model<TApi> | null | undefined, b: Model<TApi> | null | undefined): boolean;
