@node-llm/core 1.5.2 → 1.6.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 +84 -110
- package/dist/aliases.js +239 -239
- package/dist/chat/Chat.d.ts +18 -17
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +63 -42
- package/dist/chat/ChatOptions.d.ts +8 -9
- package/dist/chat/ChatOptions.d.ts.map +1 -1
- package/dist/chat/ChatResponse.d.ts +1 -1
- package/dist/chat/ChatResponse.d.ts.map +1 -1
- package/dist/chat/ChatResponse.js +22 -8
- package/dist/chat/ChatStream.d.ts.map +1 -1
- package/dist/chat/ChatStream.js +16 -22
- package/dist/chat/Content.d.ts +3 -3
- package/dist/chat/Content.d.ts.map +1 -1
- package/dist/chat/Content.js +3 -6
- package/dist/chat/Message.d.ts +3 -1
- package/dist/chat/Message.d.ts.map +1 -1
- package/dist/chat/Role.d.ts.map +1 -1
- package/dist/chat/Tool.d.ts +15 -15
- package/dist/chat/Tool.d.ts.map +1 -1
- package/dist/chat/Tool.js +9 -7
- package/dist/chat/ToolHandler.d.ts +4 -3
- package/dist/chat/ToolHandler.d.ts.map +1 -1
- package/dist/chat/ToolHandler.js +10 -14
- package/dist/chat/Validation.d.ts.map +1 -1
- package/dist/chat/Validation.js +13 -6
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +80 -25
- package/dist/constants.js +1 -1
- package/dist/errors/index.d.ts +21 -7
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +14 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/llm.d.ts +44 -46
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +206 -134
- package/dist/model_aliases.d.ts.map +1 -1
- package/dist/models/ModelRegistry.d.ts.map +1 -1
- package/dist/models/ModelRegistry.js +12 -10
- package/dist/models/PricingRegistry.d.ts +31 -0
- package/dist/models/PricingRegistry.d.ts.map +1 -0
- package/dist/models/PricingRegistry.js +101 -0
- package/dist/models/models.d.ts.map +1 -1
- package/dist/models/models.js +5954 -7352
- package/dist/models/types.d.ts +37 -34
- package/dist/models/types.d.ts.map +1 -1
- package/dist/moderation/Moderation.d.ts.map +1 -1
- package/dist/moderation/Moderation.js +15 -5
- package/dist/providers/BaseProvider.d.ts +12 -8
- package/dist/providers/BaseProvider.d.ts.map +1 -1
- package/dist/providers/BaseProvider.js +17 -7
- package/dist/providers/Provider.d.ts +20 -5
- package/dist/providers/Provider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.d.ts +1 -1
- package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
- package/dist/providers/anthropic/AnthropicProvider.js +3 -3
- package/dist/providers/anthropic/Capabilities.d.ts +2 -1
- package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
- package/dist/providers/anthropic/Capabilities.js +3 -20
- package/dist/providers/anthropic/Chat.d.ts.map +1 -1
- package/dist/providers/anthropic/Chat.js +27 -17
- package/dist/providers/anthropic/Errors.d.ts.map +1 -1
- package/dist/providers/anthropic/Errors.js +5 -2
- package/dist/providers/anthropic/Models.d.ts.map +1 -1
- package/dist/providers/anthropic/Models.js +6 -6
- package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
- package/dist/providers/anthropic/Streaming.js +17 -12
- package/dist/providers/anthropic/Utils.js +8 -5
- package/dist/providers/anthropic/index.d.ts.map +1 -1
- package/dist/providers/anthropic/index.js +4 -3
- package/dist/providers/anthropic/types.d.ts +11 -4
- package/dist/providers/anthropic/types.d.ts.map +1 -1
- package/dist/providers/deepseek/Capabilities.d.ts +7 -5
- package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
- package/dist/providers/deepseek/Capabilities.js +9 -5
- package/dist/providers/deepseek/Chat.d.ts.map +1 -1
- package/dist/providers/deepseek/Chat.js +10 -9
- package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
- package/dist/providers/deepseek/DeepSeekProvider.js +4 -4
- package/dist/providers/deepseek/Models.d.ts.map +1 -1
- package/dist/providers/deepseek/Models.js +7 -7
- package/dist/providers/deepseek/Streaming.d.ts.map +1 -1
- package/dist/providers/deepseek/Streaming.js +11 -8
- package/dist/providers/deepseek/index.d.ts.map +1 -1
- package/dist/providers/deepseek/index.js +5 -4
- package/dist/providers/gemini/Capabilities.d.ts +5 -33
- package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
- package/dist/providers/gemini/Capabilities.js +7 -30
- package/dist/providers/gemini/Chat.d.ts.map +1 -1
- package/dist/providers/gemini/Chat.js +24 -19
- package/dist/providers/gemini/ChatUtils.d.ts.map +1 -1
- package/dist/providers/gemini/ChatUtils.js +10 -10
- package/dist/providers/gemini/Embeddings.d.ts.map +1 -1
- package/dist/providers/gemini/Embeddings.js +2 -2
- package/dist/providers/gemini/Errors.d.ts.map +1 -1
- package/dist/providers/gemini/Errors.js +5 -2
- package/dist/providers/gemini/GeminiProvider.d.ts +1 -1
- package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
- package/dist/providers/gemini/GeminiProvider.js +3 -3
- package/dist/providers/gemini/Image.d.ts.map +1 -1
- package/dist/providers/gemini/Image.js +8 -8
- package/dist/providers/gemini/Models.d.ts.map +1 -1
- package/dist/providers/gemini/Models.js +6 -6
- package/dist/providers/gemini/Streaming.d.ts.map +1 -1
- package/dist/providers/gemini/Streaming.js +18 -14
- package/dist/providers/gemini/Transcription.d.ts.map +1 -1
- package/dist/providers/gemini/Transcription.js +11 -11
- package/dist/providers/gemini/index.d.ts +1 -1
- package/dist/providers/gemini/index.d.ts.map +1 -1
- package/dist/providers/gemini/index.js +5 -4
- package/dist/providers/gemini/types.d.ts +4 -4
- package/dist/providers/gemini/types.d.ts.map +1 -1
- package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
- package/dist/providers/ollama/Capabilities.js +6 -2
- package/dist/providers/ollama/Models.js +1 -1
- package/dist/providers/ollama/OllamaProvider.d.ts +1 -1
- package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
- package/dist/providers/ollama/OllamaProvider.js +2 -2
- package/dist/providers/ollama/index.d.ts +1 -1
- package/dist/providers/ollama/index.d.ts.map +1 -1
- package/dist/providers/ollama/index.js +7 -3
- package/dist/providers/openai/Capabilities.d.ts +2 -1
- package/dist/providers/openai/Capabilities.d.ts.map +1 -1
- package/dist/providers/openai/Capabilities.js +9 -21
- package/dist/providers/openai/Chat.d.ts.map +1 -1
- package/dist/providers/openai/Chat.js +18 -14
- package/dist/providers/openai/Embedding.d.ts.map +1 -1
- package/dist/providers/openai/Embedding.js +11 -7
- package/dist/providers/openai/Errors.d.ts.map +1 -1
- package/dist/providers/openai/Errors.js +5 -2
- package/dist/providers/openai/Image.d.ts.map +1 -1
- package/dist/providers/openai/Image.js +6 -6
- package/dist/providers/openai/Models.d.ts +1 -1
- package/dist/providers/openai/Models.d.ts.map +1 -1
- package/dist/providers/openai/Models.js +12 -8
- package/dist/providers/openai/Moderation.d.ts.map +1 -1
- package/dist/providers/openai/Moderation.js +6 -6
- package/dist/providers/openai/OpenAIProvider.d.ts +2 -3
- package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
- package/dist/providers/openai/OpenAIProvider.js +4 -4
- package/dist/providers/openai/Streaming.d.ts.map +1 -1
- package/dist/providers/openai/Streaming.js +18 -13
- package/dist/providers/openai/Transcription.d.ts.map +1 -1
- package/dist/providers/openai/Transcription.js +15 -12
- package/dist/providers/openai/index.d.ts +1 -1
- package/dist/providers/openai/index.d.ts.map +1 -1
- package/dist/providers/openai/index.js +6 -5
- package/dist/providers/openai/types.d.ts +1 -1
- package/dist/providers/openai/utils.js +2 -2
- package/dist/providers/openrouter/Capabilities.d.ts +3 -3
- package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
- package/dist/providers/openrouter/Capabilities.js +21 -24
- package/dist/providers/openrouter/Models.d.ts.map +1 -1
- package/dist/providers/openrouter/Models.js +20 -16
- package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
- package/dist/providers/openrouter/OpenRouterProvider.js +1 -1
- package/dist/providers/openrouter/index.d.ts +1 -1
- package/dist/providers/openrouter/index.d.ts.map +1 -1
- package/dist/providers/openrouter/index.js +6 -5
- package/dist/providers/registry.d.ts +18 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +17 -2
- package/dist/providers/utils.js +1 -1
- package/dist/schema/Schema.d.ts +3 -3
- package/dist/schema/Schema.d.ts.map +1 -1
- package/dist/schema/Schema.js +2 -2
- package/dist/schema/to-json-schema.d.ts +1 -1
- package/dist/schema/to-json-schema.d.ts.map +1 -1
- package/dist/streaming/Stream.d.ts.map +1 -1
- package/dist/streaming/Stream.js +3 -3
- package/dist/utils/Binary.d.ts.map +1 -1
- package/dist/utils/Binary.js +32 -23
- package/dist/utils/FileLoader.d.ts.map +1 -1
- package/dist/utils/FileLoader.js +25 -4
- package/dist/utils/audio.js +2 -2
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +14 -4
- package/dist/utils/logger.d.ts +3 -3
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +2 -2
- package/package.json +1 -1
package/dist/chat/Tool.d.ts
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export interface ToolCall {
|
|
3
3
|
id: string;
|
|
4
|
-
type:
|
|
4
|
+
type: "function";
|
|
5
5
|
function: {
|
|
6
6
|
name: string;
|
|
7
7
|
arguments: string;
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
10
|
export interface ToolDefinition {
|
|
11
|
-
type:
|
|
11
|
+
type: "function";
|
|
12
12
|
function: {
|
|
13
13
|
name: string;
|
|
14
14
|
description?: string;
|
|
15
|
-
parameters: Record<string,
|
|
15
|
+
parameters: Record<string, unknown>;
|
|
16
16
|
};
|
|
17
|
-
handler?: (args:
|
|
17
|
+
handler?: (args: unknown) => Promise<string>;
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
20
|
* Anything that can be resolved into a ToolDefinition.
|
|
21
21
|
*/
|
|
22
22
|
export type ToolResolvable = Tool | {
|
|
23
23
|
new (): Tool;
|
|
24
|
-
} | ToolDefinition
|
|
24
|
+
} | ToolDefinition;
|
|
25
25
|
/**
|
|
26
26
|
* Subclass this to create tools with auto-generated schemas and type safety.
|
|
27
27
|
*/
|
|
28
|
-
export declare abstract class Tool<T =
|
|
28
|
+
export declare abstract class Tool<T = Record<string, unknown>> {
|
|
29
29
|
/**
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
* The name of the tool (must match [a-zA-Z0-9_-]+).
|
|
31
|
+
*/
|
|
32
32
|
abstract name: string;
|
|
33
33
|
/**
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
* A clear description of what the tool does, used by the LLM to decide when to call it.
|
|
35
|
+
*/
|
|
36
36
|
abstract description: string;
|
|
37
37
|
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
abstract schema: z.ZodObject<
|
|
38
|
+
* Parameters the tool accepts.
|
|
39
|
+
* Can be a Zod object (for auto-schema + type safety) or a raw JSON Schema.
|
|
40
|
+
*/
|
|
41
|
+
abstract schema: z.ZodObject<z.ZodRawShape> | Record<string, unknown>;
|
|
42
42
|
/**
|
|
43
43
|
* The core logic for the tool.
|
|
44
44
|
* 'args' will be parsed and validated based on 'schema'.
|
|
45
45
|
*/
|
|
46
|
-
abstract execute(args: T): Promise<
|
|
46
|
+
abstract execute(args: T): Promise<unknown>;
|
|
47
47
|
/**
|
|
48
48
|
* Internal handler to bridge with LLM providers.
|
|
49
49
|
* Converts any result to a string (usually JSON).
|
package/dist/chat/Tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../src/chat/Tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../src/chat/Tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACrC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG;IAAE,QAAQ,IAAI,CAAA;CAAE,GAAG,cAAc,CAAC;AAEtE;;GAEG;AACH,8BAAsB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpD;;QAEI;IACJ,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;QAEI;IACJ,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC;;;QAGI;IACJ,SAAgB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7E;;;OAGG;aACa,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAElD;;;OAGG;IACU,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9C;;;OAGG;IACI,SAAS,IAAI,cAAc;CAuBnC"}
|
package/dist/chat/Tool.js
CHANGED
|
@@ -20,19 +20,21 @@ export class Tool {
|
|
|
20
20
|
toLLMTool() {
|
|
21
21
|
const rawSchema = toJsonSchema(this.schema);
|
|
22
22
|
// We want the 'properties' and 'required' parts, not the full JSON Schema wrapper if present
|
|
23
|
-
const parameters = rawSchema.type === "object"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
const parameters = rawSchema.type === "object"
|
|
24
|
+
? rawSchema
|
|
25
|
+
: {
|
|
26
|
+
type: "object",
|
|
27
|
+
properties: rawSchema.properties || {},
|
|
28
|
+
required: rawSchema.required || []
|
|
29
|
+
};
|
|
28
30
|
return {
|
|
29
31
|
type: "function",
|
|
30
32
|
function: {
|
|
31
33
|
name: this.name,
|
|
32
34
|
description: this.description,
|
|
33
|
-
parameters: parameters
|
|
35
|
+
parameters: parameters
|
|
34
36
|
},
|
|
35
|
-
handler: this.handler
|
|
37
|
+
handler: (args) => this.handler(args)
|
|
36
38
|
};
|
|
37
39
|
}
|
|
38
40
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ToolExecutionMode } from "../constants.js";
|
|
2
|
+
import { ToolCall, ToolDefinition } from "./Tool.js";
|
|
2
3
|
export declare class ToolHandler {
|
|
3
|
-
static shouldExecuteTools(toolCalls:
|
|
4
|
-
static requestToolConfirmation(toolCall:
|
|
5
|
-
static execute(toolCall:
|
|
4
|
+
static shouldExecuteTools(toolCalls: ToolCall[] | undefined, mode?: ToolExecutionMode): boolean;
|
|
5
|
+
static requestToolConfirmation(toolCall: ToolCall, onConfirm?: (call: ToolCall) => Promise<boolean> | boolean): Promise<boolean>;
|
|
6
|
+
static execute(toolCall: ToolCall, tools: ToolDefinition[] | undefined, onStart?: (call: ToolCall) => void, onEnd?: (call: ToolCall, result: unknown) => void): Promise<{
|
|
6
7
|
role: "tool";
|
|
7
8
|
tool_call_id: string;
|
|
8
9
|
content: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolHandler.d.ts","sourceRoot":"","sources":["../../src/chat/ToolHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"ToolHandler.d.ts","sourceRoot":"","sources":["../../src/chat/ToolHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAErD,qBAAa,WAAW;IACtB,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO;WAMlF,uBAAuB,CAClC,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GACzD,OAAO,CAAC,OAAO,CAAC;WAMN,OAAO,CAClB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,cAAc,EAAE,GAAG,SAAS,EACnC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,EAClC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,GAChD,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAwBpE"}
|
package/dist/chat/ToolHandler.js
CHANGED
|
@@ -19,20 +19,16 @@ export class ToolHandler {
|
|
|
19
19
|
onStart(toolCall);
|
|
20
20
|
const tool = tools?.find((t) => t.function.name === toolCall.function.name);
|
|
21
21
|
if (tool?.handler) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
throw error;
|
|
35
|
-
}
|
|
22
|
+
const args = JSON.parse(toolCall.function.arguments);
|
|
23
|
+
const result = await tool.handler(args);
|
|
24
|
+
const safeResult = typeof result === "string" ? result : JSON.stringify(result);
|
|
25
|
+
if (onEnd)
|
|
26
|
+
onEnd(toolCall, result);
|
|
27
|
+
return {
|
|
28
|
+
role: "tool",
|
|
29
|
+
tool_call_id: toolCall.id,
|
|
30
|
+
content: safeResult
|
|
31
|
+
};
|
|
36
32
|
}
|
|
37
33
|
else {
|
|
38
34
|
throw new ToolError("Tool not found or no handler provided", toolCall.function?.name ?? "unknown");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validation.d.ts","sourceRoot":"","sources":["../../src/chat/Validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"Validation.d.ts","sourceRoot":"","sources":["../../src/chat/Validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGpD,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,cAAc,CACnB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,iBAAiB;IAiB5B,MAAM,CAAC,aAAa,CAClB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,iBAAiB;IAiB5B,MAAM,CAAC,wBAAwB,CAC7B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,iBAAiB;CAgB7B"}
|
package/dist/chat/Validation.js
CHANGED
|
@@ -1,32 +1,39 @@
|
|
|
1
|
+
import { logger } from "../utils/logger.js";
|
|
1
2
|
export class ChatValidator {
|
|
2
3
|
static validateVision(provider, model, hasBinary, options) {
|
|
3
4
|
if (!hasBinary)
|
|
4
5
|
return;
|
|
5
|
-
if (!options.assumeModelExists &&
|
|
6
|
+
if (!options.assumeModelExists &&
|
|
7
|
+
provider.capabilities &&
|
|
8
|
+
!provider.capabilities.supportsVision(model)) {
|
|
6
9
|
throw new Error(`Model ${model} does not support vision/binary files.`);
|
|
7
10
|
}
|
|
8
11
|
if (options.assumeModelExists) {
|
|
9
|
-
|
|
12
|
+
logger.warn(`Skipping vision capability validation for model ${model}`);
|
|
10
13
|
}
|
|
11
14
|
}
|
|
12
15
|
static validateTools(provider, model, hasTools, options) {
|
|
13
16
|
if (!hasTools)
|
|
14
17
|
return;
|
|
15
|
-
if (!options.assumeModelExists &&
|
|
18
|
+
if (!options.assumeModelExists &&
|
|
19
|
+
provider.capabilities &&
|
|
20
|
+
!provider.capabilities.supportsTools(model)) {
|
|
16
21
|
throw new Error(`Model ${model} does not support tool calling.`);
|
|
17
22
|
}
|
|
18
23
|
if (options.assumeModelExists) {
|
|
19
|
-
|
|
24
|
+
logger.warn(`Skipping tool capability validation for model ${model}`);
|
|
20
25
|
}
|
|
21
26
|
}
|
|
22
27
|
static validateStructuredOutput(provider, model, hasSchema, options) {
|
|
23
28
|
if (!hasSchema)
|
|
24
29
|
return;
|
|
25
|
-
if (!options.assumeModelExists &&
|
|
30
|
+
if (!options.assumeModelExists &&
|
|
31
|
+
provider.capabilities &&
|
|
32
|
+
!provider.capabilities.supportsStructuredOutput(model)) {
|
|
26
33
|
throw new Error(`Model ${model} does not support structured output.`);
|
|
27
34
|
}
|
|
28
35
|
if (options.assumeModelExists) {
|
|
29
|
-
|
|
36
|
+
logger.warn(`Skipping structured output capability validation for model ${model}`);
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
}
|
package/dist/config.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface NodeLLMConfig {
|
|
|
20
20
|
requestTimeout?: number;
|
|
21
21
|
maxTokens?: number;
|
|
22
22
|
toolExecution?: ToolExecutionMode;
|
|
23
|
+
provider?: string;
|
|
23
24
|
}
|
|
24
25
|
import { ToolExecutionMode } from "./constants.js";
|
|
25
26
|
export declare class Configuration implements NodeLLMConfig {
|
|
@@ -35,6 +36,7 @@ export declare class Configuration implements NodeLLMConfig {
|
|
|
35
36
|
private _openrouterApiKey?;
|
|
36
37
|
private _openrouterApiBase?;
|
|
37
38
|
private _debug?;
|
|
39
|
+
private _provider?;
|
|
38
40
|
get openaiApiKey(): string | undefined;
|
|
39
41
|
set openaiApiKey(v: string | undefined);
|
|
40
42
|
get openaiApiBase(): string | undefined;
|
|
@@ -59,6 +61,8 @@ export declare class Configuration implements NodeLLMConfig {
|
|
|
59
61
|
set openrouterApiBase(v: string | undefined);
|
|
60
62
|
get debug(): boolean | undefined;
|
|
61
63
|
set debug(v: boolean | undefined);
|
|
64
|
+
get provider(): string | undefined;
|
|
65
|
+
set provider(v: string | undefined);
|
|
62
66
|
maxToolCalls: number;
|
|
63
67
|
maxRetries: number;
|
|
64
68
|
requestTimeout: number;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -12,30 +12,85 @@ export class Configuration {
|
|
|
12
12
|
_openrouterApiKey;
|
|
13
13
|
_openrouterApiBase;
|
|
14
14
|
_debug;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
15
|
+
_provider;
|
|
16
|
+
get openaiApiKey() {
|
|
17
|
+
return this._openaiApiKey ?? process.env.OPENAI_API_KEY?.trim();
|
|
18
|
+
}
|
|
19
|
+
set openaiApiKey(v) {
|
|
20
|
+
this._openaiApiKey = v;
|
|
21
|
+
}
|
|
22
|
+
get openaiApiBase() {
|
|
23
|
+
return this._openaiApiBase ?? process.env.OPENAI_API_BASE?.trim();
|
|
24
|
+
}
|
|
25
|
+
set openaiApiBase(v) {
|
|
26
|
+
this._openaiApiBase = v;
|
|
27
|
+
}
|
|
28
|
+
get anthropicApiKey() {
|
|
29
|
+
return this._anthropicApiKey ?? process.env.ANTHROPIC_API_KEY?.trim();
|
|
30
|
+
}
|
|
31
|
+
set anthropicApiKey(v) {
|
|
32
|
+
this._anthropicApiKey = v;
|
|
33
|
+
}
|
|
34
|
+
get anthropicApiBase() {
|
|
35
|
+
return this._anthropicApiBase ?? process.env.ANTHROPIC_API_BASE?.trim();
|
|
36
|
+
}
|
|
37
|
+
set anthropicApiBase(v) {
|
|
38
|
+
this._anthropicApiBase = v;
|
|
39
|
+
}
|
|
40
|
+
get geminiApiKey() {
|
|
41
|
+
return this._geminiApiKey ?? process.env.GEMINI_API_KEY?.trim();
|
|
42
|
+
}
|
|
43
|
+
set geminiApiKey(v) {
|
|
44
|
+
this._geminiApiKey = v;
|
|
45
|
+
}
|
|
46
|
+
get geminiApiBase() {
|
|
47
|
+
return this._geminiApiBase ?? process.env.GEMINI_API_BASE?.trim();
|
|
48
|
+
}
|
|
49
|
+
set geminiApiBase(v) {
|
|
50
|
+
this._geminiApiBase = v;
|
|
51
|
+
}
|
|
52
|
+
get deepseekApiKey() {
|
|
53
|
+
return this._deepseekApiKey ?? process.env.DEEPSEEK_API_KEY?.trim();
|
|
54
|
+
}
|
|
55
|
+
set deepseekApiKey(v) {
|
|
56
|
+
this._deepseekApiKey = v;
|
|
57
|
+
}
|
|
58
|
+
get deepseekApiBase() {
|
|
59
|
+
return this._deepseekApiBase ?? process.env.DEEPSEEK_API_BASE?.trim();
|
|
60
|
+
}
|
|
61
|
+
set deepseekApiBase(v) {
|
|
62
|
+
this._deepseekApiBase = v;
|
|
63
|
+
}
|
|
64
|
+
get ollamaApiBase() {
|
|
65
|
+
return this._ollamaApiBase ?? process.env.OLLAMA_API_BASE?.trim() ?? DEFAULT_OLLAMA_BASE_URL;
|
|
66
|
+
}
|
|
67
|
+
set ollamaApiBase(v) {
|
|
68
|
+
this._ollamaApiBase = v;
|
|
69
|
+
}
|
|
70
|
+
get openrouterApiKey() {
|
|
71
|
+
return this._openrouterApiKey ?? process.env.OPENROUTER_API_KEY?.trim();
|
|
72
|
+
}
|
|
73
|
+
set openrouterApiKey(v) {
|
|
74
|
+
this._openrouterApiKey = v;
|
|
75
|
+
}
|
|
76
|
+
get openrouterApiBase() {
|
|
77
|
+
return this._openrouterApiBase ?? process.env.OPENROUTER_API_BASE?.trim();
|
|
78
|
+
}
|
|
79
|
+
set openrouterApiBase(v) {
|
|
80
|
+
this._openrouterApiBase = v;
|
|
81
|
+
}
|
|
82
|
+
get debug() {
|
|
83
|
+
return this._debug ?? process.env.NODELLM_DEBUG === "true";
|
|
84
|
+
}
|
|
85
|
+
set debug(v) {
|
|
86
|
+
this._debug = v;
|
|
87
|
+
}
|
|
88
|
+
get provider() {
|
|
89
|
+
return this._provider ?? process.env.NODELLM_PROVIDER?.trim();
|
|
90
|
+
}
|
|
91
|
+
set provider(v) {
|
|
92
|
+
this._provider = v;
|
|
93
|
+
}
|
|
39
94
|
maxToolCalls = DEFAULT_MAX_TOOL_CALLS;
|
|
40
95
|
maxRetries = DEFAULT_MAX_RETRIES;
|
|
41
96
|
requestTimeout = DEFAULT_REQUEST_TIMEOUT;
|
|
@@ -57,7 +112,7 @@ export class Configuration {
|
|
|
57
112
|
const descriptor = Object.getOwnPropertyDescriptor(prototype, name);
|
|
58
113
|
if (descriptor && descriptor.get) {
|
|
59
114
|
// Trigger the getter to snapshot the live value (including env fallbacks)
|
|
60
|
-
plain[name] = this
|
|
115
|
+
plain[name] = Reflect.get(this, name);
|
|
61
116
|
}
|
|
62
117
|
}
|
|
63
118
|
return plain;
|
package/dist/constants.js
CHANGED
package/dist/errors/index.d.ts
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeLLM Error Hierarchy
|
|
3
|
+
*
|
|
4
|
+
* **Stability Contract**: These error types and their semantics are part of the
|
|
5
|
+
* public API and will not change without a major version bump.
|
|
6
|
+
*
|
|
7
|
+
* - Error names are stable
|
|
8
|
+
* - Error codes are stable
|
|
9
|
+
* - Error semantics (when they're thrown) are stable
|
|
10
|
+
* - New errors may be added (non-breaking)
|
|
11
|
+
* - Existing error meanings will not change
|
|
12
|
+
*
|
|
13
|
+
* @see ARCHITECTURE.md for error contract details
|
|
14
|
+
*/
|
|
1
15
|
/**
|
|
2
16
|
* Base class for all NodeLLM errors
|
|
3
17
|
*/
|
|
@@ -10,40 +24,40 @@ export declare class LLMError extends Error {
|
|
|
10
24
|
*/
|
|
11
25
|
export declare class APIError extends LLMError {
|
|
12
26
|
readonly status: number;
|
|
13
|
-
readonly body:
|
|
27
|
+
readonly body: unknown;
|
|
14
28
|
readonly provider?: string | undefined;
|
|
15
29
|
readonly model?: string | undefined;
|
|
16
|
-
constructor(message: string, status: number, body:
|
|
30
|
+
constructor(message: string, status: number, body: unknown, provider?: string | undefined, model?: string | undefined);
|
|
17
31
|
}
|
|
18
32
|
/**
|
|
19
33
|
* 400 - Invalid request parameters
|
|
20
34
|
*/
|
|
21
35
|
export declare class BadRequestError extends APIError {
|
|
22
|
-
constructor(message: string, body:
|
|
36
|
+
constructor(message: string, body: unknown, provider?: string, model?: string);
|
|
23
37
|
}
|
|
24
38
|
/**
|
|
25
39
|
* 401/403 - API key or permission issues
|
|
26
40
|
*/
|
|
27
41
|
export declare class AuthenticationError extends APIError {
|
|
28
|
-
constructor(message: string, status: number, body:
|
|
42
|
+
constructor(message: string, status: number, body: unknown, provider?: string);
|
|
29
43
|
}
|
|
30
44
|
/**
|
|
31
45
|
* 429 - Rate limit exceeded
|
|
32
46
|
*/
|
|
33
47
|
export declare class RateLimitError extends APIError {
|
|
34
|
-
constructor(message: string, body:
|
|
48
|
+
constructor(message: string, body: unknown, provider?: string, model?: string);
|
|
35
49
|
}
|
|
36
50
|
/**
|
|
37
51
|
* 500+ - Provider server error
|
|
38
52
|
*/
|
|
39
53
|
export declare class ServerError extends APIError {
|
|
40
|
-
constructor(message: string, status: number, body:
|
|
54
|
+
constructor(message: string, status: number, body: unknown, provider?: string, model?: string);
|
|
41
55
|
}
|
|
42
56
|
/**
|
|
43
57
|
* 502/503/529 - Service overloaded/unavailable
|
|
44
58
|
*/
|
|
45
59
|
export declare class ServiceUnavailableError extends ServerError {
|
|
46
|
-
constructor(message: string, status: number, body:
|
|
60
|
+
constructor(message: string, status: number, body: unknown, provider?: string, model?: string);
|
|
47
61
|
}
|
|
48
62
|
/**
|
|
49
63
|
* Misconfiguration (e.g. missing API key)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;aAGf,IAAI,CAAC,EAAE,MAAM;gBAD7B,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA;CAMhC;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,QAAQ;aAGlB,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,OAAO;aACb,QAAQ,CAAC,EAAE,MAAM;aACjB,KAAK,CAAC,EAAE,MAAM;gBAJ9B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,KAAK,CAAC,EAAE,MAAM,YAAA;CAIjC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9E;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM;CAI9E;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9E;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9F;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,WAAW;gBAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAI9F;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM;CAG5B;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM;CAG5B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM;CAG5B;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,QAAQ;;CAIvD;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;aAEjC,QAAQ,EAAE,MAAM;aAChB,OAAO,EAAE,MAAM;gBADf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM;CAIlC;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;aAE9B,KAAK,EAAE,MAAM;aACb,UAAU,EAAE,MAAM;gBADlB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM;CAIrC;AACD;;GAEG;AACH,qBAAa,SAAU,SAAQ,QAAQ;aAGnB,QAAQ,CAAC,EAAE,MAAM;aACjB,KAAK,EAAE,OAAO;gBAF9B,OAAO,EAAE,MAAM,EACC,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,KAAK,GAAE,OAAe;CAKzC"}
|
package/dist/errors/index.js
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeLLM Error Hierarchy
|
|
3
|
+
*
|
|
4
|
+
* **Stability Contract**: These error types and their semantics are part of the
|
|
5
|
+
* public API and will not change without a major version bump.
|
|
6
|
+
*
|
|
7
|
+
* - Error names are stable
|
|
8
|
+
* - Error codes are stable
|
|
9
|
+
* - Error semantics (when they're thrown) are stable
|
|
10
|
+
* - New errors may be added (non-breaking)
|
|
11
|
+
* - Existing error meanings will not change
|
|
12
|
+
*
|
|
13
|
+
* @see ARCHITECTURE.md for error contract details
|
|
14
|
+
*/
|
|
1
15
|
/**
|
|
2
16
|
* Base class for all NodeLLM errors
|
|
3
17
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export * from "./chat/Chat.js";
|
|
|
7
7
|
export * from "./chat/ChatStream.js";
|
|
8
8
|
export * from "./streaming/Stream.js";
|
|
9
9
|
export { z } from "zod";
|
|
10
|
-
export { NodeLLM, Transcription, Moderation, Embedding } from "./llm.js";
|
|
10
|
+
export { NodeLLM, LegacyNodeLLM, createLLM, NodeLLMCore, Transcription, Moderation, Embedding, ModelRegistry, PricingRegistry } from "./llm.js";
|
|
11
11
|
export { config } from "./config.js";
|
|
12
12
|
export type { NodeLLMConfig } from "./config.js";
|
|
13
13
|
export { providerRegistry } from "./providers/registry.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;AACxB,OAAO,
|
|
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;AACxB,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,eAAe,EAChB,MAAM,UAAU,CAAC;AAClB,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;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACf,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export * from "./chat/Chat.js";
|
|
|
7
7
|
export * from "./chat/ChatStream.js";
|
|
8
8
|
export * from "./streaming/Stream.js";
|
|
9
9
|
export { z } from "zod";
|
|
10
|
-
export { NodeLLM, Transcription, Moderation, Embedding } from "./llm.js";
|
|
10
|
+
export { NodeLLM, LegacyNodeLLM, createLLM, NodeLLMCore, Transcription, Moderation, Embedding, ModelRegistry, PricingRegistry } from "./llm.js";
|
|
11
11
|
export { config } from "./config.js";
|
|
12
12
|
export { providerRegistry } from "./providers/registry.js";
|
|
13
13
|
export { Schema } from "./schema/Schema.js";
|
package/dist/llm.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { ChatOptions } from "./chat/ChatOptions.js";
|
|
|
3
3
|
import { Provider, ModelInfo } from "./providers/Provider.js";
|
|
4
4
|
import { GeneratedImage } from "./image/GeneratedImage.js";
|
|
5
5
|
import { ModelRegistry } from "./models/ModelRegistry.js";
|
|
6
|
+
import { PricingRegistry } from "./models/PricingRegistry.js";
|
|
6
7
|
import { Transcription } from "./transcription/Transcription.js";
|
|
7
8
|
import { Moderation } from "./moderation/Moderation.js";
|
|
8
9
|
import { Embedding } from "./embedding/Embedding.js";
|
|
@@ -18,57 +19,35 @@ type LLMConfig = {
|
|
|
18
19
|
defaultTranscriptionModel?: string;
|
|
19
20
|
defaultModerationModel?: string;
|
|
20
21
|
defaultEmbeddingModel?: string;
|
|
21
|
-
} & Partial<NodeLLMConfig>;
|
|
22
|
+
} & Omit<Partial<NodeLLMConfig>, "provider">;
|
|
22
23
|
export declare class NodeLLMCore {
|
|
23
|
-
readonly models: typeof ModelRegistry;
|
|
24
24
|
readonly config: NodeLLMConfig;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
readonly provider?: Provider | undefined;
|
|
26
|
+
readonly retry: Required<RetryOptions>;
|
|
27
|
+
private readonly defaults;
|
|
28
|
+
readonly models: typeof ModelRegistry;
|
|
29
|
+
readonly pricing: typeof PricingRegistry;
|
|
30
|
+
constructor(config: NodeLLMConfig, provider?: Provider | undefined, retry?: Required<RetryOptions>, defaults?: {
|
|
31
|
+
chat?: string;
|
|
32
|
+
transcription?: string;
|
|
33
|
+
moderation?: string;
|
|
34
|
+
embedding?: string;
|
|
35
|
+
});
|
|
36
|
+
get defaultChatModel(): string | undefined;
|
|
37
|
+
get defaultTranscriptionModel(): string | undefined;
|
|
38
|
+
get defaultModerationModel(): string | undefined;
|
|
39
|
+
get defaultEmbeddingModel(): string | undefined;
|
|
35
40
|
/**
|
|
36
41
|
* Returns a scoped LLM instance configured for a specific provider.
|
|
37
|
-
* This
|
|
38
|
-
* on the main NodeLLM singleton.
|
|
39
|
-
*
|
|
40
|
-
* @param providerName - The provider to use (e.g., "openai", "anthropic")
|
|
41
|
-
* @param scopedConfig - Optional configuration overrides for this scoped instance
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```ts
|
|
45
|
-
* const openai = NodeLLM.withProvider("openai");
|
|
46
|
-
* const anthropic = NodeLLM.withProvider("anthropic");
|
|
47
|
-
*
|
|
48
|
-
* // These can now run in parallel without race conditions
|
|
49
|
-
* await Promise.all([
|
|
50
|
-
* openai.chat("gpt-4o").ask(prompt),
|
|
51
|
-
* anthropic.chat("claude-3-5-sonnet").ask(prompt),
|
|
52
|
-
* ]);
|
|
53
|
-
* ```
|
|
54
|
-
*
|
|
55
|
-
* @example With scoped credentials
|
|
56
|
-
* ```ts
|
|
57
|
-
* const customAnthropic = NodeLLM.withProvider("anthropic", {
|
|
58
|
-
* anthropicApiKey: "sk-ant-custom-key"
|
|
59
|
-
* });
|
|
60
|
-
* ```
|
|
42
|
+
* This returns a NEW immutable instance.
|
|
61
43
|
*/
|
|
62
44
|
withProvider(providerName: string, scopedConfig?: Partial<NodeLLMConfig>): NodeLLMCore;
|
|
63
45
|
/**
|
|
64
46
|
* Register a custom LLM provider.
|
|
65
|
-
* This
|
|
66
|
-
*
|
|
67
|
-
* @param name - Unique identifier for the provider
|
|
68
|
-
* @param factory - A function that returns a Provider instance
|
|
47
|
+
* Note: This modifies the global provider registry.
|
|
69
48
|
*/
|
|
70
49
|
registerProvider(name: string, factory: () => Provider): void;
|
|
71
|
-
|
|
50
|
+
getRetryConfig(): Required<RetryOptions>;
|
|
72
51
|
private ensureProviderSupport;
|
|
73
52
|
chat(model?: string, options?: ChatOptions): Chat;
|
|
74
53
|
listModels(): Promise<ModelInfo[]>;
|
|
@@ -88,10 +67,6 @@ export declare class NodeLLMCore {
|
|
|
88
67
|
assumeModelExists?: boolean;
|
|
89
68
|
requestTimeout?: number;
|
|
90
69
|
}): Promise<Transcription>;
|
|
91
|
-
get defaultTranscriptionModel(): string | undefined;
|
|
92
|
-
get defaultModerationModel(): string | undefined;
|
|
93
|
-
get defaultEmbeddingModel(): string | undefined;
|
|
94
|
-
getRetryConfig(): Required<RetryOptions>;
|
|
95
70
|
moderate(input: string | string[], options?: {
|
|
96
71
|
model?: string;
|
|
97
72
|
assumeModelExists?: boolean;
|
|
@@ -104,6 +79,29 @@ export declare class NodeLLMCore {
|
|
|
104
79
|
requestTimeout?: number;
|
|
105
80
|
}): Promise<Embedding>;
|
|
106
81
|
}
|
|
107
|
-
export { Transcription, Moderation, Embedding };
|
|
82
|
+
export { Transcription, Moderation, Embedding, ModelRegistry, PricingRegistry };
|
|
83
|
+
/**
|
|
84
|
+
* Creates a new immutable LLM instance.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createLLM(options?: LLMConfig): NodeLLMCore;
|
|
87
|
+
/**
|
|
88
|
+
* The global, immutable NodeLLM instance.
|
|
89
|
+
*
|
|
90
|
+
* DESIGN: Lazy Initialization
|
|
91
|
+
* To support 'import "dotenv/config"' patterns in ESM, this instance
|
|
92
|
+
* does NOT snapshot the environment until its first property access.
|
|
93
|
+
* Once accessed, it is frozen and becomes a stable, immutable contract.
|
|
94
|
+
*
|
|
95
|
+
* @see ARCHITECTURE.md for full contract details
|
|
96
|
+
*/
|
|
108
97
|
export declare const NodeLLM: NodeLLMCore;
|
|
98
|
+
/**
|
|
99
|
+
* LEGACY BOOTSTRAPPER (DEPRECATED)
|
|
100
|
+
*
|
|
101
|
+
* Provided to ease migration from the mutable singleton pattern.
|
|
102
|
+
* configure() will warn and no-op, as the global instance is now immutable.
|
|
103
|
+
*/
|
|
104
|
+
export declare const LegacyNodeLLM: {
|
|
105
|
+
configure(_options: LLMConfig | ((config: NodeLLMConfig) => void)): void;
|
|
106
|
+
};
|
|
109
107
|
//# sourceMappingURL=llm.d.ts.map
|