@node-llm/core 0.8.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -167
- package/dist/aliases.json +126 -0
- package/dist/chat/Chat.d.ts +7 -3
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +6 -7
- package/dist/chat/ChatStream.d.ts +25 -0
- package/dist/chat/ChatStream.d.ts.map +1 -0
- package/dist/chat/ChatStream.js +93 -0
- package/dist/config.d.ts +5 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/embedding/Embedding.d.ts +1 -1
- package/dist/embedding/Embedding.d.ts.map +1 -1
- package/dist/errors/index.d.ts +22 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +32 -0
- package/dist/index.d.ts +10 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -9
- package/dist/llm.d.ts +4 -3
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +44 -37
- package/dist/model_aliases.d.ts +3 -0
- package/dist/model_aliases.d.ts.map +1 -0
- package/dist/model_aliases.js +20 -0
- package/dist/models/ModelRegistry.d.ts +4 -0
- package/dist/models/ModelRegistry.d.ts.map +1 -1
- package/dist/models/ModelRegistry.js +15 -0
- package/dist/models/models.d.ts +729 -60
- package/dist/models/models.d.ts.map +1 -1
- package/dist/models/models.js +24375 -2312
- package/dist/models/types.d.ts +3 -3
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js +3 -0
- package/dist/providers/BaseProvider.d.ts +23 -0
- package/dist/providers/BaseProvider.d.ts.map +1 -0
- package/dist/providers/BaseProvider.js +31 -0
- package/dist/providers/Provider.d.ts +17 -1
- package/dist/providers/Provider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.d.ts +6 -7
- package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.js +16 -13
- package/dist/providers/anthropic/Streaming.d.ts +1 -1
- package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
- package/dist/providers/anthropic/Streaming.js +80 -54
- package/dist/providers/deepseek/Capabilities.js +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.d.ts +5 -1
- package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.js +15 -1
- package/dist/providers/deepseek/Streaming.d.ts +1 -1
- package/dist/providers/deepseek/Streaming.d.ts.map +1 -1
- package/dist/providers/deepseek/Streaming.js +80 -48
- package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
- package/dist/providers/gemini/Embeddings.d.ts +1 -1
- package/dist/providers/gemini/Embeddings.d.ts.map +1 -1
- package/dist/providers/gemini/GeminiProvider.d.ts +6 -4
- package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/gemini/GeminiProvider.js +14 -4
- package/dist/providers/gemini/Streaming.d.ts +1 -1
- package/dist/providers/gemini/Streaming.d.ts.map +1 -1
- package/dist/providers/gemini/Streaming.js +62 -39
- package/dist/providers/gemini/index.d.ts +1 -1
- package/dist/providers/gemini/index.js +1 -1
- package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
- package/dist/providers/ollama/Capabilities.js +5 -1
- package/dist/providers/ollama/OllamaProvider.d.ts +1 -0
- package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/providers/ollama/OllamaProvider.js +3 -0
- package/dist/providers/ollama/index.d.ts +1 -1
- package/dist/providers/ollama/index.js +1 -1
- package/dist/providers/openai/Embedding.d.ts +1 -1
- package/dist/providers/openai/Embedding.d.ts.map +1 -1
- package/dist/providers/openai/OpenAIProvider.d.ts +6 -3
- package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/openai/OpenAIProvider.js +15 -1
- package/dist/providers/openai/Streaming.d.ts +1 -1
- package/dist/providers/openai/Streaming.d.ts.map +1 -1
- package/dist/providers/openai/Streaming.js +75 -43
- package/dist/providers/openai/index.d.ts +1 -1
- package/dist/providers/openai/index.js +1 -1
- package/dist/providers/openrouter/Capabilities.d.ts +13 -0
- package/dist/providers/openrouter/Capabilities.d.ts.map +1 -0
- package/dist/providers/openrouter/Capabilities.js +67 -0
- package/dist/providers/openrouter/Models.d.ts +11 -0
- package/dist/providers/openrouter/Models.d.ts.map +1 -0
- package/dist/providers/openrouter/Models.js +88 -0
- package/dist/providers/openrouter/OpenRouterProvider.d.ts +21 -0
- package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -0
- package/dist/providers/openrouter/OpenRouterProvider.js +24 -0
- package/dist/providers/openrouter/index.d.ts +11 -0
- package/dist/providers/openrouter/index.d.ts.map +1 -0
- package/dist/providers/openrouter/index.js +26 -0
- package/dist/providers/registry.d.ts +11 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +15 -1
- package/dist/streaming/Stream.d.ts +29 -0
- package/dist/streaming/Stream.d.ts.map +1 -0
- package/dist/streaming/Stream.js +67 -0
- package/dist/utils/FileLoader.d.ts.map +1 -1
- package/dist/utils/FileLoader.js +34 -3
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +24 -0
- package/package.json +2 -2
- package/dist/chat/Stream.d.ts +0 -21
- package/dist/chat/Stream.d.ts.map +0 -1
- package/dist/chat/Stream.js +0 -73
- package/dist/providers/Embedding.d.ts +0 -20
- package/dist/providers/Embedding.d.ts.map +0 -1
- package/dist/providers/Embedding.js +0 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AAEtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export * from "./chat/Message.js";
|
|
2
|
+
export * from "./chat/Content.js";
|
|
3
|
+
export * from "./chat/Tool.js";
|
|
4
|
+
export * from "./chat/ChatOptions.js";
|
|
5
|
+
export * from "./chat/ChatResponse.js";
|
|
6
|
+
export * from "./chat/Chat.js";
|
|
7
|
+
export * from "./chat/ChatStream.js";
|
|
8
|
+
export * from "./streaming/Stream.js";
|
|
4
9
|
export { z } from "zod";
|
|
5
|
-
export {
|
|
10
|
+
export { NodeLLM, Transcription, Moderation, Embedding } from "./llm.js";
|
|
6
11
|
export { config } from "./config.js";
|
|
7
12
|
export { providerRegistry } from "./providers/registry.js";
|
|
8
|
-
export {
|
|
9
|
-
export { registerOpenAIProvider } from "./providers/openai/index.js";
|
|
10
|
-
export { registerAnthropicProvider } from "./providers/anthropic/index.js";
|
|
11
|
-
export { registerOllamaProvider, OllamaProvider } from "./providers/ollama/index.js";
|
|
12
|
-
export * from "./errors/index.js";
|
|
13
|
+
export { Schema } from "./schema/Schema.js";
|
package/dist/llm.d.ts
CHANGED
|
@@ -18,10 +18,9 @@ type LLMConfig = {
|
|
|
18
18
|
defaultModerationModel?: string;
|
|
19
19
|
defaultEmbeddingModel?: string;
|
|
20
20
|
} & Partial<NodeLLMConfig>;
|
|
21
|
-
declare class
|
|
21
|
+
declare class NodeLLMCore {
|
|
22
22
|
readonly models: typeof ModelRegistry;
|
|
23
23
|
readonly config: {
|
|
24
|
-
[key: string]: any;
|
|
25
24
|
openaiApiKey?: string;
|
|
26
25
|
openaiApiBase?: string;
|
|
27
26
|
anthropicApiKey?: string;
|
|
@@ -31,6 +30,8 @@ declare class LLMCore {
|
|
|
31
30
|
deepseekApiKey?: string;
|
|
32
31
|
deepseekApiBase?: string;
|
|
33
32
|
ollamaApiBase?: string;
|
|
33
|
+
openrouterApiKey?: string;
|
|
34
|
+
openrouterApiBase?: string;
|
|
34
35
|
};
|
|
35
36
|
private provider?;
|
|
36
37
|
private defaultTranscriptionModelId?;
|
|
@@ -70,5 +71,5 @@ declare class LLMCore {
|
|
|
70
71
|
}): Promise<Embedding>;
|
|
71
72
|
}
|
|
72
73
|
export { Transcription, Moderation, Embedding };
|
|
73
|
-
export declare const
|
|
74
|
+
export declare const NodeLLM: NodeLLMCore;
|
|
74
75
|
//# sourceMappingURL=llm.d.ts.map
|
package/dist/llm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EACL,QAAQ,EACR,SAAS,
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
|
package/dist/llm.js
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import { Chat } from "./chat/Chat.js";
|
|
2
|
-
import { providerRegistry } from "./providers/registry.js";
|
|
3
|
-
import { ensureOpenAIRegistered } from "./providers/openai/index.js";
|
|
4
|
-
import { registerGeminiProvider } from "./providers/gemini/index.js";
|
|
5
|
-
import { registerAnthropicProvider } from "./providers/anthropic/index.js";
|
|
6
|
-
import { registerDeepSeekProvider } from "./providers/deepseek/index.js";
|
|
7
|
-
import { registerOllamaProvider } from "./providers/ollama/index.js";
|
|
2
|
+
import { providerRegistry, ensureOpenAIRegistered, registerAnthropicProvider, registerGeminiProvider, registerDeepSeekProvider, registerOllamaProvider, registerOpenRouterProvider, } from "./providers/registry.js";
|
|
8
3
|
import { GeneratedImage } from "./image/GeneratedImage.js";
|
|
9
4
|
import { ModelRegistry } from "./models/ModelRegistry.js";
|
|
10
5
|
import { Transcription } from "./transcription/Transcription.js";
|
|
11
6
|
import { Moderation } from "./moderation/Moderation.js";
|
|
12
7
|
import { Embedding } from "./embedding/Embedding.js";
|
|
8
|
+
import { ProviderNotConfiguredError, UnsupportedFeatureError, ModelCapabilityError } from "./errors/index.js";
|
|
9
|
+
import { resolveModelAlias } from "./model_aliases.js";
|
|
13
10
|
import { config } from "./config.js";
|
|
14
|
-
|
|
11
|
+
// Provider registration map
|
|
12
|
+
const PROVIDER_REGISTRARS = {
|
|
13
|
+
openai: ensureOpenAIRegistered,
|
|
14
|
+
gemini: registerGeminiProvider,
|
|
15
|
+
anthropic: registerAnthropicProvider,
|
|
16
|
+
deepseek: registerDeepSeekProvider,
|
|
17
|
+
ollama: registerOllamaProvider,
|
|
18
|
+
openrouter: registerOpenRouterProvider,
|
|
19
|
+
};
|
|
20
|
+
class NodeLLMCore {
|
|
15
21
|
models = ModelRegistry;
|
|
16
22
|
config = config;
|
|
17
23
|
provider;
|
|
@@ -50,20 +56,10 @@ class LLMCore {
|
|
|
50
56
|
};
|
|
51
57
|
}
|
|
52
58
|
if (typeof provider === "string") {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
registerGeminiProvider();
|
|
58
|
-
}
|
|
59
|
-
if (provider === "anthropic") {
|
|
60
|
-
registerAnthropicProvider();
|
|
61
|
-
}
|
|
62
|
-
if (provider === "deepseek") {
|
|
63
|
-
registerDeepSeekProvider();
|
|
64
|
-
}
|
|
65
|
-
if (provider === "ollama") {
|
|
66
|
-
registerOllamaProvider();
|
|
59
|
+
// Use the provider registrars map
|
|
60
|
+
const registrar = PROVIDER_REGISTRARS[provider];
|
|
61
|
+
if (registrar) {
|
|
62
|
+
registrar();
|
|
67
63
|
}
|
|
68
64
|
this.provider = providerRegistry.resolve(provider);
|
|
69
65
|
}
|
|
@@ -73,51 +69,60 @@ class LLMCore {
|
|
|
73
69
|
}
|
|
74
70
|
ensureProviderSupport(method) {
|
|
75
71
|
if (!this.provider) {
|
|
76
|
-
throw new
|
|
72
|
+
throw new ProviderNotConfiguredError();
|
|
77
73
|
}
|
|
78
74
|
if (!this.provider[method]) {
|
|
79
|
-
throw new
|
|
75
|
+
throw new UnsupportedFeatureError("Provider", String(method));
|
|
80
76
|
}
|
|
81
77
|
return this.provider;
|
|
82
78
|
}
|
|
83
79
|
chat(model, options) {
|
|
84
80
|
if (!this.provider) {
|
|
85
|
-
throw new
|
|
81
|
+
throw new ProviderNotConfiguredError();
|
|
86
82
|
}
|
|
87
|
-
|
|
83
|
+
// Resolve model alias based on the current provider
|
|
84
|
+
const resolvedModel = resolveModelAlias(model, this.provider.id);
|
|
85
|
+
return new Chat(this.provider, resolvedModel, options, this.retry);
|
|
88
86
|
}
|
|
89
87
|
async listModels() {
|
|
90
88
|
const provider = this.ensureProviderSupport("listModels");
|
|
91
|
-
|
|
89
|
+
const models = await provider.listModels();
|
|
90
|
+
// Dynamically update the model registry with the fetched info
|
|
91
|
+
ModelRegistry.save(models);
|
|
92
|
+
return models;
|
|
92
93
|
}
|
|
93
94
|
async paint(prompt, options) {
|
|
94
95
|
const provider = this.ensureProviderSupport("paint");
|
|
95
|
-
|
|
96
|
+
// Default to resolving aliases
|
|
97
|
+
const rawModel = options?.model;
|
|
98
|
+
const model = resolveModelAlias(rawModel || "", provider.id);
|
|
96
99
|
if (options?.assumeModelExists) {
|
|
97
100
|
console.warn(`[NodeLLM] Skipping validation for model ${model}`);
|
|
98
101
|
}
|
|
99
102
|
else if (model && provider.capabilities && !provider.capabilities.supportsImageGeneration(model)) {
|
|
100
|
-
throw new
|
|
103
|
+
throw new ModelCapabilityError(model, "image generation");
|
|
101
104
|
}
|
|
102
105
|
const response = await provider.paint({
|
|
103
106
|
prompt,
|
|
104
107
|
...options,
|
|
108
|
+
model,
|
|
105
109
|
});
|
|
106
110
|
return new GeneratedImage(response);
|
|
107
111
|
}
|
|
108
112
|
async transcribe(file, options) {
|
|
109
113
|
const provider = this.ensureProviderSupport("transcribe");
|
|
110
|
-
const
|
|
114
|
+
const rawModel = options?.model || this.defaultTranscriptionModelId || "";
|
|
115
|
+
const model = resolveModelAlias(rawModel, provider.id);
|
|
111
116
|
if (options?.assumeModelExists) {
|
|
112
117
|
console.warn(`[NodeLLM] Skipping validation for model ${model}`);
|
|
113
118
|
}
|
|
114
119
|
else if (model && provider.capabilities && !provider.capabilities.supportsTranscription(model)) {
|
|
115
|
-
throw new
|
|
120
|
+
throw new ModelCapabilityError(model, "transcription");
|
|
116
121
|
}
|
|
117
122
|
const response = await provider.transcribe({
|
|
118
123
|
file,
|
|
119
|
-
model,
|
|
120
124
|
...options,
|
|
125
|
+
model,
|
|
121
126
|
});
|
|
122
127
|
return new Transcription(response);
|
|
123
128
|
}
|
|
@@ -135,23 +140,25 @@ class LLMCore {
|
|
|
135
140
|
}
|
|
136
141
|
async moderate(input, options) {
|
|
137
142
|
const provider = this.ensureProviderSupport("moderate");
|
|
138
|
-
const
|
|
143
|
+
const rawModel = options?.model || this.defaultModerationModelId || "";
|
|
144
|
+
const model = resolveModelAlias(rawModel, provider.id);
|
|
139
145
|
if (options?.assumeModelExists) {
|
|
140
146
|
console.warn(`[NodeLLM] Skipping validation for model ${model}`);
|
|
141
147
|
}
|
|
142
148
|
else if (model && provider.capabilities && !provider.capabilities.supportsModeration(model)) {
|
|
143
|
-
throw new
|
|
149
|
+
throw new ModelCapabilityError(model, "moderation");
|
|
144
150
|
}
|
|
145
151
|
const response = await provider.moderate({
|
|
146
152
|
input,
|
|
147
|
-
model,
|
|
148
153
|
...options,
|
|
154
|
+
model,
|
|
149
155
|
});
|
|
150
156
|
return new Moderation(response);
|
|
151
157
|
}
|
|
152
158
|
async embed(input, options) {
|
|
153
159
|
const provider = this.ensureProviderSupport("embed");
|
|
154
|
-
const
|
|
160
|
+
const rawModel = options?.model || this.defaultEmbeddingModelId || "";
|
|
161
|
+
const model = resolveModelAlias(rawModel, provider.id);
|
|
155
162
|
const request = {
|
|
156
163
|
input,
|
|
157
164
|
model,
|
|
@@ -161,11 +168,11 @@ class LLMCore {
|
|
|
161
168
|
console.warn(`[NodeLLM] Skipping validation for model ${request.model}`);
|
|
162
169
|
}
|
|
163
170
|
else if (request.model && provider.capabilities && !provider.capabilities.supportsEmbeddings(request.model)) {
|
|
164
|
-
throw new
|
|
171
|
+
throw new ModelCapabilityError(request.model, "embeddings");
|
|
165
172
|
}
|
|
166
173
|
const response = await provider.embed(request);
|
|
167
174
|
return new Embedding(response);
|
|
168
175
|
}
|
|
169
176
|
}
|
|
170
177
|
export { Transcription, Moderation, Embedding };
|
|
171
|
-
export const
|
|
178
|
+
export const NodeLLM = new NodeLLMCore();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model_aliases.d.ts","sourceRoot":"","sources":["../src/model_aliases.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEvI,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,MAAM,CAkBhF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// This file is auto-generated or manually maintained to map generic model aliases
|
|
2
|
+
// to provider-specific model IDs.
|
|
3
|
+
// @ts-ignore
|
|
4
|
+
import aliases from "./aliases.json" assert { type: "json" };
|
|
5
|
+
export function resolveModelAlias(alias, provider) {
|
|
6
|
+
if (!provider) {
|
|
7
|
+
return alias;
|
|
8
|
+
}
|
|
9
|
+
// Check if the alias exists in our registry
|
|
10
|
+
const aliasEntry = aliases[alias];
|
|
11
|
+
if (aliasEntry) {
|
|
12
|
+
// Check if there is a specific mapping for this provider
|
|
13
|
+
if (aliasEntry[provider.toLowerCase()]) {
|
|
14
|
+
return aliasEntry[provider.toLowerCase()];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// If no alias found or no mapping for this provider, return the original string
|
|
18
|
+
// This allows users to pass raw model IDs that aren't in our alias list.
|
|
19
|
+
return alias;
|
|
20
|
+
}
|
|
@@ -2,6 +2,10 @@ import { Model } from "./types.js";
|
|
|
2
2
|
export declare class ModelRegistry {
|
|
3
3
|
private static models;
|
|
4
4
|
static find(modelId: string, provider?: string): Model | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Add or update models in the registry.
|
|
7
|
+
*/
|
|
8
|
+
static save(models: Model | Model[]): void;
|
|
5
9
|
/**
|
|
6
10
|
* Get all available models.
|
|
7
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelRegistry.d.ts","sourceRoot":"","sources":["../../src/models/ModelRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAA6C;IAElE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAMlE;;OAEG;IACH,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE;IAIrB;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKhF;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK/E;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK9E;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;sBAA3I,MAAM;uBAAiB,MAAM;sBAAgB,MAAM;wBAAkB,MAAM;2BAAqB,MAAM;;;;;sBAAtG,MAAM;uBAAiB,MAAM;sBAAgB,MAAM;wBAAkB,MAAM;2BAAqB,MAAM;;CA+BrJ"}
|
|
1
|
+
{"version":3,"file":"ModelRegistry.d.ts","sourceRoot":"","sources":["../../src/models/ModelRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAA6C;IAElE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAMlE;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI;IAa1C;;OAEG;IACH,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE;IAIrB;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKhF;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK/E;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK9E;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;sBAA3I,MAAM;uBAAiB,MAAM;sBAAgB,MAAM;wBAAkB,MAAM;2BAAqB,MAAM;;;;;sBAAtG,MAAM;uBAAiB,MAAM;sBAAgB,MAAM;wBAAkB,MAAM;2BAAqB,MAAM;;CA+BrJ"}
|
|
@@ -4,6 +4,21 @@ export class ModelRegistry {
|
|
|
4
4
|
static find(modelId, provider) {
|
|
5
5
|
return this.models.find(m => (m.id === modelId || m.family === modelId) && (!provider || m.provider === provider));
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Add or update models in the registry.
|
|
9
|
+
*/
|
|
10
|
+
static save(models) {
|
|
11
|
+
const toAdd = Array.isArray(models) ? models : [models];
|
|
12
|
+
toAdd.forEach(newModel => {
|
|
13
|
+
const index = this.models.findIndex(m => m.id === newModel.id && m.provider === newModel.provider);
|
|
14
|
+
if (index >= 0) {
|
|
15
|
+
this.models[index] = newModel;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
this.models.push(newModel);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
7
22
|
/**
|
|
8
23
|
* Get all available models.
|
|
9
24
|
*/
|