UNPKG

jorel

Version:

A unified wrapper for working with LLMs from multiple providers, including streams, images, documents & automatic tool use.

154 lines (153 loc) 5.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.JorElModelManager = void 0; /** * Manages models for JorEl */ class JorElModelManager { constructor(logger) { this.logger = logger; this.models = []; this.embeddingModels = []; this.defaultModel = ""; this.defaultEmbeddingModel = ""; this.logger.debug("ModelManager", "Model manager initialized"); } /** * Register a model for an existing provider * @param model The model name * @param provider The provider name * @param setAsDefault Whether to set this model as the default * @returns The model entry * @throws Error - If the provider does not exist */ registerModel({ model, provider, setAsDefault, defaults, }) { this.models.push({ model, provider, defaults }); this.logger.debug("ModelManager", `Registered model ${model} with provider ${provider}`); if (setAsDefault || !this.defaultModel) this.defaultModel = model; } /** * Set the defaults for a model * @param model The model name * @param defaults The defaults to set */ setModelSpecificDefaults(model, defaults) { const modelEntry = this.getModel(model); modelEntry.defaults = defaults; this.logger.debug("ModelManager", `Set specific defaults for model ${model} to ${JSON.stringify(defaults)}`); } /** * Unregister a model * @param model The model name */ unregisterModel(model) { this.models = this.models.filter((m) => m.model !== model); this.logger.debug("ModelManager", `Unregistered model ${model}`); if (this.defaultModel === model) { this.defaultModel = this.models.length ? this.models[0].model : ""; this.logger.debug("ModelManager", `Set default model to ${this.defaultModel}`); } } /** * Get a model entry * @param model The model name * @returns The model entry * @throws Error - If the model does not exist */ getModel(model) { const modelEntry = this.models.find((m) => m.model === model); if (!modelEntry) throw new Error(`Model ${model} is not registered`); return modelEntry; } /** * Get the default model * @returns The default model id */ getDefaultModel() { return this.defaultModel; } /** * Set the default model * @param model The model name * @throws Error - If the model does not exist */ setDefaultModel(model) { this.getModel(model); // Ensure model exists this.defaultModel = model; this.logger.debug("ModelManager", `Set default model to ${model}`); } /** * List all models */ listModels() { return this.models; } /** * Register an embedding model for an existing provider * @param model The model name * @param provider The provider name * @param dimensions The number of dimensions * @param setAsDefault Whether to set this model as the default * @returns The model entry * @throws Error - If the provider does not exist */ registerEmbeddingModel({ model, provider, dimensions, setAsDefault, }) { this.embeddingModels.push({ model, provider, dimensions }); this.logger.debug("ModelManager", `Registered embedding model ${model} with provider ${provider}`); if (setAsDefault || !this.defaultEmbeddingModel) { this.defaultEmbeddingModel = model; this.logger.debug("ModelManager", `Set default embedding model to ${model}`); } } /** * Unregister an embedding model * @param model The model name */ unregisterEmbeddingModel(model) { this.embeddingModels = this.embeddingModels.filter((m) => m.model !== model); this.logger.debug("ModelManager", `Unregistered embedding model ${model}`); if (this.defaultEmbeddingModel === model) { this.defaultEmbeddingModel = this.embeddingModels.length ? this.embeddingModels[0].model : ""; this.logger.debug("ModelManager", `Set default embedding model to ${this.defaultEmbeddingModel}`); } } /** * Get an embedding model entry * @param model The model name * @returns The model entry * @throws Error - If the model does not exist */ getEmbeddingModel(model) { const modelEntry = this.embeddingModels.find((m) => m.model === model); if (!modelEntry) throw new Error(`Model ${model} is not registered`); return modelEntry; } /** * Get the default embedding model * @returns The default model id */ getDefaultEmbeddingModel() { return this.defaultEmbeddingModel; } /** * Set the default embedding model * @param model The model name * @throws Error - If the model does not exist */ setDefaultEmbeddingModel(model) { this.getEmbeddingModel(model); // Ensure model exists this.defaultEmbeddingModel = model; this.logger.debug("ModelManager", `Set default embedding model to ${model}`); } /** * List all embedding models * @returns The list of embedding models */ listEmbeddingModels() { return this.embeddingModels; } } exports.JorElModelManager = JorElModelManager;