modelfusion 0.21.0 → 0.23.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 (166) hide show
  1. package/README.md +1 -0
  2. package/composed-function/summarize/SummarizationFunction.d.ts +1 -1
  3. package/composed-function/summarize/summarizeRecursively.d.ts +1 -1
  4. package/composed-function/summarize/summarizeRecursivelyWithTextGenerationAndTokenSplitting.d.ts +1 -1
  5. package/{run → core}/DefaultRun.cjs +1 -1
  6. package/{run → core}/DefaultRun.js +1 -1
  7. package/{run → core}/FunctionEvent.d.ts +30 -6
  8. package/core/FunctionOptions.d.ts +33 -0
  9. package/core/GlobalFunctionLogging.cjs +12 -0
  10. package/core/GlobalFunctionLogging.d.ts +3 -0
  11. package/core/GlobalFunctionLogging.js +7 -0
  12. package/core/getFunctionCallLogger.cjs +74 -0
  13. package/core/getFunctionCallLogger.d.ts +3 -0
  14. package/core/getFunctionCallLogger.js +70 -0
  15. package/{run → core}/index.cjs +1 -1
  16. package/{run → core}/index.d.ts +1 -1
  17. package/{run → core}/index.js +1 -1
  18. package/index.cjs +1 -1
  19. package/index.d.ts +1 -1
  20. package/index.js +1 -1
  21. package/model-function/AbstractModel.d.ts +1 -0
  22. package/model-function/Model.d.ts +7 -2
  23. package/model-function/ModelCallEvent.d.ts +39 -5
  24. package/model-function/ModelFunctionOptions.d.ts +1 -1
  25. package/model-function/SuccessfulModelCall.cjs +4 -2
  26. package/model-function/SuccessfulModelCall.d.ts +1 -1
  27. package/model-function/SuccessfulModelCall.js +4 -2
  28. package/model-function/embed-text/TextEmbeddingEvent.d.ts +12 -12
  29. package/model-function/embed-text/TextEmbeddingModel.d.ts +1 -1
  30. package/model-function/embed-text/embedText.cjs +6 -61
  31. package/model-function/embed-text/embedText.d.ts +3 -3
  32. package/model-function/embed-text/embedText.js +6 -61
  33. package/model-function/executeCall.cjs +50 -30
  34. package/model-function/executeCall.d.ts +16 -22
  35. package/model-function/executeCall.js +48 -28
  36. package/model-function/generate-image/ImageGenerationEvent.d.ts +9 -11
  37. package/model-function/generate-image/generateImage.cjs +2 -27
  38. package/model-function/generate-image/generateImage.d.ts +1 -1
  39. package/model-function/generate-image/generateImage.js +2 -27
  40. package/model-function/generate-json/JsonGenerationEvent.d.ts +14 -11
  41. package/model-function/generate-json/JsonGenerationModel.d.ts +13 -0
  42. package/model-function/generate-json/JsonOrTextGenerationModel.d.ts +23 -0
  43. package/model-function/generate-json/JsonTextGenerationModel.cjs +3 -0
  44. package/model-function/generate-json/JsonTextGenerationModel.d.ts +6 -5
  45. package/model-function/generate-json/JsonTextGenerationModel.js +3 -0
  46. package/model-function/generate-json/generateJson.cjs +3 -27
  47. package/model-function/generate-json/generateJson.d.ts +2 -2
  48. package/model-function/generate-json/generateJson.js +3 -27
  49. package/model-function/generate-json/generateJsonOrText.cjs +3 -27
  50. package/model-function/generate-json/generateJsonOrText.d.ts +2 -2
  51. package/model-function/generate-json/generateJsonOrText.js +3 -27
  52. package/model-function/generate-text/TextGenerationEvent.d.ts +14 -11
  53. package/model-function/generate-text/TextGenerationModel.d.ts +5 -0
  54. package/model-function/generate-text/TextStreamingEvent.d.ts +4 -17
  55. package/model-function/generate-text/generateText.cjs +3 -27
  56. package/model-function/generate-text/generateText.d.ts +1 -1
  57. package/model-function/generate-text/generateText.js +3 -27
  58. package/model-function/generate-text/streamText.cjs +31 -33
  59. package/model-function/generate-text/streamText.d.ts +5 -5
  60. package/model-function/generate-text/streamText.js +31 -33
  61. package/model-function/index.cjs +3 -2
  62. package/model-function/index.d.ts +3 -2
  63. package/model-function/index.js +3 -2
  64. package/model-function/synthesize-speech/SpeechSynthesisEvent.d.ts +12 -11
  65. package/model-function/synthesize-speech/SpeechSynthesisModel.d.ts +1 -1
  66. package/model-function/synthesize-speech/synthesizeSpeech.cjs +2 -28
  67. package/model-function/synthesize-speech/synthesizeSpeech.d.ts +1 -1
  68. package/model-function/synthesize-speech/synthesizeSpeech.js +2 -28
  69. package/model-function/transcribe-speech/TranscriptionEvent.d.ts +9 -11
  70. package/model-function/transcribe-speech/TranscriptionModel.d.ts +1 -1
  71. package/model-function/transcribe-speech/transcribe.cjs +2 -27
  72. package/model-function/transcribe-speech/transcribe.d.ts +1 -1
  73. package/model-function/transcribe-speech/transcribe.js +2 -27
  74. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.cjs +9 -0
  75. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.d.ts +1 -0
  76. package/model-provider/automatic1111/Automatic1111ImageGenerationModel.js +9 -0
  77. package/model-provider/cohere/CohereTextEmbeddingModel.cjs +6 -0
  78. package/model-provider/cohere/CohereTextEmbeddingModel.d.ts +4 -3
  79. package/model-provider/cohere/CohereTextEmbeddingModel.js +6 -0
  80. package/model-provider/cohere/CohereTextGenerationModel.cjs +20 -0
  81. package/model-provider/cohere/CohereTextGenerationModel.d.ts +2 -1
  82. package/model-provider/cohere/CohereTextGenerationModel.js +20 -0
  83. package/model-provider/cohere/CohereTokenizer.d.ts +1 -1
  84. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.cjs +8 -0
  85. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.d.ts +1 -0
  86. package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.js +8 -0
  87. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +7 -0
  88. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.d.ts +1 -0
  89. package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +7 -0
  90. package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +16 -0
  91. package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +1 -0
  92. package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +16 -0
  93. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +6 -0
  94. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.d.ts +1 -0
  95. package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +6 -0
  96. package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +31 -0
  97. package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +6 -0
  98. package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +31 -0
  99. package/model-provider/llamacpp/LlamaCppTokenizer.d.ts +1 -1
  100. package/model-provider/openai/OpenAIImageGenerationModel.cjs +8 -0
  101. package/model-provider/openai/OpenAIImageGenerationModel.d.ts +1 -0
  102. package/model-provider/openai/OpenAIImageGenerationModel.js +8 -0
  103. package/model-provider/openai/OpenAITextEmbeddingModel.cjs +5 -0
  104. package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +12 -11
  105. package/model-provider/openai/OpenAITextEmbeddingModel.js +5 -0
  106. package/model-provider/openai/OpenAITextGenerationModel.cjs +24 -0
  107. package/model-provider/openai/OpenAITextGenerationModel.d.ts +14 -8
  108. package/model-provider/openai/OpenAITextGenerationModel.js +24 -0
  109. package/model-provider/openai/OpenAITranscriptionModel.cjs +7 -0
  110. package/model-provider/openai/OpenAITranscriptionModel.d.ts +2 -0
  111. package/model-provider/openai/OpenAITranscriptionModel.js +7 -0
  112. package/model-provider/openai/chat/OpenAIChatModel.cjs +20 -0
  113. package/model-provider/openai/chat/OpenAIChatModel.d.ts +17 -11
  114. package/model-provider/openai/chat/OpenAIChatModel.js +20 -0
  115. package/model-provider/openai/chat/OpenAIChatPrompt.d.ts +2 -2
  116. package/model-provider/stability/StabilityImageGenerationModel.cjs +15 -0
  117. package/model-provider/stability/StabilityImageGenerationModel.d.ts +1 -0
  118. package/model-provider/stability/StabilityImageGenerationModel.js +15 -0
  119. package/package.json +1 -1
  120. package/prompt/PromptFormatTextGenerationModel.cjs +3 -0
  121. package/prompt/PromptFormatTextGenerationModel.d.ts +1 -0
  122. package/prompt/PromptFormatTextGenerationModel.js +3 -0
  123. package/text-chunk/split/SplitFunction.d.ts +1 -1
  124. package/tool/ExecuteToolEvent.d.ts +7 -16
  125. package/tool/Tool.d.ts +1 -1
  126. package/tool/WebSearchTool.cjs +25 -0
  127. package/tool/WebSearchTool.d.ts +56 -1
  128. package/tool/WebSearchTool.js +25 -0
  129. package/tool/executeTool.cjs +17 -8
  130. package/tool/executeTool.d.ts +1 -1
  131. package/tool/executeTool.js +17 -8
  132. package/tool/useTool.d.ts +2 -2
  133. package/tool/useToolOrGenerateText.d.ts +2 -2
  134. package/vector-index/VectorIndex.d.ts +1 -1
  135. package/vector-index/memory/MemoryVectorIndex.d.ts +1 -1
  136. package/vector-index/pinecone/PineconeVectorIndex.d.ts +1 -1
  137. package/model-function/generate-json/GenerateJsonModel.d.ts +0 -8
  138. package/model-function/generate-json/GenerateJsonOrTextModel.d.ts +0 -18
  139. package/run/ConsoleLogger.cjs +0 -9
  140. package/run/ConsoleLogger.d.ts +0 -5
  141. package/run/ConsoleLogger.js +0 -5
  142. package/run/FunctionOptions.d.ts +0 -19
  143. /package/{run → core}/DefaultRun.d.ts +0 -0
  144. /package/{run → core}/FunctionEvent.cjs +0 -0
  145. /package/{run → core}/FunctionEvent.js +0 -0
  146. /package/{run → core}/FunctionEventSource.cjs +0 -0
  147. /package/{run → core}/FunctionEventSource.d.ts +0 -0
  148. /package/{run → core}/FunctionEventSource.js +0 -0
  149. /package/{run → core}/FunctionObserver.cjs +0 -0
  150. /package/{run → core}/FunctionObserver.d.ts +0 -0
  151. /package/{run → core}/FunctionObserver.js +0 -0
  152. /package/{run → core}/FunctionOptions.cjs +0 -0
  153. /package/{run → core}/FunctionOptions.js +0 -0
  154. /package/{run → core}/GlobalFunctionObservers.cjs +0 -0
  155. /package/{run → core}/GlobalFunctionObservers.d.ts +0 -0
  156. /package/{run → core}/GlobalFunctionObservers.js +0 -0
  157. /package/{run → core}/Run.cjs +0 -0
  158. /package/{run → core}/Run.d.ts +0 -0
  159. /package/{run → core}/Run.js +0 -0
  160. /package/{run → core}/Vector.cjs +0 -0
  161. /package/{run → core}/Vector.d.ts +0 -0
  162. /package/{run → core}/Vector.js +0 -0
  163. /package/model-function/generate-json/{GenerateJsonModel.cjs → JsonGenerationModel.cjs} +0 -0
  164. /package/model-function/generate-json/{GenerateJsonModel.js → JsonGenerationModel.js} +0 -0
  165. /package/model-function/generate-json/{GenerateJsonOrTextModel.cjs → JsonOrTextGenerationModel.cjs} +0 -0
  166. /package/model-function/generate-json/{GenerateJsonOrTextModel.js → JsonOrTextGenerationModel.js} +0 -0
@@ -16,6 +16,8 @@ const executeCall_js_1 = require("../executeCall.cjs");
16
16
  */
17
17
  function embedTexts(model, texts, options) {
18
18
  return (0, executeCall_js_1.executeCall)({
19
+ functionType: "text-embedding",
20
+ input: texts,
19
21
  model,
20
22
  options,
21
23
  generateResponse: (options) => {
@@ -34,33 +36,6 @@ function embedTexts(model, texts, options) {
34
36
  }
35
37
  return embeddings;
36
38
  },
37
- getStartEvent: (metadata, settings) => ({
38
- ...metadata,
39
- functionType: "text-embedding",
40
- settings,
41
- texts,
42
- }),
43
- getAbortEvent: (metadata, settings) => ({
44
- ...metadata,
45
- functionType: "text-embedding",
46
- settings,
47
- texts,
48
- }),
49
- getFailureEvent: (metadata, settings, error) => ({
50
- ...metadata,
51
- functionType: "text-embedding",
52
- settings,
53
- error,
54
- texts,
55
- }),
56
- getSuccessEvent: (metadata, settings, response, output) => ({
57
- ...metadata,
58
- functionType: "text-embedding",
59
- settings,
60
- texts,
61
- response,
62
- generatedEmbeddings: output,
63
- }),
64
39
  });
65
40
  }
66
41
  exports.embedTexts = embedTexts;
@@ -74,43 +49,13 @@ exports.embedTexts = embedTexts;
74
49
  * );
75
50
  */
76
51
  function embedText(model, text, options) {
77
- const texts = [text];
78
52
  return (0, executeCall_js_1.executeCall)({
53
+ functionType: "text-embedding",
54
+ input: text,
79
55
  model,
80
56
  options,
81
- generateResponse: (options) => {
82
- return model.generateEmbeddingResponse(texts, options);
83
- },
84
- extractOutputValue: (result) => {
85
- return model.extractEmbeddings(result)[0];
86
- },
87
- getStartEvent: (metadata, settings) => ({
88
- ...metadata,
89
- functionType: "text-embedding",
90
- settings,
91
- texts,
92
- }),
93
- getAbortEvent: (metadata, settings) => ({
94
- ...metadata,
95
- functionType: "text-embedding",
96
- settings,
97
- texts,
98
- }),
99
- getFailureEvent: (metadata, settings, error) => ({
100
- ...metadata,
101
- functionType: "text-embedding",
102
- settings,
103
- error,
104
- texts,
105
- }),
106
- getSuccessEvent: (metadata, settings, response, output) => ({
107
- ...metadata,
108
- functionType: "text-embedding",
109
- settings,
110
- texts,
111
- response,
112
- generatedEmbeddings: [output],
113
- }),
57
+ generateResponse: (options) => model.generateEmbeddingResponse([text], options),
58
+ extractOutputValue: (result) => model.extractEmbeddings(result)[0],
114
59
  });
115
60
  }
116
61
  exports.embedText = embedText;
@@ -1,4 +1,4 @@
1
- import { Vector } from "../../run/Vector.js";
1
+ import { Vector } from "../../core/Vector.js";
2
2
  import { ModelFunctionOptions } from "../ModelFunctionOptions.js";
3
3
  import { ModelFunctionPromise } from "../executeCall.js";
4
4
  import { TextEmbeddingModel, TextEmbeddingModelSettings } from "./TextEmbeddingModel.js";
@@ -14,7 +14,7 @@ import { TextEmbeddingModel, TextEmbeddingModelSettings } from "./TextEmbeddingM
14
14
  * ]
15
15
  * );
16
16
  */
17
- export declare function embedTexts<RESPONSE, SETTINGS extends TextEmbeddingModelSettings>(model: TextEmbeddingModel<RESPONSE, SETTINGS>, texts: string[], options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<TextEmbeddingModel<RESPONSE, SETTINGS>, Vector[], RESPONSE[]>;
17
+ export declare function embedTexts<RESPONSE, SETTINGS extends TextEmbeddingModelSettings>(model: TextEmbeddingModel<RESPONSE, SETTINGS>, texts: string[], options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<Vector[], RESPONSE[]>;
18
18
  /**
19
19
  * Generate an embedding for a single text.
20
20
  *
@@ -24,4 +24,4 @@ export declare function embedTexts<RESPONSE, SETTINGS extends TextEmbeddingModel
24
24
  * "At first, Nox didn't know what to do with the pup."
25
25
  * );
26
26
  */
27
- export declare function embedText<RESPONSE, SETTINGS extends TextEmbeddingModelSettings>(model: TextEmbeddingModel<RESPONSE, SETTINGS>, text: string, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<TextEmbeddingModel<RESPONSE, SETTINGS>, Vector, RESPONSE>;
27
+ export declare function embedText<RESPONSE, SETTINGS extends TextEmbeddingModelSettings>(model: TextEmbeddingModel<RESPONSE, SETTINGS>, text: string, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<Vector, RESPONSE>;
@@ -13,6 +13,8 @@ import { executeCall } from "../executeCall.js";
13
13
  */
14
14
  export function embedTexts(model, texts, options) {
15
15
  return executeCall({
16
+ functionType: "text-embedding",
17
+ input: texts,
16
18
  model,
17
19
  options,
18
20
  generateResponse: (options) => {
@@ -31,33 +33,6 @@ export function embedTexts(model, texts, options) {
31
33
  }
32
34
  return embeddings;
33
35
  },
34
- getStartEvent: (metadata, settings) => ({
35
- ...metadata,
36
- functionType: "text-embedding",
37
- settings,
38
- texts,
39
- }),
40
- getAbortEvent: (metadata, settings) => ({
41
- ...metadata,
42
- functionType: "text-embedding",
43
- settings,
44
- texts,
45
- }),
46
- getFailureEvent: (metadata, settings, error) => ({
47
- ...metadata,
48
- functionType: "text-embedding",
49
- settings,
50
- error,
51
- texts,
52
- }),
53
- getSuccessEvent: (metadata, settings, response, output) => ({
54
- ...metadata,
55
- functionType: "text-embedding",
56
- settings,
57
- texts,
58
- response,
59
- generatedEmbeddings: output,
60
- }),
61
36
  });
62
37
  }
63
38
  /**
@@ -70,42 +45,12 @@ export function embedTexts(model, texts, options) {
70
45
  * );
71
46
  */
72
47
  export function embedText(model, text, options) {
73
- const texts = [text];
74
48
  return executeCall({
49
+ functionType: "text-embedding",
50
+ input: text,
75
51
  model,
76
52
  options,
77
- generateResponse: (options) => {
78
- return model.generateEmbeddingResponse(texts, options);
79
- },
80
- extractOutputValue: (result) => {
81
- return model.extractEmbeddings(result)[0];
82
- },
83
- getStartEvent: (metadata, settings) => ({
84
- ...metadata,
85
- functionType: "text-embedding",
86
- settings,
87
- texts,
88
- }),
89
- getAbortEvent: (metadata, settings) => ({
90
- ...metadata,
91
- functionType: "text-embedding",
92
- settings,
93
- texts,
94
- }),
95
- getFailureEvent: (metadata, settings, error) => ({
96
- ...metadata,
97
- functionType: "text-embedding",
98
- settings,
99
- error,
100
- texts,
101
- }),
102
- getSuccessEvent: (metadata, settings, response, output) => ({
103
- ...metadata,
104
- functionType: "text-embedding",
105
- settings,
106
- texts,
107
- response,
108
- generatedEmbeddings: [output],
109
- }),
53
+ generateResponse: (options) => model.generateEmbeddingResponse([text], options),
54
+ extractOutputValue: (result) => model.extractEmbeddings(result)[0],
110
55
  });
111
56
  }
@@ -1,25 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ModelFunctionPromise = exports.executeCall = void 0;
3
+ exports.executeCall = exports.ModelFunctionPromise = void 0;
4
4
  const nanoid_1 = require("nanoid");
5
- const FunctionEventSource_js_1 = require("../run/FunctionEventSource.cjs");
6
- const GlobalFunctionObservers_js_1 = require("../run/GlobalFunctionObservers.cjs");
5
+ const FunctionEventSource_js_1 = require("../core/FunctionEventSource.cjs");
6
+ const GlobalFunctionLogging_js_1 = require("../core/GlobalFunctionLogging.cjs");
7
+ const GlobalFunctionObservers_js_1 = require("../core/GlobalFunctionObservers.cjs");
8
+ const getFunctionCallLogger_js_1 = require("../core/getFunctionCallLogger.cjs");
7
9
  const DurationMeasurement_js_1 = require("../util/DurationMeasurement.cjs");
8
10
  const AbortError_js_1 = require("../util/api/AbortError.cjs");
9
11
  const runSafe_js_1 = require("../util/runSafe.cjs");
10
- function executeCall({ model, options, getStartEvent, getAbortEvent, getFailureEvent, getSuccessEvent, generateResponse, extractOutputValue, }) {
11
- return new ModelFunctionPromise(doExecuteCall({
12
- model,
13
- options,
14
- getStartEvent,
15
- getAbortEvent,
16
- getFailureEvent,
17
- getSuccessEvent,
18
- generateResponse,
19
- extractOutputValue,
20
- }));
21
- }
22
- exports.executeCall = executeCall;
23
12
  class ModelFunctionPromise extends Promise {
24
13
  constructor(fullPromise) {
25
14
  super((resolve) => {
@@ -54,11 +43,24 @@ class ModelFunctionPromise extends Promise {
54
43
  }
55
44
  }
56
45
  exports.ModelFunctionPromise = ModelFunctionPromise;
57
- async function doExecuteCall({ model, options, getStartEvent, getAbortEvent, getFailureEvent, getSuccessEvent, generateResponse, extractOutputValue, }) {
46
+ function executeCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
47
+ return new ModelFunctionPromise(doExecuteCall({
48
+ model,
49
+ options,
50
+ input,
51
+ functionType,
52
+ generateResponse,
53
+ extractOutputValue,
54
+ extractUsage,
55
+ }));
56
+ }
57
+ exports.executeCall = executeCall;
58
+ async function doExecuteCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
58
59
  if (options?.settings != null) {
59
60
  model = model.withSettings(options.settings);
60
61
  options = {
61
62
  functionId: options.functionId,
63
+ logging: options.logging,
62
64
  observers: options.observers,
63
65
  run: options.run,
64
66
  };
@@ -67,6 +69,7 @@ async function doExecuteCall({ model, options, getStartEvent, getAbortEvent, get
67
69
  const settings = model.settings;
68
70
  const eventSource = new FunctionEventSource_js_1.FunctionEventSource({
69
71
  observers: [
72
+ ...(0, getFunctionCallLogger_js_1.getFunctionCallLogger)(options?.logging ?? (0, GlobalFunctionLogging_js_1.getGlobalFunctionLogging)()),
70
73
  ...(0, GlobalFunctionObservers_js_1.getGlobalFunctionObservers)(),
71
74
  ...(settings.observers ?? []),
72
75
  ...(run?.observers ?? []),
@@ -76,50 +79,67 @@ async function doExecuteCall({ model, options, getStartEvent, getAbortEvent, get
76
79
  });
77
80
  const durationMeasurement = (0, DurationMeasurement_js_1.startDurationMeasurement)();
78
81
  const startMetadata = {
82
+ functionType,
79
83
  callId: `call-${(0, nanoid_1.nanoid)()}`,
80
84
  runId: run?.runId,
81
85
  sessionId: run?.sessionId,
82
86
  userId: run?.userId,
83
87
  functionId: options?.functionId,
84
88
  model: model.modelInformation,
89
+ settings: model.settingsForEvent,
90
+ input,
85
91
  timestamp: durationMeasurement.startDate,
86
92
  startTimestamp: durationMeasurement.startDate,
87
93
  };
88
- eventSource.notify(getStartEvent({
89
- ...startMetadata,
94
+ eventSource.notify({
90
95
  eventType: "started",
91
- }, settings));
96
+ ...startMetadata,
97
+ });
92
98
  const result = await (0, runSafe_js_1.runSafe)(() => generateResponse({
93
99
  functionId: options?.functionId,
94
100
  settings,
95
101
  run,
96
102
  }));
97
103
  const finishMetadata = {
98
- ...startMetadata,
99
104
  eventType: "finished",
105
+ ...startMetadata,
100
106
  finishTimestamp: new Date(),
101
107
  durationInMs: durationMeasurement.durationInMs,
102
108
  };
103
109
  if (!result.ok) {
104
110
  if (result.isAborted) {
105
- eventSource.notify(getAbortEvent({
111
+ eventSource.notify({
106
112
  ...finishMetadata,
107
- status: "abort",
108
- }, settings));
113
+ eventType: "finished",
114
+ result: {
115
+ status: "abort",
116
+ },
117
+ });
109
118
  throw new AbortError_js_1.AbortError();
110
119
  }
111
- eventSource.notify(getFailureEvent({
120
+ eventSource.notify({
112
121
  ...finishMetadata,
113
- status: "error",
114
- }, settings, result.error));
122
+ eventType: "finished",
123
+ result: {
124
+ status: "error",
125
+ error: result.error,
126
+ },
127
+ });
115
128
  throw result.error;
116
129
  }
117
130
  const response = result.output;
118
131
  const output = extractOutputValue(response);
119
- eventSource.notify(getSuccessEvent({
132
+ const usage = extractUsage?.(response);
133
+ eventSource.notify({
120
134
  ...finishMetadata,
121
- status: "success",
122
- }, settings, response, output));
135
+ eventType: "finished",
136
+ result: {
137
+ status: "success",
138
+ usage,
139
+ response,
140
+ output,
141
+ },
142
+ });
123
143
  return {
124
144
  output,
125
145
  response,
@@ -1,47 +1,41 @@
1
1
  import { Model, ModelSettings } from "./Model.js";
2
- import { BaseModelCallFinishedEvent, BaseModelCallStartedEvent, ModelCallFinishedEvent, ModelCallStartedEvent } from "./ModelCallEvent.js";
2
+ import { ModelCallStartedEvent } from "./ModelCallEvent.js";
3
3
  import { ModelFunctionOptions } from "./ModelFunctionOptions.js";
4
- export type CallMetadata<MODEL extends Model<unknown>> = {
4
+ import { ModelInformation } from "./ModelInformation.js";
5
+ export type ModelCallMetadata = {
5
6
  callId: string;
6
7
  runId?: string;
7
8
  sessionId?: string;
8
9
  userId?: string;
9
10
  functionId?: string;
10
- model: MODEL["modelInformation"];
11
11
  startTimestamp: Date;
12
12
  finishTimestamp: Date;
13
13
  durationInMs: number;
14
+ model: ModelInformation;
14
15
  };
15
- export declare function executeCall<SETTINGS extends ModelSettings, MODEL extends Model<SETTINGS>, OUTPUT, RESPONSE>({ model, options, getStartEvent, getAbortEvent, getFailureEvent, getSuccessEvent, generateResponse, extractOutputValue, }: {
16
- model: MODEL;
17
- options?: ModelFunctionOptions<SETTINGS>;
18
- getStartEvent: (metadata: Omit<BaseModelCallStartedEvent, "functionType">, settings: SETTINGS) => ModelCallStartedEvent;
19
- getAbortEvent: (metadata: Omit<BaseModelCallFinishedEvent & {
20
- status: "abort";
21
- }, "functionType">, settings: SETTINGS) => ModelCallFinishedEvent;
22
- getFailureEvent: (metadata: Omit<BaseModelCallFinishedEvent & {
23
- status: "error";
24
- }, "functionType">, settings: SETTINGS, error: unknown) => ModelCallFinishedEvent;
25
- getSuccessEvent: (metadata: Omit<BaseModelCallFinishedEvent & {
26
- status: "success";
27
- }, "functionType">, settings: SETTINGS, response: RESPONSE, output: OUTPUT) => ModelCallFinishedEvent;
28
- generateResponse: (options: ModelFunctionOptions<SETTINGS>) => PromiseLike<RESPONSE>;
29
- extractOutputValue: (response: RESPONSE) => OUTPUT;
30
- }): ModelFunctionPromise<MODEL, OUTPUT, RESPONSE>;
31
- export declare class ModelFunctionPromise<MODEL extends Model<any>, OUTPUT, RESPONSE> extends Promise<OUTPUT> {
16
+ export declare class ModelFunctionPromise<OUTPUT, RESPONSE> extends Promise<OUTPUT> {
32
17
  private fullPromise;
33
18
  private outputPromise;
34
19
  constructor(fullPromise: Promise<{
35
20
  output: OUTPUT;
36
21
  response: RESPONSE;
37
- metadata: CallMetadata<MODEL>;
22
+ metadata: ModelCallMetadata;
38
23
  }>);
39
24
  asFullResponse(): Promise<{
40
25
  output: OUTPUT;
41
26
  response: RESPONSE;
42
- metadata: CallMetadata<MODEL>;
27
+ metadata: ModelCallMetadata;
43
28
  }>;
44
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>;
45
30
  catch<TResult = never>(onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | undefined | null): Promise<OUTPUT | TResult>;
46
31
  finally(onfinally?: (() => void) | undefined | null): Promise<OUTPUT>;
47
32
  }
33
+ export declare function executeCall<SETTINGS extends ModelSettings, MODEL extends Model<SETTINGS>, OUTPUT, RESPONSE>({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }: {
34
+ model: MODEL;
35
+ options?: ModelFunctionOptions<SETTINGS>;
36
+ input: unknown;
37
+ functionType: ModelCallStartedEvent["functionType"];
38
+ generateResponse: (options: ModelFunctionOptions<SETTINGS>) => PromiseLike<RESPONSE>;
39
+ extractOutputValue: (response: RESPONSE) => OUTPUT;
40
+ extractUsage?: (response: RESPONSE) => unknown;
41
+ }): ModelFunctionPromise<OUTPUT, RESPONSE>;
@@ -1,21 +1,11 @@
1
1
  import { nanoid as createId } from "nanoid";
2
- import { FunctionEventSource } from "../run/FunctionEventSource.js";
3
- import { getGlobalFunctionObservers } from "../run/GlobalFunctionObservers.js";
2
+ import { FunctionEventSource } from "../core/FunctionEventSource.js";
3
+ import { getGlobalFunctionLogging } from "../core/GlobalFunctionLogging.js";
4
+ import { getGlobalFunctionObservers } from "../core/GlobalFunctionObservers.js";
5
+ import { getFunctionCallLogger } from "../core/getFunctionCallLogger.js";
4
6
  import { startDurationMeasurement } from "../util/DurationMeasurement.js";
5
7
  import { AbortError } from "../util/api/AbortError.js";
6
8
  import { runSafe } from "../util/runSafe.js";
7
- export function executeCall({ model, options, getStartEvent, getAbortEvent, getFailureEvent, getSuccessEvent, generateResponse, extractOutputValue, }) {
8
- return new ModelFunctionPromise(doExecuteCall({
9
- model,
10
- options,
11
- getStartEvent,
12
- getAbortEvent,
13
- getFailureEvent,
14
- getSuccessEvent,
15
- generateResponse,
16
- extractOutputValue,
17
- }));
18
- }
19
9
  export class ModelFunctionPromise extends Promise {
20
10
  constructor(fullPromise) {
21
11
  super((resolve) => {
@@ -49,11 +39,23 @@ export class ModelFunctionPromise extends Promise {
49
39
  return this.outputPromise.finally(onfinally);
50
40
  }
51
41
  }
52
- async function doExecuteCall({ model, options, getStartEvent, getAbortEvent, getFailureEvent, getSuccessEvent, generateResponse, extractOutputValue, }) {
42
+ export function executeCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
43
+ return new ModelFunctionPromise(doExecuteCall({
44
+ model,
45
+ options,
46
+ input,
47
+ functionType,
48
+ generateResponse,
49
+ extractOutputValue,
50
+ extractUsage,
51
+ }));
52
+ }
53
+ async function doExecuteCall({ model, options, input, functionType, generateResponse, extractOutputValue, extractUsage, }) {
53
54
  if (options?.settings != null) {
54
55
  model = model.withSettings(options.settings);
55
56
  options = {
56
57
  functionId: options.functionId,
58
+ logging: options.logging,
57
59
  observers: options.observers,
58
60
  run: options.run,
59
61
  };
@@ -62,6 +64,7 @@ async function doExecuteCall({ model, options, getStartEvent, getAbortEvent, get
62
64
  const settings = model.settings;
63
65
  const eventSource = new FunctionEventSource({
64
66
  observers: [
67
+ ...getFunctionCallLogger(options?.logging ?? getGlobalFunctionLogging()),
65
68
  ...getGlobalFunctionObservers(),
66
69
  ...(settings.observers ?? []),
67
70
  ...(run?.observers ?? []),
@@ -71,50 +74,67 @@ async function doExecuteCall({ model, options, getStartEvent, getAbortEvent, get
71
74
  });
72
75
  const durationMeasurement = startDurationMeasurement();
73
76
  const startMetadata = {
77
+ functionType,
74
78
  callId: `call-${createId()}`,
75
79
  runId: run?.runId,
76
80
  sessionId: run?.sessionId,
77
81
  userId: run?.userId,
78
82
  functionId: options?.functionId,
79
83
  model: model.modelInformation,
84
+ settings: model.settingsForEvent,
85
+ input,
80
86
  timestamp: durationMeasurement.startDate,
81
87
  startTimestamp: durationMeasurement.startDate,
82
88
  };
83
- eventSource.notify(getStartEvent({
84
- ...startMetadata,
89
+ eventSource.notify({
85
90
  eventType: "started",
86
- }, settings));
91
+ ...startMetadata,
92
+ });
87
93
  const result = await runSafe(() => generateResponse({
88
94
  functionId: options?.functionId,
89
95
  settings,
90
96
  run,
91
97
  }));
92
98
  const finishMetadata = {
93
- ...startMetadata,
94
99
  eventType: "finished",
100
+ ...startMetadata,
95
101
  finishTimestamp: new Date(),
96
102
  durationInMs: durationMeasurement.durationInMs,
97
103
  };
98
104
  if (!result.ok) {
99
105
  if (result.isAborted) {
100
- eventSource.notify(getAbortEvent({
106
+ eventSource.notify({
101
107
  ...finishMetadata,
102
- status: "abort",
103
- }, settings));
108
+ eventType: "finished",
109
+ result: {
110
+ status: "abort",
111
+ },
112
+ });
104
113
  throw new AbortError();
105
114
  }
106
- eventSource.notify(getFailureEvent({
115
+ eventSource.notify({
107
116
  ...finishMetadata,
108
- status: "error",
109
- }, settings, result.error));
117
+ eventType: "finished",
118
+ result: {
119
+ status: "error",
120
+ error: result.error,
121
+ },
122
+ });
110
123
  throw result.error;
111
124
  }
112
125
  const response = result.output;
113
126
  const output = extractOutputValue(response);
114
- eventSource.notify(getSuccessEvent({
127
+ const usage = extractUsage?.(response);
128
+ eventSource.notify({
115
129
  ...finishMetadata,
116
- status: "success",
117
- }, settings, response, output));
130
+ eventType: "finished",
131
+ result: {
132
+ status: "success",
133
+ usage,
134
+ response,
135
+ output,
136
+ },
137
+ });
118
138
  return {
119
139
  output,
120
140
  response,
@@ -1,20 +1,18 @@
1
1
  import { BaseModelCallFinishedEvent, BaseModelCallStartedEvent } from "../ModelCallEvent.js";
2
- export type ImageGenerationStartedEvent = BaseModelCallStartedEvent & {
2
+ export interface ImageGenerationStartedEvent extends BaseModelCallStartedEvent {
3
3
  functionType: "image-generation";
4
- settings: unknown;
5
- prompt: unknown;
6
- };
7
- export type ImageGenerationFinishedEvent = BaseModelCallFinishedEvent & {
8
- functionType: "image-generation";
9
- settings: unknown;
10
- prompt: unknown;
11
- } & ({
4
+ }
5
+ export type ImageGenerationFinishedEventResult = {
12
6
  status: "success";
13
7
  response: unknown;
14
- generatedImage: string;
8
+ output: string;
15
9
  } | {
16
10
  status: "error";
17
11
  error: unknown;
18
12
  } | {
19
13
  status: "abort";
20
- });
14
+ };
15
+ export interface ImageGenerationFinishedEvent extends BaseModelCallFinishedEvent {
16
+ functionType: "image-generation";
17
+ result: ImageGenerationFinishedEventResult;
18
+ }
@@ -19,37 +19,12 @@ const executeCall_js_1 = require("../executeCall.cjs");
19
19
  */
20
20
  function generateImage(model, prompt, options) {
21
21
  return (0, executeCall_js_1.executeCall)({
22
+ functionType: "image-generation",
23
+ input: prompt,
22
24
  model,
23
25
  options,
24
26
  generateResponse: (options) => model.generateImageResponse(prompt, options),
25
27
  extractOutputValue: model.extractBase64Image,
26
- getStartEvent: (metadata, settings) => ({
27
- ...metadata,
28
- functionType: "image-generation",
29
- settings,
30
- prompt,
31
- }),
32
- getAbortEvent: (metadata, settings) => ({
33
- ...metadata,
34
- functionType: "image-generation",
35
- settings,
36
- prompt,
37
- }),
38
- getFailureEvent: (metadata, settings, error) => ({
39
- ...metadata,
40
- functionType: "image-generation",
41
- settings,
42
- prompt,
43
- error,
44
- }),
45
- getSuccessEvent: (metadata, settings, response, output) => ({
46
- ...metadata,
47
- functionType: "image-generation",
48
- settings,
49
- prompt,
50
- response,
51
- generatedImage: output,
52
- }),
53
28
  });
54
29
  }
55
30
  exports.generateImage = generateImage;
@@ -16,4 +16,4 @@ import { ImageGenerationModel, ImageGenerationModelSettings } from "./ImageGener
16
16
  * ]
17
17
  * );
18
18
  */
19
- export declare function generateImage<PROMPT, RESPONSE, SETTINGS extends ImageGenerationModelSettings>(model: ImageGenerationModel<PROMPT, RESPONSE, SETTINGS>, prompt: PROMPT, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<ImageGenerationModel<PROMPT, RESPONSE, SETTINGS>, string, RESPONSE>;
19
+ export declare function generateImage<PROMPT, RESPONSE, SETTINGS extends ImageGenerationModelSettings>(model: ImageGenerationModel<PROMPT, RESPONSE, SETTINGS>, prompt: PROMPT, options?: ModelFunctionOptions<SETTINGS>): ModelFunctionPromise<string, RESPONSE>;
@@ -16,36 +16,11 @@ import { executeCall } from "../executeCall.js";
16
16
  */
17
17
  export function generateImage(model, prompt, options) {
18
18
  return executeCall({
19
+ functionType: "image-generation",
20
+ input: prompt,
19
21
  model,
20
22
  options,
21
23
  generateResponse: (options) => model.generateImageResponse(prompt, options),
22
24
  extractOutputValue: model.extractBase64Image,
23
- getStartEvent: (metadata, settings) => ({
24
- ...metadata,
25
- functionType: "image-generation",
26
- settings,
27
- prompt,
28
- }),
29
- getAbortEvent: (metadata, settings) => ({
30
- ...metadata,
31
- functionType: "image-generation",
32
- settings,
33
- prompt,
34
- }),
35
- getFailureEvent: (metadata, settings, error) => ({
36
- ...metadata,
37
- functionType: "image-generation",
38
- settings,
39
- prompt,
40
- error,
41
- }),
42
- getSuccessEvent: (metadata, settings, response, output) => ({
43
- ...metadata,
44
- functionType: "image-generation",
45
- settings,
46
- prompt,
47
- response,
48
- generatedImage: output,
49
- }),
50
25
  });
51
26
  }