diff --git a/package.json b/package.json index 5c6f53e..a88a25d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@ztimson/ai-utils", - "version": "1.0.1", + "version": "1.0.2", "description": "AI Utility library", "author": "Zak Timson", "license": "MIT", diff --git a/src/llm.ts b/src/llm.ts index eced138..9f4a61d 100644 --- a/src/llm.ts +++ b/src/llm.ts @@ -458,6 +458,31 @@ class LLM { if(!done) reject(`AI failed to create summary:\n${resp}`); }); } + + addModel(name: string, config: AnthropicConfig | OllamaConfig | OpenAiConfig, setDefault = false) { + if(config.proto == 'anthropic') this.models[name] = new Anthropic(this.ai, config.token, name); + else if(config.proto == 'ollama') this.models[name] = new OpenAi(this.ai, config.host, 'not-needed', name); + else if(config.proto == 'openai') this.models[name] = new OpenAi(this.ai, config.host || null, config.token, name); + if(setDefault || !this.defaultModel) this.defaultModel = name; + } + + removeModel(name: string) { + delete this.models[name]; + if(this.defaultModel === name) { + this.defaultModel = Object.keys(this.models)[0] ?? ''; + } + } + + setModels(models: {[model: string]: AnthropicConfig | OllamaConfig | OpenAiConfig}, replace = true) { + if(replace) this.models = {}; + Object.entries(models).forEach(([model, config]) => { + if(!this.defaultModel) this.defaultModel = model; + if(config.proto == 'anthropic') this.models[model] = new Anthropic(this.ai, config.token, model); + else if(config.proto == 'ollama') this.models[model] = new OpenAi(this.ai, config.host, 'not-needed', model); + else if(config.proto == 'openai') this.models[model] = new OpenAi(this.ai, config.host || null, config.token, model); + }); + this.defaultModel = Object.keys(this.models)[0] ?? ''; + } } export default LLM;