modelfusion 0.40.0 → 0.41.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 (146) hide show
  1. package/README.md +14 -7
  2. package/composed-function/summarize/summarizeRecursivelyWithTextGenerationAndTokenSplitting.d.ts +3 -3
  3. package/core/FunctionEvent.d.ts +1 -1
  4. package/model-function/AsyncIterableResultPromise.d.ts +1 -1
  5. package/model-function/Delta.d.ts +8 -0
  6. package/model-function/ModelCallEvent.d.ts +1 -1
  7. package/model-function/ModelCallMetadata.d.ts +13 -0
  8. package/model-function/describe-image/ImageDescriptionEvent.d.ts +1 -1
  9. package/model-function/describe-image/ImageDescriptionModel.d.ts +6 -4
  10. package/model-function/describe-image/describeImage.cjs +7 -2
  11. package/model-function/describe-image/describeImage.d.ts +2 -2
  12. package/model-function/describe-image/describeImage.js +7 -2
  13. package/model-function/embed/EmbeddingEvent.d.ts +1 -1
  14. package/model-function/embed/EmbeddingModel.d.ts +6 -4
  15. package/model-function/embed/embed.cjs +16 -11
  16. package/model-function/embed/embed.d.ts +3 -3
  17. package/model-function/embed/embed.js +16 -11
  18. package/model-function/executeCall.cjs +26 -30
  19. package/model-function/executeCall.d.ts +19 -28
  20. package/model-function/executeCall.js +26 -30
  21. package/model-function/generate-image/ImageGenerationEvent.d.ts +1 -1
  22. package/model-function/generate-image/ImageGenerationModel.d.ts +6 -4
  23. package/model-function/generate-image/generateImage.cjs +7 -2
  24. package/model-function/generate-image/generateImage.d.ts +2 -2
  25. package/model-function/generate-image/generateImage.js +7 -2
  26. package/model-function/generate-structure/StructureFromTextGenerationModel.cjs +6 -5
  27. package/model-function/generate-structure/StructureFromTextGenerationModel.d.ts +7 -5
  28. package/model-function/generate-structure/StructureFromTextGenerationModel.js +6 -5
  29. package/model-function/generate-structure/StructureGenerationEvent.d.ts +1 -1
  30. package/model-function/generate-structure/StructureGenerationModel.d.ts +15 -18
  31. package/model-function/generate-structure/StructureOrTextGenerationModel.d.ts +19 -17
  32. package/model-function/generate-structure/generateStructure.cjs +10 -8
  33. package/model-function/generate-structure/generateStructure.d.ts +2 -2
  34. package/model-function/generate-structure/generateStructure.js +10 -8
  35. package/model-function/generate-structure/generateStructureOrText.cjs +15 -8
  36. package/model-function/generate-structure/generateStructureOrText.d.ts +4 -4
  37. package/model-function/generate-structure/generateStructureOrText.js +15 -8
  38. package/model-function/generate-structure/streamStructure.cjs +4 -16
  39. package/model-function/generate-structure/streamStructure.d.ts +3 -7
  40. package/model-function/generate-structure/streamStructure.js +4 -16
  41. package/model-function/generate-text/TextGenerationEvent.d.ts +1 -1
  42. package/model-function/generate-text/TextGenerationModel.d.ts +18 -19
  43. package/model-function/generate-text/generateText.cjs +8 -9
  44. package/model-function/generate-text/generateText.d.ts +2 -2
  45. package/model-function/generate-text/generateText.js +8 -9
  46. package/model-function/generate-text/streamText.cjs +8 -21
  47. package/model-function/generate-text/streamText.d.ts +3 -7
  48. package/model-function/generate-text/streamText.js +8 -21
  49. package/model-function/index.cjs +2 -2
  50. package/model-function/index.d.ts +2 -2
  51. package/model-function/index.js +2 -2
  52. package/model-function/synthesize-speech/SpeechSynthesisEvent.d.ts +1 -1
  53. package/model-function/synthesize-speech/SpeechSynthesisModel.d.ts +3 -3
  54. package/model-function/synthesize-speech/synthesizeSpeech.cjs +7 -2
  55. package/model-function/synthesize-speech/synthesizeSpeech.d.ts +2 -2
  56. package/model-function/synthesize-speech/synthesizeSpeech.js +7 -2
  57. package/model-function/transcribe-speech/TranscriptionEvent.d.ts +1 -1
  58. package/model-function/transcribe-speech/TranscriptionModel.d.ts +6 -4
  59. package/model-function/transcribe-speech/transcribe.cjs +7 -2
  60. package/model-function/transcribe-speech/transcribe.d.ts +2 -2
  61. package/model-function/transcribe-speech/transcribe.js +7 -2
  62. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.cjs +14 -18
  63. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.d.ts +11 -9
  64. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.js +14 -18
  65. package/model-provider/cohere/CohereTextEmbeddingModel.cjs +13 -16
  66. package/model-provider/cohere/CohereTextEmbeddingModel.d.ts +12 -10
  67. package/model-provider/cohere/CohereTextEmbeddingModel.js +13 -16
  68. package/model-provider/cohere/CohereTextGenerationModel.cjs +29 -29
  69. package/model-provider/cohere/CohereTextGenerationModel.d.ts +24 -22
  70. package/model-provider/cohere/CohereTextGenerationModel.js +29 -29
  71. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.cjs +10 -17
  72. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.d.ts +2 -2
  73. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.js +10 -17
  74. package/model-provider/huggingface/HuggingFaceImageDescriptionModel.cjs +13 -16
  75. package/model-provider/huggingface/HuggingFaceImageDescriptionModel.d.ts +9 -7
  76. package/model-provider/huggingface/HuggingFaceImageDescriptionModel.js +13 -16
  77. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +19 -25
  78. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.d.ts +8 -6
  79. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +19 -25
  80. package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +18 -24
  81. package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +10 -8
  82. package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +18 -24
  83. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +13 -16
  84. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.d.ts +8 -6
  85. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +13 -16
  86. package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +31 -34
  87. package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +62 -60
  88. package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +31 -34
  89. package/model-provider/lmnt/LmntSpeechSynthesisModel.cjs +7 -12
  90. package/model-provider/lmnt/LmntSpeechSynthesisModel.d.ts +2 -2
  91. package/model-provider/lmnt/LmntSpeechSynthesisModel.js +7 -12
  92. package/model-provider/openai/OpenAIImageGenerationModel.cjs +8 -16
  93. package/model-provider/openai/OpenAIImageGenerationModel.d.ts +11 -11
  94. package/model-provider/openai/OpenAIImageGenerationModel.js +8 -16
  95. package/model-provider/openai/OpenAITextEmbeddingModel.cjs +18 -24
  96. package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +18 -16
  97. package/model-provider/openai/OpenAITextEmbeddingModel.js +18 -24
  98. package/model-provider/openai/OpenAITextGenerationModel.cjs +23 -27
  99. package/model-provider/openai/OpenAITextGenerationModel.d.ts +31 -33
  100. package/model-provider/openai/OpenAITextGenerationModel.js +23 -27
  101. package/model-provider/openai/OpenAITranscriptionModel.cjs +19 -28
  102. package/model-provider/openai/OpenAITranscriptionModel.d.ts +27 -7
  103. package/model-provider/openai/OpenAITranscriptionModel.js +19 -28
  104. package/model-provider/openai/chat/OpenAIChatModel.cjs +82 -86
  105. package/model-provider/openai/chat/OpenAIChatModel.d.ts +127 -50
  106. package/model-provider/openai/chat/OpenAIChatModel.js +83 -87
  107. package/model-provider/openai/chat/OpenAIChatStreamIterable.cjs +4 -3
  108. package/model-provider/openai/chat/OpenAIChatStreamIterable.d.ts +2 -2
  109. package/model-provider/openai/chat/OpenAIChatStreamIterable.js +2 -1
  110. package/model-provider/stability/StabilityImageGenerationModel.cjs +16 -21
  111. package/model-provider/stability/StabilityImageGenerationModel.d.ts +13 -11
  112. package/model-provider/stability/StabilityImageGenerationModel.js +16 -21
  113. package/package.json +1 -1
  114. package/prompt/PromptFormatTextGenerationModel.cjs +6 -19
  115. package/prompt/PromptFormatTextGenerationModel.d.ts +14 -10
  116. package/prompt/PromptFormatTextGenerationModel.js +6 -19
  117. package/prompt/PromptFormatTextStreamingModel.cjs +31 -0
  118. package/prompt/PromptFormatTextStreamingModel.d.ts +13 -0
  119. package/prompt/PromptFormatTextStreamingModel.js +27 -0
  120. package/prompt/chat/trimChatPrompt.d.ts +2 -2
  121. package/prompt/index.cjs +1 -0
  122. package/prompt/index.d.ts +1 -0
  123. package/prompt/index.js +1 -0
  124. package/retriever/Retriever.d.ts +3 -6
  125. package/retriever/retrieve.cjs +2 -2
  126. package/retriever/retrieve.d.ts +3 -3
  127. package/retriever/retrieve.js +2 -2
  128. package/tool/executeTool.cjs +2 -2
  129. package/tool/executeTool.js +2 -2
  130. package/tool/useTool.cjs +2 -4
  131. package/tool/useTool.d.ts +2 -2
  132. package/tool/useTool.js +2 -4
  133. package/tool/useToolOrGenerateText.d.ts +2 -2
  134. package/util/SafeResult.d.ts +1 -1
  135. package/util/runSafe.cjs +1 -1
  136. package/util/runSafe.js +1 -1
  137. package/vector-index/VectorIndexRetriever.cjs +0 -7
  138. package/vector-index/VectorIndexRetriever.d.ts +5 -5
  139. package/vector-index/VectorIndexRetriever.js +0 -7
  140. package/vector-index/upsertIntoVectorIndex.d.ts +4 -4
  141. package/model-function/DeltaEvent.d.ts +0 -7
  142. package/model-function/ModelFunctionOptions.d.ts +0 -4
  143. /package/model-function/{DeltaEvent.cjs → Delta.cjs} +0 -0
  144. /package/model-function/{DeltaEvent.js → Delta.js} +0 -0
  145. /package/model-function/{ModelFunctionOptions.cjs → ModelCallMetadata.cjs} +0 -0
  146. /package/model-function/{ModelFunctionOptions.js → ModelCallMetadata.js} +0 -0
package/README.md CHANGED
@@ -114,9 +114,8 @@ const textStream = await streamText(
114
114
  ModelFusion model functions return rich results that include the original response and metadata when you call `.asFullResponse()` before resolving the promise.
115
115
 
116
116
  ```ts
117
- // access the full response and the metadata:
118
- // the response type is specific to the model that's being used
119
- const { output, response, metadata } = await generateText(
117
+ // access the full response (needs to be typed) and the metadata:
118
+ const { value, response, metadata } = await generateText(
120
119
  new OpenAITextGenerationModel({
121
120
  model: "gpt-3.5-turbo-instruct",
122
121
  maxCompletionTokens: 1000,
@@ -125,11 +124,12 @@ const { output, response, metadata } = await generateText(
125
124
  "Write a short story about a robot learning to love:\n\n"
126
125
  ).asFullResponse();
127
126
 
128
- for (const choice of response.choices) {
127
+ console.log(metadata);
128
+
129
+ // cast to the response type:
130
+ for (const choice of (response as OpenAITextGenerationResponse).choices) {
129
131
  console.log(choice.text);
130
132
  }
131
-
132
- console.log(`Duration: ${metadata.durationInMs}ms`);
133
133
  ```
134
134
 
135
135
  ### [Generate Structure](https://modelfusion.dev/guide/function/generate-structure#generatestructure)
@@ -381,6 +381,13 @@ Providers: [OpenAI (Dall·E)](https://modelfusion.dev/integration/model-provider
381
381
  Create embeddings for text and other values. Embeddings are vectors that represent the essence of the values in the context of the model.
382
382
 
383
383
  ```ts
384
+ // embed single value:
385
+ const embedding = await embed(
386
+ new OpenAITextEmbeddingModel({ model: "text-embedding-ada-002" }),
387
+ "At first, Nox didn't know what to do with the pup."
388
+ );
389
+
390
+ // embed many values:
384
391
  const embeddings = await embedMany(
385
392
  new OpenAITextEmbeddingModel({ model: "text-embedding-ada-002" }),
386
393
  [
@@ -456,7 +463,7 @@ Integrations: [Helicone](https://modelfusion.dev/integration/observability/helic
456
463
 
457
464
  - [Model Functions](https://modelfusion.dev/guide/function/)
458
465
  - [Generate and stream text](https://modelfusion.dev/guide/function/generate-text)
459
- - [Generate structure](https://modelfusion.dev/guide/function/generate-structure)
466
+ - [Generate and stream structure](https://modelfusion.dev/guide/function/generate-structure)
460
467
  - [Generate structure or text](https://modelfusion.dev/guide/function/generate-structure-or-text)
461
468
  - [Embed Value](https://modelfusion.dev/guide/function/embed)
462
469
  - [Tokenize Text](https://modelfusion.dev/guide/function/tokenize-text)
@@ -1,6 +1,6 @@
1
- import { TextGenerationModel, TextGenerationModelSettings } from "../../model-function/generate-text/TextGenerationModel.js";
2
- import { FullTokenizer } from "../../model-function/tokenize-text/Tokenizer.js";
3
1
  import { Run } from "../../core/Run.js";
2
+ import { TextGenerationModel } from "../../model-function/generate-text/TextGenerationModel.js";
3
+ import { FullTokenizer } from "../../model-function/tokenize-text/Tokenizer.js";
4
4
  /**
5
5
  * Recursively summarizes a text using a text generation model, e.g. for summarization or text extraction.
6
6
  * It automatically splits the text into optimal chunks that are small enough to be processed by the model,
@@ -8,7 +8,7 @@ import { Run } from "../../core/Run.js";
8
8
  */
9
9
  export declare function summarizeRecursivelyWithTextGenerationAndTokenSplitting<PROMPT>({ text, model, prompt, tokenLimit, join, }: {
10
10
  text: string;
11
- model: TextGenerationModel<PROMPT, any, any, TextGenerationModelSettings> & {
11
+ model: TextGenerationModel<PROMPT> & {
12
12
  contextWindowSize: number;
13
13
  tokenizer: FullTokenizer;
14
14
  countPromptTokens: (prompt: PROMPT) => PromiseLike<number>;
@@ -47,7 +47,7 @@ export interface BaseFunctionStartedEvent extends BaseFunctionEvent {
47
47
  }
48
48
  export type BaseFunctionFinishedEventResult = {
49
49
  status: "success";
50
- output: unknown;
50
+ value: unknown;
51
51
  } | {
52
52
  status: "error";
53
53
  error: unknown;
@@ -1,4 +1,4 @@
1
- import { ModelCallMetadata } from "./executeCall.js";
1
+ import { ModelCallMetadata } from "./ModelCallMetadata.js";
2
2
  export declare class AsyncIterableResultPromise<T> extends Promise<AsyncIterable<T>> {
3
3
  private fullPromise;
4
4
  private outputPromise;
@@ -0,0 +1,8 @@
1
+ export type Delta<T> = {
2
+ type: "delta";
3
+ fullDelta: unknown;
4
+ valueDelta: T;
5
+ } | {
6
+ type: "error";
7
+ error: unknown;
8
+ };
@@ -23,7 +23,7 @@ export interface BaseModelCallStartedEvent extends BaseFunctionStartedEvent {
23
23
  export type BaseModelCallFinishedEventResult = {
24
24
  status: "success";
25
25
  response: unknown;
26
- output: unknown;
26
+ value: unknown;
27
27
  /**
28
28
  * Optional usage information for the model call. The type depends on the call type.
29
29
  */
@@ -0,0 +1,13 @@
1
+ import { ModelInformation } from "./ModelInformation.js";
2
+ export type ModelCallMetadata = {
3
+ model: ModelInformation;
4
+ callId: string;
5
+ runId?: string;
6
+ sessionId?: string;
7
+ userId?: string;
8
+ functionId?: string;
9
+ startTimestamp: Date;
10
+ finishTimestamp: Date;
11
+ durationInMs: number;
12
+ usage?: unknown;
13
+ };
@@ -5,7 +5,7 @@ export interface ImageDescriptionStartedEvent extends BaseModelCallStartedEvent
5
5
  export type ImageDescriptionFinishedEventResult = {
6
6
  status: "success";
7
7
  response: unknown;
8
- output: string;
8
+ value: string;
9
9
  } | {
10
10
  status: "error";
11
11
  error: unknown;
@@ -1,8 +1,10 @@
1
- import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
2
  import { Model, ModelSettings } from "../Model.js";
3
3
  export interface ImageDescriptionModelSettings extends ModelSettings {
4
4
  }
5
- export interface ImageDescriptionModel<DATA, RESPONSE, SETTINGS extends ImageDescriptionModelSettings> extends Model<SETTINGS> {
6
- generateImageDescriptionResponse: (data: DATA, options?: ModelFunctionOptions<SETTINGS>) => PromiseLike<RESPONSE>;
7
- extractImageDescription: (response: RESPONSE) => string;
5
+ export interface ImageDescriptionModel<DATA, SETTINGS extends ImageDescriptionModelSettings = ImageDescriptionModelSettings> extends Model<SETTINGS> {
6
+ doDescribeImage: (data: DATA, options?: FunctionOptions) => PromiseLike<{
7
+ response: unknown;
8
+ description: string;
9
+ }>;
8
10
  }
@@ -13,8 +13,13 @@ function describeImage(model, data, options) {
13
13
  input: data,
14
14
  model,
15
15
  options,
16
- generateResponse: (options) => model.generateImageDescriptionResponse(data, options),
17
- extractOutputValue: model.extractImageDescription,
16
+ generateResponse: async (options) => {
17
+ const result = await model.doDescribeImage(data, options);
18
+ return {
19
+ response: result.response,
20
+ extractedValue: result.description,
21
+ };
22
+ },
18
23
  });
19
24
  }
20
25
  exports.describeImage = describeImage;
@@ -1,4 +1,4 @@
1
- import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
2
  import { ModelFunctionPromise } from "../executeCall.js";
3
3
  import { ImageDescriptionModel, ImageDescriptionModelSettings } from "./ImageDescriptionModel.js";
4
4
  /**
@@ -6,4 +6,4 @@ import { ImageDescriptionModel, ImageDescriptionModelSettings } from "./ImageDes
6
6
  *
7
7
  * Depending on the model, this can be used for image captioning, for describing the contents of an image, or for OCR.
8
8
  */
9
- export declare function describeImage<DATA, RESPONSE, SETTINGS extends ImageDescriptionModelSettings>(model: ImageDescriptionModel<DATA, RESPONSE, SETTINGS>, data: DATA, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<string, RESPONSE>;
9
+ export declare function describeImage<DATA>(model: ImageDescriptionModel<DATA, ImageDescriptionModelSettings>, data: DATA, options?: FunctionOptions): ModelFunctionPromise<string>;
@@ -10,7 +10,12 @@ export function describeImage(model, data, options) {
10
10
  input: data,
11
11
  model,
12
12
  options,
13
- generateResponse: (options) => model.generateImageDescriptionResponse(data, options),
14
- extractOutputValue: model.extractImageDescription,
13
+ generateResponse: async (options) => {
14
+ const result = await model.doDescribeImage(data, options);
15
+ return {
16
+ response: result.response,
17
+ extractedValue: result.description,
18
+ };
19
+ },
15
20
  });
16
21
  }
@@ -7,7 +7,7 @@ export interface EmbeddingStartedEvent extends BaseModelCallStartedEvent {
7
7
  export type EmbeddingFinishedEventResult = {
8
8
  status: "success";
9
9
  response: unknown;
10
- output: Vector | Array<Vector>;
10
+ value: Vector | Array<Vector>;
11
11
  } | {
12
12
  status: "error";
13
13
  error: unknown;
@@ -1,9 +1,9 @@
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
1
2
  import { Vector } from "../../core/Vector.js";
2
- import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
3
3
  import { Model, ModelSettings } from "../Model.js";
4
4
  export interface EmbeddingModelSettings extends ModelSettings {
5
5
  }
6
- export interface EmbeddingModel<VALUE, RESPONSE, SETTINGS extends EmbeddingModelSettings> extends Model<SETTINGS> {
6
+ export interface EmbeddingModel<VALUE, SETTINGS extends EmbeddingModelSettings = EmbeddingModelSettings> extends Model<SETTINGS> {
7
7
  /**
8
8
  * The size of the embedding vector.
9
9
  */
@@ -12,6 +12,8 @@ export interface EmbeddingModel<VALUE, RESPONSE, SETTINGS extends EmbeddingModel
12
12
  * Limit of how many values can be sent in a single API call.
13
13
  */
14
14
  readonly maxValuesPerCall: number | undefined;
15
- generateEmbeddingResponse(values: VALUE[], options?: ModelFunctionOptions<SETTINGS>): PromiseLike<RESPONSE>;
16
- extractEmbeddings(response: RESPONSE): Vector[];
15
+ doEmbedValues(values: VALUE[], options?: FunctionOptions): PromiseLike<{
16
+ response: unknown;
17
+ embeddings: Vector[];
18
+ }>;
17
19
  }
@@ -20,7 +20,7 @@ function embedMany(model, values, options) {
20
20
  input: values,
21
21
  model,
22
22
  options,
23
- generateResponse: (options) => {
23
+ generateResponse: async (options) => {
24
24
  // split the values into groups that are small enough to be sent in one call:
25
25
  const maxValuesPerCall = model.maxValuesPerCall;
26
26
  const valueGroups = [];
@@ -32,14 +32,16 @@ function embedMany(model, values, options) {
32
32
  valueGroups.push(values.slice(i, i + maxValuesPerCall));
33
33
  }
34
34
  }
35
- return Promise.all(valueGroups.map((valueGroup) => model.generateEmbeddingResponse(valueGroup, options)));
36
- },
37
- extractOutputValue: (result) => {
35
+ const responses = await Promise.all(valueGroups.map((valueGroup) => model.doEmbedValues(valueGroup, options)));
36
+ const rawResponses = responses.map((response) => response.response);
38
37
  const embeddings = [];
39
- for (const response of result) {
40
- embeddings.push(...model.extractEmbeddings(response));
38
+ for (const response of responses) {
39
+ embeddings.push(...response.embeddings);
41
40
  }
42
- return embeddings;
41
+ return {
42
+ response: rawResponses,
43
+ extractedValue: embeddings,
44
+ };
43
45
  },
44
46
  });
45
47
  }
@@ -59,10 +61,13 @@ function embed(model, value, options) {
59
61
  input: value,
60
62
  model,
61
63
  options,
62
- generateResponse: async (options) => [
63
- await model.generateEmbeddingResponse([value], options),
64
- ],
65
- extractOutputValue: (result) => model.extractEmbeddings(result[0])[0],
64
+ generateResponse: async (options) => {
65
+ const result = await model.doEmbedValues([value], options);
66
+ return {
67
+ response: result.response,
68
+ extractedValue: result.embeddings[0],
69
+ };
70
+ },
66
71
  });
67
72
  }
68
73
  exports.embed = embed;
@@ -1,5 +1,5 @@
1
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
1
2
  import { Vector } from "../../core/Vector.js";
2
- import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
3
3
  import { ModelFunctionPromise } from "../executeCall.js";
4
4
  import { EmbeddingModel, EmbeddingModelSettings } from "./EmbeddingModel.js";
5
5
  /**
@@ -14,7 +14,7 @@ import { EmbeddingModel, EmbeddingModelSettings } from "./EmbeddingModel.js";
14
14
  * ]
15
15
  * );
16
16
  */
17
- export declare function embedMany<VALUE, RESPONSE, SETTINGS extends EmbeddingModelSettings>(model: EmbeddingModel<VALUE, RESPONSE, SETTINGS>, values: VALUE[], options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<Vector[], RESPONSE[]>;
17
+ export declare function embedMany<VALUE>(model: EmbeddingModel<VALUE, EmbeddingModelSettings>, values: VALUE[], options?: FunctionOptions): ModelFunctionPromise<Vector[]>;
18
18
  /**
19
19
  * Generate an embedding for a single value.
20
20
  *
@@ -24,4 +24,4 @@ export declare function embedMany<VALUE, RESPONSE, SETTINGS extends EmbeddingMod
24
24
  * "At first, Nox didn't know what to do with the pup."
25
25
  * );
26
26
  */
27
- export declare function embed<VALUE, RESPONSE, SETTINGS extends EmbeddingModelSettings>(model: EmbeddingModel<VALUE, RESPONSE, SETTINGS>, value: VALUE, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<Vector, RESPONSE[]>;
27
+ export declare function embed<VALUE>(model: EmbeddingModel<VALUE, EmbeddingModelSettings>, value: VALUE, options?: FunctionOptions): ModelFunctionPromise<Vector>;
@@ -17,7 +17,7 @@ export function embedMany(model, values, options) {
17
17
  input: values,
18
18
  model,
19
19
  options,
20
- generateResponse: (options) => {
20
+ generateResponse: async (options) => {
21
21
  // split the values into groups that are small enough to be sent in one call:
22
22
  const maxValuesPerCall = model.maxValuesPerCall;
23
23
  const valueGroups = [];
@@ -29,14 +29,16 @@ export function embedMany(model, values, options) {
29
29
  valueGroups.push(values.slice(i, i + maxValuesPerCall));
30
30
  }
31
31
  }
32
- return Promise.all(valueGroups.map((valueGroup) => model.generateEmbeddingResponse(valueGroup, options)));
33
- },
34
- extractOutputValue: (result) => {
32
+ const responses = await Promise.all(valueGroups.map((valueGroup) => model.doEmbedValues(valueGroup, options)));
33
+ const rawResponses = responses.map((response) => response.response);
35
34
  const embeddings = [];
36
- for (const response of result) {
37
- embeddings.push(...model.extractEmbeddings(response));
35
+ for (const response of responses) {
36
+ embeddings.push(...response.embeddings);
38
37
  }
39
- return embeddings;
38
+ return {
39
+ response: rawResponses,
40
+ extractedValue: embeddings,
41
+ };
40
42
  },
41
43
  });
42
44
  }
@@ -55,9 +57,12 @@ export function embed(model, value, options) {
55
57
  input: value,
56
58
  model,
57
59
  options,
58
- generateResponse: async (options) => [
59
- await model.generateEmbeddingResponse([value], options),
60
- ],
61
- extractOutputValue: (result) => model.extractEmbeddings(result[0])[0],
60
+ generateResponse: async (options) => {
61
+ const result = await model.doEmbedValues([value], options);
62
+ return {
63
+ response: result.response,
64
+ extractedValue: result.embeddings[0],
65
+ };
66
+ },
62
67
  });
63
68
  }
@@ -5,9 +5,9 @@ const nanoid_1 = require("nanoid");
5
5
  const FunctionEventSource_js_1 = require("../core/FunctionEventSource.cjs");
6
6
  const GlobalFunctionLogging_js_1 = require("../core/GlobalFunctionLogging.cjs");
7
7
  const GlobalFunctionObservers_js_1 = require("../core/GlobalFunctionObservers.cjs");
8
+ const AbortError_js_1 = require("../core/api/AbortError.cjs");
8
9
  const getFunctionCallLogger_js_1 = require("../core/getFunctionCallLogger.cjs");
9
10
  const DurationMeasurement_js_1 = require("../util/DurationMeasurement.cjs");
10
- const AbortError_js_1 = require("../core/api/AbortError.cjs");
11
11
  const runSafe_js_1 = require("../util/runSafe.cjs");
12
12
  class ModelFunctionPromise extends Promise {
13
13
  constructor(fullPromise) {
@@ -21,50 +21,39 @@ class ModelFunctionPromise extends Promise {
21
21
  writable: true,
22
22
  value: fullPromise
23
23
  });
24
- Object.defineProperty(this, "outputPromise", {
24
+ Object.defineProperty(this, "valuePromise", {
25
25
  enumerable: true,
26
26
  configurable: true,
27
27
  writable: true,
28
28
  value: void 0
29
29
  });
30
- this.outputPromise = fullPromise.then((result) => result.output);
30
+ this.valuePromise = fullPromise.then((result) => result.value);
31
31
  }
32
32
  asFullResponse() {
33
33
  return this.fullPromise;
34
34
  }
35
35
  then(onfulfilled, onrejected) {
36
- return this.outputPromise.then(onfulfilled, onrejected);
36
+ return this.valuePromise.then(onfulfilled, onrejected);
37
37
  }
38
38
  catch(onrejected) {
39
- return this.outputPromise.catch(onrejected);
39
+ return this.valuePromise.catch(onrejected);
40
40
  }
41
41
  finally(onfinally) {
42
- return this.outputPromise.finally(onfinally);
42
+ return this.valuePromise.finally(onfinally);
43
43
  }
44
44
  }
45
45
  exports.ModelFunctionPromise = ModelFunctionPromise;
46
- function executeCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
46
+ function executeCall({ model, options, input, functionType, generateResponse, }) {
47
47
  return new ModelFunctionPromise(doExecuteCall({
48
48
  model,
49
49
  options,
50
50
  input,
51
51
  functionType,
52
52
  generateResponse,
53
- extractOutputValue,
54
- extractUsage,
55
53
  }));
56
54
  }
57
55
  exports.executeCall = executeCall;
58
- async function doExecuteCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
59
- if (options?.settings != null) {
60
- model = model.withSettings(options.settings);
61
- options = {
62
- functionId: options.functionId,
63
- logging: options.logging,
64
- observers: options.observers,
65
- run: options.run,
66
- };
67
- }
56
+ async function doExecuteCall({ model, options, input, functionType, generateResponse, }) {
68
57
  const run = options?.run;
69
58
  const settings = model.settings;
70
59
  const eventSource = new FunctionEventSource_js_1.FunctionEventSource({
@@ -95,11 +84,7 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
95
84
  eventType: "started",
96
85
  ...startMetadata,
97
86
  });
98
- const result = await (0, runSafe_js_1.runSafe)(() => generateResponse({
99
- functionId: options?.functionId,
100
- settings,
101
- run,
102
- }));
87
+ const result = await (0, runSafe_js_1.runSafe)(() => generateResponse(options));
103
88
  const finishMetadata = {
104
89
  eventType: "finished",
105
90
  ...startMetadata,
@@ -127,9 +112,9 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
127
112
  });
128
113
  throw result.error;
129
114
  }
130
- const response = result.output;
131
- const output = extractOutputValue(response);
132
- const usage = extractUsage?.(response);
115
+ const response = result.value.response;
116
+ const value = result.value.extractedValue;
117
+ const usage = result.value.usage;
133
118
  eventSource.notify({
134
119
  ...finishMetadata,
135
120
  eventType: "finished",
@@ -137,12 +122,23 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
137
122
  status: "success",
138
123
  usage,
139
124
  response,
140
- output,
125
+ value,
141
126
  },
142
127
  });
143
128
  return {
144
- output,
129
+ value,
145
130
  response,
146
- metadata: finishMetadata,
131
+ metadata: {
132
+ model: model.modelInformation,
133
+ callId: finishMetadata.callId,
134
+ runId: finishMetadata.runId,
135
+ sessionId: finishMetadata.sessionId,
136
+ userId: finishMetadata.userId,
137
+ functionId: finishMetadata.functionId,
138
+ startTimestamp: startMetadata.startTimestamp,
139
+ finishTimestamp: finishMetadata.finishTimestamp,
140
+ durationInMs: finishMetadata.durationInMs,
141
+ usage,
142
+ },
147
143
  };
148
144
  }
@@ -1,41 +1,32 @@
1
+ import { FunctionOptions } from "../core/FunctionOptions.js";
1
2
  import { Model, ModelSettings } from "./Model.js";
2
3
  import { ModelCallStartedEvent } from "./ModelCallEvent.js";
3
- import { ModelFunctionOptions } from "./ModelFunctionOptions.js";
4
- import { ModelInformation } from "./ModelInformation.js";
5
- export type ModelCallMetadata = {
6
- callId: string;
7
- runId?: string;
8
- sessionId?: string;
9
- userId?: string;
10
- functionId?: string;
11
- startTimestamp: Date;
12
- finishTimestamp: Date;
13
- durationInMs: number;
14
- model: ModelInformation;
15
- };
16
- export declare class ModelFunctionPromise<OUTPUT, RESPONSE> extends Promise<OUTPUT> {
4
+ import { ModelCallMetadata } from "./ModelCallMetadata.js";
5
+ export declare class ModelFunctionPromise<VALUE> extends Promise<VALUE> {
17
6
  private fullPromise;
18
- private outputPromise;
7
+ private valuePromise;
19
8
  constructor(fullPromise: Promise<{
20
- output: OUTPUT;
21
- response: RESPONSE;
9
+ value: VALUE;
10
+ response: unknown;
22
11
  metadata: ModelCallMetadata;
23
12
  }>);
24
13
  asFullResponse(): Promise<{
25
- output: OUTPUT;
26
- response: RESPONSE;
14
+ value: VALUE;
15
+ response: unknown;
27
16
  metadata: ModelCallMetadata;
28
17
  }>;
29
- then<TResult1 = OUTPUT, TResult2 = never>(onfulfilled?: ((value: OUTPUT) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
30
- catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null): Promise<OUTPUT | TResult>;
31
- finally(onfinally?: (() => void) | undefined | null): Promise<OUTPUT>;
18
+ then<TResult1 = VALUE, TResult2 = never>(onfulfilled?: ((value: VALUE) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>;
19
+ catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null): Promise<VALUE | TResult>;
20
+ finally(onfinally?: (() => void) | undefined | null): Promise<VALUE>;
32
21
  }
33
- export declare function executeCall<SETTINGS extends ModelSettings, MODEL extends Model<SETTINGS>, OUTPUT, RESPONSE>({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }: {
22
+ export declare function executeCall<VALUE, MODEL extends Model<ModelSettings>>({ model, options, input, functionType, generateResponse, }: {
34
23
  model: MODEL;
35
- options?: ModelFunctionOptions<SETTINGS>;
24
+ options?: FunctionOptions;
36
25
  input: unknown;
37
26
  functionType: ModelCallStartedEvent["functionType"];
38
- generateResponse: (options: ModelFunctionOptions<SETTINGS>) => PromiseLike<RESPONSE>;
39
- extractOutputValue: (response: RESPONSE) => OUTPUT;
40
- extractUsage?: (response: RESPONSE) => unknown;
41
- }): ModelFunctionPromise<OUTPUT, RESPONSE>;
27
+ generateResponse: (options?: FunctionOptions) => PromiseLike<{
28
+ response: unknown;
29
+ extractedValue: VALUE;
30
+ usage?: unknown;
31
+ }>;
32
+ }): ModelFunctionPromise<VALUE>;
@@ -2,9 +2,9 @@ import { nanoid as createId } from "nanoid";
2
2
  import { FunctionEventSource } from "../core/FunctionEventSource.js";
3
3
  import { getGlobalFunctionLogging } from "../core/GlobalFunctionLogging.js";
4
4
  import { getGlobalFunctionObservers } from "../core/GlobalFunctionObservers.js";
5
+ import { AbortError } from "../core/api/AbortError.js";
5
6
  import { getFunctionCallLogger } from "../core/getFunctionCallLogger.js";
6
7
  import { startDurationMeasurement } from "../util/DurationMeasurement.js";
7
- import { AbortError } from "../core/api/AbortError.js";
8
8
  import { runSafe } from "../util/runSafe.js";
9
9
  export class ModelFunctionPromise extends Promise {
10
10
  constructor(fullPromise) {
@@ -18,48 +18,37 @@ export class ModelFunctionPromise extends Promise {
18
18
  writable: true,
19
19
  value: fullPromise
20
20
  });
21
- Object.defineProperty(this, "outputPromise", {
21
+ Object.defineProperty(this, "valuePromise", {
22
22
  enumerable: true,
23
23
  configurable: true,
24
24
  writable: true,
25
25
  value: void 0
26
26
  });
27
- this.outputPromise = fullPromise.then((result) => result.output);
27
+ this.valuePromise = fullPromise.then((result) => result.value);
28
28
  }
29
29
  asFullResponse() {
30
30
  return this.fullPromise;
31
31
  }
32
32
  then(onfulfilled, onrejected) {
33
- return this.outputPromise.then(onfulfilled, onrejected);
33
+ return this.valuePromise.then(onfulfilled, onrejected);
34
34
  }
35
35
  catch(onrejected) {
36
- return this.outputPromise.catch(onrejected);
36
+ return this.valuePromise.catch(onrejected);
37
37
  }
38
38
  finally(onfinally) {
39
- return this.outputPromise.finally(onfinally);
39
+ return this.valuePromise.finally(onfinally);
40
40
  }
41
41
  }
42
- export function executeCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
42
+ export function executeCall({ model, options, input, functionType, generateResponse, }) {
43
43
  return new ModelFunctionPromise(doExecuteCall({
44
44
  model,
45
45
  options,
46
46
  input,
47
47
  functionType,
48
48
  generateResponse,
49
- extractOutputValue,
50
- extractUsage,
51
49
  }));
52
50
  }
53
- async function doExecuteCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
54
- if (options?.settings != null) {
55
- model = model.withSettings(options.settings);
56
- options = {
57
- functionId: options.functionId,
58
- logging: options.logging,
59
- observers: options.observers,
60
- run: options.run,
61
- };
62
- }
51
+ async function doExecuteCall({ model, options, input, functionType, generateResponse, }) {
63
52
  const run = options?.run;
64
53
  const settings = model.settings;
65
54
  const eventSource = new FunctionEventSource({
@@ -90,11 +79,7 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
90
79
  eventType: "started",
91
80
  ...startMetadata,
92
81
  });
93
- const result = await runSafe(() => generateResponse({
94
- functionId: options?.functionId,
95
- settings,
96
- run,
97
- }));
82
+ const result = await runSafe(() => generateResponse(options));
98
83
  const finishMetadata = {
99
84
  eventType: "finished",
100
85
  ...startMetadata,
@@ -122,9 +107,9 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
122
107
  });
123
108
  throw result.error;
124
109
  }
125
- const response = result.output;
126
- const output = extractOutputValue(response);
127
- const usage = extractUsage?.(response);
110
+ const response = result.value.response;
111
+ const value = result.value.extractedValue;
112
+ const usage = result.value.usage;
128
113
  eventSource.notify({
129
114
  ...finishMetadata,
130
115
  eventType: "finished",
@@ -132,12 +117,23 @@ async function doExecuteCall({ model, options, input, functionType, generateResp
132
117
  status: "success",
133
118
  usage,
134
119
  response,
135
- output,
120
+ value,
136
121
  },
137
122
  });
138
123
  return {
139
- output,
124
+ value,
140
125
  response,
141
- metadata: finishMetadata,
126
+ metadata: {
127
+ model: model.modelInformation,
128
+ callId: finishMetadata.callId,
129
+ runId: finishMetadata.runId,
130
+ sessionId: finishMetadata.sessionId,
131
+ userId: finishMetadata.userId,
132
+ functionId: finishMetadata.functionId,
133
+ startTimestamp: startMetadata.startTimestamp,
134
+ finishTimestamp: finishMetadata.finishTimestamp,
135
+ durationInMs: finishMetadata.durationInMs,
136
+ usage,
137
+ },
142
138
  };
143
139
  }