@node-llm/core 0.8.0 → 1.0.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 +64 -67
- package/dist/chat/Chat.d.ts +3 -2
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +4 -4
- 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 +4 -2
- 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 +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/llm.d.ts +2 -1
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +26 -28
- 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 +21 -0
- package/dist/providers/BaseProvider.d.ts.map +1 -0
- package/dist/providers/BaseProvider.js +28 -0
- package/dist/providers/Provider.d.ts +19 -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/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/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/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 +14 -0
- 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 +1 -1
- 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/llm.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
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";
|
|
13
9
|
import { config } from "./config.js";
|
|
10
|
+
// Provider registration map
|
|
11
|
+
const PROVIDER_REGISTRARS = {
|
|
12
|
+
openai: ensureOpenAIRegistered,
|
|
13
|
+
gemini: registerGeminiProvider,
|
|
14
|
+
anthropic: registerAnthropicProvider,
|
|
15
|
+
deepseek: registerDeepSeekProvider,
|
|
16
|
+
ollama: registerOllamaProvider,
|
|
17
|
+
openrouter: registerOpenRouterProvider,
|
|
18
|
+
};
|
|
14
19
|
class LLMCore {
|
|
15
20
|
models = ModelRegistry;
|
|
16
21
|
config = config;
|
|
@@ -50,20 +55,10 @@ class LLMCore {
|
|
|
50
55
|
};
|
|
51
56
|
}
|
|
52
57
|
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();
|
|
58
|
+
// Use the provider registrars map
|
|
59
|
+
const registrar = PROVIDER_REGISTRARS[provider];
|
|
60
|
+
if (registrar) {
|
|
61
|
+
registrar();
|
|
67
62
|
}
|
|
68
63
|
this.provider = providerRegistry.resolve(provider);
|
|
69
64
|
}
|
|
@@ -73,22 +68,25 @@ class LLMCore {
|
|
|
73
68
|
}
|
|
74
69
|
ensureProviderSupport(method) {
|
|
75
70
|
if (!this.provider) {
|
|
76
|
-
throw new
|
|
71
|
+
throw new ProviderNotConfiguredError();
|
|
77
72
|
}
|
|
78
73
|
if (!this.provider[method]) {
|
|
79
|
-
throw new
|
|
74
|
+
throw new UnsupportedFeatureError("Provider", String(method));
|
|
80
75
|
}
|
|
81
76
|
return this.provider;
|
|
82
77
|
}
|
|
83
78
|
chat(model, options) {
|
|
84
79
|
if (!this.provider) {
|
|
85
|
-
throw new
|
|
80
|
+
throw new ProviderNotConfiguredError();
|
|
86
81
|
}
|
|
87
82
|
return new Chat(this.provider, model, options);
|
|
88
83
|
}
|
|
89
84
|
async listModels() {
|
|
90
85
|
const provider = this.ensureProviderSupport("listModels");
|
|
91
|
-
|
|
86
|
+
const models = await provider.listModels();
|
|
87
|
+
// Dynamically update the model registry with the fetched info
|
|
88
|
+
ModelRegistry.save(models);
|
|
89
|
+
return models;
|
|
92
90
|
}
|
|
93
91
|
async paint(prompt, options) {
|
|
94
92
|
const provider = this.ensureProviderSupport("paint");
|
|
@@ -97,7 +95,7 @@ class LLMCore {
|
|
|
97
95
|
console.warn(`[NodeLLM] Skipping validation for model ${model}`);
|
|
98
96
|
}
|
|
99
97
|
else if (model && provider.capabilities && !provider.capabilities.supportsImageGeneration(model)) {
|
|
100
|
-
throw new
|
|
98
|
+
throw new ModelCapabilityError(model, "image generation");
|
|
101
99
|
}
|
|
102
100
|
const response = await provider.paint({
|
|
103
101
|
prompt,
|
|
@@ -112,7 +110,7 @@ class LLMCore {
|
|
|
112
110
|
console.warn(`[NodeLLM] Skipping validation for model ${model}`);
|
|
113
111
|
}
|
|
114
112
|
else if (model && provider.capabilities && !provider.capabilities.supportsTranscription(model)) {
|
|
115
|
-
throw new
|
|
113
|
+
throw new ModelCapabilityError(model, "transcription");
|
|
116
114
|
}
|
|
117
115
|
const response = await provider.transcribe({
|
|
118
116
|
file,
|
|
@@ -140,7 +138,7 @@ class LLMCore {
|
|
|
140
138
|
console.warn(`[NodeLLM] Skipping validation for model ${model}`);
|
|
141
139
|
}
|
|
142
140
|
else if (model && provider.capabilities && !provider.capabilities.supportsModeration(model)) {
|
|
143
|
-
throw new
|
|
141
|
+
throw new ModelCapabilityError(model, "moderation");
|
|
144
142
|
}
|
|
145
143
|
const response = await provider.moderate({
|
|
146
144
|
input,
|
|
@@ -161,7 +159,7 @@ class LLMCore {
|
|
|
161
159
|
console.warn(`[NodeLLM] Skipping validation for model ${request.model}`);
|
|
162
160
|
}
|
|
163
161
|
else if (request.model && provider.capabilities && !provider.capabilities.supportsEmbeddings(request.model)) {
|
|
164
|
-
throw new
|
|
162
|
+
throw new ModelCapabilityError(request.model, "embeddings");
|
|
165
163
|
}
|
|
166
164
|
const response = await provider.embed(request);
|
|
167
165
|
return new Embedding(response);
|
|
@@ -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
|
*/
|