import type { ProviderRegistry } from './registry.js';
import type { ModelLimitsService } from './model-limits.js';
import type { MinimalModelDefinition } from './model-catalog-synthetic.js';
export interface CatalogProvider {
    id: string;
    name: string;
    envVars: string[];
    baseUrl: string;
    requiresKey?: boolean | undefined;
}
export interface CatalogModelPricing {
    input: number;
    output: number;
}
export interface CatalogModel {
    id: string;
    name: string;
    family?: string | undefined;
    provider: string;
    providerId: string;
    providerEnvVars: string[];
    pricing: CatalogModelPricing;
    tier: 'free' | 'paid' | 'subscription';
    contextWindow?: number | undefined;
    maxOutputTokens?: number | undefined;
    reasoning?: boolean | undefined;
}
export interface PricingCatalog {
    fetchedAt: number;
    models: CatalogModel[];
}
export declare function getCostFromPricingCatalog(modelId: string, catalog: Pick<PricingCatalog, 'models'>, modelLimitsService?: Pick<ModelLimitsService, 'getPricingForModel'>, opts?: {
    debug?: boolean;
}): CatalogModelPricing;
export declare function normalizeModelId(modelId: string): string;
export declare function hasKeyForProvider(provider: CatalogProvider): boolean;
export interface CatalogModelEntry {
    id: string;
    displayName: string;
    provider: string;
    context: number;
    tier: 'free' | 'paid' | 'subscription';
}
export interface CatalogModelChange {
    model: CatalogModel;
    changes: string[];
}
export interface CatalogDiff {
    added: CatalogModel[];
    removed: CatalogModel[];
    changed: CatalogModelChange[];
}
export interface ModelCatalog {
    getModel(modelId: string): CatalogModelEntry | null;
    findLargerContextModels(minContext: number, tier?: 'free' | 'paid' | 'subscription', limit?: number): CatalogModelEntry[];
}
type ModelCatalogRegistry = Pick<ProviderRegistry, 'listModels' | 'getContextWindowForModel'>;
export declare class RegistryBackedCatalog implements ModelCatalog {
    private readonly registry;
    private entriesCache;
    private entriesCacheVersion;
    constructor(registry: ModelCatalogRegistry);
    private getEntries;
    getModel(modelId: string): CatalogModelEntry | null;
    findLargerContextModels(minContext: number, tier?: 'free' | 'paid' | 'subscription', limit?: number): CatalogModelEntry[];
}
export declare function createModelCatalog(registry: ModelCatalogRegistry): ModelCatalog;
export declare function getCatalogModelDefinitionsFrom(models: readonly CatalogModel[]): MinimalModelDefinition[];
export type { MinimalModelDefinition, SyntheticModelInfo } from './model-catalog-synthetic.js';
export { fetchCatalog, getCatalogCachePath, getCatalogTmpPath, isCatalogCacheStale, loadCatalogCache, saveCatalogCache, } from './model-catalog-cache.js';
export { buildSyntheticCanonicalModels, getSyntheticBackendModelIds, getSyntheticModelDefinitions, getSyntheticModelInfo, nameToSlug, normalizeModelName, } from './model-catalog-synthetic.js';
export { diffCatalogs, filterRelevantChanges, formatChangeNotifications, notifyCatalogChanges, } from './model-catalog-notifications.js';
//# sourceMappingURL=model-catalog.d.ts.map