/** * @license * Copyright 2025 Vybestack LLC * SPDX-License-Identifier: Apache-2.0 */ import { type LlxprtModel, type LlxprtProvider, type ModelCacheMetadata } from './schema.js'; /** * Search query options for filtering models */ export interface ModelSearchQuery { provider?: string; capability?: keyof LlxprtModel['capabilities']; maxPrice?: number; minContext?: number; reasoning?: boolean; toolCalling?: boolean; } /** * Event types emitted by the registry */ export type ModelRegistryEvent = 'models:updated' | 'models:error'; type EventCallback = () => void; /** * ModelRegistry - Central registry for AI model metadata from models.dev * * Provides: * - Automatic loading from cache or bundled fallback * - Background periodic refresh (24h) * - Search and filtering by capabilities, price, context * - Event emission for UI updates */ export declare class ModelRegistry { private models; private providers; private lastRefresh; private refreshTimer; private listeners; private initialized; private initPromise; /** * Get the cache file path */ private static getCachePath; /** * Initialize the registry - loads models and starts background refresh */ initialize(): Promise; /** * Load models from cache or trigger fresh fetch */ private loadModels; /** * Load from cache file if fresh */ private loadFromCache; /** * Refresh models from models.dev API (non-blocking) */ refresh(): Promise; /** * Save data to cache file */ private saveToCache; /** * Populate internal maps from API response */ private populateModels; /** * Start background refresh timer */ private startBackgroundRefresh; /** * Stop background refresh and cleanup */ dispose(): void; /** * Get all models */ getAll(): LlxprtModel[]; /** * Get model by full ID (provider/model-id) */ getById(id: string): LlxprtModel | undefined; /** * Get all models for a specific provider */ getByProvider(providerId: string): LlxprtModel[]; /** * Search models by various criteria */ search(query: ModelSearchQuery): LlxprtModel[]; /** * Get all providers */ getProviders(): LlxprtProvider[]; /** * Get provider by ID */ getProvider(providerId: string): LlxprtProvider | undefined; /** * Get cache metadata */ getCacheMetadata(): ModelCacheMetadata | null; /** * Check if registry has been initialized */ isInitialized(): boolean; /** * Get model count */ getModelCount(): number; /** * Get provider count */ getProviderCount(): number; /** * Subscribe to registry events */ on(event: ModelRegistryEvent, callback: EventCallback): void; /** * Unsubscribe from registry events */ off(event: ModelRegistryEvent, callback: EventCallback): void; /** * Emit an event */ private emit; } /** * Get the global ModelRegistry instance */ export declare function getModelRegistry(): ModelRegistry; /** * Initialize the global ModelRegistry */ export declare function initializeModelRegistry(): Promise; export {};