modelfusion 0.70.0 → 0.72.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.
Files changed (138) hide show
  1. package/README.md +61 -49
  2. package/core/FunctionEvent.d.ts +5 -5
  3. package/guard/guard.cjs +5 -4
  4. package/guard/guard.d.ts +1 -1
  5. package/guard/guard.js +5 -4
  6. package/model-function/ModelCallEvent.d.ts +4 -3
  7. package/model-function/generate-structure/StructureGenerationEvent.d.ts +2 -2
  8. package/model-function/generate-structure/StructureParseError.cjs +10 -0
  9. package/model-function/generate-structure/StructureParseError.d.ts +8 -0
  10. package/model-function/generate-structure/StructureParseError.js +10 -0
  11. package/model-function/generate-structure/index.cjs +0 -3
  12. package/model-function/generate-structure/index.d.ts +0 -3
  13. package/model-function/generate-structure/index.js +0 -3
  14. package/model-function/index.cjs +0 -1
  15. package/model-function/index.d.ts +0 -1
  16. package/model-function/index.js +0 -1
  17. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.d.ts +3 -3
  18. package/model-provider/openai/chat/OpenAIChatMessage.cjs +16 -25
  19. package/model-provider/openai/chat/OpenAIChatMessage.d.ts +14 -29
  20. package/model-provider/openai/chat/OpenAIChatMessage.js +16 -25
  21. package/model-provider/openai/chat/OpenAIChatModel.cjs +28 -48
  22. package/model-provider/openai/chat/OpenAIChatModel.d.ts +23 -68
  23. package/model-provider/openai/chat/OpenAIChatModel.js +28 -48
  24. package/package.json +2 -2
  25. package/{model-function/generate-tool-call/ToolCallParametersValidationError.js → tool/NoSuchToolDefinitionError.cjs} +9 -8
  26. package/{model-function/generate-tool-call/ToolCallParametersValidationError.d.ts → tool/NoSuchToolDefinitionError.d.ts} +2 -3
  27. package/tool/NoSuchToolDefinitionError.js +37 -0
  28. package/tool/Tool.cjs +5 -16
  29. package/tool/Tool.d.ts +9 -14
  30. package/tool/Tool.js +5 -16
  31. package/tool/ToolCall.d.ts +15 -0
  32. package/tool/ToolCallArgumentsValidationError.cjs +49 -0
  33. package/tool/ToolCallArgumentsValidationError.d.ts +23 -0
  34. package/tool/ToolCallArgumentsValidationError.js +45 -0
  35. package/tool/ToolCallError.cjs +34 -0
  36. package/tool/ToolCallError.d.ts +17 -0
  37. package/tool/ToolCallError.js +30 -0
  38. package/{model-function/generate-tool-call → tool}/ToolCallGenerationError.cjs +4 -4
  39. package/{model-function/generate-tool-call → tool}/ToolCallGenerationError.d.ts +1 -1
  40. package/{model-function/generate-tool-call → tool}/ToolCallGenerationError.js +2 -2
  41. package/{model-function/generate-tool-call/ToolCallParametersValidationError.cjs → tool/ToolCallParseError.cjs} +13 -13
  42. package/tool/ToolCallParseError.d.ts +18 -0
  43. package/tool/ToolCallParseError.js +40 -0
  44. package/tool/ToolCallResult.d.ts +13 -0
  45. package/tool/ToolDefinition.d.ts +7 -0
  46. package/tool/ToolExecutionError.cjs +5 -4
  47. package/tool/ToolExecutionError.d.ts +4 -4
  48. package/tool/ToolExecutionError.js +5 -4
  49. package/tool/WebSearchTool.cjs +4 -4
  50. package/tool/WebSearchTool.d.ts +2 -2
  51. package/tool/WebSearchTool.js +4 -4
  52. package/tool/{ExecuteToolEvent.d.ts → execute-tool/ExecuteToolEvent.d.ts} +1 -1
  53. package/tool/{executeTool.cjs → execute-tool/executeTool.cjs} +15 -15
  54. package/tool/{executeTool.d.ts → execute-tool/executeTool.d.ts} +6 -6
  55. package/tool/{executeTool.js → execute-tool/executeTool.js} +15 -15
  56. package/tool/execute-tool/index.cjs +18 -0
  57. package/tool/execute-tool/index.d.ts +2 -0
  58. package/tool/execute-tool/index.js +2 -0
  59. package/tool/execute-tool/safeExecuteToolCall.cjs +34 -0
  60. package/tool/execute-tool/safeExecuteToolCall.d.ts +5 -0
  61. package/tool/execute-tool/safeExecuteToolCall.js +30 -0
  62. package/tool/generate-tool-call/TextGenerationToolCallModel.cjs +59 -0
  63. package/tool/generate-tool-call/TextGenerationToolCallModel.d.ts +35 -0
  64. package/tool/generate-tool-call/TextGenerationToolCallModel.js +55 -0
  65. package/{model-function → tool}/generate-tool-call/ToolCallGenerationEvent.d.ts +1 -1
  66. package/{model-function → tool}/generate-tool-call/ToolCallGenerationModel.d.ts +5 -5
  67. package/{model-function → tool}/generate-tool-call/generateToolCall.cjs +13 -12
  68. package/{model-function → tool}/generate-tool-call/generateToolCall.d.ts +7 -12
  69. package/{model-function → tool}/generate-tool-call/generateToolCall.js +13 -12
  70. package/{model-function → tool}/generate-tool-call/index.cjs +1 -2
  71. package/{model-function → tool}/generate-tool-call/index.d.ts +1 -2
  72. package/{model-function → tool}/generate-tool-call/index.js +1 -2
  73. package/tool/generate-tool-calls-or-text/ToolCallsOrTextGenerationEvent.d.ts +23 -0
  74. package/tool/generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.cjs +2 -0
  75. package/tool/generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.d.ts +21 -0
  76. package/tool/generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.js +1 -0
  77. package/tool/generate-tool-calls-or-text/generateToolCallsOrText.cjs +63 -0
  78. package/tool/generate-tool-calls-or-text/generateToolCallsOrText.d.ts +33 -0
  79. package/tool/generate-tool-calls-or-text/generateToolCallsOrText.js +59 -0
  80. package/tool/generate-tool-calls-or-text/index.cjs +19 -0
  81. package/tool/generate-tool-calls-or-text/index.d.ts +3 -0
  82. package/tool/generate-tool-calls-or-text/index.js +3 -0
  83. package/tool/index.cjs +12 -7
  84. package/tool/index.d.ts +12 -7
  85. package/tool/index.js +12 -7
  86. package/tool/use-tool/UseToolEvent.cjs +2 -0
  87. package/tool/{UseToolEvent.d.ts → use-tool/UseToolEvent.d.ts} +1 -1
  88. package/tool/use-tool/UseToolEvent.js +1 -0
  89. package/tool/use-tool/index.cjs +18 -0
  90. package/tool/use-tool/index.d.ts +2 -0
  91. package/tool/use-tool/index.js +2 -0
  92. package/tool/use-tool/useTool.cjs +30 -0
  93. package/tool/use-tool/useTool.d.ts +16 -0
  94. package/tool/use-tool/useTool.js +26 -0
  95. package/tool/use-tools-or-generate-text/UseToolsOrGenerateTextEvent.cjs +2 -0
  96. package/tool/use-tools-or-generate-text/UseToolsOrGenerateTextEvent.d.ts +7 -0
  97. package/tool/use-tools-or-generate-text/UseToolsOrGenerateTextEvent.js +1 -0
  98. package/tool/use-tools-or-generate-text/index.cjs +18 -0
  99. package/tool/use-tools-or-generate-text/index.d.ts +2 -0
  100. package/tool/use-tools-or-generate-text/index.js +2 -0
  101. package/tool/use-tools-or-generate-text/useToolsOrGenerateText.cjs +48 -0
  102. package/tool/use-tools-or-generate-text/useToolsOrGenerateText.d.ts +18 -0
  103. package/tool/use-tools-or-generate-text/useToolsOrGenerateText.js +44 -0
  104. package/util/getErrorMessage.cjs +3 -0
  105. package/util/getErrorMessage.d.ts +1 -1
  106. package/util/getErrorMessage.js +3 -0
  107. package/model-function/generate-structure/NoSuchStructureError.cjs +0 -17
  108. package/model-function/generate-structure/NoSuchStructureError.d.ts +0 -4
  109. package/model-function/generate-structure/NoSuchStructureError.js +0 -13
  110. package/model-function/generate-structure/StructureOrTextGenerationModel.d.ts +0 -26
  111. package/model-function/generate-structure/generateStructureOrText.cjs +0 -54
  112. package/model-function/generate-structure/generateStructureOrText.d.ts +0 -97
  113. package/model-function/generate-structure/generateStructureOrText.js +0 -50
  114. package/model-function/generate-tool-call/ToolCallDefinition.d.ts +0 -7
  115. package/tool/NoSuchToolError.cjs +0 -25
  116. package/tool/NoSuchToolError.d.ts +0 -10
  117. package/tool/NoSuchToolError.js +0 -21
  118. package/tool/UseToolOrGenerateTextEvent.d.ts +0 -7
  119. package/tool/useTool.cjs +0 -40
  120. package/tool/useTool.d.ts +0 -15
  121. package/tool/useTool.js +0 -36
  122. package/tool/useToolOrGenerateText.cjs +0 -50
  123. package/tool/useToolOrGenerateText.d.ts +0 -23
  124. package/tool/useToolOrGenerateText.js +0 -46
  125. /package/{model-function/generate-structure/StructureOrTextGenerationModel.cjs → tool/ToolCall.cjs} +0 -0
  126. /package/{model-function/generate-structure/StructureOrTextGenerationModel.js → tool/ToolCall.js} +0 -0
  127. /package/{model-function/generate-tool-call/ToolCallDefinition.cjs → tool/ToolCallResult.cjs} +0 -0
  128. /package/{model-function/generate-tool-call/ToolCallDefinition.js → tool/ToolCallResult.js} +0 -0
  129. /package/{model-function/generate-tool-call/ToolCallGenerationEvent.cjs → tool/ToolDefinition.cjs} +0 -0
  130. /package/{model-function/generate-tool-call/ToolCallGenerationEvent.js → tool/ToolDefinition.js} +0 -0
  131. /package/tool/{ExecuteToolEvent.cjs → execute-tool/ExecuteToolEvent.cjs} +0 -0
  132. /package/tool/{ExecuteToolEvent.js → execute-tool/ExecuteToolEvent.js} +0 -0
  133. /package/{model-function/generate-tool-call/ToolCallGenerationModel.cjs → tool/generate-tool-call/ToolCallGenerationEvent.cjs} +0 -0
  134. /package/{model-function/generate-tool-call/ToolCallGenerationModel.js → tool/generate-tool-call/ToolCallGenerationEvent.js} +0 -0
  135. /package/tool/{UseToolEvent.cjs → generate-tool-call/ToolCallGenerationModel.cjs} +0 -0
  136. /package/tool/{UseToolEvent.js → generate-tool-call/ToolCallGenerationModel.js} +0 -0
  137. /package/tool/{UseToolOrGenerateTextEvent.cjs → generate-tool-calls-or-text/ToolCallsOrTextGenerationEvent.cjs} +0 -0
  138. /package/tool/{UseToolOrGenerateTextEvent.js → generate-tool-calls-or-text/ToolCallsOrTextGenerationEvent.js} +0 -0
@@ -1,20 +1,20 @@
1
1
  import { nanoid as createId } from "nanoid";
2
- import { FunctionEventSource } from "../core/FunctionEventSource.js";
3
- import { getGlobalFunctionLogging } from "../core/GlobalFunctionLogging.js";
4
- import { getGlobalFunctionObservers } from "../core/GlobalFunctionObservers.js";
5
- import { AbortError } from "../core/api/AbortError.js";
6
- import { getFunctionCallLogger } from "../core/getFunctionCallLogger.js";
7
- import { getRun } from "../core/getRun.js";
8
- import { startDurationMeasurement } from "../util/DurationMeasurement.js";
9
- import { runSafe } from "../util/runSafe.js";
10
- import { ToolExecutionError } from "./ToolExecutionError.js";
2
+ import { FunctionEventSource } from "../../core/FunctionEventSource.js";
3
+ import { getGlobalFunctionLogging } from "../../core/GlobalFunctionLogging.js";
4
+ import { getGlobalFunctionObservers } from "../../core/GlobalFunctionObservers.js";
5
+ import { AbortError } from "../../core/api/AbortError.js";
6
+ import { getFunctionCallLogger } from "../../core/getFunctionCallLogger.js";
7
+ import { getRun } from "../../core/getRun.js";
8
+ import { startDurationMeasurement } from "../../util/DurationMeasurement.js";
9
+ import { runSafe } from "../../util/runSafe.js";
10
+ import { ToolExecutionError } from "../ToolExecutionError.js";
11
11
  export async function executeTool(// eslint-disable-line @typescript-eslint/no-explicit-any
12
- tool, input, options) {
13
- const fullResponse = await doExecuteTool(tool, input, options);
12
+ tool, args, options) {
13
+ const fullResponse = await doExecuteTool(tool, args, options);
14
14
  return options?.returnType === "full" ? fullResponse : fullResponse.output;
15
15
  }
16
16
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
- async function doExecuteTool(tool, input, options) {
17
+ async function doExecuteTool(tool, args, options) {
18
18
  const run = await getRun(options?.run);
19
19
  const eventSource = new FunctionEventSource({
20
20
  observers: [
@@ -35,7 +35,7 @@ async function doExecuteTool(tool, input, options) {
35
35
  userId: run?.userId,
36
36
  functionId: options?.functionId,
37
37
  toolName: tool.name,
38
- input,
38
+ input: args,
39
39
  };
40
40
  eventSource.notify({
41
41
  ...metadata,
@@ -43,7 +43,7 @@ async function doExecuteTool(tool, input, options) {
43
43
  timestamp: durationMeasurement.startDate,
44
44
  startTimestamp: durationMeasurement.startDate,
45
45
  });
46
- const result = await runSafe(() => tool.execute(input, {
46
+ const result = await runSafe(() => tool.execute(args, {
47
47
  functionId: options?.functionId,
48
48
  logging: options?.logging,
49
49
  observers: options?.observers,
@@ -77,7 +77,7 @@ async function doExecuteTool(tool, input, options) {
77
77
  });
78
78
  throw new ToolExecutionError({
79
79
  toolName: tool.name,
80
- input,
80
+ input: args,
81
81
  cause: result.error,
82
82
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
83
  message: result.error?.message,
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ExecuteToolEvent.cjs"), exports);
18
+ __exportStar(require("./executeTool.cjs"), exports);
@@ -0,0 +1,2 @@
1
+ export * from "./ExecuteToolEvent.js";
2
+ export * from "./executeTool.js";
@@ -0,0 +1,2 @@
1
+ export * from "./ExecuteToolEvent.js";
2
+ export * from "./executeTool.js";
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.safeExecuteToolCall = void 0;
4
+ const ToolCallError_js_1 = require("../ToolCallError.cjs");
5
+ const ToolExecutionError_js_1 = require("../ToolExecutionError.cjs");
6
+ const executeTool_js_1 = require("./executeTool.cjs");
7
+ async function safeExecuteToolCall(tool, toolCall, options) {
8
+ try {
9
+ return {
10
+ tool: toolCall.name,
11
+ toolCall,
12
+ args: toolCall.args,
13
+ ok: true,
14
+ result: await (0, executeTool_js_1.executeTool)(tool, toolCall.args, options),
15
+ };
16
+ }
17
+ catch (error) {
18
+ // If the error is an AbortError, rethrow it.
19
+ if (error instanceof Error && error.name === "AbortError") {
20
+ throw error;
21
+ }
22
+ return {
23
+ tool: toolCall.name,
24
+ toolCall,
25
+ args: toolCall.args,
26
+ ok: false,
27
+ result: new ToolCallError_js_1.ToolCallError({
28
+ toolCall,
29
+ cause: error instanceof ToolExecutionError_js_1.ToolExecutionError ? error.cause : error,
30
+ }),
31
+ };
32
+ }
33
+ }
34
+ exports.safeExecuteToolCall = safeExecuteToolCall;
@@ -0,0 +1,5 @@
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
+ import { Tool } from "../Tool.js";
3
+ import { ToolCall } from "../ToolCall.js";
4
+ import { ToolCallResult } from "../ToolCallResult.js";
5
+ export declare function safeExecuteToolCall<TOOL extends Tool<string, unknown, any>>(tool: TOOL, toolCall: ToolCall<TOOL["name"], TOOL["parameters"]>, options?: FunctionOptions): Promise<ToolCallResult<TOOL["name"], TOOL["parameters"], Awaited<ReturnType<TOOL["execute"]>>>>;
@@ -0,0 +1,30 @@
1
+ import { ToolCallError } from "../ToolCallError.js";
2
+ import { ToolExecutionError } from "../ToolExecutionError.js";
3
+ import { executeTool } from "./executeTool.js";
4
+ export async function safeExecuteToolCall(tool, toolCall, options) {
5
+ try {
6
+ return {
7
+ tool: toolCall.name,
8
+ toolCall,
9
+ args: toolCall.args,
10
+ ok: true,
11
+ result: await executeTool(tool, toolCall.args, options),
12
+ };
13
+ }
14
+ catch (error) {
15
+ // If the error is an AbortError, rethrow it.
16
+ if (error instanceof Error && error.name === "AbortError") {
17
+ throw error;
18
+ }
19
+ return {
20
+ tool: toolCall.name,
21
+ toolCall,
22
+ args: toolCall.args,
23
+ ok: false,
24
+ result: new ToolCallError({
25
+ toolCall,
26
+ cause: error instanceof ToolExecutionError ? error.cause : error,
27
+ }),
28
+ };
29
+ }
30
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextGenerationToolCallModel = void 0;
4
+ const generateText_js_1 = require("../../model-function/generate-text/generateText.cjs");
5
+ const ToolCallParseError_js_1 = require("../ToolCallParseError.cjs");
6
+ class TextGenerationToolCallModel {
7
+ constructor({ model, format, }) {
8
+ Object.defineProperty(this, "model", {
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true,
12
+ value: void 0
13
+ });
14
+ Object.defineProperty(this, "format", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: void 0
19
+ });
20
+ this.model = model;
21
+ this.format = format;
22
+ }
23
+ get modelInformation() {
24
+ return this.model.modelInformation;
25
+ }
26
+ get settings() {
27
+ return this.model.settings;
28
+ }
29
+ get settingsForEvent() {
30
+ return this.model.settingsForEvent;
31
+ }
32
+ async doGenerateToolCall(tool, prompt, options) {
33
+ const { response, value, metadata } = await (0, generateText_js_1.generateText)(this.model, this.format.createPrompt(prompt, tool), {
34
+ ...options,
35
+ returnType: "full",
36
+ });
37
+ try {
38
+ return {
39
+ response,
40
+ toolCall: this.format.extractToolCall(value),
41
+ usage: metadata?.usage,
42
+ };
43
+ }
44
+ catch (error) {
45
+ throw new ToolCallParseError_js_1.ToolCallParseError({
46
+ toolName: tool.name,
47
+ valueText: value,
48
+ cause: error,
49
+ });
50
+ }
51
+ }
52
+ withSettings(additionalSettings) {
53
+ return new TextGenerationToolCallModel({
54
+ model: this.model.withSettings(additionalSettings),
55
+ format: this.format,
56
+ });
57
+ }
58
+ }
59
+ exports.TextGenerationToolCallModel = TextGenerationToolCallModel;
@@ -0,0 +1,35 @@
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
+ import { TextGenerationModel, TextGenerationModelSettings } from "../../model-function/generate-text/TextGenerationModel.js";
3
+ import { ToolDefinition } from "../ToolDefinition.js";
4
+ import { ToolCallGenerationModel } from "./ToolCallGenerationModel.js";
5
+ export interface ToolCallTextPromptFormat<PROMPT> {
6
+ createPrompt: (prompt: PROMPT, tool: ToolDefinition<string, unknown>) => string;
7
+ extractToolCall: (response: string) => {
8
+ id: string;
9
+ args: unknown;
10
+ } | null;
11
+ }
12
+ export declare class TextGenerationToolCallModel<PROMPT, MODEL extends TextGenerationModel<string, TextGenerationModelSettings>> implements ToolCallGenerationModel<PROMPT, MODEL["settings"]> {
13
+ private readonly model;
14
+ private readonly format;
15
+ constructor({ model, format, }: {
16
+ model: MODEL;
17
+ format: ToolCallTextPromptFormat<PROMPT>;
18
+ });
19
+ get modelInformation(): import("../../index.js").ModelInformation;
20
+ get settings(): TextGenerationModelSettings;
21
+ get settingsForEvent(): Partial<MODEL["settings"]>;
22
+ doGenerateToolCall(tool: ToolDefinition<string, unknown>, prompt: PROMPT, options?: FunctionOptions): Promise<{
23
+ response: unknown;
24
+ toolCall: {
25
+ id: string;
26
+ args: unknown;
27
+ } | null;
28
+ usage: {
29
+ promptTokens: number;
30
+ completionTokens: number;
31
+ totalTokens: number;
32
+ } | undefined;
33
+ }>;
34
+ withSettings(additionalSettings: Partial<MODEL["settings"]>): this;
35
+ }
@@ -0,0 +1,55 @@
1
+ import { generateText } from "../../model-function/generate-text/generateText.js";
2
+ import { ToolCallParseError } from "../ToolCallParseError.js";
3
+ export class TextGenerationToolCallModel {
4
+ constructor({ model, format, }) {
5
+ Object.defineProperty(this, "model", {
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true,
9
+ value: void 0
10
+ });
11
+ Object.defineProperty(this, "format", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: void 0
16
+ });
17
+ this.model = model;
18
+ this.format = format;
19
+ }
20
+ get modelInformation() {
21
+ return this.model.modelInformation;
22
+ }
23
+ get settings() {
24
+ return this.model.settings;
25
+ }
26
+ get settingsForEvent() {
27
+ return this.model.settingsForEvent;
28
+ }
29
+ async doGenerateToolCall(tool, prompt, options) {
30
+ const { response, value, metadata } = await generateText(this.model, this.format.createPrompt(prompt, tool), {
31
+ ...options,
32
+ returnType: "full",
33
+ });
34
+ try {
35
+ return {
36
+ response,
37
+ toolCall: this.format.extractToolCall(value),
38
+ usage: metadata?.usage,
39
+ };
40
+ }
41
+ catch (error) {
42
+ throw new ToolCallParseError({
43
+ toolName: tool.name,
44
+ valueText: value,
45
+ cause: error,
46
+ });
47
+ }
48
+ }
49
+ withSettings(additionalSettings) {
50
+ return new TextGenerationToolCallModel({
51
+ model: this.model.withSettings(additionalSettings),
52
+ format: this.format,
53
+ });
54
+ }
55
+ }
@@ -1,4 +1,4 @@
1
- import { BaseModelCallFinishedEvent, BaseModelCallStartedEvent } from "../ModelCallEvent.js";
1
+ import { BaseModelCallFinishedEvent, BaseModelCallStartedEvent } from "../../model-function/ModelCallEvent.js";
2
2
  export interface ToolCallGenerationStartedEvent extends BaseModelCallStartedEvent {
3
3
  functionType: "generate-tool-call";
4
4
  }
@@ -1,14 +1,14 @@
1
1
  import { FunctionOptions } from "../../core/FunctionOptions.js";
2
- import { Model, ModelSettings } from "../Model.js";
3
- import { ToolCallDefinition } from "./ToolCallDefinition.js";
2
+ import { Model, ModelSettings } from "../../model-function/Model.js";
3
+ import { ToolDefinition } from "../ToolDefinition.js";
4
4
  export interface ToolCallGenerationModelSettings extends ModelSettings {
5
5
  }
6
6
  export interface ToolCallGenerationModel<PROMPT, SETTINGS extends ToolCallGenerationModelSettings = ToolCallGenerationModelSettings> extends Model<SETTINGS> {
7
- doGenerateToolCall(tool: ToolCallDefinition<string, unknown>, prompt: PROMPT, options?: FunctionOptions): PromiseLike<{
7
+ doGenerateToolCall(tool: ToolDefinition<string, unknown>, prompt: PROMPT, options?: FunctionOptions): PromiseLike<{
8
8
  response: unknown;
9
- value: {
9
+ toolCall: {
10
10
  id: string;
11
- parameters: unknown;
11
+ args: unknown;
12
12
  } | null;
13
13
  usage?: {
14
14
  promptTokens: number;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateToolCall = void 0;
4
- const executeStandardCall_js_1 = require("../executeStandardCall.cjs");
5
- const ToolCallParametersValidationError_js_1 = require("./ToolCallParametersValidationError.cjs");
6
- const ToolCallGenerationError_js_1 = require("./ToolCallGenerationError.cjs");
4
+ const executeStandardCall_js_1 = require("../../model-function/executeStandardCall.cjs");
5
+ const ToolCallArgumentsValidationError_js_1 = require("../ToolCallArgumentsValidationError.cjs");
6
+ const ToolCallGenerationError_js_1 = require("../ToolCallGenerationError.cjs");
7
7
  async function generateToolCall(model, tool, prompt, options) {
8
8
  // Note: PROMPT must not be a function.
9
9
  const expandedPrompt = typeof prompt === "function"
@@ -17,18 +17,18 @@ async function generateToolCall(model, tool, prompt, options) {
17
17
  generateResponse: async (options) => {
18
18
  try {
19
19
  const result = await model.doGenerateToolCall(tool, expandedPrompt, options);
20
- const toolCall = result.value;
20
+ const toolCall = result.toolCall;
21
21
  if (toolCall === null) {
22
- throw new ToolCallGenerationError_js_1.ToolCallsGenerationError({
22
+ throw new ToolCallGenerationError_js_1.ToolCallGenerationError({
23
23
  toolName: tool.name,
24
24
  cause: "No tool call generated.",
25
25
  });
26
26
  }
27
- const parseResult = tool.parameters.validate(toolCall.parameters);
27
+ const parseResult = tool.parameters.validate(toolCall.args);
28
28
  if (!parseResult.success) {
29
- throw new ToolCallParametersValidationError_js_1.ToolCallParametersValidationError({
29
+ throw new ToolCallArgumentsValidationError_js_1.ToolCallArgumentsValidationError({
30
30
  toolName: tool.name,
31
- parameters: toolCall.parameters,
31
+ args: toolCall.args,
32
32
  cause: parseResult.error,
33
33
  });
34
34
  }
@@ -36,17 +36,18 @@ async function generateToolCall(model, tool, prompt, options) {
36
36
  response: result.response,
37
37
  extractedValue: {
38
38
  id: toolCall.id,
39
- parameters: parseResult.data,
39
+ name: tool.name,
40
+ args: parseResult.data,
40
41
  },
41
42
  usage: result.usage,
42
43
  };
43
44
  }
44
45
  catch (error) {
45
- if (error instanceof ToolCallParametersValidationError_js_1.ToolCallParametersValidationError ||
46
- error instanceof ToolCallGenerationError_js_1.ToolCallsGenerationError) {
46
+ if (error instanceof ToolCallArgumentsValidationError_js_1.ToolCallArgumentsValidationError ||
47
+ error instanceof ToolCallGenerationError_js_1.ToolCallGenerationError) {
47
48
  throw error;
48
49
  }
49
- throw new ToolCallGenerationError_js_1.ToolCallsGenerationError({
50
+ throw new ToolCallGenerationError_js_1.ToolCallGenerationError({
50
51
  toolName: tool.name,
51
52
  cause: error,
52
53
  });
@@ -1,20 +1,15 @@
1
1
  import { FunctionOptions } from "../../core/FunctionOptions.js";
2
- import { ModelCallMetadata } from "../ModelCallMetadata.js";
3
- import { ToolCallDefinition } from "./ToolCallDefinition.js";
2
+ import { ModelCallMetadata } from "../../model-function/ModelCallMetadata.js";
3
+ import { ToolCall } from "../ToolCall.js";
4
+ import { ToolDefinition } from "../ToolDefinition.js";
4
5
  import { ToolCallGenerationModel, ToolCallGenerationModelSettings } from "./ToolCallGenerationModel.js";
5
- export declare function generateToolCall<PARAMETERS, PROMPT, NAME extends string, SETTINGS extends ToolCallGenerationModelSettings>(model: ToolCallGenerationModel<PROMPT, SETTINGS>, tool: ToolCallDefinition<NAME, PARAMETERS>, prompt: PROMPT | ((tool: ToolCallDefinition<NAME, PARAMETERS>) => PROMPT), options?: FunctionOptions & {
6
+ export declare function generateToolCall<PARAMETERS, PROMPT, NAME extends string, SETTINGS extends ToolCallGenerationModelSettings>(model: ToolCallGenerationModel<PROMPT, SETTINGS>, tool: ToolDefinition<NAME, PARAMETERS>, prompt: PROMPT | ((tool: ToolDefinition<NAME, PARAMETERS>) => PROMPT), options?: FunctionOptions & {
6
7
  returnType?: "structure";
7
- }): Promise<{
8
- id: string;
9
- parameters: PARAMETERS;
10
- }>;
11
- export declare function generateToolCall<PARAMETERS, PROMPT, NAME extends string, SETTINGS extends ToolCallGenerationModelSettings>(model: ToolCallGenerationModel<PROMPT, SETTINGS>, tool: ToolCallDefinition<NAME, PARAMETERS>, prompt: PROMPT | ((tool: ToolCallDefinition<NAME, PARAMETERS>) => PROMPT), options: FunctionOptions & {
8
+ }): Promise<ToolCall<NAME, PARAMETERS>>;
9
+ export declare function generateToolCall<PARAMETERS, PROMPT, NAME extends string, SETTINGS extends ToolCallGenerationModelSettings>(model: ToolCallGenerationModel<PROMPT, SETTINGS>, tool: ToolDefinition<NAME, PARAMETERS>, prompt: PROMPT | ((tool: ToolDefinition<NAME, PARAMETERS>) => PROMPT), options: FunctionOptions & {
12
10
  returnType: "full";
13
11
  }): Promise<{
14
- value: {
15
- id: string;
16
- parameters: PARAMETERS;
17
- };
12
+ value: ToolCall<NAME, PARAMETERS>;
18
13
  response: unknown;
19
14
  metadata: ModelCallMetadata;
20
15
  }>;
@@ -1,6 +1,6 @@
1
- import { executeStandardCall } from "../executeStandardCall.js";
2
- import { ToolCallParametersValidationError } from "./ToolCallParametersValidationError.js";
3
- import { ToolCallsGenerationError } from "./ToolCallGenerationError.js";
1
+ import { executeStandardCall } from "../../model-function/executeStandardCall.js";
2
+ import { ToolCallArgumentsValidationError } from "../ToolCallArgumentsValidationError.js";
3
+ import { ToolCallGenerationError } from "../ToolCallGenerationError.js";
4
4
  export async function generateToolCall(model, tool, prompt, options) {
5
5
  // Note: PROMPT must not be a function.
6
6
  const expandedPrompt = typeof prompt === "function"
@@ -14,18 +14,18 @@ export async function generateToolCall(model, tool, prompt, options) {
14
14
  generateResponse: async (options) => {
15
15
  try {
16
16
  const result = await model.doGenerateToolCall(tool, expandedPrompt, options);
17
- const toolCall = result.value;
17
+ const toolCall = result.toolCall;
18
18
  if (toolCall === null) {
19
- throw new ToolCallsGenerationError({
19
+ throw new ToolCallGenerationError({
20
20
  toolName: tool.name,
21
21
  cause: "No tool call generated.",
22
22
  });
23
23
  }
24
- const parseResult = tool.parameters.validate(toolCall.parameters);
24
+ const parseResult = tool.parameters.validate(toolCall.args);
25
25
  if (!parseResult.success) {
26
- throw new ToolCallParametersValidationError({
26
+ throw new ToolCallArgumentsValidationError({
27
27
  toolName: tool.name,
28
- parameters: toolCall.parameters,
28
+ args: toolCall.args,
29
29
  cause: parseResult.error,
30
30
  });
31
31
  }
@@ -33,17 +33,18 @@ export async function generateToolCall(model, tool, prompt, options) {
33
33
  response: result.response,
34
34
  extractedValue: {
35
35
  id: toolCall.id,
36
- parameters: parseResult.data,
36
+ name: tool.name,
37
+ args: parseResult.data,
37
38
  },
38
39
  usage: result.usage,
39
40
  };
40
41
  }
41
42
  catch (error) {
42
- if (error instanceof ToolCallParametersValidationError ||
43
- error instanceof ToolCallsGenerationError) {
43
+ if (error instanceof ToolCallArgumentsValidationError ||
44
+ error instanceof ToolCallGenerationError) {
44
45
  throw error;
45
46
  }
46
- throw new ToolCallsGenerationError({
47
+ throw new ToolCallGenerationError({
47
48
  toolName: tool.name,
48
49
  cause: error,
49
50
  });
@@ -14,8 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ToolCallDefinition.cjs"), exports);
18
- __exportStar(require("./ToolCallParametersValidationError.cjs"), exports);
17
+ __exportStar(require("./TextGenerationToolCallModel.cjs"), exports);
19
18
  __exportStar(require("./ToolCallGenerationEvent.cjs"), exports);
20
19
  __exportStar(require("./ToolCallGenerationModel.cjs"), exports);
21
20
  __exportStar(require("./generateToolCall.cjs"), exports);
@@ -1,5 +1,4 @@
1
- export * from "./ToolCallDefinition.js";
2
- export * from "./ToolCallParametersValidationError.js";
1
+ export * from "./TextGenerationToolCallModel.js";
3
2
  export * from "./ToolCallGenerationEvent.js";
4
3
  export * from "./ToolCallGenerationModel.js";
5
4
  export * from "./generateToolCall.js";
@@ -1,5 +1,4 @@
1
- export * from "./ToolCallDefinition.js";
2
- export * from "./ToolCallParametersValidationError.js";
1
+ export * from "./TextGenerationToolCallModel.js";
3
2
  export * from "./ToolCallGenerationEvent.js";
4
3
  export * from "./ToolCallGenerationModel.js";
5
4
  export * from "./generateToolCall.js";
@@ -0,0 +1,23 @@
1
+ import { BaseModelCallFinishedEvent, BaseModelCallStartedEvent } from "../../model-function/ModelCallEvent.js";
2
+ export interface ToolCallsOrTextGenerationStartedEvent extends BaseModelCallStartedEvent {
3
+ functionType: "generate-tool-calls-or-text";
4
+ }
5
+ export type ToolCallsOrTextGenerationFinishedEventResult = {
6
+ status: "success";
7
+ response: unknown;
8
+ value: unknown;
9
+ usage?: {
10
+ promptTokens: number;
11
+ completionTokens: number;
12
+ totalTokens: number;
13
+ };
14
+ } | {
15
+ status: "error";
16
+ error: unknown;
17
+ } | {
18
+ status: "abort";
19
+ };
20
+ export type ToolCallsOrTextGenerationFinishedEvent = BaseModelCallFinishedEvent & {
21
+ functionType: "generate-tool-calls-or-text";
22
+ result: ToolCallsOrTextGenerationFinishedEventResult;
23
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,21 @@
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
+ import { Model, ModelSettings } from "../../model-function/Model.js";
3
+ import { ToolDefinition } from "../ToolDefinition.js";
4
+ export interface ToolCallsOrTextGenerationModelSettings extends ModelSettings {
5
+ }
6
+ export interface ToolCallsOrTextGenerationModel<PROMPT, SETTINGS extends ToolCallsOrTextGenerationModelSettings> extends Model<SETTINGS> {
7
+ doGenerateToolCallsOrText(tools: Array<ToolDefinition<string, unknown>>, prompt: PROMPT, options?: FunctionOptions): PromiseLike<{
8
+ response: unknown;
9
+ text: string | null;
10
+ toolCalls: Array<{
11
+ id: string;
12
+ name: string;
13
+ args: unknown;
14
+ }> | null;
15
+ usage?: {
16
+ promptTokens: number;
17
+ completionTokens: number;
18
+ totalTokens: number;
19
+ };
20
+ }>;
21
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateToolCallsOrText = void 0;
4
+ const executeStandardCall_js_1 = require("../../model-function/executeStandardCall.cjs");
5
+ const NoSuchToolDefinitionError_js_1 = require("../NoSuchToolDefinitionError.cjs");
6
+ const ToolCallArgumentsValidationError_js_1 = require("../ToolCallArgumentsValidationError.cjs");
7
+ async function generateToolCallsOrText(model, tools, prompt, options) {
8
+ // Note: PROMPT must not be a function.
9
+ const expandedPrompt = typeof prompt === "function"
10
+ ? prompt(tools)
11
+ : prompt;
12
+ const fullResponse = await (0, executeStandardCall_js_1.executeStandardCall)({
13
+ functionType: "generate-tool-calls-or-text",
14
+ input: expandedPrompt,
15
+ model,
16
+ options,
17
+ generateResponse: async (options) => {
18
+ const result = await model.doGenerateToolCallsOrText(tools, expandedPrompt, options);
19
+ const { text, toolCalls: rawToolCalls } = result;
20
+ // no tool calls:
21
+ if (rawToolCalls == null) {
22
+ return {
23
+ response: result.response,
24
+ extractedValue: { text, toolCalls: null },
25
+ usage: result.usage,
26
+ };
27
+ }
28
+ // map tool calls:
29
+ const toolCalls = rawToolCalls.map((rawToolCall) => {
30
+ const tool = tools.find((tool) => tool.name === rawToolCall.name);
31
+ if (tool == undefined) {
32
+ throw new NoSuchToolDefinitionError_js_1.NoSuchToolDefinitionError({
33
+ toolName: rawToolCall.name,
34
+ parameters: rawToolCall.args,
35
+ });
36
+ }
37
+ const parseResult = tool.parameters.validate(rawToolCall.args);
38
+ if (!parseResult.success) {
39
+ throw new ToolCallArgumentsValidationError_js_1.ToolCallArgumentsValidationError({
40
+ toolName: tool.name,
41
+ args: rawToolCall.args,
42
+ cause: parseResult.error,
43
+ });
44
+ }
45
+ return {
46
+ id: rawToolCall.id,
47
+ name: tool.name,
48
+ args: parseResult.data,
49
+ };
50
+ });
51
+ return {
52
+ response: result.response,
53
+ extractedValue: {
54
+ text,
55
+ toolCalls: toolCalls,
56
+ },
57
+ usage: result.usage,
58
+ };
59
+ },
60
+ });
61
+ return options?.returnType === "full" ? fullResponse : fullResponse.value;
62
+ }
63
+ exports.generateToolCallsOrText = generateToolCallsOrText;