modelfusion 0.121.2 → 0.122.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 (83) hide show
  1. package/CHANGELOG.md +41 -1
  2. package/README.md +86 -84
  3. package/classifier/SemanticClassifier.cjs +8 -2
  4. package/classifier/SemanticClassifier.js +8 -2
  5. package/model-function/ModelCallEvent.d.ts +3 -0
  6. package/model-function/embed/embed.cjs +14 -14
  7. package/model-function/embed/embed.d.ts +24 -18
  8. package/model-function/embed/embed.js +14 -14
  9. package/model-function/generate-image/generateImage.cjs +6 -6
  10. package/model-function/generate-image/generateImage.d.ts +12 -9
  11. package/model-function/generate-image/generateImage.js +6 -6
  12. package/model-function/generate-speech/generateSpeech.cjs +7 -7
  13. package/model-function/generate-speech/generateSpeech.d.ts +12 -9
  14. package/model-function/generate-speech/generateSpeech.js +7 -7
  15. package/model-function/generate-speech/streamSpeech.cjs +6 -6
  16. package/model-function/generate-speech/streamSpeech.d.ts +12 -8
  17. package/model-function/generate-speech/streamSpeech.js +6 -6
  18. package/model-function/generate-structure/StructureFromTextGenerationModel.cjs +5 -3
  19. package/model-function/generate-structure/StructureFromTextGenerationModel.d.ts +1 -1
  20. package/model-function/generate-structure/StructureFromTextGenerationModel.js +5 -3
  21. package/model-function/generate-structure/StructureFromTextStreamingModel.cjs +5 -1
  22. package/model-function/generate-structure/StructureFromTextStreamingModel.js +5 -1
  23. package/model-function/generate-structure/StructureGenerationModel.d.ts +1 -1
  24. package/model-function/generate-structure/generateStructure.cjs +8 -8
  25. package/model-function/generate-structure/generateStructure.d.ts +17 -10
  26. package/model-function/generate-structure/generateStructure.js +8 -8
  27. package/model-function/generate-structure/streamStructure.cjs +6 -6
  28. package/model-function/generate-structure/streamStructure.d.ts +16 -10
  29. package/model-function/generate-structure/streamStructure.js +6 -6
  30. package/model-function/generate-text/generateText.cjs +6 -6
  31. package/model-function/generate-text/generateText.d.ts +12 -9
  32. package/model-function/generate-text/generateText.js +6 -6
  33. package/model-function/generate-text/streamText.cjs +6 -6
  34. package/model-function/generate-text/streamText.d.ts +12 -8
  35. package/model-function/generate-text/streamText.js +6 -6
  36. package/model-function/generate-transcription/generateTranscription.cjs +3 -3
  37. package/model-function/generate-transcription/generateTranscription.d.ts +12 -9
  38. package/model-function/generate-transcription/generateTranscription.js +3 -3
  39. package/model-provider/cohere/CohereTextGenerationModel.d.ts +12 -12
  40. package/model-provider/cohere/CohereTextGenerationModel.test.cjs +7 -4
  41. package/model-provider/cohere/CohereTextGenerationModel.test.js +7 -4
  42. package/model-provider/llamacpp/LlamaCppCompletionModel.d.ts +10 -10
  43. package/model-provider/llamacpp/LlamaCppCompletionModel.test.cjs +4 -1
  44. package/model-provider/llamacpp/LlamaCppCompletionModel.test.js +4 -1
  45. package/model-provider/mistral/MistralChatModel.test.cjs +15 -8
  46. package/model-provider/mistral/MistralChatModel.test.js +15 -8
  47. package/model-provider/ollama/OllamaChatModel.test.cjs +6 -1
  48. package/model-provider/ollama/OllamaChatModel.test.js +6 -1
  49. package/model-provider/ollama/OllamaCompletionModel.test.cjs +31 -16
  50. package/model-provider/ollama/OllamaCompletionModel.test.js +31 -16
  51. package/model-provider/openai/OpenAIChatFunctionCallStructureGenerationModel.cjs +4 -4
  52. package/model-provider/openai/OpenAIChatFunctionCallStructureGenerationModel.d.ts +1 -1
  53. package/model-provider/openai/OpenAIChatFunctionCallStructureGenerationModel.js +4 -4
  54. package/model-provider/openai/OpenAIChatModel.test.cjs +21 -14
  55. package/model-provider/openai/OpenAIChatModel.test.js +21 -14
  56. package/model-provider/openai/OpenAICompletionModel.test.cjs +15 -9
  57. package/model-provider/openai/OpenAICompletionModel.test.js +15 -9
  58. package/package.json +1 -1
  59. package/tool/execute-tool/executeTool.cjs +5 -5
  60. package/tool/execute-tool/executeTool.d.ts +8 -4
  61. package/tool/execute-tool/executeTool.js +5 -5
  62. package/tool/execute-tool/safeExecuteToolCall.cjs +1 -1
  63. package/tool/execute-tool/safeExecuteToolCall.js +1 -1
  64. package/tool/generate-tool-call/TextGenerationToolCallModel.cjs +4 -2
  65. package/tool/generate-tool-call/TextGenerationToolCallModel.js +4 -2
  66. package/tool/generate-tool-call/generateToolCall.cjs +7 -7
  67. package/tool/generate-tool-call/generateToolCall.d.ts +11 -5
  68. package/tool/generate-tool-call/generateToolCall.js +7 -7
  69. package/tool/generate-tool-calls/TextGenerationToolCallsModel.cjs +4 -2
  70. package/tool/generate-tool-calls/TextGenerationToolCallsModel.js +4 -2
  71. package/tool/generate-tool-calls/generateToolCalls.cjs +3 -3
  72. package/tool/generate-tool-calls/generateToolCalls.d.ts +11 -5
  73. package/tool/generate-tool-calls/generateToolCalls.js +3 -3
  74. package/tool/use-tool/useTool.cjs +2 -2
  75. package/tool/use-tool/useTool.d.ts +5 -1
  76. package/tool/use-tool/useTool.js +2 -2
  77. package/tool/use-tools/useTools.cjs +8 -2
  78. package/tool/use-tools/useTools.d.ts +5 -1
  79. package/tool/use-tools/useTools.js +8 -2
  80. package/vector-index/VectorIndexRetriever.cjs +5 -1
  81. package/vector-index/VectorIndexRetriever.js +5 -1
  82. package/vector-index/upsertIntoVectorIndex.cjs +5 -1
  83. package/vector-index/upsertIntoVectorIndex.js +5 -1
@@ -30,9 +30,11 @@ class TextGenerationToolCallsModel {
30
30
  return this.model.settingsForEvent;
31
31
  }
32
32
  async doGenerateToolCalls(tools, prompt, options) {
33
- const { rawResponse, text: generatedText, metadata, } = await (0, generateText_js_1.generateText)(this.model, this.template.createPrompt(prompt, tools), {
34
- ...options,
33
+ const { rawResponse, text: generatedText, metadata, } = await (0, generateText_js_1.generateText)({
34
+ model: this.model,
35
+ prompt: this.template.createPrompt(prompt, tools),
35
36
  fullResponse: true,
37
+ ...options,
36
38
  });
37
39
  try {
38
40
  const { text, toolCalls } = this.template.extractToolCallsAndText(generatedText);
@@ -27,9 +27,11 @@ export class TextGenerationToolCallsModel {
27
27
  return this.model.settingsForEvent;
28
28
  }
29
29
  async doGenerateToolCalls(tools, prompt, options) {
30
- const { rawResponse, text: generatedText, metadata, } = await generateText(this.model, this.template.createPrompt(prompt, tools), {
31
- ...options,
30
+ const { rawResponse, text: generatedText, metadata, } = await generateText({
31
+ model: this.model,
32
+ prompt: this.template.createPrompt(prompt, tools),
32
33
  fullResponse: true,
34
+ ...options,
33
35
  });
34
36
  try {
35
37
  const { text, toolCalls } = this.template.extractToolCallsAndText(generatedText);
@@ -4,12 +4,12 @@ exports.generateToolCalls = void 0;
4
4
  const executeStandardCall_js_1 = require("../../model-function/executeStandardCall.cjs");
5
5
  const NoSuchToolDefinitionError_js_1 = require("../NoSuchToolDefinitionError.cjs");
6
6
  const ToolCallArgumentsValidationError_js_1 = require("../ToolCallArgumentsValidationError.cjs");
7
- async function generateToolCalls(model, tools, prompt, options) {
7
+ async function generateToolCalls({ model, tools, prompt, fullResponse, ...options }) {
8
8
  // Note: PROMPT must not be a function.
9
9
  const expandedPrompt = typeof prompt === "function"
10
10
  ? prompt(tools)
11
11
  : prompt;
12
- const fullResponse = await (0, executeStandardCall_js_1.executeStandardCall)({
12
+ const callResponse = await (0, executeStandardCall_js_1.executeStandardCall)({
13
13
  functionType: "generate-tool-calls",
14
14
  input: expandedPrompt,
15
15
  model,
@@ -58,6 +58,6 @@ async function generateToolCalls(model, tools, prompt, options) {
58
58
  };
59
59
  },
60
60
  });
61
- return options?.fullResponse ? fullResponse : fullResponse.value;
61
+ return fullResponse ? callResponse : callResponse.value;
62
62
  }
63
63
  exports.generateToolCalls = generateToolCalls;
@@ -14,15 +14,21 @@ type ToToolCallUnion<T> = {
14
14
  } : never;
15
15
  }[keyof T];
16
16
  type ToOutputValue<TOOL_CALLS extends ToolCallDefinitionArray<ToolDefinition<any, any>[]>> = ToToolCallUnion<ToToolCallDefinitionMap<TOOL_CALLS>>;
17
- export declare function generateToolCalls<TOOLS extends Array<ToolDefinition<any, any>>, PROMPT>(model: ToolCallsGenerationModel<PROMPT, ToolCallsGenerationModelSettings>, tools: TOOLS, prompt: PROMPT | ((tools: TOOLS) => PROMPT), options?: FunctionOptions & {
17
+ export declare function generateToolCalls<TOOLS extends Array<ToolDefinition<any, any>>, PROMPT>(params: {
18
+ model: ToolCallsGenerationModel<PROMPT, ToolCallsGenerationModelSettings>;
19
+ tools: TOOLS;
20
+ prompt: PROMPT | ((tools: TOOLS) => PROMPT);
18
21
  fullResponse?: false;
19
- }): Promise<{
22
+ } & FunctionOptions): Promise<{
20
23
  text: string | null;
21
24
  toolCalls: Array<ToOutputValue<TOOLS>> | null;
22
25
  }>;
23
- export declare function generateToolCalls<TOOLS extends ToolDefinition<any, any>[], PROMPT>(model: ToolCallsGenerationModel<PROMPT, ToolCallsGenerationModelSettings>, tools: TOOLS, prompt: PROMPT | ((tools: TOOLS) => PROMPT), options: FunctionOptions & {
24
- fullResponse?: boolean;
25
- }): Promise<{
26
+ export declare function generateToolCalls<TOOLS extends ToolDefinition<any, any>[], PROMPT>(params: {
27
+ model: ToolCallsGenerationModel<PROMPT, ToolCallsGenerationModelSettings>;
28
+ tools: TOOLS;
29
+ prompt: PROMPT | ((tools: TOOLS) => PROMPT);
30
+ fullResponse: true;
31
+ } & FunctionOptions): Promise<{
26
32
  value: {
27
33
  text: string | null;
28
34
  toolCalls: Array<ToOutputValue<TOOLS>>;
@@ -1,12 +1,12 @@
1
1
  import { executeStandardCall } from "../../model-function/executeStandardCall.js";
2
2
  import { NoSuchToolDefinitionError } from "../NoSuchToolDefinitionError.js";
3
3
  import { ToolCallArgumentsValidationError } from "../ToolCallArgumentsValidationError.js";
4
- export async function generateToolCalls(model, tools, prompt, options) {
4
+ export async function generateToolCalls({ model, tools, prompt, fullResponse, ...options }) {
5
5
  // Note: PROMPT must not be a function.
6
6
  const expandedPrompt = typeof prompt === "function"
7
7
  ? prompt(tools)
8
8
  : prompt;
9
- const fullResponse = await executeStandardCall({
9
+ const callResponse = await executeStandardCall({
10
10
  functionType: "generate-tool-calls",
11
11
  input: expandedPrompt,
12
12
  model,
@@ -55,5 +55,5 @@ export async function generateToolCalls(model, tools, prompt, options) {
55
55
  };
56
56
  },
57
57
  });
58
- return options?.fullResponse ? fullResponse : fullResponse.value;
58
+ return fullResponse ? callResponse : callResponse.value;
59
59
  }
@@ -15,7 +15,7 @@ const generateToolCall_js_1 = require("../generate-tool-call/generateToolCall.cj
15
15
  * @see {@link generateToolCall}
16
16
  * @see {@link executeTool}
17
17
  */
18
- async function useTool(model, tool, prompt, options) {
18
+ async function useTool({ model, tool, prompt, ...options }) {
19
19
  // Note: PROMPT must not be a function.
20
20
  const expandedPrompt = typeof prompt === "function"
21
21
  ? prompt(tool)
@@ -24,7 +24,7 @@ async function useTool(model, tool, prompt, options) {
24
24
  options,
25
25
  input: expandedPrompt,
26
26
  functionType: "use-tool",
27
- execute: async (options) => (0, safeExecuteToolCall_js_1.safeExecuteToolCall)(tool, await (0, generateToolCall_js_1.generateToolCall)(model, tool, expandedPrompt, options), options),
27
+ execute: async (options) => (0, safeExecuteToolCall_js_1.safeExecuteToolCall)(tool, await (0, generateToolCall_js_1.generateToolCall)({ model, tool, prompt: expandedPrompt, ...options }), options),
28
28
  });
29
29
  }
30
30
  exports.useTool = useTool;
@@ -13,4 +13,8 @@ import { ToolCallGenerationModel, ToolCallGenerationModelSettings } from "../gen
13
13
  * @see {@link generateToolCall}
14
14
  * @see {@link executeTool}
15
15
  */
16
- export declare function useTool<PROMPT, TOOL extends Tool<string, any, any>>(model: ToolCallGenerationModel<PROMPT, ToolCallGenerationModelSettings>, tool: TOOL, prompt: PROMPT | ((tool: TOOL) => PROMPT), options?: FunctionOptions): Promise<ToolCallResult<TOOL["name"], TOOL["parameters"], Awaited<ReturnType<TOOL["execute"]>>>>;
16
+ export declare function useTool<PROMPT, TOOL extends Tool<string, any, any>>({ model, tool, prompt, ...options }: {
17
+ model: ToolCallGenerationModel<PROMPT, ToolCallGenerationModelSettings>;
18
+ tool: TOOL;
19
+ prompt: PROMPT | ((tool: TOOL) => PROMPT);
20
+ } & FunctionOptions): Promise<ToolCallResult<TOOL["name"], TOOL["parameters"], Awaited<ReturnType<TOOL["execute"]>>>>;
@@ -12,7 +12,7 @@ import { generateToolCall } from "../generate-tool-call/generateToolCall.js";
12
12
  * @see {@link generateToolCall}
13
13
  * @see {@link executeTool}
14
14
  */
15
- export async function useTool(model, tool, prompt, options) {
15
+ export async function useTool({ model, tool, prompt, ...options }) {
16
16
  // Note: PROMPT must not be a function.
17
17
  const expandedPrompt = typeof prompt === "function"
18
18
  ? prompt(tool)
@@ -21,6 +21,6 @@ export async function useTool(model, tool, prompt, options) {
21
21
  options,
22
22
  input: expandedPrompt,
23
23
  functionType: "use-tool",
24
- execute: async (options) => safeExecuteToolCall(tool, await generateToolCall(model, tool, expandedPrompt, options), options),
24
+ execute: async (options) => safeExecuteToolCall(tool, await generateToolCall({ model, tool, prompt: expandedPrompt, ...options }), options),
25
25
  });
26
26
  }
@@ -5,7 +5,7 @@ const executeFunctionCall_js_1 = require("../../core/executeFunctionCall.cjs");
5
5
  const ToolCallError_js_1 = require("../ToolCallError.cjs");
6
6
  const safeExecuteToolCall_js_1 = require("../execute-tool/safeExecuteToolCall.cjs");
7
7
  const generateToolCalls_js_1 = require("../generate-tool-calls/generateToolCalls.cjs");
8
- async function useTools(model, tools, prompt, options) {
8
+ async function useTools({ model, tools, prompt, ...options }) {
9
9
  // Note: PROMPT must not be a function.
10
10
  const expandedPrompt = typeof prompt === "function"
11
11
  ? prompt(tools)
@@ -15,7 +15,13 @@ async function useTools(model, tools, prompt, options) {
15
15
  input: expandedPrompt,
16
16
  functionType: "use-tools",
17
17
  execute: async (options) => {
18
- const modelResponse = await (0, generateToolCalls_js_1.generateToolCalls)(model, tools, expandedPrompt, { ...options, fullResponse: false });
18
+ const modelResponse = await (0, generateToolCalls_js_1.generateToolCalls)({
19
+ model,
20
+ tools,
21
+ prompt: expandedPrompt,
22
+ fullResponse: false,
23
+ ...options,
24
+ });
19
25
  const { toolCalls, text } = modelResponse;
20
26
  // no tool calls:
21
27
  if (toolCalls == null) {
@@ -11,7 +11,11 @@ type ToToolCallUnion<T> = {
11
11
  [KEY in StringKeys<T>]: T[KEY] extends Tool<any, infer PARAMETERS, infer OUTPUT> ? ToolCallResult<KEY, PARAMETERS, OUTPUT> : never;
12
12
  }[StringKeys<T>];
13
13
  type ToOutputValue<TOOLS extends ToolArray<Tool<any, any, any>[]>> = ToToolCallUnion<ToToolMap<TOOLS>>;
14
- export declare function useTools<PROMPT, TOOLS extends Array<Tool<any, any, any>>>(model: ToolCallsGenerationModel<PROMPT, ToolCallsGenerationModelSettings>, tools: TOOLS, prompt: PROMPT | ((tools: TOOLS) => PROMPT), options?: FunctionOptions): Promise<{
14
+ export declare function useTools<PROMPT, TOOLS extends Array<Tool<any, any, any>>>({ model, tools, prompt, ...options }: {
15
+ model: ToolCallsGenerationModel<PROMPT, ToolCallsGenerationModelSettings>;
16
+ tools: TOOLS;
17
+ prompt: PROMPT | ((tools: TOOLS) => PROMPT);
18
+ } & FunctionOptions): Promise<{
15
19
  text: string | null;
16
20
  toolResults: Array<ToOutputValue<TOOLS>> | null;
17
21
  }>;
@@ -2,7 +2,7 @@ import { executeFunctionCall } from "../../core/executeFunctionCall.js";
2
2
  import { ToolCallError } from "../ToolCallError.js";
3
3
  import { safeExecuteToolCall } from "../execute-tool/safeExecuteToolCall.js";
4
4
  import { generateToolCalls } from "../generate-tool-calls/generateToolCalls.js";
5
- export async function useTools(model, tools, prompt, options) {
5
+ export async function useTools({ model, tools, prompt, ...options }) {
6
6
  // Note: PROMPT must not be a function.
7
7
  const expandedPrompt = typeof prompt === "function"
8
8
  ? prompt(tools)
@@ -12,7 +12,13 @@ export async function useTools(model, tools, prompt, options) {
12
12
  input: expandedPrompt,
13
13
  functionType: "use-tools",
14
14
  execute: async (options) => {
15
- const modelResponse = await generateToolCalls(model, tools, expandedPrompt, { ...options, fullResponse: false });
15
+ const modelResponse = await generateToolCalls({
16
+ model,
17
+ tools,
18
+ prompt: expandedPrompt,
19
+ fullResponse: false,
20
+ ...options,
21
+ });
16
22
  const { toolCalls, text } = modelResponse;
17
23
  // no tool calls:
18
24
  if (toolCalls == null) {
@@ -31,7 +31,11 @@ class VectorIndexRetriever {
31
31
  };
32
32
  }
33
33
  async retrieve(query, options) {
34
- const embedding = await (0, embed_js_1.embed)(this.embeddingModel, query, options);
34
+ const embedding = await (0, embed_js_1.embed)({
35
+ model: this.embeddingModel,
36
+ value: query,
37
+ ...options,
38
+ });
35
39
  const queryResult = await this.vectorIndex.queryByVector({
36
40
  queryVector: embedding,
37
41
  maxResults: this.settings.maxResults ?? 1,
@@ -28,7 +28,11 @@ export class VectorIndexRetriever {
28
28
  };
29
29
  }
30
30
  async retrieve(query, options) {
31
- const embedding = await embed(this.embeddingModel, query, options);
31
+ const embedding = await embed({
32
+ model: this.embeddingModel,
33
+ value: query,
34
+ ...options,
35
+ });
32
36
  const queryResult = await this.vectorIndex.queryByVector({
33
37
  queryVector: embedding,
34
38
  maxResults: this.settings.maxResults ?? 1,
@@ -12,7 +12,11 @@ async function upsertIntoVectorIndex({ vectorIndex, embeddingModel, generateId =
12
12
  inputPropertyName: "objects",
13
13
  execute: async (options) => {
14
14
  // many embedding models support bulk embedding, so we first embed all texts:
15
- const embeddings = await (0, embed_js_1.embedMany)(embeddingModel, objects.map(getValueToEmbed), options);
15
+ const embeddings = await (0, embed_js_1.embedMany)({
16
+ model: embeddingModel,
17
+ values: objects.map(getValueToEmbed),
18
+ ...options,
19
+ });
16
20
  await vectorIndex.upsertMany(objects.map((object, i) => ({
17
21
  id: getId?.(object, i) ?? generateId(),
18
22
  vector: embeddings[i],
@@ -9,7 +9,11 @@ export async function upsertIntoVectorIndex({ vectorIndex, embeddingModel, gener
9
9
  inputPropertyName: "objects",
10
10
  execute: async (options) => {
11
11
  // many embedding models support bulk embedding, so we first embed all texts:
12
- const embeddings = await embedMany(embeddingModel, objects.map(getValueToEmbed), options);
12
+ const embeddings = await embedMany({
13
+ model: embeddingModel,
14
+ values: objects.map(getValueToEmbed),
15
+ ...options,
16
+ });
13
17
  await vectorIndex.upsertMany(objects.map((object, i) => ({
14
18
  id: getId?.(object, i) ?? generateId(),
15
19
  vector: embeddings[i],