@node-llm/core 1.5.4 → 1.6.1
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 +76 -43
- package/dist/aliases.d.ts +4 -0
- package/dist/aliases.d.ts.map +1 -1
- package/dist/aliases.js +4 -0
- package/dist/chat/Chat.d.ts +28 -17
- package/dist/chat/Chat.d.ts.map +1 -1
- package/dist/chat/Chat.js +75 -42
- package/dist/chat/ChatOptions.d.ts +8 -9
- package/dist/chat/ChatOptions.d.ts.map +1 -1
- package/dist/chat/ChatResponse.d.ts +26 -1
- package/dist/chat/ChatResponse.d.ts.map +1 -1
- package/dist/chat/ChatResponse.js +54 -8
- package/dist/chat/ChatStream.d.ts.map +1 -1
- package/dist/chat/ChatStream.js +14 -21
- 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 +8 -8
- 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 -15
- package/dist/chat/Validation.d.ts.map +1 -1
- package/dist/chat/Validation.js +9 -3
- 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 +201 -130
- package/dist/model_aliases.d.ts.map +1 -1
- package/dist/models/ModelRegistry.d.ts.map +1 -1
- package/dist/models/ModelRegistry.js +13 -10
- package/dist/models/PricingRegistry.d.ts +31 -0
- package/dist/models/PricingRegistry.d.ts.map +1 -0
- package/dist/models/PricingRegistry.js +109 -0
- package/dist/models/models.d.ts.map +1 -1
- package/dist/models/models.js +230 -138
- 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 +7 -7
- 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.d.ts.map +1 -1
- 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 -15
- 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 +23 -13
- package/dist/utils/FileLoader.d.ts.map +1 -1
- package/dist/utils/FileLoader.js +25 -4
- package/dist/utils/audio.js +1 -1
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +3 -2
- 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
|
@@ -3,6 +3,7 @@ import { ToolResolvable } from "./Tool.js";
|
|
|
3
3
|
import { Schema } from "../schema/Schema.js";
|
|
4
4
|
import { ChatResponseString } from "./ChatResponse.js";
|
|
5
5
|
import { ToolExecutionMode } from "../constants.js";
|
|
6
|
+
import { ResponseFormat } from "../providers/Provider.js";
|
|
6
7
|
export interface ChatOptions {
|
|
7
8
|
systemPrompt?: string;
|
|
8
9
|
messages?: Message[];
|
|
@@ -10,22 +11,20 @@ export interface ChatOptions {
|
|
|
10
11
|
temperature?: number;
|
|
11
12
|
maxTokens?: number;
|
|
12
13
|
onNewMessage?: () => void;
|
|
13
|
-
onEndMessage?: (message:
|
|
14
|
-
onToolCallStart?: (toolCall:
|
|
15
|
-
onToolCallEnd?: (toolCall:
|
|
16
|
-
onToolCallError?: (toolCall:
|
|
14
|
+
onEndMessage?: (message: ChatResponseString) => void;
|
|
15
|
+
onToolCallStart?: (toolCall: unknown) => void;
|
|
16
|
+
onToolCallEnd?: (toolCall: unknown, result: unknown) => void;
|
|
17
|
+
onToolCallError?: (toolCall: unknown, error: Error) => "STOP" | "CONTINUE" | "RETRY" | void | Promise<"STOP" | "CONTINUE" | "RETRY" | void>;
|
|
17
18
|
headers?: Record<string, string>;
|
|
18
19
|
schema?: Schema;
|
|
19
|
-
responseFormat?:
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
params?: Record<string, any>;
|
|
20
|
+
responseFormat?: ResponseFormat;
|
|
21
|
+
params?: Record<string, unknown>;
|
|
23
22
|
assumeModelExists?: boolean;
|
|
24
23
|
provider?: string;
|
|
25
24
|
maxToolCalls?: number;
|
|
26
25
|
requestTimeout?: number;
|
|
27
26
|
toolExecution?: ToolExecutionMode;
|
|
28
|
-
onConfirmToolCall?: (toolCall:
|
|
27
|
+
onConfirmToolCall?: (toolCall: unknown) => Promise<boolean> | boolean;
|
|
29
28
|
onBeforeRequest?: (messages: Message[]) => Promise<Message[] | void>;
|
|
30
29
|
onAfterResponse?: (response: ChatResponseString) => Promise<ChatResponseString | void>;
|
|
31
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatOptions.d.ts","sourceRoot":"","sources":["../../src/chat/ChatOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"ChatOptions.d.ts","sourceRoot":"","sources":["../../src/chat/ChatOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACrD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7D,eAAe,CAAC,EAAE,CAChB,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,KAAK,KACT,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACtE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACrE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;CACxF"}
|
|
@@ -18,8 +18,33 @@ export declare class ChatResponseString extends String {
|
|
|
18
18
|
get cost(): number | undefined;
|
|
19
19
|
get input_cost(): number | undefined;
|
|
20
20
|
get output_cost(): number | undefined;
|
|
21
|
+
get inputTokens(): number;
|
|
22
|
+
get outputTokens(): number;
|
|
23
|
+
get totalTokens(): number;
|
|
24
|
+
get cachedTokens(): number | undefined;
|
|
21
25
|
get content(): string;
|
|
22
26
|
get model_id(): string;
|
|
27
|
+
/**
|
|
28
|
+
* Returns a serializable object containing all response metadata.
|
|
29
|
+
* Perfect for database persistence.
|
|
30
|
+
*/
|
|
31
|
+
get meta(): {
|
|
32
|
+
usage: Usage;
|
|
33
|
+
model: string;
|
|
34
|
+
provider: string;
|
|
35
|
+
reasoning: string | null | undefined;
|
|
36
|
+
tool_calls: ToolCall[] | undefined;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Alias for meta (backwards compatibility)
|
|
40
|
+
*/
|
|
41
|
+
get raw(): {
|
|
42
|
+
usage: Usage;
|
|
43
|
+
model: string;
|
|
44
|
+
provider: string;
|
|
45
|
+
reasoning: string | null | undefined;
|
|
46
|
+
tool_calls: ToolCall[] | undefined;
|
|
47
|
+
};
|
|
23
48
|
toString(): string;
|
|
24
49
|
/**
|
|
25
50
|
* Return a new ChatResponseString with modified content but preserved metadata.
|
|
@@ -29,6 +54,6 @@ export declare class ChatResponseString extends String {
|
|
|
29
54
|
* Attempt to parse the content as JSON.
|
|
30
55
|
* Returns the parsed object or null if parsing fails.
|
|
31
56
|
*/
|
|
32
|
-
get parsed():
|
|
57
|
+
get parsed(): unknown;
|
|
33
58
|
}
|
|
34
59
|
//# sourceMappingURL=ChatResponse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatResponse.d.ts","sourceRoot":"","sources":["../../src/chat/ChatResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,MAAM;aAG1B,KAAK,EAAE,KAAK;aACZ,KAAK,EAAE,MAAM;aACb,QAAQ,EAAE,MAAM;aAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;aACzB,UAAU,CAAC,EAAE,QAAQ,EAAE;gBALvC,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,YAAA,EACzB,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAA;IAKzC,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"ChatResponse.d.ts","sourceRoot":"","sources":["../../src/chat/ChatResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,MAAM;aAG1B,KAAK,EAAE,KAAK;aACZ,KAAK,EAAE,MAAM;aACb,QAAQ,EAAE,MAAM;aAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;aACzB,UAAU,CAAC,EAAE,QAAQ,EAAE;gBALvC,OAAO,EAAE,MAAM,EACC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,YAAA,EACzB,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAA;IAKzC,IAAI,YAAY,WAEf;IACD,IAAI,aAAa,WAEhB;IACD,IAAI,YAAY,WAEf;IACD,IAAI,aAAa,uBAEhB;IACD,IAAI,IAAI,uBAEP;IACD,IAAI,UAAU,uBAEb;IACD,IAAI,WAAW,uBAEd;IAGD,IAAI,WAAW,WAEd;IACD,IAAI,YAAY,WAEf;IACD,IAAI,WAAW,WAEd;IACD,IAAI,YAAY,uBAEf;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;OAGG;IACH,IAAI,IAAI;;;;;;MAQP;IAED;;OAEG;IACH,IAAI,GAAG;;;;;;MAEN;IAED,QAAQ;IAIR;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB;IAWnD;;;OAGG;IACH,IAAI,MAAM,IAAI,OAAO,CAMpB;CACF"}
|
|
@@ -16,19 +16,65 @@ export class ChatResponseString extends String {
|
|
|
16
16
|
this.reasoning = reasoning;
|
|
17
17
|
this.tool_calls = tool_calls;
|
|
18
18
|
}
|
|
19
|
-
get input_tokens() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
get
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
get
|
|
19
|
+
get input_tokens() {
|
|
20
|
+
return this.usage.input_tokens;
|
|
21
|
+
}
|
|
22
|
+
get output_tokens() {
|
|
23
|
+
return this.usage.output_tokens;
|
|
24
|
+
}
|
|
25
|
+
get total_tokens() {
|
|
26
|
+
return this.usage.total_tokens;
|
|
27
|
+
}
|
|
28
|
+
get cached_tokens() {
|
|
29
|
+
return this.usage.cached_tokens;
|
|
30
|
+
}
|
|
31
|
+
get cost() {
|
|
32
|
+
return this.usage.cost;
|
|
33
|
+
}
|
|
34
|
+
get input_cost() {
|
|
35
|
+
return this.usage.input_cost;
|
|
36
|
+
}
|
|
37
|
+
get output_cost() {
|
|
38
|
+
return this.usage.output_cost;
|
|
39
|
+
}
|
|
40
|
+
// --- CamelCase Aliases (for Developer Delight) ---
|
|
41
|
+
get inputTokens() {
|
|
42
|
+
return this.input_tokens;
|
|
43
|
+
}
|
|
44
|
+
get outputTokens() {
|
|
45
|
+
return this.output_tokens;
|
|
46
|
+
}
|
|
47
|
+
get totalTokens() {
|
|
48
|
+
return this.total_tokens;
|
|
49
|
+
}
|
|
50
|
+
get cachedTokens() {
|
|
51
|
+
return this.cached_tokens;
|
|
52
|
+
}
|
|
26
53
|
get content() {
|
|
27
54
|
return this.valueOf();
|
|
28
55
|
}
|
|
29
56
|
get model_id() {
|
|
30
57
|
return this.model;
|
|
31
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Returns a serializable object containing all response metadata.
|
|
61
|
+
* Perfect for database persistence.
|
|
62
|
+
*/
|
|
63
|
+
get meta() {
|
|
64
|
+
return {
|
|
65
|
+
usage: this.usage,
|
|
66
|
+
model: this.model,
|
|
67
|
+
provider: this.provider,
|
|
68
|
+
reasoning: this.reasoning,
|
|
69
|
+
tool_calls: this.tool_calls
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Alias for meta (backwards compatibility)
|
|
74
|
+
*/
|
|
75
|
+
get raw() {
|
|
76
|
+
return this.meta;
|
|
77
|
+
}
|
|
32
78
|
toString() {
|
|
33
79
|
return this.valueOf();
|
|
34
80
|
}
|
|
@@ -46,7 +92,7 @@ export class ChatResponseString extends String {
|
|
|
46
92
|
try {
|
|
47
93
|
return JSON.parse(this.valueOf());
|
|
48
94
|
}
|
|
49
|
-
catch
|
|
95
|
+
catch {
|
|
50
96
|
return null;
|
|
51
97
|
}
|
|
52
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatStream.d.ts","sourceRoot":"","sources":["../../src/chat/ChatStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,
|
|
1
|
+
{"version":3,"file":"ChatStream.d.ts","sourceRoot":"","sources":["../../src/chat/ChatStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EACL,WAAW,EAIZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAS,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AASvC;;;GAGG;AACH,qBAAa,UAAU;IAKnB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAY;IAC5B,OAAO,CAAC,cAAc,CAAY;gBAGf,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,EAC1C,QAAQ,CAAC,EAAE,OAAO,EAAE,EACpB,cAAc,CAAC,EAAE,OAAO,EAAE;IA6B5B,IAAI,OAAO,IAAI,SAAS,OAAO,EAAE,CAEhC;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAAC,SAAS,CAAC;CA4PrF"}
|
package/dist/chat/ChatStream.js
CHANGED
|
@@ -28,7 +28,7 @@ export class ChatStream {
|
|
|
28
28
|
if (options.systemPrompt) {
|
|
29
29
|
this.systemMessages.push({
|
|
30
30
|
role: "system",
|
|
31
|
-
content: options.systemPrompt
|
|
31
|
+
content: options.systemPrompt
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
if (options.messages) {
|
|
@@ -84,7 +84,7 @@ export class ChatStream {
|
|
|
84
84
|
name: options.schema.definition.name,
|
|
85
85
|
description: options.schema.definition.description,
|
|
86
86
|
strict: options.schema.definition.strict ?? true,
|
|
87
|
-
schema: jsonSchema
|
|
87
|
+
schema: jsonSchema
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
90
|
}
|
|
@@ -94,7 +94,7 @@ export class ChatStream {
|
|
|
94
94
|
let isFirst = true;
|
|
95
95
|
const maxToolCalls = options.maxToolCalls ?? 5;
|
|
96
96
|
let stepCount = 0;
|
|
97
|
-
|
|
97
|
+
const totalUsage = { input_tokens: 0, output_tokens: 0, total_tokens: 0 };
|
|
98
98
|
const trackUsage = (u) => {
|
|
99
99
|
if (u) {
|
|
100
100
|
totalUsage.input_tokens += u.input_tokens;
|
|
@@ -132,7 +132,7 @@ export class ChatStream {
|
|
|
132
132
|
headers: options.headers,
|
|
133
133
|
requestTimeout: options.requestTimeout ?? config.requestTimeout,
|
|
134
134
|
signal: abortController.signal,
|
|
135
|
-
...options.params
|
|
135
|
+
...options.params
|
|
136
136
|
})) {
|
|
137
137
|
if (isFirst) {
|
|
138
138
|
if (options.onNewMessage)
|
|
@@ -182,41 +182,34 @@ export class ChatStream {
|
|
|
182
182
|
if (options.toolExecution === ToolExecutionMode.CONFIRM) {
|
|
183
183
|
const approved = await ToolHandler.requestToolConfirmation(toolCall, options.onConfirmToolCall);
|
|
184
184
|
if (!approved) {
|
|
185
|
-
messages.push(
|
|
186
|
-
role: "tool",
|
|
187
|
-
tool_call_id: toolCall.id,
|
|
188
|
-
content: "Action cancelled by user.",
|
|
189
|
-
});
|
|
185
|
+
messages.push(provider.formatToolResultMessage(toolCall.id, "Action cancelled by user."));
|
|
190
186
|
continue;
|
|
191
187
|
}
|
|
192
188
|
}
|
|
193
189
|
try {
|
|
194
190
|
const toolResult = await ToolHandler.execute(toolCall, options.tools, options.onToolCallStart, options.onToolCallEnd);
|
|
195
|
-
messages.push(toolResult);
|
|
191
|
+
messages.push(provider.formatToolResultMessage(toolResult.tool_call_id, toolResult.content));
|
|
196
192
|
}
|
|
197
193
|
catch (error) {
|
|
198
|
-
const
|
|
199
|
-
|
|
194
|
+
const err = error;
|
|
195
|
+
const directive = await options.onToolCallError?.(toolCall, err);
|
|
196
|
+
if (directive === "STOP") {
|
|
200
197
|
throw error;
|
|
201
198
|
}
|
|
202
|
-
messages.push({
|
|
203
|
-
|
|
204
|
-
tool_call_id: toolCall.id,
|
|
205
|
-
content: `Fatal error executing tool '${toolCall.function.name}': ${error.message}`,
|
|
206
|
-
});
|
|
207
|
-
if (directive === 'CONTINUE') {
|
|
199
|
+
messages.push(provider.formatToolResultMessage(toolCall.id, `Fatal error executing tool '${toolCall.function.name}': ${err.message}`, { isError: true }));
|
|
200
|
+
if (directive === "CONTINUE") {
|
|
208
201
|
continue;
|
|
209
202
|
}
|
|
210
|
-
const isFatal =
|
|
203
|
+
const isFatal = err.fatal === true || err.status === 401 || err.status === 403;
|
|
211
204
|
if (isFatal) {
|
|
212
|
-
throw
|
|
205
|
+
throw err;
|
|
213
206
|
}
|
|
214
207
|
logger.error(`Tool execution failed for '${toolCall.function.name}':`, error);
|
|
215
208
|
}
|
|
216
209
|
}
|
|
217
210
|
}
|
|
218
211
|
catch (error) {
|
|
219
|
-
if (error instanceof Error && error.name ===
|
|
212
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
220
213
|
// Aborted
|
|
221
214
|
}
|
|
222
215
|
throw error;
|
package/dist/chat/Content.d.ts
CHANGED
|
@@ -21,12 +21,12 @@ export type ContentPart = {
|
|
|
21
21
|
export declare const isBinaryContent: (part: ContentPart) => boolean;
|
|
22
22
|
export declare const isTextContent: (part: ContentPart) => boolean;
|
|
23
23
|
export declare const partitionContentParts: (parts: ContentPart[]) => {
|
|
24
|
-
textParts:
|
|
24
|
+
textParts: {
|
|
25
25
|
type: "text";
|
|
26
26
|
text: string;
|
|
27
|
-
}
|
|
27
|
+
}[];
|
|
28
28
|
binaryParts: ContentPart[];
|
|
29
29
|
};
|
|
30
30
|
export declare const formatMultimodalContent: (content: string | ContentPart[], parts: ContentPart[]) => MessageContent;
|
|
31
|
-
export type MessageContent = string |
|
|
31
|
+
export type MessageContent = string | string | ContentPart[];
|
|
32
32
|
//# sourceMappingURL=Content.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../src/chat/Content.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEtD,eAAO,MAAM,eAAe,GAAI,MAAM,WAAW,KAAG,OACmC,CAAC;AAExF,eAAO,MAAM,aAAa,GAAI,MAAM,WAAW,KAAG,
|
|
1
|
+
{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../src/chat/Content.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEtD,eAAO,MAAM,eAAe,GAAI,MAAM,WAAW,KAAG,OACmC,CAAC;AAExF,eAAO,MAAM,aAAa,GAAI,MAAM,WAAW,KAAG,OAA+B,CAAC;AAElF,eAAO,MAAM,qBAAqB,GAAI,OAAO,WAAW,EAAE;eAEZ;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;;CAG7E,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,GAAG,WAAW,EAAE,EAC/B,OAAO,WAAW,EAAE,KACnB,cAwBF,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC"}
|
package/dist/chat/Content.js
CHANGED
|
@@ -9,9 +9,9 @@ export const partitionContentParts = (parts) => {
|
|
|
9
9
|
export const formatMultimodalContent = (content, parts) => {
|
|
10
10
|
const { textParts, binaryParts } = partitionContentParts(parts);
|
|
11
11
|
let fullText = typeof content === "string" ? content : "";
|
|
12
|
-
|
|
12
|
+
const currentParts = typeof content === "string" ? [] : content;
|
|
13
13
|
if (textParts.length > 0) {
|
|
14
|
-
const additionalText = textParts.map(f => f.text).join("\n");
|
|
14
|
+
const additionalText = textParts.map((f) => f.text).join("\n");
|
|
15
15
|
if (typeof content === "string") {
|
|
16
16
|
fullText += "\n" + additionalText;
|
|
17
17
|
}
|
|
@@ -21,10 +21,7 @@ export const formatMultimodalContent = (content, parts) => {
|
|
|
21
21
|
}
|
|
22
22
|
if (binaryParts.length > 0) {
|
|
23
23
|
if (typeof content === "string") {
|
|
24
|
-
return [
|
|
25
|
-
{ type: "text", text: fullText },
|
|
26
|
-
...binaryParts
|
|
27
|
-
];
|
|
24
|
+
return [{ type: "text", text: fullText }, ...binaryParts];
|
|
28
25
|
}
|
|
29
26
|
else {
|
|
30
27
|
return [...currentParts, ...binaryParts];
|
package/dist/chat/Message.d.ts
CHANGED
|
@@ -2,13 +2,15 @@ import { Role } from "./Role.js";
|
|
|
2
2
|
import { ToolCall } from "./Tool.js";
|
|
3
3
|
import { MessageContent } from "./Content.js";
|
|
4
4
|
import { Usage } from "../providers/Provider.js";
|
|
5
|
+
import { ChatResponseString } from "./ChatResponse.js";
|
|
5
6
|
export interface Message {
|
|
6
7
|
role: Role;
|
|
7
|
-
content: MessageContent | null;
|
|
8
|
+
content: MessageContent | ChatResponseString | null;
|
|
8
9
|
tool_calls?: ToolCall[];
|
|
9
10
|
tool_call_id?: string;
|
|
10
11
|
name?: string;
|
|
11
12
|
usage?: Usage;
|
|
12
13
|
reasoning?: string;
|
|
14
|
+
isError?: boolean;
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=Message.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/chat/Message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"Message.d.ts","sourceRoot":"","sources":["../../src/chat/Message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,cAAc,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACpD,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
package/dist/chat/Role.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Role.d.ts","sourceRoot":"","sources":["../../src/chat/Role.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"Role.d.ts","sourceRoot":"","sources":["../../src/chat/Role.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC"}
|
package/dist/chat/Tool.d.ts
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
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
30
|
* The name of the tool (must match [a-zA-Z0-9_-]+).
|
|
31
31
|
*/
|
|
@@ -38,12 +38,12 @@ export declare abstract class Tool<T = any> {
|
|
|
38
38
|
* Parameters the tool accepts.
|
|
39
39
|
* Can be a Zod object (for auto-schema + type safety) or a raw JSON Schema.
|
|
40
40
|
*/
|
|
41
|
-
abstract schema: z.ZodObject<
|
|
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;;OAEG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,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,21 +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
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
throw error;
|
|
36
|
-
}
|
|
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
|
+
};
|
|
37
32
|
}
|
|
38
33
|
else {
|
|
39
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;AAGpD,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,qBAAa,aAAa;IACxB,MAAM,CAAC,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
|
@@ -3,7 +3,9 @@ export class ChatValidator {
|
|
|
3
3
|
static validateVision(provider, model, hasBinary, options) {
|
|
4
4
|
if (!hasBinary)
|
|
5
5
|
return;
|
|
6
|
-
if (!options.assumeModelExists &&
|
|
6
|
+
if (!options.assumeModelExists &&
|
|
7
|
+
provider.capabilities &&
|
|
8
|
+
!provider.capabilities.supportsVision(model)) {
|
|
7
9
|
throw new Error(`Model ${model} does not support vision/binary files.`);
|
|
8
10
|
}
|
|
9
11
|
if (options.assumeModelExists) {
|
|
@@ -13,7 +15,9 @@ export class ChatValidator {
|
|
|
13
15
|
static validateTools(provider, model, hasTools, options) {
|
|
14
16
|
if (!hasTools)
|
|
15
17
|
return;
|
|
16
|
-
if (!options.assumeModelExists &&
|
|
18
|
+
if (!options.assumeModelExists &&
|
|
19
|
+
provider.capabilities &&
|
|
20
|
+
!provider.capabilities.supportsTools(model)) {
|
|
17
21
|
throw new Error(`Model ${model} does not support tool calling.`);
|
|
18
22
|
}
|
|
19
23
|
if (options.assumeModelExists) {
|
|
@@ -23,7 +27,9 @@ export class ChatValidator {
|
|
|
23
27
|
static validateStructuredOutput(provider, model, hasSchema, options) {
|
|
24
28
|
if (!hasSchema)
|
|
25
29
|
return;
|
|
26
|
-
if (!options.assumeModelExists &&
|
|
30
|
+
if (!options.assumeModelExists &&
|
|
31
|
+
provider.capabilities &&
|
|
32
|
+
!provider.capabilities.supportsStructuredOutput(model)) {
|
|
27
33
|
throw new Error(`Model ${model} does not support structured output.`);
|
|
28
34
|
}
|
|
29
35
|
if (options.assumeModelExists) {
|
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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"}
|