modelfusion 0.130.1 → 0.131.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 (143) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +19 -19
  3. package/core/api/postToApi.cjs +1 -1
  4. package/core/api/postToApi.js +1 -1
  5. package/core/schema/JsonSchemaProducer.d.ts +1 -1
  6. package/core/schema/Schema.d.ts +7 -7
  7. package/core/schema/TypeValidationError.cjs +5 -5
  8. package/core/schema/TypeValidationError.d.ts +4 -4
  9. package/core/schema/TypeValidationError.js +5 -5
  10. package/core/schema/UncheckedSchema.cjs +2 -2
  11. package/core/schema/UncheckedSchema.d.ts +5 -5
  12. package/core/schema/UncheckedSchema.js +2 -2
  13. package/core/schema/ZodSchema.cjs +5 -2
  14. package/core/schema/ZodSchema.d.ts +8 -8
  15. package/core/schema/ZodSchema.js +5 -2
  16. package/core/schema/parseJSON.cjs +6 -6
  17. package/core/schema/parseJSON.d.ts +3 -3
  18. package/core/schema/parseJSON.js +6 -6
  19. package/core/schema/validateTypes.cjs +13 -13
  20. package/core/schema/validateTypes.d.ts +9 -9
  21. package/core/schema/validateTypes.js +13 -13
  22. package/model-function/ModelCallEvent.d.ts +4 -4
  23. package/model-function/PromptTemplate.d.ts +2 -2
  24. package/model-function/{generate-structure/StructureFromTextGenerationModel.cjs → generate-object/ObjectFromTextGenerationModel.cjs} +8 -8
  25. package/model-function/{generate-structure/StructureFromTextGenerationModel.d.ts → generate-object/ObjectFromTextGenerationModel.d.ts} +6 -6
  26. package/model-function/{generate-structure/StructureFromTextGenerationModel.js → generate-object/ObjectFromTextGenerationModel.js} +6 -6
  27. package/model-function/{generate-structure/StructureFromTextPromptTemplate.d.ts → generate-object/ObjectFromTextPromptTemplate.d.ts} +4 -4
  28. package/model-function/{generate-structure/StructureFromTextStreamingModel.cjs → generate-object/ObjectFromTextStreamingModel.cjs} +10 -10
  29. package/model-function/generate-object/ObjectFromTextStreamingModel.d.ts +19 -0
  30. package/model-function/{generate-structure/StructureFromTextStreamingModel.js → generate-object/ObjectFromTextStreamingModel.js} +8 -8
  31. package/model-function/{generate-structure/StructureGenerationEvent.d.ts → generate-object/ObjectGenerationEvent.d.ts} +6 -6
  32. package/model-function/generate-object/ObjectGenerationModel.d.ts +24 -0
  33. package/model-function/{generate-structure/StructureParseError.cjs → generate-object/ObjectParseError.cjs} +5 -5
  34. package/model-function/{generate-structure/StructureParseError.d.ts → generate-object/ObjectParseError.d.ts} +1 -1
  35. package/model-function/{generate-structure/StructureParseError.js → generate-object/ObjectParseError.js} +3 -3
  36. package/model-function/generate-object/ObjectStream.cjs +43 -0
  37. package/model-function/generate-object/ObjectStream.d.ts +18 -0
  38. package/model-function/generate-object/ObjectStream.js +38 -0
  39. package/model-function/generate-object/ObjectStreamingEvent.d.ts +7 -0
  40. package/model-function/{generate-structure/StructureValidationError.cjs → generate-object/ObjectValidationError.cjs} +5 -5
  41. package/model-function/{generate-structure/StructureValidationError.d.ts → generate-object/ObjectValidationError.d.ts} +1 -1
  42. package/model-function/{generate-structure/StructureValidationError.js → generate-object/ObjectValidationError.js} +3 -3
  43. package/model-function/{generate-structure/generateStructure.cjs → generate-object/generateObject.cjs} +11 -12
  44. package/model-function/generate-object/generateObject.d.ts +56 -0
  45. package/model-function/{generate-structure/generateStructure.js → generate-object/generateObject.js} +9 -10
  46. package/model-function/{generate-structure → generate-object}/index.cjs +12 -11
  47. package/model-function/generate-object/index.d.ts +12 -0
  48. package/model-function/generate-object/index.js +12 -0
  49. package/model-function/{generate-structure/jsonStructurePrompt.cjs → generate-object/jsonObjectPrompt.cjs} +6 -6
  50. package/model-function/{generate-structure/jsonStructurePrompt.d.ts → generate-object/jsonObjectPrompt.d.ts} +6 -6
  51. package/model-function/{generate-structure/jsonStructurePrompt.js → generate-object/jsonObjectPrompt.js} +5 -5
  52. package/model-function/generate-object/streamObject.cjs +80 -0
  53. package/model-function/generate-object/streamObject.d.ts +57 -0
  54. package/model-function/generate-object/streamObject.js +76 -0
  55. package/model-function/generate-text/PromptTemplateTextGenerationModel.cjs +3 -3
  56. package/model-function/generate-text/PromptTemplateTextGenerationModel.d.ts +3 -3
  57. package/model-function/generate-text/PromptTemplateTextGenerationModel.js +3 -3
  58. package/model-function/generate-text/PromptTemplateTextStreamingModel.cjs +3 -3
  59. package/model-function/generate-text/PromptTemplateTextStreamingModel.d.ts +3 -3
  60. package/model-function/generate-text/PromptTemplateTextStreamingModel.js +3 -3
  61. package/model-function/generate-text/TextGenerationPromptTemplate.d.ts +1 -1
  62. package/model-function/index.cjs +1 -1
  63. package/model-function/index.d.ts +1 -1
  64. package/model-function/index.js +1 -1
  65. package/model-provider/cohere/CohereTextGenerationModel.cjs +1 -1
  66. package/model-provider/cohere/CohereTextGenerationModel.js +1 -1
  67. package/model-provider/elevenlabs/ElevenLabsSpeechModel.cjs +1 -1
  68. package/model-provider/elevenlabs/ElevenLabsSpeechModel.js +1 -1
  69. package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +1 -1
  70. package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +1 -1
  71. package/model-provider/llamacpp/LlamaCppBakLLaVA1PromptTemplate.cjs +1 -1
  72. package/model-provider/llamacpp/LlamaCppBakLLaVA1PromptTemplate.d.ts +1 -1
  73. package/model-provider/llamacpp/LlamaCppBakLLaVA1PromptTemplate.js +1 -1
  74. package/model-provider/llamacpp/LlamaCppCompletionModel.cjs +5 -5
  75. package/model-provider/llamacpp/LlamaCppCompletionModel.d.ts +3 -3
  76. package/model-provider/llamacpp/LlamaCppCompletionModel.js +5 -5
  77. package/model-provider/mistral/MistralChatModel.cjs +1 -1
  78. package/model-provider/mistral/MistralChatModel.js +1 -1
  79. package/model-provider/ollama/OllamaChatModel.cjs +7 -7
  80. package/model-provider/ollama/OllamaChatModel.d.ts +3 -3
  81. package/model-provider/ollama/OllamaChatModel.js +7 -7
  82. package/model-provider/ollama/OllamaCompletionModel.cjs +7 -7
  83. package/model-provider/ollama/OllamaCompletionModel.d.ts +3 -3
  84. package/model-provider/ollama/OllamaCompletionModel.js +7 -7
  85. package/model-provider/ollama/OllamaCompletionModel.test.cjs +8 -6
  86. package/model-provider/ollama/OllamaCompletionModel.test.js +8 -6
  87. package/model-provider/openai/AbstractOpenAIChatModel.cjs +1 -1
  88. package/model-provider/openai/AbstractOpenAIChatModel.js +1 -1
  89. package/model-provider/openai/AbstractOpenAICompletionModel.cjs +1 -1
  90. package/model-provider/openai/AbstractOpenAICompletionModel.js +1 -1
  91. package/model-provider/openai/{OpenAIChatFunctionCallStructureGenerationModel.cjs → OpenAIChatFunctionCallObjectGenerationModel.cjs} +12 -12
  92. package/model-provider/openai/{OpenAIChatFunctionCallStructureGenerationModel.d.ts → OpenAIChatFunctionCallObjectGenerationModel.d.ts} +10 -10
  93. package/model-provider/openai/{OpenAIChatFunctionCallStructureGenerationModel.js → OpenAIChatFunctionCallObjectGenerationModel.js} +10 -10
  94. package/model-provider/openai/OpenAIChatModel.cjs +7 -7
  95. package/model-provider/openai/OpenAIChatModel.d.ts +6 -6
  96. package/model-provider/openai/OpenAIChatModel.js +7 -7
  97. package/model-provider/openai/OpenAIChatModel.test.cjs +7 -5
  98. package/model-provider/openai/OpenAIChatModel.test.js +7 -5
  99. package/model-provider/openai-compatible/OpenAICompatibleChatModel.cjs +4 -4
  100. package/model-provider/openai-compatible/OpenAICompatibleChatModel.d.ts +3 -3
  101. package/model-provider/openai-compatible/OpenAICompatibleChatModel.js +4 -4
  102. package/model-provider/whispercpp/WhisperCppTranscriptionModel.cjs +3 -3
  103. package/model-provider/whispercpp/WhisperCppTranscriptionModel.js +3 -3
  104. package/package.json +1 -1
  105. package/tool/WebSearchTool.cjs +1 -1
  106. package/tool/WebSearchTool.js +1 -1
  107. package/tool/generate-tool-call/generateToolCall.cjs +1 -1
  108. package/tool/generate-tool-call/generateToolCall.js +1 -1
  109. package/tool/generate-tool-calls/generateToolCalls.cjs +1 -1
  110. package/tool/generate-tool-calls/generateToolCalls.js +1 -1
  111. package/{model-function/generate-structure → util}/fixJson.test.cjs +1 -1
  112. package/{model-function/generate-structure → util}/fixJson.test.js +1 -1
  113. package/util/isDeepEqualData.cjs +1 -1
  114. package/util/isDeepEqualData.d.ts +1 -1
  115. package/util/isDeepEqualData.js +1 -1
  116. package/util/streaming/parseEventSourceStreamAsAsyncIterable.cjs +1 -1
  117. package/util/streaming/parseEventSourceStreamAsAsyncIterable.js +1 -1
  118. package/vector-index/memory/MemoryVectorIndex.cjs +1 -1
  119. package/vector-index/memory/MemoryVectorIndex.js +1 -1
  120. package/model-function/generate-structure/StructureFromTextStreamingModel.d.ts +0 -19
  121. package/model-function/generate-structure/StructureGenerationModel.d.ts +0 -24
  122. package/model-function/generate-structure/StructureStreamingEvent.d.ts +0 -7
  123. package/model-function/generate-structure/generateStructure.d.ts +0 -56
  124. package/model-function/generate-structure/index.d.ts +0 -11
  125. package/model-function/generate-structure/index.js +0 -11
  126. package/model-function/generate-structure/streamStructure.cjs +0 -61
  127. package/model-function/generate-structure/streamStructure.d.ts +0 -67
  128. package/model-function/generate-structure/streamStructure.js +0 -57
  129. /package/model-function/{generate-structure/StructureFromTextPromptTemplate.cjs → generate-object/ObjectFromTextPromptTemplate.cjs} +0 -0
  130. /package/model-function/{generate-structure/StructureFromTextPromptTemplate.js → generate-object/ObjectFromTextPromptTemplate.js} +0 -0
  131. /package/model-function/{generate-structure/StructureGenerationEvent.cjs → generate-object/ObjectGenerationEvent.cjs} +0 -0
  132. /package/model-function/{generate-structure/StructureGenerationEvent.js → generate-object/ObjectGenerationEvent.js} +0 -0
  133. /package/model-function/{generate-structure/StructureGenerationModel.cjs → generate-object/ObjectGenerationModel.cjs} +0 -0
  134. /package/model-function/{generate-structure/StructureGenerationModel.js → generate-object/ObjectGenerationModel.js} +0 -0
  135. /package/model-function/{generate-structure/StructureStreamingEvent.cjs → generate-object/ObjectStreamingEvent.cjs} +0 -0
  136. /package/model-function/{generate-structure/StructureStreamingEvent.js → generate-object/ObjectStreamingEvent.js} +0 -0
  137. /package/{model-function/generate-structure → util}/fixJson.cjs +0 -0
  138. /package/{model-function/generate-structure → util}/fixJson.d.ts +0 -0
  139. /package/{model-function/generate-structure → util}/fixJson.js +0 -0
  140. /package/{model-function/generate-structure → util}/fixJson.test.d.ts +0 -0
  141. /package/{model-function/generate-structure → util}/parsePartialJson.cjs +0 -0
  142. /package/{model-function/generate-structure → util}/parsePartialJson.d.ts +0 -0
  143. /package/{model-function/generate-structure → util}/parsePartialJson.js +0 -0
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateStructure = void 0;
3
+ exports.generateObject = void 0;
4
4
  const executeStandardCall_js_1 = require("../executeStandardCall.cjs");
5
- const StructureValidationError_js_1 = require("./StructureValidationError.cjs");
6
- async function generateStructure({ model, schema, prompt, fullResponse, ...options }) {
5
+ const ObjectValidationError_js_1 = require("./ObjectValidationError.cjs");
6
+ async function generateObject({ model, schema, prompt, fullResponse, ...options }) {
7
7
  // Note: PROMPT must not be a function.
8
8
  const expandedPrompt = typeof prompt === "function"
9
9
  ? prompt(schema)
10
10
  : prompt;
11
11
  const callResponse = await (0, executeStandardCall_js_1.executeStandardCall)({
12
- functionType: "generate-structure",
12
+ functionType: "generate-object",
13
13
  input: {
14
14
  schema,
15
15
  prompt: expandedPrompt,
@@ -17,17 +17,16 @@ async function generateStructure({ model, schema, prompt, fullResponse, ...optio
17
17
  model,
18
18
  options,
19
19
  generateResponse: async (options) => {
20
- const result = await model.doGenerateStructure(schema, expandedPrompt, options);
21
- const structure = result.value;
22
- const parseResult = schema.validate(structure);
20
+ const result = await model.doGenerateObject(schema, expandedPrompt, options);
21
+ const parseResult = schema.validate(result.value);
23
22
  if (!parseResult.success) {
24
- throw new StructureValidationError_js_1.StructureValidationError({
23
+ throw new ObjectValidationError_js_1.ObjectValidationError({
25
24
  valueText: result.valueText,
26
- value: structure,
25
+ value: result.value,
27
26
  cause: parseResult.error,
28
27
  });
29
28
  }
30
- const value = parseResult.data;
29
+ const value = parseResult.value;
31
30
  return {
32
31
  rawResponse: result.rawResponse,
33
32
  extractedValue: value,
@@ -37,10 +36,10 @@ async function generateStructure({ model, schema, prompt, fullResponse, ...optio
37
36
  });
38
37
  return fullResponse
39
38
  ? {
40
- structure: callResponse.value,
39
+ value: callResponse.value,
41
40
  rawResponse: callResponse.rawResponse,
42
41
  metadata: callResponse.metadata,
43
42
  }
44
43
  : callResponse.value;
45
44
  }
46
- exports.generateStructure = generateStructure;
45
+ exports.generateObject = generateObject;
@@ -0,0 +1,56 @@
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
+ import { JsonSchemaProducer } from "../../core/schema/JsonSchemaProducer.js";
3
+ import { Schema } from "../../core/schema/Schema.js";
4
+ import { ModelCallMetadata } from "../ModelCallMetadata.js";
5
+ import { ObjectGenerationModel, ObjectGenerationModelSettings } from "./ObjectGenerationModel.js";
6
+ /**
7
+ * Generate a typed object for a prompt and a schema.
8
+ *
9
+ * @see https://modelfusion.dev/guide/function/generate-object
10
+ *
11
+ * @example
12
+ * const sentiment = await generateObject({
13
+ * model: openai.ChatTextGenerator(...).asFunctionCallObjectGenerationModel(...),
14
+ *
15
+ * schema: zodSchema(z.object({
16
+ * sentiment: z
17
+ * .enum(["positive", "neutral", "negative"])
18
+ * .describe("Sentiment."),
19
+ * })),
20
+ *
21
+ * prompt: [
22
+ * openai.ChatMessage.system(
23
+ * "You are a sentiment evaluator. " +
24
+ * "Analyze the sentiment of the following product review:"
25
+ * ),
26
+ * openai.ChatMessage.user(
27
+ * "After I opened the package, I was met by a very unpleasant smell " +
28
+ * "that did not disappear even after washing. Never again!"
29
+ * ),
30
+ * ]
31
+ * });
32
+ *
33
+ * @param {ObjectGenerationModel<PROMPT, SETTINGS>} options.model - The model to generate the object.
34
+ * @param {Schema<OBJECT>} options.schema - The schema to be used.
35
+ * @param {PROMPT | ((schema: Schema<OBJECT>) => PROMPT)} options.prompt
36
+ * The prompt to be used.
37
+ * You can also pass a function that takes the schema as an argument and returns the prompt.
38
+ *
39
+ * @returns {Promise<OBJECT>} - Returns a promise that resolves to the generated object.
40
+ */
41
+ export declare function generateObject<OBJECT, PROMPT, SETTINGS extends ObjectGenerationModelSettings>(args: {
42
+ model: ObjectGenerationModel<PROMPT, SETTINGS>;
43
+ schema: Schema<OBJECT> & JsonSchemaProducer;
44
+ prompt: PROMPT | ((schema: Schema<OBJECT>) => PROMPT);
45
+ fullResponse?: false;
46
+ } & FunctionOptions): Promise<OBJECT>;
47
+ export declare function generateObject<OBJECT, PROMPT, SETTINGS extends ObjectGenerationModelSettings>(args: {
48
+ model: ObjectGenerationModel<PROMPT, SETTINGS>;
49
+ schema: Schema<OBJECT> & JsonSchemaProducer;
50
+ prompt: PROMPT | ((schema: Schema<OBJECT>) => PROMPT);
51
+ fullResponse: true;
52
+ } & FunctionOptions): Promise<{
53
+ value: OBJECT;
54
+ rawResponse: unknown;
55
+ metadata: ModelCallMetadata;
56
+ }>;
@@ -1,12 +1,12 @@
1
1
  import { executeStandardCall } from "../executeStandardCall.js";
2
- import { StructureValidationError } from "./StructureValidationError.js";
3
- export async function generateStructure({ model, schema, prompt, fullResponse, ...options }) {
2
+ import { ObjectValidationError } from "./ObjectValidationError.js";
3
+ export async function generateObject({ model, schema, prompt, fullResponse, ...options }) {
4
4
  // Note: PROMPT must not be a function.
5
5
  const expandedPrompt = typeof prompt === "function"
6
6
  ? prompt(schema)
7
7
  : prompt;
8
8
  const callResponse = await executeStandardCall({
9
- functionType: "generate-structure",
9
+ functionType: "generate-object",
10
10
  input: {
11
11
  schema,
12
12
  prompt: expandedPrompt,
@@ -14,17 +14,16 @@ export async function generateStructure({ model, schema, prompt, fullResponse, .
14
14
  model,
15
15
  options,
16
16
  generateResponse: async (options) => {
17
- const result = await model.doGenerateStructure(schema, expandedPrompt, options);
18
- const structure = result.value;
19
- const parseResult = schema.validate(structure);
17
+ const result = await model.doGenerateObject(schema, expandedPrompt, options);
18
+ const parseResult = schema.validate(result.value);
20
19
  if (!parseResult.success) {
21
- throw new StructureValidationError({
20
+ throw new ObjectValidationError({
22
21
  valueText: result.valueText,
23
- value: structure,
22
+ value: result.value,
24
23
  cause: parseResult.error,
25
24
  });
26
25
  }
27
- const value = parseResult.data;
26
+ const value = parseResult.value;
28
27
  return {
29
28
  rawResponse: result.rawResponse,
30
29
  extractedValue: value,
@@ -34,7 +33,7 @@ export async function generateStructure({ model, schema, prompt, fullResponse, .
34
33
  });
35
34
  return fullResponse
36
35
  ? {
37
- structure: callResponse.value,
36
+ value: callResponse.value,
38
37
  rawResponse: callResponse.rawResponse,
39
38
  metadata: callResponse.metadata,
40
39
  }
@@ -14,14 +14,15 @@ 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("./StructureFromTextGenerationModel.cjs"), exports);
18
- __exportStar(require("./StructureFromTextPromptTemplate.cjs"), exports);
19
- __exportStar(require("./StructureFromTextStreamingModel.cjs"), exports);
20
- __exportStar(require("./StructureGenerationEvent.cjs"), exports);
21
- __exportStar(require("./StructureGenerationModel.cjs"), exports);
22
- __exportStar(require("./StructureParseError.cjs"), exports);
23
- __exportStar(require("./StructureStreamingEvent.cjs"), exports);
24
- __exportStar(require("./StructureValidationError.cjs"), exports);
25
- __exportStar(require("./generateStructure.cjs"), exports);
26
- __exportStar(require("./jsonStructurePrompt.cjs"), exports);
27
- __exportStar(require("./streamStructure.cjs"), exports);
17
+ __exportStar(require("./ObjectFromTextGenerationModel.cjs"), exports);
18
+ __exportStar(require("./ObjectFromTextPromptTemplate.cjs"), exports);
19
+ __exportStar(require("./ObjectFromTextStreamingModel.cjs"), exports);
20
+ __exportStar(require("./ObjectGenerationEvent.cjs"), exports);
21
+ __exportStar(require("./ObjectGenerationModel.cjs"), exports);
22
+ __exportStar(require("./ObjectParseError.cjs"), exports);
23
+ __exportStar(require("./ObjectStream.cjs"), exports);
24
+ __exportStar(require("./ObjectStreamingEvent.cjs"), exports);
25
+ __exportStar(require("./ObjectValidationError.cjs"), exports);
26
+ __exportStar(require("./generateObject.cjs"), exports);
27
+ __exportStar(require("./jsonObjectPrompt.cjs"), exports);
28
+ __exportStar(require("./streamObject.cjs"), exports);
@@ -0,0 +1,12 @@
1
+ export * from "./ObjectFromTextGenerationModel.js";
2
+ export * from "./ObjectFromTextPromptTemplate.js";
3
+ export * from "./ObjectFromTextStreamingModel.js";
4
+ export * from "./ObjectGenerationEvent.js";
5
+ export * from "./ObjectGenerationModel.js";
6
+ export * from "./ObjectParseError.js";
7
+ export * from "./ObjectStream.js";
8
+ export * from "./ObjectStreamingEvent.js";
9
+ export * from "./ObjectValidationError.js";
10
+ export * from "./generateObject.js";
11
+ export * from "./jsonObjectPrompt.js";
12
+ export * from "./streamObject.js";
@@ -0,0 +1,12 @@
1
+ export * from "./ObjectFromTextGenerationModel.js";
2
+ export * from "./ObjectFromTextPromptTemplate.js";
3
+ export * from "./ObjectFromTextStreamingModel.js";
4
+ export * from "./ObjectGenerationEvent.js";
5
+ export * from "./ObjectGenerationModel.js";
6
+ export * from "./ObjectParseError.js";
7
+ export * from "./ObjectStream.js";
8
+ export * from "./ObjectStreamingEvent.js";
9
+ export * from "./ObjectValidationError.js";
10
+ export * from "./generateObject.js";
11
+ export * from "./jsonObjectPrompt.js";
12
+ export * from "./streamObject.js";
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.jsonStructurePrompt = void 0;
3
+ exports.jsonObjectPrompt = void 0;
4
4
  const parseJSON_js_1 = require("../../core/schema/parseJSON.cjs");
5
5
  const DEFAULT_SCHEMA_PREFIX = "JSON schema:";
6
6
  const DEFAULT_SCHEMA_SUFFIX = "\nYou MUST answer with a JSON object matches the above schema.";
7
- exports.jsonStructurePrompt = {
7
+ exports.jsonObjectPrompt = {
8
8
  custom(createPrompt) {
9
- return { createPrompt, extractStructure };
9
+ return { createPrompt, extractObject };
10
10
  },
11
11
  text({ schemaPrefix, schemaSuffix, } = {}) {
12
12
  return {
@@ -14,7 +14,7 @@ exports.jsonStructurePrompt = {
14
14
  system: createSystemPrompt({ schema, schemaPrefix, schemaSuffix }),
15
15
  instruction: prompt,
16
16
  }),
17
- extractStructure,
17
+ extractObject,
18
18
  adaptModel: (model) => model.withInstructionPrompt(),
19
19
  withJsonOutput: ({ model, schema }) => model.withJsonOutput(schema),
20
20
  };
@@ -30,7 +30,7 @@ exports.jsonStructurePrompt = {
30
30
  }),
31
31
  instruction: prompt.instruction,
32
32
  }),
33
- extractStructure,
33
+ extractObject,
34
34
  adaptModel: (model) => model.withInstructionPrompt(),
35
35
  withJsonOutput: ({ model, schema }) => model.withJsonOutput(schema),
36
36
  };
@@ -46,6 +46,6 @@ function createSystemPrompt({ originalSystemPrompt, schema, schemaPrefix = DEFAU
46
46
  .filter(Boolean)
47
47
  .join("\n");
48
48
  }
49
- function extractStructure(response) {
49
+ function extractObject(response) {
50
50
  return (0, parseJSON_js_1.parseJSON)({ text: response });
51
51
  }
@@ -1,15 +1,15 @@
1
1
  import { JsonSchemaProducer } from "../../core/schema/JsonSchemaProducer.js";
2
2
  import { Schema } from "../../core/schema/Schema.js";
3
- import { InstructionPrompt } from "../../model-function/generate-text/prompt-template/InstructionPrompt.js";
4
- import { FlexibleStructureFromTextPromptTemplate, StructureFromTextPromptTemplate } from "./StructureFromTextPromptTemplate.js";
5
- export declare const jsonStructurePrompt: {
6
- custom<SOURCE_PROMPT, TARGET_PROMPT>(createPrompt: (prompt: SOURCE_PROMPT, schema: Schema<unknown> & JsonSchemaProducer) => TARGET_PROMPT): StructureFromTextPromptTemplate<SOURCE_PROMPT, TARGET_PROMPT>;
3
+ import { InstructionPrompt } from "../generate-text/prompt-template/InstructionPrompt.js";
4
+ import { FlexibleObjectFromTextPromptTemplate, ObjectFromTextPromptTemplate } from "./ObjectFromTextPromptTemplate.js";
5
+ export declare const jsonObjectPrompt: {
6
+ custom<SOURCE_PROMPT, TARGET_PROMPT>(createPrompt: (prompt: SOURCE_PROMPT, schema: Schema<unknown> & JsonSchemaProducer) => TARGET_PROMPT): ObjectFromTextPromptTemplate<SOURCE_PROMPT, TARGET_PROMPT>;
7
7
  text({ schemaPrefix, schemaSuffix, }?: {
8
8
  schemaPrefix?: string | undefined;
9
9
  schemaSuffix?: string | undefined;
10
- }): FlexibleStructureFromTextPromptTemplate<string, InstructionPrompt>;
10
+ }): FlexibleObjectFromTextPromptTemplate<string, InstructionPrompt>;
11
11
  instruction({ schemaPrefix, schemaSuffix, }?: {
12
12
  schemaPrefix?: string | undefined;
13
13
  schemaSuffix?: string | undefined;
14
- }): FlexibleStructureFromTextPromptTemplate<InstructionPrompt, InstructionPrompt>;
14
+ }): FlexibleObjectFromTextPromptTemplate<InstructionPrompt, InstructionPrompt>;
15
15
  };
@@ -1,9 +1,9 @@
1
1
  import { parseJSON } from "../../core/schema/parseJSON.js";
2
2
  const DEFAULT_SCHEMA_PREFIX = "JSON schema:";
3
3
  const DEFAULT_SCHEMA_SUFFIX = "\nYou MUST answer with a JSON object matches the above schema.";
4
- export const jsonStructurePrompt = {
4
+ export const jsonObjectPrompt = {
5
5
  custom(createPrompt) {
6
- return { createPrompt, extractStructure };
6
+ return { createPrompt, extractObject };
7
7
  },
8
8
  text({ schemaPrefix, schemaSuffix, } = {}) {
9
9
  return {
@@ -11,7 +11,7 @@ export const jsonStructurePrompt = {
11
11
  system: createSystemPrompt({ schema, schemaPrefix, schemaSuffix }),
12
12
  instruction: prompt,
13
13
  }),
14
- extractStructure,
14
+ extractObject,
15
15
  adaptModel: (model) => model.withInstructionPrompt(),
16
16
  withJsonOutput: ({ model, schema }) => model.withJsonOutput(schema),
17
17
  };
@@ -27,7 +27,7 @@ export const jsonStructurePrompt = {
27
27
  }),
28
28
  instruction: prompt.instruction,
29
29
  }),
30
- extractStructure,
30
+ extractObject,
31
31
  adaptModel: (model) => model.withInstructionPrompt(),
32
32
  withJsonOutput: ({ model, schema }) => model.withJsonOutput(schema),
33
33
  };
@@ -43,6 +43,6 @@ function createSystemPrompt({ originalSystemPrompt, schema, schemaPrefix = DEFAU
43
43
  .filter(Boolean)
44
44
  .join("\n");
45
45
  }
46
- function extractStructure(response) {
46
+ function extractObject(response) {
47
47
  return parseJSON({ text: response });
48
48
  }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.streamObject = void 0;
4
+ const isDeepEqualData_js_1 = require("../../util/isDeepEqualData.cjs");
5
+ const executeStreamCall_js_1 = require("../executeStreamCall.cjs");
6
+ async function streamObject({ model, schema, prompt, fullResponse, ...options }) {
7
+ // Note: PROMPT must not be a function.
8
+ const expandedPrompt = typeof prompt === "function"
9
+ ? prompt(schema)
10
+ : prompt;
11
+ let accumulatedText = "";
12
+ let accumulatedTextDelta = "";
13
+ let latestObject;
14
+ let resolveObject;
15
+ let rejectObject;
16
+ const objectPromise = new Promise((resolve, reject) => {
17
+ resolveObject = resolve;
18
+ rejectObject = reject;
19
+ });
20
+ const callResponse = await (0, executeStreamCall_js_1.executeStreamCall)({
21
+ functionType: "stream-object",
22
+ input: {
23
+ schema,
24
+ prompt: expandedPrompt,
25
+ },
26
+ model,
27
+ options,
28
+ startStream: async (options) => model.doStreamObject(schema, expandedPrompt, options),
29
+ processDelta(delta) {
30
+ const textDelta = model.extractObjectTextDelta(delta.deltaValue);
31
+ if (textDelta == null) {
32
+ return undefined;
33
+ }
34
+ accumulatedText += textDelta;
35
+ accumulatedTextDelta += textDelta;
36
+ const currentObject = model.parseAccumulatedObjectText(accumulatedText);
37
+ // only send a new part into the stream when the partial object has changed:
38
+ if (!(0, isDeepEqualData_js_1.isDeepEqualData)(latestObject, currentObject)) {
39
+ latestObject = currentObject;
40
+ // reset delta accumulation:
41
+ const currentAccumulatedTextDelta = accumulatedTextDelta;
42
+ accumulatedTextDelta = "";
43
+ // TODO add type checking
44
+ return {
45
+ partialObject: latestObject,
46
+ partialText: accumulatedText,
47
+ textDelta: currentAccumulatedTextDelta,
48
+ };
49
+ }
50
+ return undefined;
51
+ },
52
+ // The last object is processed and returned, even if it was already returned previously.
53
+ // The reason is that the full text delta should be returned (and no characters should be omitted).
54
+ processFinished() {
55
+ return {
56
+ partialObject: latestObject,
57
+ partialText: accumulatedText,
58
+ textDelta: accumulatedTextDelta,
59
+ };
60
+ },
61
+ onDone() {
62
+ // process the final result (full type validation):
63
+ const parseResult = schema.validate(latestObject);
64
+ if (parseResult.success) {
65
+ resolveObject(parseResult.value);
66
+ }
67
+ else {
68
+ rejectObject(parseResult.error);
69
+ }
70
+ },
71
+ });
72
+ return fullResponse
73
+ ? {
74
+ objectStream: callResponse.value,
75
+ objectPromise: objectPromise,
76
+ metadata: callResponse.metadata,
77
+ }
78
+ : callResponse.value;
79
+ }
80
+ exports.streamObject = streamObject;
@@ -0,0 +1,57 @@
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
+ import { JsonSchemaProducer } from "../../core/schema/JsonSchemaProducer.js";
3
+ import { Schema } from "../../core/schema/Schema.js";
4
+ import { ModelCallMetadata } from "../ModelCallMetadata.js";
5
+ import { ObjectStreamingModel } from "./ObjectGenerationModel.js";
6
+ import { ObjectStream } from "./ObjectStream.js";
7
+ /**
8
+ * Generate and stream an object for a prompt and a schema.
9
+ *
10
+ * @see https://modelfusion.dev/guide/function/generate-object
11
+ *
12
+ * @example
13
+ * const objectStream = await streamObject({
14
+ * model: openai.ChatTextGenerator(...).asFunctionCallObjectGenerationModel(...),
15
+ * schema: zodSchema(
16
+ * z.array(
17
+ * z.object({
18
+ * name: z.string(),
19
+ * class: z
20
+ * .string()
21
+ * .describe("Character class, e.g. warrior, mage, or thief."),
22
+ * description: z.string(),
23
+ * })
24
+ * ),
25
+ * prompt: [
26
+ * openai.ChatMessage.user(
27
+ * "Generate 3 character descriptions for a fantasy role playing game."
28
+ * ),
29
+ * ]
30
+ * });
31
+ *
32
+ * for await (const { partialObject } of objectStream) {
33
+ * // ...
34
+ * }
35
+ *
36
+ * @param {ObjectStreamingModel<PROMPT>} options.model - The model that generates the object
37
+ * @param {Schema<OBJECT>} options.schema - The schema of the object to be generated.
38
+ * @param {PROMPT | ((schema: Schema<OBJECT>) => PROMPT)} options.prompt
39
+ * The prompt to be used.
40
+ * You can also pass a function that takes the schema as an argument and returns the prompt.
41
+ */
42
+ export declare function streamObject<OBJECT, PROMPT>(args: {
43
+ model: ObjectStreamingModel<PROMPT>;
44
+ schema: Schema<OBJECT> & JsonSchemaProducer;
45
+ prompt: PROMPT | ((schema: Schema<OBJECT>) => PROMPT);
46
+ fullResponse?: false;
47
+ } & FunctionOptions): Promise<ObjectStream<OBJECT>>;
48
+ export declare function streamObject<OBJECT, PROMPT>(args: {
49
+ model: ObjectStreamingModel<PROMPT>;
50
+ schema: Schema<OBJECT> & JsonSchemaProducer;
51
+ prompt: PROMPT | ((schema: Schema<OBJECT>) => PROMPT);
52
+ fullResponse: true;
53
+ } & FunctionOptions): Promise<{
54
+ objectStream: ObjectStream<OBJECT>;
55
+ objectPromise: PromiseLike<OBJECT>;
56
+ metadata: Omit<ModelCallMetadata, "durationInMs" | "finishTimestamp">;
57
+ }>;
@@ -0,0 +1,76 @@
1
+ import { isDeepEqualData } from "../../util/isDeepEqualData.js";
2
+ import { executeStreamCall } from "../executeStreamCall.js";
3
+ export async function streamObject({ model, schema, prompt, fullResponse, ...options }) {
4
+ // Note: PROMPT must not be a function.
5
+ const expandedPrompt = typeof prompt === "function"
6
+ ? prompt(schema)
7
+ : prompt;
8
+ let accumulatedText = "";
9
+ let accumulatedTextDelta = "";
10
+ let latestObject;
11
+ let resolveObject;
12
+ let rejectObject;
13
+ const objectPromise = new Promise((resolve, reject) => {
14
+ resolveObject = resolve;
15
+ rejectObject = reject;
16
+ });
17
+ const callResponse = await executeStreamCall({
18
+ functionType: "stream-object",
19
+ input: {
20
+ schema,
21
+ prompt: expandedPrompt,
22
+ },
23
+ model,
24
+ options,
25
+ startStream: async (options) => model.doStreamObject(schema, expandedPrompt, options),
26
+ processDelta(delta) {
27
+ const textDelta = model.extractObjectTextDelta(delta.deltaValue);
28
+ if (textDelta == null) {
29
+ return undefined;
30
+ }
31
+ accumulatedText += textDelta;
32
+ accumulatedTextDelta += textDelta;
33
+ const currentObject = model.parseAccumulatedObjectText(accumulatedText);
34
+ // only send a new part into the stream when the partial object has changed:
35
+ if (!isDeepEqualData(latestObject, currentObject)) {
36
+ latestObject = currentObject;
37
+ // reset delta accumulation:
38
+ const currentAccumulatedTextDelta = accumulatedTextDelta;
39
+ accumulatedTextDelta = "";
40
+ // TODO add type checking
41
+ return {
42
+ partialObject: latestObject,
43
+ partialText: accumulatedText,
44
+ textDelta: currentAccumulatedTextDelta,
45
+ };
46
+ }
47
+ return undefined;
48
+ },
49
+ // The last object is processed and returned, even if it was already returned previously.
50
+ // The reason is that the full text delta should be returned (and no characters should be omitted).
51
+ processFinished() {
52
+ return {
53
+ partialObject: latestObject,
54
+ partialText: accumulatedText,
55
+ textDelta: accumulatedTextDelta,
56
+ };
57
+ },
58
+ onDone() {
59
+ // process the final result (full type validation):
60
+ const parseResult = schema.validate(latestObject);
61
+ if (parseResult.success) {
62
+ resolveObject(parseResult.value);
63
+ }
64
+ else {
65
+ rejectObject(parseResult.error);
66
+ }
67
+ },
68
+ });
69
+ return fullResponse
70
+ ? {
71
+ objectStream: callResponse.value,
72
+ objectPromise: objectPromise,
73
+ metadata: callResponse.metadata,
74
+ }
75
+ : callResponse.value;
76
+ }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PromptTemplateTextGenerationModel = void 0;
4
4
  const TextGenerationToolCallModel_js_1 = require("../../tool/generate-tool-call/TextGenerationToolCallModel.cjs");
5
5
  const TextGenerationToolCallsModel_js_1 = require("../../tool/generate-tool-calls/TextGenerationToolCallsModel.cjs");
6
- const StructureFromTextGenerationModel_js_1 = require("../generate-structure/StructureFromTextGenerationModel.cjs");
6
+ const ObjectFromTextGenerationModel_js_1 = require("../generate-object/ObjectFromTextGenerationModel.cjs");
7
7
  class PromptTemplateTextGenerationModel {
8
8
  constructor({ model, promptTemplate, }) {
9
9
  Object.defineProperty(this, "model", {
@@ -62,8 +62,8 @@ class PromptTemplateTextGenerationModel {
62
62
  template: promptTemplate,
63
63
  });
64
64
  }
65
- asStructureGenerationModel(promptTemplate) {
66
- return new StructureFromTextGenerationModel_js_1.StructureFromTextGenerationModel({
65
+ asObjectGenerationModel(promptTemplate) {
66
+ return new ObjectFromTextGenerationModel_js_1.ObjectFromTextGenerationModel({
67
67
  model: this,
68
68
  template: promptTemplate,
69
69
  });
@@ -4,8 +4,8 @@ import { Schema } from "../../core/schema/Schema.js";
4
4
  import { TextGenerationToolCallModel, ToolCallPromptTemplate } from "../../tool/generate-tool-call/TextGenerationToolCallModel.js";
5
5
  import { TextGenerationToolCallsModel } from "../../tool/generate-tool-calls/TextGenerationToolCallsModel.js";
6
6
  import { ToolCallsPromptTemplate } from "../../tool/generate-tool-calls/ToolCallsPromptTemplate.js";
7
- import { StructureFromTextGenerationModel } from "../generate-structure/StructureFromTextGenerationModel.js";
8
- import { StructureFromTextPromptTemplate } from "../generate-structure/StructureFromTextPromptTemplate.js";
7
+ import { ObjectFromTextGenerationModel } from "../generate-object/ObjectFromTextGenerationModel.js";
8
+ import { ObjectFromTextPromptTemplate } from "../generate-object/ObjectFromTextPromptTemplate.js";
9
9
  import { TextGenerationModel, TextGenerationModelSettings } from "./TextGenerationModel.js";
10
10
  import { TextGenerationPromptTemplate } from "./TextGenerationPromptTemplate.js";
11
11
  export declare class PromptTemplateTextGenerationModel<PROMPT, MODEL_PROMPT, SETTINGS extends TextGenerationModelSettings, MODEL extends TextGenerationModel<MODEL_PROMPT, SETTINGS>> implements TextGenerationModel<PROMPT, SETTINGS> {
@@ -41,7 +41,7 @@ export declare class PromptTemplateTextGenerationModel<PROMPT, MODEL_PROMPT, SET
41
41
  get settingsForEvent(): Partial<SETTINGS>;
42
42
  asToolCallGenerationModel<INPUT_PROMPT>(promptTemplate: ToolCallPromptTemplate<INPUT_PROMPT, PROMPT>): TextGenerationToolCallModel<INPUT_PROMPT, PROMPT, this>;
43
43
  asToolCallsOrTextGenerationModel<INPUT_PROMPT>(promptTemplate: ToolCallsPromptTemplate<INPUT_PROMPT, PROMPT>): TextGenerationToolCallsModel<INPUT_PROMPT, PROMPT, this>;
44
- asStructureGenerationModel<INPUT_PROMPT>(promptTemplate: StructureFromTextPromptTemplate<INPUT_PROMPT, PROMPT>): StructureFromTextGenerationModel<INPUT_PROMPT, PROMPT, this>;
44
+ asObjectGenerationModel<INPUT_PROMPT>(promptTemplate: ObjectFromTextPromptTemplate<INPUT_PROMPT, PROMPT>): ObjectFromTextGenerationModel<INPUT_PROMPT, PROMPT, this>;
45
45
  withJsonOutput(schema: Schema<unknown> & JsonSchemaProducer): this;
46
46
  withSettings(additionalSettings: Partial<SETTINGS>): this;
47
47
  }
@@ -1,6 +1,6 @@
1
1
  import { TextGenerationToolCallModel, } from "../../tool/generate-tool-call/TextGenerationToolCallModel.js";
2
2
  import { TextGenerationToolCallsModel } from "../../tool/generate-tool-calls/TextGenerationToolCallsModel.js";
3
- import { StructureFromTextGenerationModel } from "../generate-structure/StructureFromTextGenerationModel.js";
3
+ import { ObjectFromTextGenerationModel } from "../generate-object/ObjectFromTextGenerationModel.js";
4
4
  export class PromptTemplateTextGenerationModel {
5
5
  constructor({ model, promptTemplate, }) {
6
6
  Object.defineProperty(this, "model", {
@@ -59,8 +59,8 @@ export class PromptTemplateTextGenerationModel {
59
59
  template: promptTemplate,
60
60
  });
61
61
  }
62
- asStructureGenerationModel(promptTemplate) {
63
- return new StructureFromTextGenerationModel({
62
+ asObjectGenerationModel(promptTemplate) {
63
+ return new ObjectFromTextGenerationModel({
64
64
  model: this,
65
65
  template: promptTemplate,
66
66
  });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PromptTemplateTextStreamingModel = void 0;
4
- const StructureFromTextStreamingModel_js_1 = require("../generate-structure/StructureFromTextStreamingModel.cjs");
4
+ const ObjectFromTextStreamingModel_js_1 = require("../generate-object/ObjectFromTextStreamingModel.cjs");
5
5
  const PromptTemplateTextGenerationModel_js_1 = require("./PromptTemplateTextGenerationModel.cjs");
6
6
  class PromptTemplateTextStreamingModel extends PromptTemplateTextGenerationModel_js_1.PromptTemplateTextGenerationModel {
7
7
  constructor(options) {
@@ -14,8 +14,8 @@ class PromptTemplateTextStreamingModel extends PromptTemplateTextGenerationModel
14
14
  extractTextDelta(delta) {
15
15
  return this.model.extractTextDelta(delta);
16
16
  }
17
- asStructureGenerationModel(promptTemplate) {
18
- return new StructureFromTextStreamingModel_js_1.StructureFromTextStreamingModel({
17
+ asObjectGenerationModel(promptTemplate) {
18
+ return new ObjectFromTextStreamingModel_js_1.ObjectFromTextStreamingModel({
19
19
  model: this,
20
20
  template: promptTemplate,
21
21
  });
@@ -1,8 +1,8 @@
1
1
  import { FunctionCallOptions } from "../../core/FunctionOptions.js";
2
2
  import { JsonSchemaProducer } from "../../core/schema/JsonSchemaProducer.js";
3
3
  import { Schema } from "../../core/schema/Schema.js";
4
- import { StructureFromTextPromptTemplate } from "../generate-structure/StructureFromTextPromptTemplate.js";
5
- import { StructureFromTextStreamingModel } from "../generate-structure/StructureFromTextStreamingModel.js";
4
+ import { ObjectFromTextPromptTemplate } from "../generate-object/ObjectFromTextPromptTemplate.js";
5
+ import { ObjectFromTextStreamingModel } from "../generate-object/ObjectFromTextStreamingModel.js";
6
6
  import { PromptTemplateTextGenerationModel } from "./PromptTemplateTextGenerationModel.js";
7
7
  import { TextGenerationModelSettings, TextStreamingModel } from "./TextGenerationModel.js";
8
8
  import { TextGenerationPromptTemplate } from "./TextGenerationPromptTemplate.js";
@@ -13,7 +13,7 @@ export declare class PromptTemplateTextStreamingModel<PROMPT, MODEL_PROMPT, SETT
13
13
  });
14
14
  doStreamText(prompt: PROMPT, options?: FunctionCallOptions): PromiseLike<AsyncIterable<import("../Delta.js").Delta<unknown>>>;
15
15
  extractTextDelta(delta: unknown): string | undefined;
16
- asStructureGenerationModel<INPUT_PROMPT>(promptTemplate: StructureFromTextPromptTemplate<INPUT_PROMPT, PROMPT>): StructureFromTextStreamingModel<INPUT_PROMPT, PROMPT, this>;
16
+ asObjectGenerationModel<INPUT_PROMPT>(promptTemplate: ObjectFromTextPromptTemplate<INPUT_PROMPT, PROMPT>): ObjectFromTextStreamingModel<INPUT_PROMPT, PROMPT, this>;
17
17
  withJsonOutput(schema: Schema<unknown> & JsonSchemaProducer): this;
18
18
  withSettings(additionalSettings: Partial<SETTINGS>): this;
19
19
  }