@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.
Files changed (188) hide show
  1. package/README.md +76 -43
  2. package/dist/aliases.d.ts +4 -0
  3. package/dist/aliases.d.ts.map +1 -1
  4. package/dist/aliases.js +4 -0
  5. package/dist/chat/Chat.d.ts +28 -17
  6. package/dist/chat/Chat.d.ts.map +1 -1
  7. package/dist/chat/Chat.js +75 -42
  8. package/dist/chat/ChatOptions.d.ts +8 -9
  9. package/dist/chat/ChatOptions.d.ts.map +1 -1
  10. package/dist/chat/ChatResponse.d.ts +26 -1
  11. package/dist/chat/ChatResponse.d.ts.map +1 -1
  12. package/dist/chat/ChatResponse.js +54 -8
  13. package/dist/chat/ChatStream.d.ts.map +1 -1
  14. package/dist/chat/ChatStream.js +14 -21
  15. package/dist/chat/Content.d.ts +3 -3
  16. package/dist/chat/Content.d.ts.map +1 -1
  17. package/dist/chat/Content.js +3 -6
  18. package/dist/chat/Message.d.ts +3 -1
  19. package/dist/chat/Message.d.ts.map +1 -1
  20. package/dist/chat/Role.d.ts.map +1 -1
  21. package/dist/chat/Tool.d.ts +8 -8
  22. package/dist/chat/Tool.d.ts.map +1 -1
  23. package/dist/chat/Tool.js +9 -7
  24. package/dist/chat/ToolHandler.d.ts +4 -3
  25. package/dist/chat/ToolHandler.d.ts.map +1 -1
  26. package/dist/chat/ToolHandler.js +10 -15
  27. package/dist/chat/Validation.d.ts.map +1 -1
  28. package/dist/chat/Validation.js +9 -3
  29. package/dist/config.d.ts +4 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +80 -25
  32. package/dist/constants.js +1 -1
  33. package/dist/errors/index.d.ts +21 -7
  34. package/dist/errors/index.d.ts.map +1 -1
  35. package/dist/errors/index.js +14 -0
  36. package/dist/index.d.ts +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -1
  39. package/dist/llm.d.ts +44 -46
  40. package/dist/llm.d.ts.map +1 -1
  41. package/dist/llm.js +201 -130
  42. package/dist/model_aliases.d.ts.map +1 -1
  43. package/dist/models/ModelRegistry.d.ts.map +1 -1
  44. package/dist/models/ModelRegistry.js +13 -10
  45. package/dist/models/PricingRegistry.d.ts +31 -0
  46. package/dist/models/PricingRegistry.d.ts.map +1 -0
  47. package/dist/models/PricingRegistry.js +109 -0
  48. package/dist/models/models.d.ts.map +1 -1
  49. package/dist/models/models.js +230 -138
  50. package/dist/models/types.d.ts +37 -34
  51. package/dist/models/types.d.ts.map +1 -1
  52. package/dist/moderation/Moderation.d.ts.map +1 -1
  53. package/dist/moderation/Moderation.js +15 -5
  54. package/dist/providers/BaseProvider.d.ts +12 -8
  55. package/dist/providers/BaseProvider.d.ts.map +1 -1
  56. package/dist/providers/BaseProvider.js +17 -7
  57. package/dist/providers/Provider.d.ts +20 -5
  58. package/dist/providers/Provider.d.ts.map +1 -1
  59. package/dist/providers/anthropic/AnthropicProvider.d.ts +1 -1
  60. package/dist/providers/anthropic/AnthropicProvider.d.ts.map +1 -1
  61. package/dist/providers/anthropic/AnthropicProvider.js +3 -3
  62. package/dist/providers/anthropic/Capabilities.d.ts +2 -1
  63. package/dist/providers/anthropic/Capabilities.d.ts.map +1 -1
  64. package/dist/providers/anthropic/Capabilities.js +3 -20
  65. package/dist/providers/anthropic/Chat.d.ts.map +1 -1
  66. package/dist/providers/anthropic/Chat.js +27 -17
  67. package/dist/providers/anthropic/Errors.d.ts.map +1 -1
  68. package/dist/providers/anthropic/Errors.js +5 -2
  69. package/dist/providers/anthropic/Models.d.ts.map +1 -1
  70. package/dist/providers/anthropic/Models.js +6 -6
  71. package/dist/providers/anthropic/Streaming.d.ts.map +1 -1
  72. package/dist/providers/anthropic/Streaming.js +17 -12
  73. package/dist/providers/anthropic/Utils.js +8 -5
  74. package/dist/providers/anthropic/index.d.ts.map +1 -1
  75. package/dist/providers/anthropic/index.js +4 -3
  76. package/dist/providers/anthropic/types.d.ts +11 -4
  77. package/dist/providers/anthropic/types.d.ts.map +1 -1
  78. package/dist/providers/deepseek/Capabilities.d.ts +7 -5
  79. package/dist/providers/deepseek/Capabilities.d.ts.map +1 -1
  80. package/dist/providers/deepseek/Capabilities.js +9 -5
  81. package/dist/providers/deepseek/Chat.d.ts.map +1 -1
  82. package/dist/providers/deepseek/Chat.js +10 -9
  83. package/dist/providers/deepseek/DeepSeekProvider.d.ts +1 -1
  84. package/dist/providers/deepseek/DeepSeekProvider.d.ts.map +1 -1
  85. package/dist/providers/deepseek/DeepSeekProvider.js +4 -4
  86. package/dist/providers/deepseek/Models.d.ts.map +1 -1
  87. package/dist/providers/deepseek/Models.js +7 -7
  88. package/dist/providers/deepseek/Streaming.d.ts.map +1 -1
  89. package/dist/providers/deepseek/Streaming.js +11 -8
  90. package/dist/providers/deepseek/index.d.ts.map +1 -1
  91. package/dist/providers/deepseek/index.js +5 -4
  92. package/dist/providers/gemini/Capabilities.d.ts +5 -33
  93. package/dist/providers/gemini/Capabilities.d.ts.map +1 -1
  94. package/dist/providers/gemini/Capabilities.js +7 -30
  95. package/dist/providers/gemini/Chat.d.ts.map +1 -1
  96. package/dist/providers/gemini/Chat.js +24 -19
  97. package/dist/providers/gemini/ChatUtils.d.ts.map +1 -1
  98. package/dist/providers/gemini/ChatUtils.js +10 -10
  99. package/dist/providers/gemini/Embeddings.d.ts.map +1 -1
  100. package/dist/providers/gemini/Embeddings.js +2 -2
  101. package/dist/providers/gemini/Errors.d.ts.map +1 -1
  102. package/dist/providers/gemini/Errors.js +5 -2
  103. package/dist/providers/gemini/GeminiProvider.d.ts +1 -1
  104. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -1
  105. package/dist/providers/gemini/GeminiProvider.js +3 -3
  106. package/dist/providers/gemini/Image.d.ts.map +1 -1
  107. package/dist/providers/gemini/Image.js +7 -7
  108. package/dist/providers/gemini/Models.d.ts.map +1 -1
  109. package/dist/providers/gemini/Models.js +6 -6
  110. package/dist/providers/gemini/Streaming.d.ts.map +1 -1
  111. package/dist/providers/gemini/Streaming.js +18 -14
  112. package/dist/providers/gemini/Transcription.d.ts.map +1 -1
  113. package/dist/providers/gemini/Transcription.js +11 -11
  114. package/dist/providers/gemini/index.d.ts +1 -1
  115. package/dist/providers/gemini/index.d.ts.map +1 -1
  116. package/dist/providers/gemini/index.js +5 -4
  117. package/dist/providers/gemini/types.d.ts +4 -4
  118. package/dist/providers/gemini/types.d.ts.map +1 -1
  119. package/dist/providers/ollama/Capabilities.d.ts.map +1 -1
  120. package/dist/providers/ollama/Capabilities.js +6 -2
  121. package/dist/providers/ollama/Models.d.ts.map +1 -1
  122. package/dist/providers/ollama/Models.js +1 -1
  123. package/dist/providers/ollama/OllamaProvider.d.ts +1 -1
  124. package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -1
  125. package/dist/providers/ollama/OllamaProvider.js +2 -2
  126. package/dist/providers/ollama/index.d.ts +1 -1
  127. package/dist/providers/ollama/index.d.ts.map +1 -1
  128. package/dist/providers/ollama/index.js +7 -3
  129. package/dist/providers/openai/Capabilities.d.ts +2 -1
  130. package/dist/providers/openai/Capabilities.d.ts.map +1 -1
  131. package/dist/providers/openai/Capabilities.js +9 -21
  132. package/dist/providers/openai/Chat.d.ts.map +1 -1
  133. package/dist/providers/openai/Chat.js +18 -15
  134. package/dist/providers/openai/Embedding.d.ts.map +1 -1
  135. package/dist/providers/openai/Embedding.js +11 -7
  136. package/dist/providers/openai/Errors.d.ts.map +1 -1
  137. package/dist/providers/openai/Errors.js +5 -2
  138. package/dist/providers/openai/Image.d.ts.map +1 -1
  139. package/dist/providers/openai/Image.js +6 -6
  140. package/dist/providers/openai/Models.d.ts +1 -1
  141. package/dist/providers/openai/Models.d.ts.map +1 -1
  142. package/dist/providers/openai/Models.js +12 -8
  143. package/dist/providers/openai/Moderation.d.ts.map +1 -1
  144. package/dist/providers/openai/Moderation.js +6 -6
  145. package/dist/providers/openai/OpenAIProvider.d.ts +2 -3
  146. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -1
  147. package/dist/providers/openai/OpenAIProvider.js +4 -4
  148. package/dist/providers/openai/Streaming.d.ts.map +1 -1
  149. package/dist/providers/openai/Streaming.js +18 -13
  150. package/dist/providers/openai/Transcription.d.ts.map +1 -1
  151. package/dist/providers/openai/Transcription.js +15 -12
  152. package/dist/providers/openai/index.d.ts +1 -1
  153. package/dist/providers/openai/index.d.ts.map +1 -1
  154. package/dist/providers/openai/index.js +6 -5
  155. package/dist/providers/openai/types.d.ts +1 -1
  156. package/dist/providers/openai/utils.js +2 -2
  157. package/dist/providers/openrouter/Capabilities.d.ts +3 -3
  158. package/dist/providers/openrouter/Capabilities.d.ts.map +1 -1
  159. package/dist/providers/openrouter/Capabilities.js +21 -24
  160. package/dist/providers/openrouter/Models.d.ts.map +1 -1
  161. package/dist/providers/openrouter/Models.js +20 -16
  162. package/dist/providers/openrouter/OpenRouterProvider.d.ts.map +1 -1
  163. package/dist/providers/openrouter/OpenRouterProvider.js +1 -1
  164. package/dist/providers/openrouter/index.d.ts +1 -1
  165. package/dist/providers/openrouter/index.d.ts.map +1 -1
  166. package/dist/providers/openrouter/index.js +6 -5
  167. package/dist/providers/registry.d.ts +18 -2
  168. package/dist/providers/registry.d.ts.map +1 -1
  169. package/dist/providers/registry.js +17 -2
  170. package/dist/providers/utils.js +1 -1
  171. package/dist/schema/Schema.d.ts +3 -3
  172. package/dist/schema/Schema.d.ts.map +1 -1
  173. package/dist/schema/Schema.js +2 -2
  174. package/dist/schema/to-json-schema.d.ts +1 -1
  175. package/dist/schema/to-json-schema.d.ts.map +1 -1
  176. package/dist/streaming/Stream.d.ts.map +1 -1
  177. package/dist/streaming/Stream.js +3 -3
  178. package/dist/utils/Binary.d.ts.map +1 -1
  179. package/dist/utils/Binary.js +23 -13
  180. package/dist/utils/FileLoader.d.ts.map +1 -1
  181. package/dist/utils/FileLoader.js +25 -4
  182. package/dist/utils/audio.js +1 -1
  183. package/dist/utils/fetch.d.ts.map +1 -1
  184. package/dist/utils/fetch.js +3 -2
  185. package/dist/utils/logger.d.ts +3 -3
  186. package/dist/utils/logger.d.ts.map +1 -1
  187. package/dist/utils/logger.js +2 -2
  188. 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: any) => void;
14
- onToolCallStart?: (toolCall: any) => void;
15
- onToolCallEnd?: (toolCall: any, result: any) => void;
16
- onToolCallError?: (toolCall: any, error: Error) => 'STOP' | 'CONTINUE' | void | Promise<'STOP' | 'CONTINUE' | void>;
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
- type: "json_object" | "text";
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: any) => Promise<boolean> | boolean;
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,EAAkB,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,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,GAAG,KAAK,IAAI,CAAC;IACtC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IACrD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC;IACpH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE;QAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAAA;KAAE,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,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,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAClE,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"}
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(): any;
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,WAAsC;IACtD,IAAI,aAAa,WAAuC;IACxD,IAAI,YAAY,WAAsC;IACtD,IAAI,aAAa,uBAAuC;IACxD,IAAI,IAAI,uBAA8B;IACtC,IAAI,UAAU,uBAAoC;IAClD,IAAI,WAAW,uBAAqC;IAEpD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,QAAQ;IAIR;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB;IAWnD;;;OAGG;IACH,IAAI,MAAM,IAAI,GAAG,CAMhB;CACF"}
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() { return this.usage.input_tokens; }
20
- get output_tokens() { return this.usage.output_tokens; }
21
- get total_tokens() { return this.usage.total_tokens; }
22
- get cached_tokens() { return this.usage.cached_tokens; }
23
- get cost() { return this.usage.cost; }
24
- get input_cost() { return this.usage.input_cost; }
25
- get output_cost() { return this.usage.output_cost; }
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 (e) {
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,EAAE,WAAW,EAA4C,MAAM,cAAc,CAAC;AACrF,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;AAQvC;;;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;CAsOrF"}
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"}
@@ -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
- let totalUsage = { input_tokens: 0, output_tokens: 0, total_tokens: 0 };
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 directive = await options.onToolCallError?.(toolCall, error);
199
- if (directive === 'STOP') {
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
- role: "tool",
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 = error.fatal === true || error.status === 401 || error.status === 403;
203
+ const isFatal = err.fatal === true || err.status === 401 || err.status === 403;
211
204
  if (isFatal) {
212
- throw error;
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 === 'AbortError') {
212
+ if (error instanceof Error && error.name === "AbortError") {
220
213
  // Aborted
221
214
  }
222
215
  throw error;
@@ -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 | String | ContentPart[];
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,OAC5B,CAAC;AAEvB,eAAO,MAAM,qBAAqB,GAAI,OAAO,WAAW,EAAE;eAEZ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE;;CAG/E,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,SAAS,MAAM,GAAG,WAAW,EAAE,EAAE,OAAO,WAAW,EAAE,KAAG,cA2B/F,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC"}
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"}
@@ -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
- let currentParts = typeof content === "string" ? [] : content;
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];
@@ -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;AAEjD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,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;CACpB"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Role.d.ts","sourceRoot":"","sources":["../../src/chat/Role.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GACZ,QAAQ,GACR,WAAW,GACX,MAAM,GACN,WAAW,GACX,MAAM,CAAC"}
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"}
@@ -1,31 +1,31 @@
1
1
  import { z } from "zod";
2
2
  export interface ToolCall {
3
3
  id: string;
4
- type: 'function';
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: 'function';
11
+ type: "function";
12
12
  function: {
13
13
  name: string;
14
14
  description?: string;
15
- parameters: Record<string, any>;
15
+ parameters: Record<string, unknown>;
16
16
  };
17
- handler?: (args: any) => Promise<string>;
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 | any;
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 = any> {
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<any> | Record<string, any>;
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<any>;
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).
@@ -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,GAAG,CAAC,CAAC;KACjC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG;IAAE,QAAO,IAAI,CAAA;CAAE,GAAG,cAAc,GAAG,GAAG,CAAC;AAE3E;;GAEG;AACH,8BAAsB,IAAI,CAAC,CAAC,GAAG,GAAG;IAChC;;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,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE/D;;;OAGG;aACa,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAE9C;;;OAGG;IACU,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9C;;;OAGG;IACI,SAAS,IAAI,cAAc;CAoBnC"}
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" ? rawSchema : {
24
- type: "object",
25
- properties: rawSchema.properties || {},
26
- required: rawSchema.required || []
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.bind(this),
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: any[] | undefined, mode?: ToolExecutionMode): boolean;
4
- static requestToolConfirmation(toolCall: any, onConfirm?: (call: any) => Promise<boolean> | boolean): Promise<boolean>;
5
- static execute(toolCall: any, tools: any[] | undefined, onStart?: (call: any) => void, onEnd?: (call: any, result: any) => void): Promise<{
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;AAGpD,qBAAa,WAAW;IACtB,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO;WAM7E,uBAAuB,CAClC,QAAQ,EAAE,GAAG,EACb,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GACpD,OAAO,CAAC,OAAO,CAAC;WAMN,OAAO,CAClB,QAAQ,EAAE,GAAG,EACb,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,EACxB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAC7B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,GACvC,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAyBpE"}
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"}
@@ -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
- try {
23
- const args = JSON.parse(toolCall.function.arguments);
24
- const result = await tool.handler(args);
25
- const safeResult = typeof result === 'string' ? result : JSON.stringify(result);
26
- if (onEnd)
27
- onEnd(toolCall, result);
28
- return {
29
- role: "tool",
30
- tool_call_id: toolCall.id,
31
- content: safeResult,
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,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB;IAYvG,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB;IAYrG,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB;CAWlH"}
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"}
@@ -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 && provider.capabilities && !provider.capabilities.supportsVision(model)) {
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 && provider.capabilities && !provider.capabilities.supportsTools(model)) {
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 && provider.capabilities && !provider.capabilities.supportsStructuredOutput(model)) {
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;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}