modelfusion 0.29.1 → 0.30.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 (111) hide show
  1. package/README.md +27 -32
  2. package/core/index.cjs +1 -0
  3. package/core/index.d.ts +1 -0
  4. package/core/index.js +1 -0
  5. package/core/structure/Schema.d.ts +24 -0
  6. package/core/structure/StructureDefinition.d.ts +6 -0
  7. package/core/structure/UncheckedJsonSchemaSchema.cjs +26 -0
  8. package/core/structure/UncheckedJsonSchemaSchema.d.ts +14 -0
  9. package/core/structure/UncheckedJsonSchemaSchema.js +22 -0
  10. package/core/structure/UncheckedJsonSchemaStructureDefinition.cjs +30 -0
  11. package/core/structure/UncheckedJsonSchemaStructureDefinition.d.ts +12 -0
  12. package/core/structure/UncheckedJsonSchemaStructureDefinition.js +26 -0
  13. package/core/structure/ZodSchema.cjs +31 -0
  14. package/core/structure/ZodSchema.d.ts +15 -0
  15. package/core/structure/ZodSchema.js +27 -0
  16. package/core/structure/ZodStructureDefinition.cjs +30 -0
  17. package/core/structure/ZodStructureDefinition.d.ts +13 -0
  18. package/core/structure/ZodStructureDefinition.js +26 -0
  19. package/core/structure/index.cjs +22 -0
  20. package/core/structure/index.d.ts +6 -0
  21. package/core/structure/index.js +6 -0
  22. package/model-function/ModelCallEvent.d.ts +3 -3
  23. package/model-function/SuccessfulModelCall.d.ts +1 -1
  24. package/model-function/embed-text/embedText.cjs +4 -2
  25. package/model-function/embed-text/embedText.d.ts +1 -1
  26. package/model-function/embed-text/embedText.js +4 -2
  27. package/model-function/generate-structure/InstructionWithStructurePrompt.cjs +17 -0
  28. package/model-function/generate-structure/InstructionWithStructurePrompt.d.ts +17 -0
  29. package/model-function/generate-structure/InstructionWithStructurePrompt.js +14 -0
  30. package/model-function/generate-structure/NoSuchStructureError.cjs +17 -0
  31. package/model-function/generate-structure/NoSuchStructureError.d.ts +4 -0
  32. package/model-function/generate-structure/NoSuchStructureError.js +13 -0
  33. package/model-function/{generate-json/JsonTextGenerationModel.cjs → generate-structure/StructureFromTextGenerationModel.cjs} +7 -7
  34. package/model-function/generate-structure/StructureFromTextGenerationModel.d.ts +26 -0
  35. package/model-function/{generate-json/JsonTextGenerationModel.js → generate-structure/StructureFromTextGenerationModel.js} +5 -5
  36. package/model-function/generate-structure/StructureGenerationEvent.d.ts +23 -0
  37. package/model-function/generate-structure/StructureGenerationModel.d.ts +13 -0
  38. package/model-function/generate-structure/StructureOrTextGenerationModel.cjs +2 -0
  39. package/model-function/generate-structure/StructureOrTextGenerationModel.d.ts +23 -0
  40. package/model-function/generate-structure/StructureOrTextGenerationModel.js +1 -0
  41. package/model-function/generate-structure/StructureValidationError.cjs +34 -0
  42. package/model-function/generate-structure/StructureValidationError.d.ts +10 -0
  43. package/model-function/generate-structure/StructureValidationError.js +30 -0
  44. package/model-function/generate-structure/generateStructure.cjs +29 -0
  45. package/model-function/generate-structure/generateStructure.d.ts +5 -0
  46. package/model-function/generate-structure/generateStructure.js +25 -0
  47. package/model-function/generate-structure/generateStructureOrText.cjs +42 -0
  48. package/model-function/generate-structure/generateStructureOrText.d.ts +22 -0
  49. package/model-function/generate-structure/generateStructureOrText.js +38 -0
  50. package/model-function/index.cjs +9 -10
  51. package/model-function/index.d.ts +9 -10
  52. package/model-function/index.js +9 -10
  53. package/model-provider/openai/OpenAICostCalculator.cjs +1 -1
  54. package/model-provider/openai/OpenAICostCalculator.js +1 -1
  55. package/model-provider/openai/OpenAITextEmbeddingModel.cjs +1 -1
  56. package/model-provider/openai/OpenAITextEmbeddingModel.js +1 -1
  57. package/model-provider/openai/chat/OpenAIChatModel.cjs +2 -2
  58. package/model-provider/openai/chat/OpenAIChatModel.d.ts +5 -5
  59. package/model-provider/openai/chat/OpenAIChatModel.js +2 -2
  60. package/model-provider/openai/chat/OpenAIChatPrompt.cjs +22 -26
  61. package/model-provider/openai/chat/OpenAIChatPrompt.d.ts +20 -30
  62. package/model-provider/openai/chat/OpenAIChatPrompt.js +22 -26
  63. package/model-provider/openai/index.d.ts +1 -1
  64. package/model-provider/openai/index.js +1 -1
  65. package/package.json +9 -12
  66. package/tool/Tool.cjs +2 -2
  67. package/tool/Tool.d.ts +8 -8
  68. package/tool/Tool.js +2 -2
  69. package/tool/WebSearchTool.cjs +5 -4
  70. package/tool/WebSearchTool.d.ts +2 -22
  71. package/tool/WebSearchTool.js +5 -4
  72. package/tool/executeTool.cjs +1 -1
  73. package/tool/executeTool.d.ts +1 -2
  74. package/tool/executeTool.js +1 -1
  75. package/tool/useTool.cjs +3 -3
  76. package/tool/useTool.d.ts +3 -3
  77. package/tool/useTool.js +3 -3
  78. package/tool/useToolOrGenerateText.cjs +7 -7
  79. package/tool/useToolOrGenerateText.d.ts +2 -2
  80. package/tool/useToolOrGenerateText.js +7 -7
  81. package/util/getErrorMessage.cjs +13 -0
  82. package/util/getErrorMessage.d.ts +1 -0
  83. package/util/getErrorMessage.js +9 -0
  84. package/model-function/generate-json/InstructionWithSchemaPrompt.cjs +0 -17
  85. package/model-function/generate-json/InstructionWithSchemaPrompt.d.ts +0 -26
  86. package/model-function/generate-json/InstructionWithSchemaPrompt.js +0 -14
  87. package/model-function/generate-json/JsonGenerationEvent.d.ts +0 -23
  88. package/model-function/generate-json/JsonGenerationModel.d.ts +0 -13
  89. package/model-function/generate-json/JsonOrTextGenerationModel.d.ts +0 -23
  90. package/model-function/generate-json/JsonTextGenerationModel.d.ts +0 -26
  91. package/model-function/generate-json/NoSuchSchemaError.cjs +0 -17
  92. package/model-function/generate-json/NoSuchSchemaError.d.ts +0 -4
  93. package/model-function/generate-json/NoSuchSchemaError.js +0 -13
  94. package/model-function/generate-json/SchemaDefinition.d.ts +0 -6
  95. package/model-function/generate-json/SchemaValidationError.cjs +0 -36
  96. package/model-function/generate-json/SchemaValidationError.d.ts +0 -11
  97. package/model-function/generate-json/SchemaValidationError.js +0 -32
  98. package/model-function/generate-json/generateJson.cjs +0 -29
  99. package/model-function/generate-json/generateJson.d.ts +0 -5
  100. package/model-function/generate-json/generateJson.js +0 -25
  101. package/model-function/generate-json/generateJsonOrText.cjs +0 -42
  102. package/model-function/generate-json/generateJsonOrText.d.ts +0 -22
  103. package/model-function/generate-json/generateJsonOrText.js +0 -38
  104. /package/{model-function/generate-json/JsonGenerationEvent.cjs → core/structure/Schema.cjs} +0 -0
  105. /package/{model-function/generate-json/JsonGenerationEvent.js → core/structure/Schema.js} +0 -0
  106. /package/{model-function/generate-json/JsonGenerationModel.cjs → core/structure/StructureDefinition.cjs} +0 -0
  107. /package/{model-function/generate-json/JsonGenerationModel.js → core/structure/StructureDefinition.js} +0 -0
  108. /package/model-function/{generate-json/JsonOrTextGenerationModel.cjs → generate-structure/StructureGenerationEvent.cjs} +0 -0
  109. /package/model-function/{generate-json/JsonOrTextGenerationModel.js → generate-structure/StructureGenerationEvent.js} +0 -0
  110. /package/model-function/{generate-json/SchemaDefinition.cjs → generate-structure/StructureGenerationModel.cjs} +0 -0
  111. /package/model-function/{generate-json/SchemaDefinition.js → generate-structure/StructureGenerationModel.js} +0 -0
@@ -5,31 +5,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.OpenAIChatAutoFunctionPrompt = exports.OpenAIChatSingleFunctionPrompt = exports.OpenAIChatFunctionPrompt = void 0;
7
7
  const secure_json_parse_1 = __importDefault(require("secure-json-parse"));
8
- const zod_to_json_schema_1 = require("zod-to-json-schema");
9
8
  exports.OpenAIChatFunctionPrompt = {
10
9
  forOpenAIFunctionDescription(options) {
11
10
  return new OpenAIChatSingleFunctionPrompt(options);
12
11
  },
13
- forSchema({ messages, schemaDefinition, }) {
12
+ forStructure({ messages, structure, }) {
14
13
  return this.forOpenAIFunctionDescription({
15
14
  messages,
16
15
  fn: {
17
- name: schemaDefinition.name,
18
- description: schemaDefinition.description,
19
- parameters: schemaDefinition.schema,
16
+ name: structure.name,
17
+ description: structure.description,
18
+ parameters: structure.schema,
20
19
  },
21
20
  });
22
21
  },
23
- forSchemaCurried(messages) {
24
- return (schemaDefinition) => this.forSchema({
25
- messages,
26
- schemaDefinition,
27
- });
22
+ forStructureCurried(messages) {
23
+ return (structure) => this.forStructure({ messages, structure });
28
24
  },
29
25
  forTool({ messages, tool, }) {
30
- return this.forSchema({
26
+ return this.forStructure({
31
27
  messages,
32
- schemaDefinition: tool.inputSchemaDefinition,
28
+ structure: tool.inputStructureDefinition,
33
29
  });
34
30
  },
35
31
  forToolCurried(messages) {
@@ -38,23 +34,23 @@ exports.OpenAIChatFunctionPrompt = {
38
34
  forOpenAIFunctionDescriptions(options) {
39
35
  return new OpenAIChatAutoFunctionPrompt(options);
40
36
  },
41
- forSchemas({ messages, schemaDefinitions, }) {
37
+ forStructures({ messages, structures, }) {
42
38
  return this.forOpenAIFunctionDescriptions({
43
39
  messages,
44
- fns: schemaDefinitions.map((schemaDefinition) => ({
45
- name: schemaDefinition.name,
46
- description: schemaDefinition.description,
47
- parameters: schemaDefinition.schema,
40
+ fns: structures.map((structure) => ({
41
+ name: structure.name,
42
+ description: structure.description,
43
+ parameters: structure.schema,
48
44
  })),
49
45
  });
50
46
  },
51
- forSchemasCurried(messages) {
52
- return (schemaDefinitions) => this.forSchemas({ messages, schemaDefinitions });
47
+ forStructuresCurried(messages) {
48
+ return (structures) => this.forStructures({ messages, structures });
53
49
  },
54
50
  forTools({ messages, tools, }) {
55
- return this.forSchemas({
51
+ return this.forStructures({
56
52
  messages,
57
- schemaDefinitions: tools.map((tool) => tool.inputSchemaDefinition),
53
+ structures: tools.map((tool) => tool.inputStructureDefinition),
58
54
  });
59
55
  },
60
56
  forToolsCurried(messages) {
@@ -86,7 +82,7 @@ class OpenAIChatSingleFunctionPrompt {
86
82
  {
87
83
  name: this.fn.name,
88
84
  description: this.fn.description,
89
- parameters: (0, zod_to_json_schema_1.zodToJsonSchema)(this.fn.parameters),
85
+ parameters: this.fn.parameters.getJsonSchema(),
90
86
  },
91
87
  ];
92
88
  }
@@ -109,18 +105,18 @@ class OpenAIChatAutoFunctionPrompt {
109
105
  this.messages = messages;
110
106
  this.fns = fns;
111
107
  }
112
- extractJsonAndText(response) {
108
+ extractStructureAndText(response) {
113
109
  const message = response.choices[0].message;
114
110
  const content = message.content;
115
111
  const functionCall = message.function_call;
116
112
  return functionCall == null
117
113
  ? {
118
- schema: null,
114
+ structure: null,
119
115
  value: null,
120
116
  text: content ?? "",
121
117
  }
122
118
  : {
123
- schema: functionCall.name,
119
+ structure: functionCall.name,
124
120
  value: secure_json_parse_1.default.parse(functionCall.arguments),
125
121
  text: content,
126
122
  };
@@ -132,7 +128,7 @@ class OpenAIChatAutoFunctionPrompt {
132
128
  return this.fns.map((fn) => ({
133
129
  name: fn.name,
134
130
  description: fn.description,
135
- parameters: (0, zod_to_json_schema_1.zodToJsonSchema)(fn.parameters),
131
+ parameters: fn.parameters.getJsonSchema(),
136
132
  }));
137
133
  }
138
134
  }
@@ -1,24 +1,24 @@
1
- import z from "zod";
2
- import { JsonOrTextGenerationPrompt } from "../../../model-function/generate-json/JsonOrTextGenerationModel.js";
3
- import { SchemaDefinition } from "../../../model-function/generate-json/SchemaDefinition.js";
1
+ import { Schema } from "../../../core/structure/Schema.js";
2
+ import { StructureDefinition } from "../../../core/structure/StructureDefinition.js";
3
+ import { StructureOrTextGenerationPrompt } from "../../../model-function/generate-structure/StructureOrTextGenerationModel.js";
4
4
  import { Tool } from "../../../tool/Tool.js";
5
5
  import { OpenAIChatMessage } from "./OpenAIChatMessage.js";
6
6
  import { OpenAIChatResponse } from "./OpenAIChatModel.js";
7
7
  export type OpenAIFunctionDescription<T> = {
8
8
  name: string;
9
9
  description?: string;
10
- parameters: z.Schema<T>;
10
+ parameters: Schema<T>;
11
11
  };
12
12
  export declare const OpenAIChatFunctionPrompt: {
13
13
  forOpenAIFunctionDescription<T>(options: {
14
14
  messages: OpenAIChatMessage[];
15
15
  fn: OpenAIFunctionDescription<T>;
16
16
  }): OpenAIChatSingleFunctionPrompt<T>;
17
- forSchema<STRUCTURE>({ messages, schemaDefinition, }: {
17
+ forStructure<STRUCTURE>({ messages, structure, }: {
18
18
  messages: OpenAIChatMessage[];
19
- schemaDefinition: SchemaDefinition<any, STRUCTURE>;
19
+ structure: StructureDefinition<any, STRUCTURE>;
20
20
  }): OpenAIChatSingleFunctionPrompt<STRUCTURE>;
21
- forSchemaCurried<STRUCTURE_1>(messages: OpenAIChatMessage[]): (schemaDefinition: SchemaDefinition<any, STRUCTURE_1>) => OpenAIChatSingleFunctionPrompt<STRUCTURE_1>;
21
+ forStructureCurried<STRUCTURE_1>(messages: OpenAIChatMessage[]): (structure: StructureDefinition<any, STRUCTURE_1>) => OpenAIChatSingleFunctionPrompt<STRUCTURE_1>;
22
22
  forTool<INPUT, OUTPUT>({ messages, tool, }: {
23
23
  messages: OpenAIChatMessage[];
24
24
  tool: Tool<any, INPUT, OUTPUT>;
@@ -28,18 +28,18 @@ export declare const OpenAIChatFunctionPrompt: {
28
28
  messages: OpenAIChatMessage[];
29
29
  fns: FUNCTIONS;
30
30
  }): OpenAIChatAutoFunctionPrompt<FUNCTIONS>;
31
- forSchemas<SCHEMAS extends SchemaDefinition<any, any>[]>({ messages, schemaDefinitions, }: {
31
+ forStructures<STRUCTURES extends StructureDefinition<any, any>[]>({ messages, structures, }: {
32
32
  messages: OpenAIChatMessage[];
33
- schemaDefinitions: SCHEMAS;
33
+ structures: STRUCTURES;
34
34
  }): OpenAIChatAutoFunctionPrompt<{
35
35
  name: any;
36
36
  description: string | undefined;
37
- parameters: z.ZodType<any, z.ZodTypeDef, any>;
37
+ parameters: Schema<any>;
38
38
  }[]>;
39
- forSchemasCurried<SCHEMAS_1 extends SchemaDefinition<any, any>[]>(messages: OpenAIChatMessage[]): (schemaDefinitions: SCHEMAS_1) => OpenAIChatAutoFunctionPrompt<{
39
+ forStructuresCurried<STRUCTURE_2 extends StructureDefinition<any, any>[]>(messages: OpenAIChatMessage[]): (structures: STRUCTURE_2) => OpenAIChatAutoFunctionPrompt<{
40
40
  name: any;
41
41
  description: string | undefined;
42
- parameters: z.ZodType<any, z.ZodTypeDef, any>;
42
+ parameters: Schema<any>;
43
43
  }[]>;
44
44
  forTools<TOOLS extends Tool<any, any, any>[]>({ messages, tools, }: {
45
45
  messages: OpenAIChatMessage[];
@@ -47,12 +47,12 @@ export declare const OpenAIChatFunctionPrompt: {
47
47
  }): OpenAIChatAutoFunctionPrompt<{
48
48
  name: any;
49
49
  description: string | undefined;
50
- parameters: z.ZodType<any, z.ZodTypeDef, any>;
50
+ parameters: Schema<any>;
51
51
  }[]>;
52
52
  forToolsCurried<TOOLS_1 extends Tool<any, any, any>[]>(messages: OpenAIChatMessage[]): (tools: TOOLS_1) => OpenAIChatAutoFunctionPrompt<{
53
53
  name: any;
54
54
  description: string | undefined;
55
- parameters: z.ZodType<any, z.ZodTypeDef, any>;
55
+ parameters: Schema<any>;
56
56
  }[]>;
57
57
  };
58
58
  export declare class OpenAIChatSingleFunctionPrompt<FUNCTION> {
@@ -68,27 +68,22 @@ export declare class OpenAIChatSingleFunctionPrompt<FUNCTION> {
68
68
  get functions(): {
69
69
  name: string;
70
70
  description: string | undefined;
71
- parameters: import("zod-to-json-schema/src/parseDef.js").JsonSchema7Type & {
72
- $schema?: string | undefined;
73
- definitions?: {
74
- [key: string]: import("zod-to-json-schema/src/parseDef.js").JsonSchema7Type;
75
- } | undefined;
76
- };
71
+ parameters: unknown;
77
72
  }[];
78
73
  }
79
- export declare class OpenAIChatAutoFunctionPrompt<FUNCTIONS extends Array<OpenAIFunctionDescription<any>>> implements JsonOrTextGenerationPrompt<OpenAIChatResponse> {
74
+ export declare class OpenAIChatAutoFunctionPrompt<FUNCTIONS extends Array<OpenAIFunctionDescription<any>>> implements StructureOrTextGenerationPrompt<OpenAIChatResponse> {
80
75
  readonly messages: OpenAIChatMessage[];
81
76
  readonly fns: FUNCTIONS;
82
77
  constructor({ messages, fns, }: {
83
78
  messages: OpenAIChatMessage[];
84
79
  fns: FUNCTIONS;
85
80
  });
86
- extractJsonAndText(response: OpenAIChatResponse): {
87
- schema: null;
81
+ extractStructureAndText(response: OpenAIChatResponse): {
82
+ structure: null;
88
83
  value: null;
89
84
  text: string;
90
85
  } | {
91
- schema: string;
86
+ structure: string;
92
87
  value: any;
93
88
  text: string | null;
94
89
  };
@@ -96,11 +91,6 @@ export declare class OpenAIChatAutoFunctionPrompt<FUNCTIONS extends Array<OpenAI
96
91
  get functions(): {
97
92
  name: string;
98
93
  description: string | undefined;
99
- parameters: import("zod-to-json-schema/src/parseDef.js").JsonSchema7Type & {
100
- $schema?: string | undefined;
101
- definitions?: {
102
- [key: string]: import("zod-to-json-schema/src/parseDef.js").JsonSchema7Type;
103
- } | undefined;
104
- };
94
+ parameters: unknown;
105
95
  }[];
106
96
  }
@@ -1,29 +1,25 @@
1
1
  import SecureJSON from "secure-json-parse";
2
- import { zodToJsonSchema } from "zod-to-json-schema";
3
2
  export const OpenAIChatFunctionPrompt = {
4
3
  forOpenAIFunctionDescription(options) {
5
4
  return new OpenAIChatSingleFunctionPrompt(options);
6
5
  },
7
- forSchema({ messages, schemaDefinition, }) {
6
+ forStructure({ messages, structure, }) {
8
7
  return this.forOpenAIFunctionDescription({
9
8
  messages,
10
9
  fn: {
11
- name: schemaDefinition.name,
12
- description: schemaDefinition.description,
13
- parameters: schemaDefinition.schema,
10
+ name: structure.name,
11
+ description: structure.description,
12
+ parameters: structure.schema,
14
13
  },
15
14
  });
16
15
  },
17
- forSchemaCurried(messages) {
18
- return (schemaDefinition) => this.forSchema({
19
- messages,
20
- schemaDefinition,
21
- });
16
+ forStructureCurried(messages) {
17
+ return (structure) => this.forStructure({ messages, structure });
22
18
  },
23
19
  forTool({ messages, tool, }) {
24
- return this.forSchema({
20
+ return this.forStructure({
25
21
  messages,
26
- schemaDefinition: tool.inputSchemaDefinition,
22
+ structure: tool.inputStructureDefinition,
27
23
  });
28
24
  },
29
25
  forToolCurried(messages) {
@@ -32,23 +28,23 @@ export const OpenAIChatFunctionPrompt = {
32
28
  forOpenAIFunctionDescriptions(options) {
33
29
  return new OpenAIChatAutoFunctionPrompt(options);
34
30
  },
35
- forSchemas({ messages, schemaDefinitions, }) {
31
+ forStructures({ messages, structures, }) {
36
32
  return this.forOpenAIFunctionDescriptions({
37
33
  messages,
38
- fns: schemaDefinitions.map((schemaDefinition) => ({
39
- name: schemaDefinition.name,
40
- description: schemaDefinition.description,
41
- parameters: schemaDefinition.schema,
34
+ fns: structures.map((structure) => ({
35
+ name: structure.name,
36
+ description: structure.description,
37
+ parameters: structure.schema,
42
38
  })),
43
39
  });
44
40
  },
45
- forSchemasCurried(messages) {
46
- return (schemaDefinitions) => this.forSchemas({ messages, schemaDefinitions });
41
+ forStructuresCurried(messages) {
42
+ return (structures) => this.forStructures({ messages, structures });
47
43
  },
48
44
  forTools({ messages, tools, }) {
49
- return this.forSchemas({
45
+ return this.forStructures({
50
46
  messages,
51
- schemaDefinitions: tools.map((tool) => tool.inputSchemaDefinition),
47
+ structures: tools.map((tool) => tool.inputStructureDefinition),
52
48
  });
53
49
  },
54
50
  forToolsCurried(messages) {
@@ -80,7 +76,7 @@ export class OpenAIChatSingleFunctionPrompt {
80
76
  {
81
77
  name: this.fn.name,
82
78
  description: this.fn.description,
83
- parameters: zodToJsonSchema(this.fn.parameters),
79
+ parameters: this.fn.parameters.getJsonSchema(),
84
80
  },
85
81
  ];
86
82
  }
@@ -102,18 +98,18 @@ export class OpenAIChatAutoFunctionPrompt {
102
98
  this.messages = messages;
103
99
  this.fns = fns;
104
100
  }
105
- extractJsonAndText(response) {
101
+ extractStructureAndText(response) {
106
102
  const message = response.choices[0].message;
107
103
  const content = message.content;
108
104
  const functionCall = message.function_call;
109
105
  return functionCall == null
110
106
  ? {
111
- schema: null,
107
+ structure: null,
112
108
  value: null,
113
109
  text: content ?? "",
114
110
  }
115
111
  : {
116
- schema: functionCall.name,
112
+ structure: functionCall.name,
117
113
  value: SecureJSON.parse(functionCall.arguments),
118
114
  text: content,
119
115
  };
@@ -125,7 +121,7 @@ export class OpenAIChatAutoFunctionPrompt {
125
121
  return this.fns.map((fn) => ({
126
122
  name: fn.name,
127
123
  description: fn.description,
128
- parameters: zodToJsonSchema(fn.parameters),
124
+ parameters: fn.parameters.getJsonSchema(),
129
125
  }));
130
126
  }
131
127
  }
@@ -9,6 +9,6 @@ export * from "./OpenAITranscriptionModel.js";
9
9
  export * from "./TikTokenTokenizer.js";
10
10
  export * from "./chat/OpenAIChatMessage.js";
11
11
  export * from "./chat/OpenAIChatModel.js";
12
- export { OpenAIChatFunctionPrompt, OpenAIFunctionDescription, } from "./chat/OpenAIChatPrompt.js";
12
+ export { OpenAIChatFunctionPrompt } from "./chat/OpenAIChatPrompt.js";
13
13
  export { OpenAIChatDelta } from "./chat/OpenAIChatStreamIterable.js";
14
14
  export * from "./chat/countOpenAIChatMessageTokens.js";
@@ -9,5 +9,5 @@ export * from "./OpenAITranscriptionModel.js";
9
9
  export * from "./TikTokenTokenizer.js";
10
10
  export * from "./chat/OpenAIChatMessage.js";
11
11
  export * from "./chat/OpenAIChatModel.js";
12
- export { OpenAIChatFunctionPrompt, } from "./chat/OpenAIChatPrompt.js";
12
+ export { OpenAIChatFunctionPrompt } from "./chat/OpenAIChatPrompt.js";
13
13
  export * from "./chat/countOpenAIChatMessageTokens.js";
package/package.json CHANGED
@@ -1,21 +1,20 @@
1
1
  {
2
2
  "name": "modelfusion",
3
- "description": "Build AI applications, chatbots, and agents with JavaScript and TypeScript.",
4
- "version": "0.29.1",
3
+ "description": "Build multimodal applications, chatbots, and agents with JavaScript and TypeScript.",
4
+ "version": "0.30.1",
5
5
  "author": "Lars Grammel",
6
6
  "license": "MIT",
7
7
  "keywords": [
8
8
  "llm",
9
9
  "embedding",
10
10
  "openai",
11
- "cohere",
12
11
  "huggingface",
13
- "stability-ai",
14
12
  "gpt-3",
15
13
  "gpt-4",
16
14
  "whisper",
17
15
  "chatbot",
18
- "ai"
16
+ "ai",
17
+ "multimodal"
19
18
  ],
20
19
  "homepage": "https://modelfusion.dev/",
21
20
  "repository": {
@@ -55,7 +54,9 @@
55
54
  "eventsource-parser": "1.0.0",
56
55
  "js-tiktoken": "1.0.7",
57
56
  "nanoid": "3.3.6",
58
- "secure-json-parse": "2.7.0"
57
+ "secure-json-parse": "2.7.0",
58
+ "zod": "3.22.2",
59
+ "zod-to-json-schema": "3.21.4"
59
60
  },
60
61
  "devDependencies": {
61
62
  "@pinecone-database/pinecone": "^0.1.6",
@@ -70,14 +71,10 @@
70
71
  "lint-staged": "14.0.1",
71
72
  "prettier": "3.0.3",
72
73
  "rimraf": "5.0.1",
73
- "typescript": "5.1.6",
74
- "zod": "3.22.2",
75
- "zod-to-json-schema": "3.21.4"
74
+ "typescript": "5.1.6"
76
75
  },
77
76
  "peerDependencies": {
78
- "@pinecone-database/pinecone": "*",
79
- "zod": "^3",
80
- "zod-to-json-schema": "^3"
77
+ "@pinecone-database/pinecone": "*"
81
78
  },
82
79
  "peerDependenciesMeta": {
83
80
  "@pinecone-database/pinecone": {
package/tool/Tool.cjs CHANGED
@@ -71,10 +71,10 @@ class Tool {
71
71
  this.execute = execute;
72
72
  }
73
73
  /**
74
- * Provdes a schema definition with the name, description and schema of the input.
74
+ * Provdes a structure definition with the name, description and schema of the input.
75
75
  * This is used by `useTool`.
76
76
  */
77
- get inputSchemaDefinition() {
77
+ get inputStructureDefinition() {
78
78
  return {
79
79
  name: this.name,
80
80
  description: this.description,
package/tool/Tool.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { z } from "zod";
2
- import { SchemaDefinition } from "../model-function/generate-json/SchemaDefinition.js";
3
1
  import { FunctionOptions } from "../core/FunctionOptions.js";
2
+ import { Schema } from "../core/structure/Schema.js";
3
+ import { StructureDefinition } from "../core/structure/StructureDefinition.js";
4
4
  /**
5
5
  * A tool is a function with a name, description and defined inputs that can be used
6
6
  * by agents and chatbots.
@@ -20,11 +20,11 @@ export declare class Tool<NAME extends string, INPUT, OUTPUT> {
20
20
  * The schema of the input that the tool expects. The language model will use this to generate the input.
21
21
  * Use descriptions to make the input understandable for the language model.
22
22
  */
23
- readonly inputSchema: z.ZodSchema<INPUT>;
23
+ readonly inputSchema: Schema<INPUT>;
24
24
  /**
25
25
  * An optional schema of the output that the tool produces. This will be used to validate the output.
26
26
  */
27
- readonly outputSchema?: z.ZodSchema<OUTPUT>;
27
+ readonly outputSchema?: Schema<OUTPUT>;
28
28
  /**
29
29
  * The actual execution function of the tool.
30
30
  */
@@ -32,13 +32,13 @@ export declare class Tool<NAME extends string, INPUT, OUTPUT> {
32
32
  constructor({ name, description, inputSchema, outputSchema, execute, }: {
33
33
  name: NAME;
34
34
  description: string;
35
- inputSchema: z.ZodSchema<INPUT>;
36
- outputSchema?: z.ZodSchema<OUTPUT>;
35
+ inputSchema: Schema<INPUT>;
36
+ outputSchema?: Schema<OUTPUT>;
37
37
  execute(input: INPUT, options?: FunctionOptions): PromiseLike<OUTPUT>;
38
38
  });
39
39
  /**
40
- * Provdes a schema definition with the name, description and schema of the input.
40
+ * Provdes a structure definition with the name, description and schema of the input.
41
41
  * This is used by `useTool`.
42
42
  */
43
- get inputSchemaDefinition(): SchemaDefinition<NAME, INPUT>;
43
+ get inputStructureDefinition(): StructureDefinition<NAME, INPUT>;
44
44
  }
package/tool/Tool.js CHANGED
@@ -68,10 +68,10 @@ export class Tool {
68
68
  this.execute = execute;
69
69
  }
70
70
  /**
71
- * Provdes a schema definition with the name, description and schema of the input.
71
+ * Provdes a structure definition with the name, description and schema of the input.
72
72
  * This is used by `useTool`.
73
73
  */
74
- get inputSchemaDefinition() {
74
+ get inputStructureDefinition() {
75
75
  return {
76
76
  name: this.name,
77
77
  description: this.description,
@@ -2,20 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WebSearchTool = void 0;
4
4
  const zod_1 = require("zod");
5
+ const ZodSchema_js_1 = require("../core/structure/ZodSchema.cjs");
5
6
  const Tool_js_1 = require("./Tool.cjs");
6
- const OUTPUT_SCHEMA = zod_1.z.object({
7
+ const OUTPUT_SCHEMA = new ZodSchema_js_1.ZodSchema(zod_1.z.object({
7
8
  results: zod_1.z.array(zod_1.z.object({
8
9
  title: zod_1.z.string(),
9
10
  link: zod_1.z.string().url(),
10
11
  snippet: zod_1.z.string(),
11
12
  })),
12
- });
13
+ }));
13
14
  // expose the schemas to library consumers:
14
15
  const createInputSchema = (description) =>
15
16
  // same structure, but with description:
16
- zod_1.z.object({
17
+ new ZodSchema_js_1.ZodSchema(zod_1.z.object({
17
18
  query: zod_1.z.string().describe(description),
18
- });
19
+ }));
19
20
  /**
20
21
  * A tool for searching the web.
21
22
  *
@@ -1,27 +1,7 @@
1
- import { z } from "zod";
2
1
  import { FunctionOptions } from "../core/FunctionOptions.js";
2
+ import { ZodSchema } from "../core/structure/ZodSchema.js";
3
3
  import { Tool } from "./Tool.js";
4
- declare const OUTPUT_SCHEMA: z.ZodObject<{
5
- results: z.ZodArray<z.ZodObject<{
6
- title: z.ZodString;
7
- link: z.ZodString;
8
- snippet: z.ZodString;
9
- }, "strip", z.ZodTypeAny, {
10
- link: string;
11
- title: string;
12
- snippet: string;
13
- }, {
14
- link: string;
15
- title: string;
16
- snippet: string;
17
- }>, "many">;
18
- }, "strip", z.ZodTypeAny, {
19
- results: {
20
- link: string;
21
- title: string;
22
- snippet: string;
23
- }[];
24
- }, {
4
+ declare const OUTPUT_SCHEMA: ZodSchema<{
25
5
  results: {
26
6
  link: string;
27
7
  title: string;
@@ -1,18 +1,19 @@
1
1
  import { z } from "zod";
2
+ import { ZodSchema } from "../core/structure/ZodSchema.js";
2
3
  import { Tool } from "./Tool.js";
3
- const OUTPUT_SCHEMA = z.object({
4
+ const OUTPUT_SCHEMA = new ZodSchema(z.object({
4
5
  results: z.array(z.object({
5
6
  title: z.string(),
6
7
  link: z.string().url(),
7
8
  snippet: z.string(),
8
9
  })),
9
- });
10
+ }));
10
11
  // expose the schemas to library consumers:
11
12
  const createInputSchema = (description) =>
12
13
  // same structure, but with description:
13
- z.object({
14
+ new ZodSchema(z.object({
14
15
  query: z.string().describe(description),
15
- });
16
+ }));
16
17
  /**
17
18
  * A tool for searching the web.
18
19
  *
@@ -5,9 +5,9 @@ const nanoid_1 = require("nanoid");
5
5
  const FunctionEventSource_js_1 = require("../core/FunctionEventSource.cjs");
6
6
  const GlobalFunctionLogging_js_1 = require("../core/GlobalFunctionLogging.cjs");
7
7
  const GlobalFunctionObservers_js_1 = require("../core/GlobalFunctionObservers.cjs");
8
+ const AbortError_js_1 = require("../core/api/AbortError.cjs");
8
9
  const getFunctionCallLogger_js_1 = require("../core/getFunctionCallLogger.cjs");
9
10
  const DurationMeasurement_js_1 = require("../util/DurationMeasurement.cjs");
10
- const AbortError_js_1 = require("../core/api/AbortError.cjs");
11
11
  const runSafe_js_1 = require("../util/runSafe.cjs");
12
12
  const ToolExecutionError_js_1 = require("./ToolExecutionError.cjs");
13
13
  class ExecuteToolPromise extends Promise {
@@ -1,4 +1,3 @@
1
- import { z } from "zod";
2
1
  import { FunctionOptions } from "../core/FunctionOptions.js";
3
2
  import { Tool } from "./Tool.js";
4
3
  export type ExecuteToolMetadata = {
@@ -29,4 +28,4 @@ export declare class ExecuteToolPromise<OUTPUT> extends Promise<OUTPUT> {
29
28
  /**
30
29
  * `executeTool` directly executes a tool with the given parameters.
31
30
  */
32
- export declare function executeTool<TOOL extends Tool<any, any, any>>(tool: TOOL, input: z.infer<TOOL["inputSchema"]>, options?: FunctionOptions): ExecuteToolPromise<ReturnType<TOOL["execute"]>>;
31
+ export declare function executeTool<TOOL extends Tool<any, any, any>>(tool: TOOL, input: TOOL["inputSchema"]["_type"], options?: FunctionOptions): ExecuteToolPromise<ReturnType<TOOL["execute"]>>;
@@ -2,9 +2,9 @@ import { nanoid as createId } from "nanoid";
2
2
  import { FunctionEventSource } from "../core/FunctionEventSource.js";
3
3
  import { getGlobalFunctionLogging } from "../core/GlobalFunctionLogging.js";
4
4
  import { getGlobalFunctionObservers } from "../core/GlobalFunctionObservers.js";
5
+ import { AbortError } from "../core/api/AbortError.js";
5
6
  import { getFunctionCallLogger } from "../core/getFunctionCallLogger.js";
6
7
  import { startDurationMeasurement } from "../util/DurationMeasurement.js";
7
- import { AbortError } from "../core/api/AbortError.js";
8
8
  import { runSafe } from "../util/runSafe.js";
9
9
  import { ToolExecutionError } from "./ToolExecutionError.js";
10
10
  export class ExecuteToolPromise extends Promise {
package/tool/useTool.cjs CHANGED
@@ -1,20 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useTool = void 0;
4
- const generateJson_js_1 = require("../model-function/generate-json/generateJson.cjs");
4
+ const generateStructure_js_1 = require("../model-function/generate-structure/generateStructure.cjs");
5
5
  const executeTool_js_1 = require("./executeTool.cjs");
6
6
  // In this file, using 'any' is required to allow for flexibility in the inputs. The actual types are
7
7
  // retrieved through lookups such as TOOL["name"], such that any does not affect any client.
8
8
  /* eslint-disable @typescript-eslint/no-explicit-any */
9
9
  /**
10
- * `useTool` uses `generateJson` to generate parameters for a tool and then executes the tool with the parameters.
10
+ * `useTool` uses `generateStructure` to generate parameters for a tool and then executes the tool with the parameters.
11
11
  *
12
12
  * @returns The result contains the name of the tool (`tool` property),
13
13
  * the parameters (`parameters` property, typed),
14
14
  * and the result of the tool execution (`result` property, typed).
15
15
  */
16
16
  async function useTool(model, tool, prompt, options) {
17
- const { output: value } = await (0, generateJson_js_1.generateJson)(model, {
17
+ const { output: value } = await (0, generateStructure_js_1.generateStructure)(model, {
18
18
  name: tool.name,
19
19
  description: tool.description,
20
20
  schema: tool.inputSchema,
package/tool/useTool.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import { ModelFunctionOptions } from "../model-function/ModelFunctionOptions.js";
2
- import { JsonGenerationModel, JsonGenerationModelSettings } from "../model-function/generate-json/JsonGenerationModel.js";
2
+ import { StructureGenerationModel, StructureGenerationModelSettings } from "../model-function/generate-structure/StructureGenerationModel.js";
3
3
  import { Tool } from "./Tool.js";
4
4
  /**
5
- * `useTool` uses `generateJson` to generate parameters for a tool and then executes the tool with the parameters.
5
+ * `useTool` uses `generateStructure` to generate parameters for a tool and then executes the tool with the parameters.
6
6
  *
7
7
  * @returns The result contains the name of the tool (`tool` property),
8
8
  * the parameters (`parameters` property, typed),
9
9
  * and the result of the tool execution (`result` property, typed).
10
10
  */
11
- export declare function useTool<PROMPT, RESPONSE, SETTINGS extends JsonGenerationModelSettings, TOOL extends Tool<any, any, any>>(model: JsonGenerationModel<PROMPT, RESPONSE, SETTINGS>, tool: TOOL, prompt: (tool: TOOL) => PROMPT, options?: ModelFunctionOptions<SETTINGS>): Promise<{
11
+ export declare function useTool<PROMPT, RESPONSE, SETTINGS extends StructureGenerationModelSettings, TOOL extends Tool<any, any, any>>(model: StructureGenerationModel<PROMPT, RESPONSE, SETTINGS>, tool: TOOL, prompt: (tool: TOOL) => PROMPT, options?: ModelFunctionOptions<SETTINGS>): Promise<{
12
12
  tool: TOOL["name"];
13
13
  parameters: TOOL["inputSchema"];
14
14
  result: Awaited<ReturnType<TOOL["execute"]>>;