@nullplatform/llm-gateway
Version:
LLM Gateway Core - Main proxy server
99 lines • 3.59 kB
JavaScript
"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