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
@@ -1,8 +1,8 @@
1
1
  import z from "zod";
2
- import { AbstractModel } from "../../model-function/AbstractModel.js";
3
- import { countTokens } from "../../model-function/tokenize-text/countTokens.js";
4
2
  import { callWithRetryAndThrottle } from "../../core/api/callWithRetryAndThrottle.js";
5
3
  import { createJsonResponseHandler, postJsonToApi, } from "../../core/api/postToApi.js";
4
+ import { AbstractModel } from "../../model-function/AbstractModel.js";
5
+ import { countTokens } from "../../model-function/tokenize-text/countTokens.js";
6
6
  import { OpenAIApiConfiguration } from "./OpenAIApiConfiguration.js";
7
7
  import { failedOpenAICallResponseHandler } from "./OpenAIError.js";
8
8
  import { TikTokenTokenizer } from "./TikTokenTokenizer.js";
@@ -83,37 +83,31 @@ export class OpenAITextEmbeddingModel extends AbstractModel {
83
83
  return countTokens(this.tokenizer, input);
84
84
  }
85
85
  async callAPI(texts, options) {
86
- const run = options?.run;
87
- const settings = options?.settings;
88
- const combinedSettings = {
89
- ...this.settings,
90
- ...settings,
91
- };
92
- const callSettings = {
93
- user: this.settings.isUserIdForwardingEnabled ? run?.userId : undefined,
94
- // Copied settings:
95
- ...combinedSettings,
96
- // other settings:
97
- abortSignal: run?.abortSignal,
98
- input: texts,
99
- };
100
86
  return callWithRetryAndThrottle({
101
- retry: callSettings.api?.retry,
102
- throttle: callSettings.api?.throttle,
103
- call: async () => callOpenAITextEmbeddingAPI(callSettings),
87
+ retry: this.settings.api?.retry,
88
+ throttle: this.settings.api?.throttle,
89
+ call: async () => callOpenAITextEmbeddingAPI({
90
+ ...this.settings,
91
+ user: this.settings.isUserIdForwardingEnabled
92
+ ? options?.run?.userId
93
+ : undefined,
94
+ abortSignal: options?.run?.abortSignal,
95
+ input: texts,
96
+ }),
104
97
  });
105
98
  }
106
99
  get settingsForEvent() {
107
100
  return {};
108
101
  }
109
- generateEmbeddingResponse(texts, options) {
102
+ async doEmbedValues(texts, options) {
110
103
  if (texts.length > this.maxValuesPerCall) {
111
104
  throw new Error(`The OpenAI embedding API only supports ${this.maxValuesPerCall} texts per API call.`);
112
105
  }
113
- return this.callAPI(texts, options);
114
- }
115
- extractEmbeddings(response) {
116
- return response.data.map((data) => data.embedding);
106
+ const response = await this.callAPI(texts, options);
107
+ return {
108
+ response,
109
+ embeddings: response.data.map((data) => data.embedding),
110
+ };
117
111
  }
118
112
  withSettings(additionalSettings) {
119
113
  return new OpenAITextEmbeddingModel(Object.assign({}, this.settings, additionalSettings));
@@ -12,7 +12,7 @@ const AsyncQueue_js_1 = require("../../event-source/AsyncQueue.cjs");
12
12
  const parseEventSourceStream_js_1 = require("../../event-source/parseEventSourceStream.cjs");
13
13
  const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
14
14
  const countTokens_js_1 = require("../../model-function/tokenize-text/countTokens.cjs");
15
- const PromptFormatTextGenerationModel_js_1 = require("../../prompt/PromptFormatTextGenerationModel.cjs");
15
+ const PromptFormatTextStreamingModel_js_1 = require("../../prompt/PromptFormatTextStreamingModel.cjs");
16
16
  const OpenAIApiConfiguration_js_1 = require("./OpenAIApiConfiguration.cjs");
17
17
  const OpenAIError_js_1 = require("./OpenAIError.cjs");
18
18
  const TikTokenTokenizer_js_1 = require("./TikTokenTokenizer.cjs");
@@ -181,18 +181,14 @@ class OpenAITextGenerationModel extends AbstractModel_js_1.AbstractModel {
181
181
  return (0, countTokens_js_1.countTokens)(this.tokenizer, input);
182
182
  }
183
183
  async callAPI(prompt, options) {
184
- const { run, settings, responseFormat } = options;
185
- const combinedSettings = {
186
- ...this.settings,
187
- ...settings,
188
- };
184
+ const { run, responseFormat } = options;
189
185
  const callSettings = {
190
186
  user: this.settings.isUserIdForwardingEnabled ? run?.userId : undefined,
191
187
  // Copied settings:
192
- ...combinedSettings,
188
+ ...this.settings,
193
189
  // map to OpenAI API names:
194
- stop: combinedSettings.stopSequences,
195
- maxTokens: combinedSettings.maxCompletionTokens,
190
+ stop: this.settings.stopSequences,
191
+ maxTokens: this.settings.maxCompletionTokens,
196
192
  // other settings:
197
193
  abortSignal: run?.abortSignal,
198
194
  prompt,
@@ -221,39 +217,38 @@ class OpenAITextGenerationModel extends AbstractModel_js_1.AbstractModel {
221
217
  ];
222
218
  return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
223
219
  }
224
- generateTextResponse(prompt, options) {
225
- return this.callAPI(prompt, {
220
+ async doGenerateText(prompt, options) {
221
+ const response = await this.callAPI(prompt, {
226
222
  ...options,
227
223
  responseFormat: exports.OpenAITextResponseFormat.json,
228
224
  });
225
+ return {
226
+ response,
227
+ text: response.choices[0].text,
228
+ usage: {
229
+ promptTokens: response.usage.prompt_tokens,
230
+ completionTokens: response.usage.completion_tokens,
231
+ totalTokens: response.usage.total_tokens,
232
+ },
233
+ };
229
234
  }
230
- extractText(response) {
231
- return response.choices[0].text;
232
- }
233
- generateDeltaStreamResponse(prompt, options) {
235
+ doStreamText(prompt, options) {
234
236
  return this.callAPI(prompt, {
235
237
  ...options,
236
238
  responseFormat: exports.OpenAITextResponseFormat.deltaIterable,
237
239
  });
238
240
  }
239
- extractTextDelta(fullDelta) {
240
- return fullDelta[0].delta;
241
- }
242
241
  withPromptFormat(promptFormat) {
243
- return new PromptFormatTextGenerationModel_js_1.PromptFormatTextGenerationModel({
242
+ return new PromptFormatTextStreamingModel_js_1.PromptFormatTextStreamingModel({
244
243
  model: this.withSettings({
245
- stopSequences: promptFormat.stopSequences,
244
+ stopSequences: [
245
+ ...(this.settings.stopSequences ?? []),
246
+ ...promptFormat.stopSequences,
247
+ ],
246
248
  }),
247
249
  promptFormat,
248
250
  });
249
251
  }
250
- extractUsage(response) {
251
- return {
252
- promptTokens: response.usage.prompt_tokens,
253
- completionTokens: response.usage.completion_tokens,
254
- totalTokens: response.usage.total_tokens,
255
- };
256
- }
257
252
  withSettings(additionalSettings) {
258
253
  return new OpenAITextGenerationModel(Object.assign({}, this.settings, additionalSettings));
259
254
  }
@@ -382,6 +377,7 @@ async function createOpenAITextFullDeltaIterableQueue(stream) {
382
377
  queue.push({
383
378
  type: "delta",
384
379
  fullDelta: streamDeltaDeepCopy,
380
+ valueDelta: streamDeltaDeepCopy[0].delta,
385
381
  });
386
382
  }
387
383
  }
@@ -1,13 +1,12 @@
1
1
  import z from "zod";
2
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
2
3
  import { ApiConfiguration } from "../../core/api/ApiConfiguration.js";
3
4
  import { ResponseHandler } from "../../core/api/postToApi.js";
4
5
  import { AbstractModel } from "../../model-function/AbstractModel.js";
5
- import { DeltaEvent } from "../../model-function/DeltaEvent.js";
6
- import { ModelFunctionOptions } from "../../model-function/ModelFunctionOptions.js";
7
- import { TextGenerationModel, TextGenerationModelSettings } from "../../model-function/generate-text/TextGenerationModel.js";
6
+ import { Delta } from "../../model-function/Delta.js";
7
+ import { TextGenerationModelSettings, TextStreamingModel } from "../../model-function/generate-text/TextGenerationModel.js";
8
8
  import { PromptFormat } from "../../prompt/PromptFormat.js";
9
- import { PromptFormatTextGenerationModel } from "../../prompt/PromptFormatTextGenerationModel.js";
10
- import { OpenAIImageGenerationCallSettings } from "./OpenAIImageGenerationModel.js";
9
+ import { PromptFormatTextStreamingModel } from "../../prompt/PromptFormatTextStreamingModel.js";
11
10
  import { TikTokenTokenizer } from "./TikTokenTokenizer.js";
12
11
  /**
13
12
  * @see https://platform.openai.com/docs/models/
@@ -135,7 +134,7 @@ export interface OpenAITextGenerationModelSettings extends TextGenerationModelSe
135
134
  * "Write a short story about a robot learning to love:\n\n"
136
135
  * );
137
136
  */
138
- export declare class OpenAITextGenerationModel extends AbstractModel<OpenAITextGenerationModelSettings> implements TextGenerationModel<string, OpenAITextGenerationResponse, OpenAITextGenerationDelta, OpenAITextGenerationModelSettings> {
137
+ export declare class OpenAITextGenerationModel extends AbstractModel<OpenAITextGenerationModelSettings> implements TextStreamingModel<string, OpenAITextGenerationModelSettings> {
139
138
  constructor(settings: OpenAITextGenerationModelSettings);
140
139
  readonly provider: "openai";
141
140
  get modelName(): OpenAITextGenerationModelType;
@@ -144,36 +143,35 @@ export declare class OpenAITextGenerationModel extends AbstractModel<OpenAITextG
144
143
  countPromptTokens(input: string): Promise<number>;
145
144
  callAPI<RESULT>(prompt: string, options: {
146
145
  responseFormat: OpenAITextResponseFormatType<RESULT>;
147
- } & ModelFunctionOptions<Partial<OpenAIImageGenerationCallSettings & {
148
- user?: string;
149
- }>>): Promise<RESULT>;
146
+ } & FunctionOptions): Promise<RESULT>;
150
147
  get settingsForEvent(): Partial<OpenAITextGenerationModelSettings>;
151
- generateTextResponse(prompt: string, options?: ModelFunctionOptions<OpenAITextGenerationModelSettings>): Promise<{
152
- object: "text_completion";
153
- model: string;
148
+ doGenerateText(prompt: string, options?: FunctionOptions): Promise<{
149
+ response: {
150
+ object: "text_completion";
151
+ model: string;
152
+ usage: {
153
+ prompt_tokens: number;
154
+ completion_tokens: number;
155
+ total_tokens: number;
156
+ };
157
+ id: string;
158
+ created: number;
159
+ choices: {
160
+ text: string;
161
+ finish_reason: string;
162
+ index: number;
163
+ logprobs?: any;
164
+ }[];
165
+ };
166
+ text: string;
154
167
  usage: {
155
- prompt_tokens: number;
156
- completion_tokens: number;
157
- total_tokens: number;
168
+ promptTokens: number;
169
+ completionTokens: number;
170
+ totalTokens: number;
158
171
  };
159
- id: string;
160
- created: number;
161
- choices: {
162
- text: string;
163
- finish_reason: string;
164
- index: number;
165
- logprobs?: any;
166
- }[];
167
172
  }>;
168
- extractText(response: OpenAITextGenerationResponse): string;
169
- generateDeltaStreamResponse(prompt: string, options?: ModelFunctionOptions<OpenAITextGenerationModelSettings>): Promise<AsyncIterable<DeltaEvent<OpenAITextGenerationDelta>>>;
170
- extractTextDelta(fullDelta: OpenAITextGenerationDelta): string | undefined;
171
- withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, string>): PromptFormatTextGenerationModel<INPUT_PROMPT, string, OpenAITextGenerationResponse, OpenAITextGenerationDelta, OpenAITextGenerationModelSettings, this>;
172
- extractUsage(response: OpenAITextGenerationResponse): {
173
- promptTokens: number;
174
- completionTokens: number;
175
- totalTokens: number;
176
- };
173
+ doStreamText(prompt: string, options?: FunctionOptions): Promise<AsyncIterable<Delta<string>>>;
174
+ withPromptFormat<INPUT_PROMPT>(promptFormat: PromptFormat<INPUT_PROMPT, string>): PromptFormatTextStreamingModel<INPUT_PROMPT, string, OpenAITextGenerationModelSettings, this>;
177
175
  withSettings(additionalSettings: Partial<OpenAITextGenerationModelSettings>): this;
178
176
  }
179
177
  declare const openAITextGenerationResponseSchema: z.ZodObject<{
@@ -280,7 +278,7 @@ export declare const OpenAITextResponseFormat: {
280
278
  stream: true;
281
279
  handler: ({ response }: {
282
280
  response: Response;
283
- }) => Promise<AsyncIterable<DeltaEvent<OpenAITextGenerationDelta>>>;
281
+ }) => Promise<AsyncIterable<Delta<string>>>;
284
282
  };
285
283
  };
286
284
  export type OpenAITextGenerationDelta = Array<{
@@ -6,7 +6,7 @@ import { AsyncQueue } from "../../event-source/AsyncQueue.js";
6
6
  import { parseEventSourceStream } from "../../event-source/parseEventSourceStream.js";
7
7
  import { AbstractModel } from "../../model-function/AbstractModel.js";
8
8
  import { countTokens } from "../../model-function/tokenize-text/countTokens.js";
9
- import { PromptFormatTextGenerationModel } from "../../prompt/PromptFormatTextGenerationModel.js";
9
+ import { PromptFormatTextStreamingModel } from "../../prompt/PromptFormatTextStreamingModel.js";
10
10
  import { OpenAIApiConfiguration } from "./OpenAIApiConfiguration.js";
11
11
  import { failedOpenAICallResponseHandler } from "./OpenAIError.js";
12
12
  import { TikTokenTokenizer } from "./TikTokenTokenizer.js";
@@ -172,18 +172,14 @@ export class OpenAITextGenerationModel extends AbstractModel {
172
172
  return countTokens(this.tokenizer, input);
173
173
  }
174
174
  async callAPI(prompt, options) {
175
- const { run, settings, responseFormat } = options;
176
- const combinedSettings = {
177
- ...this.settings,
178
- ...settings,
179
- };
175
+ const { run, responseFormat } = options;
180
176
  const callSettings = {
181
177
  user: this.settings.isUserIdForwardingEnabled ? run?.userId : undefined,
182
178
  // Copied settings:
183
- ...combinedSettings,
179
+ ...this.settings,
184
180
  // map to OpenAI API names:
185
- stop: combinedSettings.stopSequences,
186
- maxTokens: combinedSettings.maxCompletionTokens,
181
+ stop: this.settings.stopSequences,
182
+ maxTokens: this.settings.maxCompletionTokens,
187
183
  // other settings:
188
184
  abortSignal: run?.abortSignal,
189
185
  prompt,
@@ -212,39 +208,38 @@ export class OpenAITextGenerationModel extends AbstractModel {
212
208
  ];
213
209
  return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
214
210
  }
215
- generateTextResponse(prompt, options) {
216
- return this.callAPI(prompt, {
211
+ async doGenerateText(prompt, options) {
212
+ const response = await this.callAPI(prompt, {
217
213
  ...options,
218
214
  responseFormat: OpenAITextResponseFormat.json,
219
215
  });
216
+ return {
217
+ response,
218
+ text: response.choices[0].text,
219
+ usage: {
220
+ promptTokens: response.usage.prompt_tokens,
221
+ completionTokens: response.usage.completion_tokens,
222
+ totalTokens: response.usage.total_tokens,
223
+ },
224
+ };
220
225
  }
221
- extractText(response) {
222
- return response.choices[0].text;
223
- }
224
- generateDeltaStreamResponse(prompt, options) {
226
+ doStreamText(prompt, options) {
225
227
  return this.callAPI(prompt, {
226
228
  ...options,
227
229
  responseFormat: OpenAITextResponseFormat.deltaIterable,
228
230
  });
229
231
  }
230
- extractTextDelta(fullDelta) {
231
- return fullDelta[0].delta;
232
- }
233
232
  withPromptFormat(promptFormat) {
234
- return new PromptFormatTextGenerationModel({
233
+ return new PromptFormatTextStreamingModel({
235
234
  model: this.withSettings({
236
- stopSequences: promptFormat.stopSequences,
235
+ stopSequences: [
236
+ ...(this.settings.stopSequences ?? []),
237
+ ...promptFormat.stopSequences,
238
+ ],
237
239
  }),
238
240
  promptFormat,
239
241
  });
240
242
  }
241
- extractUsage(response) {
242
- return {
243
- promptTokens: response.usage.prompt_tokens,
244
- completionTokens: response.usage.completion_tokens,
245
- totalTokens: response.usage.total_tokens,
246
- };
247
- }
248
243
  withSettings(additionalSettings) {
249
244
  return new OpenAITextGenerationModel(Object.assign({}, this.settings, additionalSettings));
250
245
  }
@@ -372,6 +367,7 @@ async function createOpenAITextFullDeltaIterableQueue(stream) {
372
367
  queue.push({
373
368
  type: "delta",
374
369
  fullDelta: streamDeltaDeepCopy,
370
+ valueDelta: streamDeltaDeepCopy[0].delta,
375
371
  });
376
372
  }
377
373
  }
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.OpenAITranscriptionResponseFormat = exports.OpenAITranscriptionModel = exports.calculateOpenAITranscriptionCostInMillicents = exports.OPENAI_TRANSCRIPTION_MODELS = void 0;
7
7
  const zod_1 = __importDefault(require("zod"));
8
- const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
9
8
  const callWithRetryAndThrottle_js_1 = require("../../core/api/callWithRetryAndThrottle.cjs");
10
9
  const postToApi_js_1 = require("../../core/api/postToApi.cjs");
10
+ const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
11
11
  const OpenAIApiConfiguration_js_1 = require("./OpenAIApiConfiguration.cjs");
12
12
  const OpenAIError_js_1 = require("./OpenAIError.cjs");
13
13
  /**
@@ -56,40 +56,31 @@ class OpenAITranscriptionModel extends AbstractModel_js_1.AbstractModel {
56
56
  get modelName() {
57
57
  return this.settings.model;
58
58
  }
59
- generateTranscriptionResponse(data, options) {
60
- return this.callAPI(data, {
59
+ async doTranscribe(data, options) {
60
+ const response = await this.callAPI(data, {
61
61
  responseFormat: exports.OpenAITranscriptionResponseFormat.verboseJson,
62
62
  functionId: options?.functionId,
63
- settings: options?.settings,
64
63
  run: options?.run,
65
64
  });
66
- }
67
- extractTranscriptionText(response) {
68
- return response.text;
65
+ return {
66
+ response,
67
+ transcription: response.text,
68
+ };
69
69
  }
70
70
  async callAPI(data, options) {
71
- const run = options?.run;
72
- const settings = options?.settings;
73
- const responseFormat = options?.responseFormat;
74
- const combinedSettings = {
75
- ...this.settings,
76
- ...settings,
77
- };
78
- const callSettings = {
79
- // Copied settings:
80
- ...combinedSettings,
81
- // other settings:
82
- abortSignal: run?.abortSignal,
83
- file: {
84
- name: `audio.${data.type}`,
85
- data: data.data,
86
- },
87
- responseFormat,
88
- };
89
71
  return (0, callWithRetryAndThrottle_js_1.callWithRetryAndThrottle)({
90
- retry: callSettings.api?.retry,
91
- throttle: callSettings.api?.throttle,
92
- call: async () => callOpenAITranscriptionAPI(callSettings),
72
+ retry: this.settings.api?.retry,
73
+ throttle: this.settings.api?.throttle,
74
+ call: async () => callOpenAITranscriptionAPI({
75
+ ...this.settings,
76
+ // other settings:
77
+ abortSignal: options?.run?.abortSignal,
78
+ file: {
79
+ name: `audio.${data.type}`,
80
+ data: data.data,
81
+ },
82
+ responseFormat: options?.responseFormat,
83
+ }),
93
84
  });
94
85
  }
95
86
  get settingsForEvent() {
@@ -1,10 +1,10 @@
1
1
  /// <reference types="node" />
2
2
  import z from "zod";
3
- import { AbstractModel } from "../../model-function/AbstractModel.js";
4
- import { ModelFunctionOptions } from "../../model-function/ModelFunctionOptions.js";
3
+ import { FunctionOptions } from "../../core/FunctionOptions.js";
5
4
  import { ApiConfiguration } from "../../core/api/ApiConfiguration.js";
6
- import { TranscriptionModel, TranscriptionModelSettings } from "../../model-function/transcribe-speech/TranscriptionModel.js";
7
5
  import { ResponseHandler } from "../../core/api/postToApi.js";
6
+ import { AbstractModel } from "../../model-function/AbstractModel.js";
7
+ import { TranscriptionModel, TranscriptionModelSettings } from "../../model-function/transcribe-speech/TranscriptionModel.js";
8
8
  /**
9
9
  * @see https://openai.com/pricing
10
10
  */
@@ -42,15 +42,35 @@ export type OpenAITranscriptionInput = {
42
42
  * }
43
43
  * );
44
44
  */
45
- export declare class OpenAITranscriptionModel extends AbstractModel<OpenAITranscriptionModelSettings> implements TranscriptionModel<OpenAITranscriptionInput, OpenAITranscriptionVerboseJsonResponse, OpenAITranscriptionModelSettings> {
45
+ export declare class OpenAITranscriptionModel extends AbstractModel<OpenAITranscriptionModelSettings> implements TranscriptionModel<OpenAITranscriptionInput, OpenAITranscriptionModelSettings> {
46
46
  constructor(settings: OpenAITranscriptionModelSettings);
47
47
  readonly provider: "openai";
48
48
  get modelName(): "whisper-1";
49
- generateTranscriptionResponse(data: OpenAITranscriptionInput, options?: ModelFunctionOptions<Partial<OpenAITranscriptionModelSettings>>): PromiseLike<OpenAITranscriptionVerboseJsonResponse>;
50
- extractTranscriptionText(response: OpenAITranscriptionVerboseJsonResponse): string;
49
+ doTranscribe(data: OpenAITranscriptionInput, options?: FunctionOptions): Promise<{
50
+ response: {
51
+ text: string;
52
+ segments: {
53
+ text: string;
54
+ temperature: number;
55
+ id: number;
56
+ tokens: number[];
57
+ seek: number;
58
+ start: number;
59
+ end: number;
60
+ avg_logprob: number;
61
+ compression_ratio: number;
62
+ no_speech_prob: number;
63
+ transient?: boolean | undefined;
64
+ }[];
65
+ task: "transcribe";
66
+ language: string;
67
+ duration: number;
68
+ };
69
+ transcription: string;
70
+ }>;
51
71
  callAPI<RESULT>(data: OpenAITranscriptionInput, options: {
52
72
  responseFormat: OpenAITranscriptionResponseFormatType<RESULT>;
53
- } & ModelFunctionOptions<Partial<OpenAITranscriptionModelSettings>>): Promise<RESULT>;
73
+ } & FunctionOptions): Promise<RESULT>;
54
74
  get settingsForEvent(): Partial<OpenAITranscriptionModelSettings>;
55
75
  withSettings(additionalSettings: OpenAITranscriptionModelSettings): this;
56
76
  }
@@ -1,7 +1,7 @@
1
1
  import z from "zod";
2
- import { AbstractModel } from "../../model-function/AbstractModel.js";
3
2
  import { callWithRetryAndThrottle } from "../../core/api/callWithRetryAndThrottle.js";
4
3
  import { createJsonResponseHandler, createTextResponseHandler, postToApi, } from "../../core/api/postToApi.js";
4
+ import { AbstractModel } from "../../model-function/AbstractModel.js";
5
5
  import { OpenAIApiConfiguration } from "./OpenAIApiConfiguration.js";
6
6
  import { failedOpenAICallResponseHandler } from "./OpenAIError.js";
7
7
  /**
@@ -49,40 +49,31 @@ export class OpenAITranscriptionModel extends AbstractModel {
49
49
  get modelName() {
50
50
  return this.settings.model;
51
51
  }
52
- generateTranscriptionResponse(data, options) {
53
- return this.callAPI(data, {
52
+ async doTranscribe(data, options) {
53
+ const response = await this.callAPI(data, {
54
54
  responseFormat: OpenAITranscriptionResponseFormat.verboseJson,
55
55
  functionId: options?.functionId,
56
- settings: options?.settings,
57
56
  run: options?.run,
58
57
  });
59
- }
60
- extractTranscriptionText(response) {
61
- return response.text;
58
+ return {
59
+ response,
60
+ transcription: response.text,
61
+ };
62
62
  }
63
63
  async callAPI(data, options) {
64
- const run = options?.run;
65
- const settings = options?.settings;
66
- const responseFormat = options?.responseFormat;
67
- const combinedSettings = {
68
- ...this.settings,
69
- ...settings,
70
- };
71
- const callSettings = {
72
- // Copied settings:
73
- ...combinedSettings,
74
- // other settings:
75
- abortSignal: run?.abortSignal,
76
- file: {
77
- name: `audio.${data.type}`,
78
- data: data.data,
79
- },
80
- responseFormat,
81
- };
82
64
  return callWithRetryAndThrottle({
83
- retry: callSettings.api?.retry,
84
- throttle: callSettings.api?.throttle,
85
- call: async () => callOpenAITranscriptionAPI(callSettings),
65
+ retry: this.settings.api?.retry,
66
+ throttle: this.settings.api?.throttle,
67
+ call: async () => callOpenAITranscriptionAPI({
68
+ ...this.settings,
69
+ // other settings:
70
+ abortSignal: options?.run?.abortSignal,
71
+ file: {
72
+ name: `audio.${data.type}`,
73
+ data: data.data,
74
+ },
75
+ responseFormat: options?.responseFormat,
76
+ }),
86
77
  });
87
78
  }
88
79
  get settingsForEvent() {