UNPKG

@nullplatform/llm-gateway

Version:
99 lines 3.59 kB
"use strict"; // packages/core/basic-apikey-auth/models/modelRegistry.ts Object.defineProperty(exports, "__esModule", { value: true }); exports.ModelRegistry = void 0; const logger_js_1 = require("../utils/logger.js"); class ModelRegistry { models = new Map(); defaultModel; logger; modelsConfig; providerRegistry; constructor(providerRegistry, modelsConfig, logger) { this.providerRegistry = providerRegistry; this.logger = logger || new logger_js_1.Logger(); this.modelsConfig = modelsConfig; } async initializeModels() { try { // Load models from configuration const modelsConfig = this.modelsConfig; if (!modelsConfig || Object.keys(modelsConfig).length === 0) { this.logger.warn('No models configured, skipping model initialization'); return; } for (const [modelId, modelConfig] of Object.entries(modelsConfig)) { try { await this.createAndRegisterModel(modelConfig); } catch (error) { this.logger.error(`Failed to initialize model '${modelId}'`, { error }); // Continue with other models } } this.logger.info(`Initialized ${this.models.size} models`); } catch (error) { this.logger.error('Failed to initialize models', { error }); throw error; } } async createAndRegisterModel(config) { try { // Create provider instance for this model const provider = await this.providerRegistry.createProvider(config.provider.type, config.provider.config, this.logger); // Create model with provider const model = { name: config.name, description: config.description, provider: provider, modelConfig: config.modelConfig, metadata: config.metadata, isDefault: config.isDefault }; this.register(model); } catch (error) { this.logger.error(`Failed to create model '${config.name}'`, { error, config }); throw error; } } register(model) { if (this.models.has(model.name)) { this.logger.warn(`Model '${model.name}' already exists, overriding`); } this.models.set(model.name, model); this.logger.debug(`Model '${model.name}' registered`); if (model.isDefault) { if (this.defaultModel) { this.logger.warn(`Default model already set to '${this.defaultModel.name}', overriding with '${model.name}'`); } this.defaultModel = model; this.logger.info(`Model '${model.name}' set as default`); } } get(name) { const model = this.models.get(name); if (!model) { if (this.defaultModel !== undefined) { return this.defaultModel; } this.logger.warn(`Model '${name}' not found`); } return model; } has(id) { return this.models.has(id); } list() { return Array.from(this.models.values()); } getByProvider(providerName) { return this.list().filter(model => model.provider.name === providerName); } getAvailableModels() { return Array.from(this.models.keys()); } } exports.ModelRegistry = ModelRegistry; //# sourceMappingURL=modelRegistry.js.map