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
JavaScript
"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;