modelfusion 0.30.1 → 0.32.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 (70) hide show
  1. package/README.md +14 -20
  2. package/model-function/Model.d.ts +1 -1
  3. package/model-function/SuccessfulModelCall.cjs +2 -9
  4. package/model-function/SuccessfulModelCall.d.ts +10 -7
  5. package/model-function/SuccessfulModelCall.js +2 -9
  6. package/model-function/generate-structure/StructureFromTextGenerationModel.cjs +2 -2
  7. package/model-function/generate-structure/StructureFromTextGenerationModel.d.ts +5 -9
  8. package/model-function/generate-structure/StructureFromTextGenerationModel.js +2 -2
  9. package/model-function/generate-structure/StructureGenerationModel.d.ts +3 -2
  10. package/model-function/generate-structure/StructureOrTextGenerationModel.d.ts +4 -5
  11. package/model-function/generate-structure/generateStructure.cjs +5 -2
  12. package/model-function/generate-structure/generateStructure.d.ts +1 -1
  13. package/model-function/generate-structure/generateStructure.js +5 -2
  14. package/model-function/generate-structure/generateStructureOrText.cjs +8 -5
  15. package/model-function/generate-structure/generateStructureOrText.d.ts +2 -2
  16. package/model-function/generate-structure/generateStructureOrText.js +8 -5
  17. package/model-function/index.cjs +2 -3
  18. package/model-function/index.d.ts +2 -3
  19. package/model-function/index.js +2 -3
  20. package/model-provider/openai/OpenAICostCalculator.cjs +6 -5
  21. package/model-provider/openai/OpenAICostCalculator.js +6 -5
  22. package/model-provider/openai/OpenAITextGenerationModel.cjs +41 -17
  23. package/model-provider/openai/OpenAITextGenerationModel.d.ts +32 -14
  24. package/model-provider/openai/OpenAITextGenerationModel.js +41 -17
  25. package/model-provider/openai/TikTokenTokenizer.cjs +3 -2
  26. package/model-provider/openai/TikTokenTokenizer.js +3 -2
  27. package/model-provider/openai/chat/OpenAIChatModel.cjs +47 -9
  28. package/model-provider/openai/chat/OpenAIChatModel.d.ts +15 -5
  29. package/model-provider/openai/chat/OpenAIChatModel.js +47 -9
  30. package/model-provider/openai/chat/OpenAIChatPromptFormat.cjs +78 -0
  31. package/model-provider/openai/chat/OpenAIChatPromptFormat.d.ts +12 -0
  32. package/model-provider/openai/chat/OpenAIChatPromptFormat.js +73 -0
  33. package/model-provider/openai/index.cjs +2 -3
  34. package/model-provider/openai/index.d.ts +1 -1
  35. package/model-provider/openai/index.js +1 -1
  36. package/model-provider/stability/StabilityImageGenerationModel.cjs +6 -0
  37. package/model-provider/stability/StabilityImageGenerationModel.d.ts +4 -2
  38. package/model-provider/stability/StabilityImageGenerationModel.js +6 -0
  39. package/package.json +2 -2
  40. package/prompt/AlpacaPromptFormat.cjs +23 -21
  41. package/prompt/AlpacaPromptFormat.d.ts +1 -1
  42. package/prompt/AlpacaPromptFormat.js +21 -19
  43. package/prompt/InstructionPrompt.d.ts +9 -0
  44. package/prompt/Llama2PromptFormat.cjs +44 -40
  45. package/prompt/Llama2PromptFormat.d.ts +2 -2
  46. package/prompt/Llama2PromptFormat.js +41 -37
  47. package/prompt/TextPromptFormat.cjs +5 -5
  48. package/prompt/TextPromptFormat.d.ts +2 -2
  49. package/prompt/TextPromptFormat.js +2 -2
  50. package/prompt/VicunaPromptFormat.cjs +39 -37
  51. package/prompt/VicunaPromptFormat.d.ts +1 -1
  52. package/prompt/VicunaPromptFormat.js +37 -35
  53. package/prompt/index.cjs +0 -1
  54. package/prompt/index.d.ts +0 -1
  55. package/prompt/index.js +0 -1
  56. package/tool/useTool.cjs +5 -1
  57. package/tool/useTool.d.ts +1 -1
  58. package/tool/useTool.js +5 -1
  59. package/tool/useToolOrGenerateText.cjs +5 -2
  60. package/tool/useToolOrGenerateText.d.ts +2 -2
  61. package/tool/useToolOrGenerateText.js +5 -2
  62. package/model-function/generate-structure/InstructionWithStructurePrompt.cjs +0 -17
  63. package/model-function/generate-structure/InstructionWithStructurePrompt.d.ts +0 -17
  64. package/model-function/generate-structure/InstructionWithStructurePrompt.js +0 -14
  65. package/model-provider/openai/chat/OpenAIChatPrompt.cjs +0 -135
  66. package/model-provider/openai/chat/OpenAIChatPrompt.d.ts +0 -96
  67. package/model-provider/openai/chat/OpenAIChatPrompt.js +0 -127
  68. package/prompt/OpenAIChatPromptFormat.cjs +0 -74
  69. package/prompt/OpenAIChatPromptFormat.d.ts +0 -12
  70. package/prompt/OpenAIChatPromptFormat.js +0 -69
package/README.md CHANGED
@@ -45,7 +45,9 @@ You can use [prompt formats](https://modelfusion.dev/guide/function/generate-tex
45
45
 
46
46
  ```ts
47
47
  const text = await generateText(
48
- new OpenAITextGenerationModel({ model: "text-davinci-003" }),
48
+ new OpenAITextGenerationModel({
49
+ model: "gpt-3.5-turbo-instruct",
50
+ }),
49
51
  "Write a short story about a robot learning to love:\n\n"
50
52
  );
51
53
  ```
@@ -56,14 +58,10 @@ Providers: [OpenAI](https://modelfusion.dev/integration/model-provider/openai),
56
58
 
57
59
  ```ts
58
60
  const textStream = await streamText(
59
- new OpenAIChatModel({
60
- model: "gpt-3.5-turbo",
61
- maxCompletionTokens: 1000,
61
+ new OpenAITextGenerationModel({
62
+ model: "gpt-3.5-turbo-instruct",
62
63
  }),
63
- [
64
- OpenAIChatMessage.system("You are a story writer."),
65
- OpenAIChatMessage.user("Write a story about a robot learning to love"),
66
- ]
64
+ "Write a short story about a robot learning to love:\n\n"
67
65
  );
68
66
 
69
67
  for await (const textFragment of textStream) {
@@ -82,7 +80,7 @@ const text = await generateText(
82
80
  new LlamaCppTextGenerationModel({
83
81
  contextWindowSize: 4096, // Llama 2 context window size
84
82
  maxCompletionTokens: 1000,
85
- }).withPromptFormat(Llama2InstructionPromptFormat()),
83
+ }).withPromptFormat(mapInstructionPromptToLlama2Format()),
86
84
  {
87
85
  system: "You are a story writer.",
88
86
  instruction: "Write a short story about a robot learning to love.",
@@ -94,7 +92,7 @@ const text = await generateText(
94
92
  const textStream = await streamText(
95
93
  new OpenAIChatModel({
96
94
  model: "gpt-3.5-turbo",
97
- }).withPromptFormat(OpenAIChatChatPromptFormat()),
95
+ }).withPromptFormat(mapChatPromptToOpenAIChatFormat()),
98
96
  [
99
97
  { system: "You are a celebrated poet." },
100
98
  { user: "Write a short story about a robot learning to love." },
@@ -121,7 +119,7 @@ ModelFusion model functions return rich results that include the original respon
121
119
  // the response type is specific to the model that's being used
122
120
  const { output, response, metadata } = await generateText(
123
121
  new OpenAITextGenerationModel({
124
- model: "text-davinci-003",
122
+ model: "gpt-3.5-turbo-instruct",
125
123
  maxCompletionTokens: 1000,
126
124
  n: 2, // generate 2 completions
127
125
  }),
@@ -155,7 +153,7 @@ const sentiment = await generateStructure(
155
153
  .describe("Sentiment."),
156
154
  }),
157
155
  }),
158
- OpenAIChatFunctionPrompt.forStructureCurried([
156
+ [
159
157
  OpenAIChatMessage.system(
160
158
  "You are a sentiment evaluator. " +
161
159
  "Analyze the sentiment of the following product review:"
@@ -164,7 +162,7 @@ const sentiment = await generateStructure(
164
162
  "After I opened the package, I was met by a very unpleasant smell " +
165
163
  "that did not disappear even after washing. Never again!"
166
164
  ),
167
- ])
165
+ ]
168
166
  );
169
167
  ```
170
168
 
@@ -197,7 +195,7 @@ const { structure, value, text } = await generateStructureOrText(
197
195
  }),
198
196
  }),
199
197
  ],
200
- OpenAIChatFunctionPrompt.forStructuresCurried([OpenAIChatMessage.user(query)])
198
+ [OpenAIChatMessage.user(query)]
201
199
  );
202
200
  ```
203
201
 
@@ -253,9 +251,7 @@ The model determines the parameters for the tool from the prompt and then execut
253
251
  const { tool, parameters, result } = await useTool(
254
252
  new OpenAIChatModel({ model: "gpt-3.5-turbo" }),
255
253
  calculator,
256
- OpenAIChatFunctionPrompt.forToolCurried([
257
- OpenAIChatMessage.user("What's fourteen times twelve?"),
258
- ])
254
+ [OpenAIChatMessage.user("What's fourteen times twelve?")]
259
255
  );
260
256
  ```
261
257
 
@@ -268,9 +264,7 @@ Text is generated as a fallback.
268
264
  const { tool, parameters, result, text } = await useToolOrGenerateText(
269
265
  new OpenAIChatModel({ model: "gpt-3.5-turbo" }),
270
266
  [calculator /* and other tools... */],
271
- OpenAIChatFunctionPrompt.forToolsCurried([
272
- OpenAIChatMessage.user("What's fourteen times twelve?"),
273
- ])
267
+ [OpenAIChatMessage.user("What's fourteen times twelve?")]
274
268
  );
275
269
  ```
276
270
 
@@ -19,7 +19,7 @@ export interface Model<SETTINGS extends ModelSettings> {
19
19
  *
20
20
  * @example
21
21
  * const model = new OpenAITextGenerationModel({
22
- * model: "text-davinci-003",
22
+ * model: "gpt-3.5-turbo-instruct",
23
23
  * maxCompletionTokens: 500,
24
24
  * });
25
25
  *
@@ -2,15 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.extractSuccessfulModelCalls = void 0;
4
4
  function extractSuccessfulModelCalls(runFunctionEvents) {
5
- return runFunctionEvents
6
- .filter((event) => "result" in event &&
5
+ return runFunctionEvents.filter((event) => "result" in event &&
7
6
  "status" in event.result &&
8
- event.result.status === "success")
9
- .map((event) => ({
10
- model: event.model,
11
- settings: event.settings,
12
- response: event.result.response,
13
- type: event.functionType,
14
- }));
7
+ event.result.status === "success");
15
8
  }
16
9
  exports.extractSuccessfulModelCalls = extractSuccessfulModelCalls;
@@ -1,9 +1,12 @@
1
1
  import { FunctionEvent } from "../core/FunctionEvent.js";
2
- import { ModelInformation } from "./ModelInformation.js";
3
- export type SuccessfulModelCall = {
4
- type: "image-description" | "image-generation" | "structure-generation" | "structure-or-text-generation" | "speech-synthesis" | "text-embedding" | "text-generation" | "text-streaming" | "transcription";
5
- model: ModelInformation;
6
- settings: unknown;
7
- response: unknown;
2
+ import { ModelCallFinishedEvent } from "./ModelCallEvent.js";
3
+ export type SuccessfulModelCall = ModelCallFinishedEvent & {
4
+ result: {
5
+ status: "success";
6
+ };
8
7
  };
9
- export declare function extractSuccessfulModelCalls(runFunctionEvents: FunctionEvent[]): SuccessfulModelCall[];
8
+ export declare function extractSuccessfulModelCalls(runFunctionEvents: FunctionEvent[]): (ModelCallFinishedEvent & {
9
+ result: {
10
+ status: "success";
11
+ };
12
+ })[];
@@ -1,12 +1,5 @@
1
1
  export function extractSuccessfulModelCalls(runFunctionEvents) {
2
- return runFunctionEvents
3
- .filter((event) => "result" in event &&
2
+ return runFunctionEvents.filter((event) => "result" in event &&
4
3
  "status" in event.result &&
5
- event.result.status === "success")
6
- .map((event) => ({
7
- model: event.model,
8
- settings: event.settings,
9
- response: event.result.response,
10
- type: event.functionType,
11
- }));
4
+ event.result.status === "success");
12
5
  }
@@ -28,8 +28,8 @@ class StructureFromTextGenerationModel {
28
28
  get settingsForEvent() {
29
29
  return this.model.settingsForEvent;
30
30
  }
31
- async generateStructureResponse(prompt, options) {
32
- return await (0, generateText_js_1.generateText)(this.model, this.format.createPrompt(prompt), options);
31
+ async generateStructureResponse(structure, prompt, options) {
32
+ return await (0, generateText_js_1.generateText)(this.model, this.format.createPrompt(prompt, structure), options);
33
33
  }
34
34
  extractStructure(response) {
35
35
  return this.format.extractStructure(response);
@@ -1,26 +1,22 @@
1
1
  import { TextGenerationModel, TextGenerationModelSettings } from "../generate-text/TextGenerationModel.js";
2
2
  import { StructureDefinition } from "../../core/structure/StructureDefinition.js";
3
- import { InstructionWithStructure } from "./InstructionWithStructurePrompt.js";
4
3
  import { StructureGenerationModel } from "./StructureGenerationModel.js";
5
4
  import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
6
- export type StructureFromTextPromptFormat = {
7
- createPrompt: (prompt: {
8
- instruction: string;
9
- structure: StructureDefinition<string, unknown>;
10
- }) => string;
5
+ export type StructureFromTextPromptFormat<PROMPT> = {
6
+ createPrompt: (prompt: PROMPT, structure: StructureDefinition<string, unknown>) => string;
11
7
  extractStructure: (response: string) => unknown;
12
8
  };
13
- export declare class StructureFromTextGenerationModel<MODEL extends TextGenerationModel<string, any, any, TextGenerationModelSettings>> implements StructureGenerationModel<InstructionWithStructure<string, unknown>, string, MODEL["settings"]> {
9
+ export declare class StructureFromTextGenerationModel<PROMPT, MODEL extends TextGenerationModel<string, any, any, TextGenerationModelSettings>> implements StructureGenerationModel<PROMPT, string, MODEL["settings"]> {
14
10
  private readonly model;
15
11
  private readonly format;
16
12
  constructor({ model, format, }: {
17
13
  model: MODEL;
18
- format: StructureFromTextPromptFormat;
14
+ format: StructureFromTextPromptFormat<PROMPT>;
19
15
  });
20
16
  get modelInformation(): import("../ModelInformation.js").ModelInformation;
21
17
  get settings(): TextGenerationModelSettings;
22
18
  get settingsForEvent(): Partial<MODEL["settings"]>;
23
- generateStructureResponse(prompt: InstructionWithStructure<string, unknown>, options?: ModelFunctionOptions<MODEL["settings"]> | undefined): Promise<string>;
19
+ generateStructureResponse(structure: StructureDefinition<string, unknown>, prompt: PROMPT, options?: ModelFunctionOptions<MODEL["settings"]> | undefined): Promise<string>;
24
20
  extractStructure(response: string): unknown;
25
21
  withSettings(additionalSettings: Partial<MODEL["settings"]>): this;
26
22
  }
@@ -25,8 +25,8 @@ export class StructureFromTextGenerationModel {
25
25
  get settingsForEvent() {
26
26
  return this.model.settingsForEvent;
27
27
  }
28
- async generateStructureResponse(prompt, options) {
29
- return await generateText(this.model, this.format.createPrompt(prompt), options);
28
+ async generateStructureResponse(structure, prompt, options) {
29
+ return await generateText(this.model, this.format.createPrompt(prompt, structure), options);
30
30
  }
31
31
  extractStructure(response) {
32
32
  return this.format.extractStructure(response);
@@ -1,9 +1,10 @@
1
- import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
1
+ import { StructureDefinition } from "../../core/structure/StructureDefinition.js";
2
2
  import { Model, ModelSettings } from "../Model.js";
3
+ import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
3
4
  export interface StructureGenerationModelSettings extends ModelSettings {
4
5
  }
5
6
  export interface StructureGenerationModel<PROMPT, RESPONSE, SETTINGS extends StructureGenerationModelSettings> extends Model<SETTINGS> {
6
- generateStructureResponse(prompt: PROMPT, options?: ModelFunctionOptions<SETTINGS>): PromiseLike<RESPONSE>;
7
+ generateStructureResponse(structure: StructureDefinition<string, unknown>, prompt: PROMPT, options?: ModelFunctionOptions<SETTINGS>): PromiseLike<RESPONSE>;
7
8
  extractStructure(response: RESPONSE): unknown;
8
9
  extractUsage?(response: RESPONSE): {
9
10
  promptTokens: number;
@@ -1,8 +1,10 @@
1
- import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
1
+ import { StructureDefinition } from "../../core/structure/StructureDefinition.js";
2
2
  import { Model, ModelSettings } from "../Model.js";
3
+ import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
3
4
  export interface StructureOrTextGenerationModelSettings extends ModelSettings {
4
5
  }
5
- export interface StructureOrTextGenerationPrompt<RESPONSE> {
6
+ export interface StructureOrTextGenerationModel<PROMPT, RESPONSE, SETTINGS extends StructureOrTextGenerationModelSettings> extends Model<SETTINGS> {
7
+ generateStructureOrTextResponse(structureDefinitions: Array<StructureDefinition<string, unknown>>, prompt: PROMPT, options?: ModelFunctionOptions<SETTINGS>): PromiseLike<RESPONSE>;
6
8
  extractStructureAndText(response: RESPONSE): {
7
9
  structure: null;
8
10
  value: null;
@@ -12,9 +14,6 @@ export interface StructureOrTextGenerationPrompt<RESPONSE> {
12
14
  value: unknown;
13
15
  text: string | null;
14
16
  };
15
- }
16
- export interface StructureOrTextGenerationModel<PROMPT, RESPONSE, SETTINGS extends StructureOrTextGenerationModelSettings> extends Model<SETTINGS> {
17
- generateStructureResponse(prompt: PROMPT & StructureOrTextGenerationPrompt<RESPONSE>, options?: ModelFunctionOptions<SETTINGS>): PromiseLike<RESPONSE>;
18
17
  extractUsage?(response: RESPONSE): {
19
18
  promptTokens: number;
20
19
  completionTokens: number;
@@ -4,13 +4,16 @@ exports.generateStructure = void 0;
4
4
  const executeCall_js_1 = require("../executeCall.cjs");
5
5
  const StructureValidationError_js_1 = require("./StructureValidationError.cjs");
6
6
  function generateStructure(model, structureDefinition, prompt, options) {
7
- const expandedPrompt = prompt(structureDefinition);
7
+ // Note: PROMPT must not be a function.
8
+ const expandedPrompt = typeof prompt === "function"
9
+ ? prompt(structureDefinition)
10
+ : prompt;
8
11
  return (0, executeCall_js_1.executeCall)({
9
12
  functionType: "structure-generation",
10
13
  input: expandedPrompt,
11
14
  model,
12
15
  options,
13
- generateResponse: (options) => model.generateStructureResponse(expandedPrompt, options),
16
+ generateResponse: (options) => model.generateStructureResponse(structureDefinition, expandedPrompt, options),
14
17
  extractOutputValue: (response) => {
15
18
  const structure = model.extractStructure(response);
16
19
  const parseResult = structureDefinition.schema.validate(structure);
@@ -2,4 +2,4 @@ import { StructureDefinition } from "../../core/structure/StructureDefinition.js
2
2
  import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
3
3
  import { ModelFunctionPromise } from "../executeCall.js";
4
4
  import { StructureGenerationModel, StructureGenerationModelSettings } from "./StructureGenerationModel.js";
5
- export declare function generateStructure<STRUCTURE, PROMPT, RESPONSE, NAME extends string, SETTINGS extends StructureGenerationModelSettings>(model: StructureGenerationModel<PROMPT, RESPONSE, SETTINGS>, structureDefinition: StructureDefinition<NAME, STRUCTURE>, prompt: (structureDefinition: StructureDefinition<NAME, STRUCTURE>) => PROMPT, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<STRUCTURE, RESPONSE>;
5
+ export declare function generateStructure<STRUCTURE, PROMPT, RESPONSE, NAME extends string, SETTINGS extends StructureGenerationModelSettings>(model: StructureGenerationModel<PROMPT, RESPONSE, SETTINGS>, structureDefinition: StructureDefinition<NAME, STRUCTURE>, prompt: PROMPT | ((structureDefinition: StructureDefinition<NAME, STRUCTURE>) => PROMPT), options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<STRUCTURE, RESPONSE>;
@@ -1,13 +1,16 @@
1
1
  import { executeCall } from "../executeCall.js";
2
2
  import { StructureValidationError } from "./StructureValidationError.js";
3
3
  export function generateStructure(model, structureDefinition, prompt, options) {
4
- const expandedPrompt = prompt(structureDefinition);
4
+ // Note: PROMPT must not be a function.
5
+ const expandedPrompt = typeof prompt === "function"
6
+ ? prompt(structureDefinition)
7
+ : prompt;
5
8
  return executeCall({
6
9
  functionType: "structure-generation",
7
10
  input: expandedPrompt,
8
11
  model,
9
12
  options,
10
- generateResponse: (options) => model.generateStructureResponse(expandedPrompt, options),
13
+ generateResponse: (options) => model.generateStructureResponse(structureDefinition, expandedPrompt, options),
11
14
  extractOutputValue: (response) => {
12
15
  const structure = model.extractStructure(response);
13
16
  const parseResult = structureDefinition.schema.validate(structure);
@@ -4,21 +4,24 @@ exports.generateStructureOrText = void 0;
4
4
  const executeCall_js_1 = require("../executeCall.cjs");
5
5
  const NoSuchStructureError_js_1 = require("./NoSuchStructureError.cjs");
6
6
  const StructureValidationError_js_1 = require("./StructureValidationError.cjs");
7
- function generateStructureOrText(model, structures, prompt, options) {
8
- const expandedPrompt = prompt(structures);
7
+ function generateStructureOrText(model, structureDefinitions, prompt, options) {
8
+ // Note: PROMPT must not be a function.
9
+ const expandedPrompt = typeof prompt === "function"
10
+ ? prompt(structureDefinitions)
11
+ : prompt;
9
12
  return (0, executeCall_js_1.executeCall)({
10
13
  functionType: "structure-or-text-generation",
11
14
  input: expandedPrompt,
12
15
  model,
13
16
  options,
14
- generateResponse: (options) => model.generateStructureResponse(expandedPrompt, options),
17
+ generateResponse: (options) => model.generateStructureOrTextResponse(structureDefinitions, expandedPrompt, options),
15
18
  extractOutputValue: (response) => {
16
- const { structure, value, text } = expandedPrompt.extractStructureAndText(response);
19
+ const { structure, value, text } = model.extractStructureAndText(response);
17
20
  // text generation:
18
21
  if (structure == null) {
19
22
  return { structure, value, text };
20
23
  }
21
- const definition = structures.find((d) => d.name === structure);
24
+ const definition = structureDefinitions.find((d) => d.name === structure);
22
25
  if (definition == undefined) {
23
26
  throw new NoSuchStructureError_js_1.NoSuchStructureError(structure);
24
27
  }
@@ -1,6 +1,6 @@
1
1
  import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
2
2
  import { ModelFunctionPromise } from "../executeCall.js";
3
- import { StructureOrTextGenerationModel, StructureOrTextGenerationModelSettings, StructureOrTextGenerationPrompt } from "./StructureOrTextGenerationModel.js";
3
+ import { StructureOrTextGenerationModel, StructureOrTextGenerationModelSettings } from "./StructureOrTextGenerationModel.js";
4
4
  import { StructureDefinition } from "../../core/structure/StructureDefinition.js";
5
5
  type StructureDefinitionArray<T extends StructureDefinition<any, any>[]> = T;
6
6
  type ToStructureDefinitionMap<T extends StructureDefinitionArray<StructureDefinition<any, any>[]>> = {
@@ -14,7 +14,7 @@ type ToStructureUnion<T> = {
14
14
  } : never;
15
15
  }[keyof T];
16
16
  type ToOutputValue<STRUCTURES extends StructureDefinitionArray<StructureDefinition<any, any>[]>> = ToStructureUnion<ToStructureDefinitionMap<STRUCTURES>>;
17
- export declare function generateStructureOrText<STRUCTURES extends StructureDefinition<any, any>[], PROMPT, RESPONSE, SETTINGS extends StructureOrTextGenerationModelSettings>(model: StructureOrTextGenerationModel<PROMPT, RESPONSE, SETTINGS>, structures: STRUCTURES, prompt: (structures: STRUCTURES) => PROMPT & StructureOrTextGenerationPrompt<RESPONSE>, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<{
17
+ export declare function generateStructureOrText<STRUCTURES extends StructureDefinition<any, any>[], PROMPT, RESPONSE, SETTINGS extends StructureOrTextGenerationModelSettings>(model: StructureOrTextGenerationModel<PROMPT, RESPONSE, SETTINGS>, structureDefinitions: STRUCTURES, prompt: PROMPT | ((structureDefinitions: STRUCTURES) => PROMPT), options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<{
18
18
  structure: null;
19
19
  value: null;
20
20
  text: string;
@@ -1,21 +1,24 @@
1
1
  import { executeCall } from "../executeCall.js";
2
2
  import { NoSuchStructureError } from "./NoSuchStructureError.js";
3
3
  import { StructureValidationError } from "./StructureValidationError.js";
4
- export function generateStructureOrText(model, structures, prompt, options) {
5
- const expandedPrompt = prompt(structures);
4
+ export function generateStructureOrText(model, structureDefinitions, prompt, options) {
5
+ // Note: PROMPT must not be a function.
6
+ const expandedPrompt = typeof prompt === "function"
7
+ ? prompt(structureDefinitions)
8
+ : prompt;
6
9
  return executeCall({
7
10
  functionType: "structure-or-text-generation",
8
11
  input: expandedPrompt,
9
12
  model,
10
13
  options,
11
- generateResponse: (options) => model.generateStructureResponse(expandedPrompt, options),
14
+ generateResponse: (options) => model.generateStructureOrTextResponse(structureDefinitions, expandedPrompt, options),
12
15
  extractOutputValue: (response) => {
13
- const { structure, value, text } = expandedPrompt.extractStructureAndText(response);
16
+ const { structure, value, text } = model.extractStructureAndText(response);
14
17
  // text generation:
15
18
  if (structure == null) {
16
19
  return { structure, value, text };
17
20
  }
18
- const definition = structures.find((d) => d.name === structure);
21
+ const definition = structureDefinitions.find((d) => d.name === structure);
19
22
  if (definition == undefined) {
20
23
  throw new NoSuchStructureError(structure);
21
24
  }
@@ -28,12 +28,11 @@ __exportStar(require("./embed-text/embedText.cjs"), exports);
28
28
  __exportStar(require("./generate-image/ImageGenerationEvent.cjs"), exports);
29
29
  __exportStar(require("./generate-image/ImageGenerationModel.cjs"), exports);
30
30
  __exportStar(require("./generate-image/generateImage.cjs"), exports);
31
- __exportStar(require("./generate-structure/InstructionWithStructurePrompt.cjs"), exports);
31
+ __exportStar(require("./generate-structure/NoSuchStructureError.cjs"), exports);
32
+ __exportStar(require("./generate-structure/StructureFromTextGenerationModel.cjs"), exports);
32
33
  __exportStar(require("./generate-structure/StructureGenerationEvent.cjs"), exports);
33
34
  __exportStar(require("./generate-structure/StructureGenerationModel.cjs"), exports);
34
35
  __exportStar(require("./generate-structure/StructureOrTextGenerationModel.cjs"), exports);
35
- __exportStar(require("./generate-structure/StructureFromTextGenerationModel.cjs"), exports);
36
- __exportStar(require("./generate-structure/NoSuchStructureError.cjs"), exports);
37
36
  __exportStar(require("./generate-structure/StructureValidationError.cjs"), exports);
38
37
  __exportStar(require("./generate-structure/generateStructure.cjs"), exports);
39
38
  __exportStar(require("./generate-structure/generateStructureOrText.cjs"), exports);
@@ -12,12 +12,11 @@ export * from "./embed-text/embedText.js";
12
12
  export * from "./generate-image/ImageGenerationEvent.js";
13
13
  export * from "./generate-image/ImageGenerationModel.js";
14
14
  export * from "./generate-image/generateImage.js";
15
- export * from "./generate-structure/InstructionWithStructurePrompt.js";
15
+ export * from "./generate-structure/NoSuchStructureError.js";
16
+ export * from "./generate-structure/StructureFromTextGenerationModel.js";
16
17
  export * from "./generate-structure/StructureGenerationEvent.js";
17
18
  export * from "./generate-structure/StructureGenerationModel.js";
18
19
  export * from "./generate-structure/StructureOrTextGenerationModel.js";
19
- export * from "./generate-structure/StructureFromTextGenerationModel.js";
20
- export * from "./generate-structure/NoSuchStructureError.js";
21
20
  export * from "./generate-structure/StructureValidationError.js";
22
21
  export * from "./generate-structure/generateStructure.js";
23
22
  export * from "./generate-structure/generateStructureOrText.js";
@@ -12,12 +12,11 @@ export * from "./embed-text/embedText.js";
12
12
  export * from "./generate-image/ImageGenerationEvent.js";
13
13
  export * from "./generate-image/ImageGenerationModel.js";
14
14
  export * from "./generate-image/generateImage.js";
15
- export * from "./generate-structure/InstructionWithStructurePrompt.js";
15
+ export * from "./generate-structure/NoSuchStructureError.js";
16
+ export * from "./generate-structure/StructureFromTextGenerationModel.js";
16
17
  export * from "./generate-structure/StructureGenerationEvent.js";
17
18
  export * from "./generate-structure/StructureGenerationModel.js";
18
19
  export * from "./generate-structure/StructureOrTextGenerationModel.js";
19
- export * from "./generate-structure/StructureFromTextGenerationModel.js";
20
- export * from "./generate-structure/NoSuchStructureError.js";
21
20
  export * from "./generate-structure/StructureValidationError.js";
22
21
  export * from "./generate-structure/generateStructure.js";
23
22
  export * from "./generate-structure/generateStructureOrText.js";
@@ -16,7 +16,7 @@ class OpenAICostCalculator {
16
16
  });
17
17
  }
18
18
  async calculateCostInMillicents(call) {
19
- const type = call.type;
19
+ const type = call.functionType;
20
20
  const model = call.model.modelName;
21
21
  switch (type) {
22
22
  case "image-generation": {
@@ -31,7 +31,7 @@ class OpenAICostCalculator {
31
31
  if ((0, OpenAITextEmbeddingModel_js_1.isOpenAIEmbeddingModel)(model)) {
32
32
  return (0, OpenAITextEmbeddingModel_js_1.calculateOpenAIEmbeddingCostInMillicents)({
33
33
  model,
34
- responses: call.response,
34
+ responses: call.result.response,
35
35
  });
36
36
  }
37
37
  break;
@@ -44,13 +44,13 @@ class OpenAICostCalculator {
44
44
  if ((0, OpenAIChatModel_js_1.isOpenAIChatModel)(model)) {
45
45
  return (0, OpenAIChatModel_js_1.calculateOpenAIChatCostInMillicents)({
46
46
  model,
47
- response: call.response,
47
+ response: call.result.response,
48
48
  });
49
49
  }
50
50
  if ((0, OpenAITextGenerationModel_js_1.isOpenAITextGenerationModel)(model)) {
51
51
  return (0, OpenAITextGenerationModel_js_1.calculateOpenAITextGenerationCostInMillicents)({
52
52
  model,
53
- response: call.response,
53
+ response: call.result.response,
54
54
  });
55
55
  }
56
56
  break;
@@ -61,7 +61,8 @@ class OpenAICostCalculator {
61
61
  }
62
62
  return (0, OpenAITranscriptionModel_js_1.calculateOpenAITranscriptionCostInMillicents)({
63
63
  model: model,
64
- response: call.response,
64
+ response: call.result
65
+ .response,
65
66
  });
66
67
  }
67
68
  }
@@ -13,7 +13,7 @@ export class OpenAICostCalculator {
13
13
  });
14
14
  }
15
15
  async calculateCostInMillicents(call) {
16
- const type = call.type;
16
+ const type = call.functionType;
17
17
  const model = call.model.modelName;
18
18
  switch (type) {
19
19
  case "image-generation": {
@@ -28,7 +28,7 @@ export class OpenAICostCalculator {
28
28
  if (isOpenAIEmbeddingModel(model)) {
29
29
  return calculateOpenAIEmbeddingCostInMillicents({
30
30
  model,
31
- responses: call.response,
31
+ responses: call.result.response,
32
32
  });
33
33
  }
34
34
  break;
@@ -41,13 +41,13 @@ export class OpenAICostCalculator {
41
41
  if (isOpenAIChatModel(model)) {
42
42
  return calculateOpenAIChatCostInMillicents({
43
43
  model,
44
- response: call.response,
44
+ response: call.result.response,
45
45
  });
46
46
  }
47
47
  if (isOpenAITextGenerationModel(model)) {
48
48
  return calculateOpenAITextGenerationCostInMillicents({
49
49
  model,
50
- response: call.response,
50
+ response: call.result.response,
51
51
  });
52
52
  }
53
53
  break;
@@ -58,7 +58,8 @@ export class OpenAICostCalculator {
58
58
  }
59
59
  return calculateOpenAITranscriptionCostInMillicents({
60
60
  model: model,
61
- response: call.response,
61
+ response: call.result
62
+ .response,
62
63
  });
63
64
  }
64
65
  }