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.
- package/README.md +14 -7
- package/composed-function/summarize/summarizeRecursivelyWithTextGenerationAndTokenSplitting.d.ts +3 -3
- package/core/FunctionEvent.d.ts +1 -1
- package/model-function/AsyncIterableResultPromise.d.ts +1 -1
- package/model-function/Delta.d.ts +8 -0
- package/model-function/ModelCallEvent.d.ts +1 -1
- package/model-function/ModelCallMetadata.d.ts +13 -0
- package/model-function/describe-image/ImageDescriptionEvent.d.ts +1 -1
- package/model-function/describe-image/ImageDescriptionModel.d.ts +6 -4
- package/model-function/describe-image/describeImage.cjs +7 -2
- package/model-function/describe-image/describeImage.d.ts +2 -2
- package/model-function/describe-image/describeImage.js +7 -2
- package/model-function/embed/EmbeddingEvent.d.ts +1 -1
- package/model-function/embed/EmbeddingModel.d.ts +6 -4
- package/model-function/embed/embed.cjs +16 -11
- package/model-function/embed/embed.d.ts +3 -3
- package/model-function/embed/embed.js +16 -11
- package/model-function/executeCall.cjs +26 -30
- package/model-function/executeCall.d.ts +19 -28
- package/model-function/executeCall.js +26 -30
- package/model-function/generate-image/ImageGenerationEvent.d.ts +1 -1
- package/model-function/generate-image/ImageGenerationModel.d.ts +6 -4
- package/model-function/generate-image/generateImage.cjs +7 -2
- package/model-function/generate-image/generateImage.d.ts +2 -2
- package/model-function/generate-image/generateImage.js +7 -2
- package/model-function/generate-structure/StructureFromTextGenerationModel.cjs +6 -5
- package/model-function/generate-structure/StructureFromTextGenerationModel.d.ts +7 -5
- package/model-function/generate-structure/StructureFromTextGenerationModel.js +6 -5
- package/model-function/generate-structure/StructureGenerationEvent.d.ts +1 -1
- package/model-function/generate-structure/StructureGenerationModel.d.ts +15 -18
- package/model-function/generate-structure/StructureOrTextGenerationModel.d.ts +19 -17
- package/model-function/generate-structure/generateStructure.cjs +10 -8
- package/model-function/generate-structure/generateStructure.d.ts +2 -2
- package/model-function/generate-structure/generateStructure.js +10 -8
- package/model-function/generate-structure/generateStructureOrText.cjs +15 -8
- package/model-function/generate-structure/generateStructureOrText.d.ts +4 -4
- package/model-function/generate-structure/generateStructureOrText.js +15 -8
- package/model-function/generate-structure/streamStructure.cjs +4 -16
- package/model-function/generate-structure/streamStructure.d.ts +3 -7
- package/model-function/generate-structure/streamStructure.js +4 -16
- package/model-function/generate-text/TextGenerationEvent.d.ts +1 -1
- package/model-function/generate-text/TextGenerationModel.d.ts +18 -19
- package/model-function/generate-text/generateText.cjs +8 -9
- package/model-function/generate-text/generateText.d.ts +2 -2
- package/model-function/generate-text/generateText.js +8 -9
- package/model-function/generate-text/streamText.cjs +8 -21
- package/model-function/generate-text/streamText.d.ts +3 -7
- package/model-function/generate-text/streamText.js +8 -21
- package/model-function/index.cjs +2 -2
- package/model-function/index.d.ts +2 -2
- package/model-function/index.js +2 -2
- package/model-function/synthesize-speech/SpeechSynthesisEvent.d.ts +1 -1
- package/model-function/synthesize-speech/SpeechSynthesisModel.d.ts +3 -3
- package/model-function/synthesize-speech/synthesizeSpeech.cjs +7 -2
- package/model-function/synthesize-speech/synthesizeSpeech.d.ts +2 -2
- package/model-function/synthesize-speech/synthesizeSpeech.js +7 -2
- package/model-function/transcribe-speech/TranscriptionEvent.d.ts +1 -1
- package/model-function/transcribe-speech/TranscriptionModel.d.ts +6 -4
- package/model-function/transcribe-speech/transcribe.cjs +7 -2
- package/model-function/transcribe-speech/transcribe.d.ts +2 -2
- package/model-function/transcribe-speech/transcribe.js +7 -2
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.cjs +14 -18
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.d.ts +11 -9
- package/model-provider/automatic1111/Automatic1111ImageGenerationModel.js +14 -18
- package/model-provider/cohere/CohereTextEmbeddingModel.cjs +13 -16
- package/model-provider/cohere/CohereTextEmbeddingModel.d.ts +12 -10
- package/model-provider/cohere/CohereTextEmbeddingModel.js +13 -16
- package/model-provider/cohere/CohereTextGenerationModel.cjs +29 -29
- package/model-provider/cohere/CohereTextGenerationModel.d.ts +24 -22
- package/model-provider/cohere/CohereTextGenerationModel.js +29 -29
- package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.cjs +10 -17
- package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.d.ts +2 -2
- package/model-provider/elevenlabs/ElevenLabsSpeechSynthesisModel.js +10 -17
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.cjs +13 -16
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.d.ts +9 -7
- package/model-provider/huggingface/HuggingFaceImageDescriptionModel.js +13 -16
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.cjs +19 -25
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.d.ts +8 -6
- package/model-provider/huggingface/HuggingFaceTextEmbeddingModel.js +19 -25
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.cjs +18 -24
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.d.ts +10 -8
- package/model-provider/huggingface/HuggingFaceTextGenerationModel.js +18 -24
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.cjs +13 -16
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.d.ts +8 -6
- package/model-provider/llamacpp/LlamaCppTextEmbeddingModel.js +13 -16
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.cjs +31 -34
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.d.ts +62 -60
- package/model-provider/llamacpp/LlamaCppTextGenerationModel.js +31 -34
- package/model-provider/lmnt/LmntSpeechSynthesisModel.cjs +7 -12
- package/model-provider/lmnt/LmntSpeechSynthesisModel.d.ts +2 -2
- package/model-provider/lmnt/LmntSpeechSynthesisModel.js +7 -12
- package/model-provider/openai/OpenAIImageGenerationModel.cjs +8 -16
- package/model-provider/openai/OpenAIImageGenerationModel.d.ts +11 -11
- package/model-provider/openai/OpenAIImageGenerationModel.js +8 -16
- package/model-provider/openai/OpenAITextEmbeddingModel.cjs +18 -24
- package/model-provider/openai/OpenAITextEmbeddingModel.d.ts +18 -16
- package/model-provider/openai/OpenAITextEmbeddingModel.js +18 -24
- package/model-provider/openai/OpenAITextGenerationModel.cjs +23 -27
- package/model-provider/openai/OpenAITextGenerationModel.d.ts +31 -33
- package/model-provider/openai/OpenAITextGenerationModel.js +23 -27
- package/model-provider/openai/OpenAITranscriptionModel.cjs +19 -28
- package/model-provider/openai/OpenAITranscriptionModel.d.ts +27 -7
- package/model-provider/openai/OpenAITranscriptionModel.js +19 -28
- package/model-provider/openai/chat/OpenAIChatModel.cjs +82 -86
- package/model-provider/openai/chat/OpenAIChatModel.d.ts +127 -50
- package/model-provider/openai/chat/OpenAIChatModel.js +83 -87
- package/model-provider/openai/chat/OpenAIChatStreamIterable.cjs +4 -3
- package/model-provider/openai/chat/OpenAIChatStreamIterable.d.ts +2 -2
- package/model-provider/openai/chat/OpenAIChatStreamIterable.js +2 -1
- package/model-provider/stability/StabilityImageGenerationModel.cjs +16 -21
- package/model-provider/stability/StabilityImageGenerationModel.d.ts +13 -11
- package/model-provider/stability/StabilityImageGenerationModel.js +16 -21
- package/package.json +1 -1
- package/prompt/PromptFormatTextGenerationModel.cjs +6 -19
- package/prompt/PromptFormatTextGenerationModel.d.ts +14 -10
- package/prompt/PromptFormatTextGenerationModel.js +6 -19
- package/prompt/PromptFormatTextStreamingModel.cjs +31 -0
- package/prompt/PromptFormatTextStreamingModel.d.ts +13 -0
- package/prompt/PromptFormatTextStreamingModel.js +27 -0
- package/prompt/chat/trimChatPrompt.d.ts +2 -2
- package/prompt/index.cjs +1 -0
- package/prompt/index.d.ts +1 -0
- package/prompt/index.js +1 -0
- package/retriever/Retriever.d.ts +3 -6
- package/retriever/retrieve.cjs +2 -2
- package/retriever/retrieve.d.ts +3 -3
- package/retriever/retrieve.js +2 -2
- package/tool/executeTool.cjs +2 -2
- package/tool/executeTool.js +2 -2
- package/tool/useTool.cjs +2 -4
- package/tool/useTool.d.ts +2 -2
- package/tool/useTool.js +2 -4
- package/tool/useToolOrGenerateText.d.ts +2 -2
- package/util/SafeResult.d.ts +1 -1
- package/util/runSafe.cjs +1 -1
- package/util/runSafe.js +1 -1
- package/vector-index/VectorIndexRetriever.cjs +0 -7
- package/vector-index/VectorIndexRetriever.d.ts +5 -5
- package/vector-index/VectorIndexRetriever.js +0 -7
- package/vector-index/upsertIntoVectorIndex.d.ts +4 -4
- package/model-function/DeltaEvent.d.ts +0 -7
- package/model-function/ModelFunctionOptions.d.ts +0 -4
- /package/model-function/{DeltaEvent.cjs → Delta.cjs} +0 -0
- /package/model-function/{DeltaEvent.js → Delta.js} +0 -0
- /package/model-function/{ModelFunctionOptions.cjs → ModelCallMetadata.cjs} +0 -0
- /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:
|
102
|
-
throttle:
|
103
|
-
call: async () => callOpenAITextEmbeddingAPI(
|
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
|
-
|
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
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
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
|
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,
|
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
|
-
...
|
188
|
+
...this.settings,
|
193
189
|
// map to OpenAI API names:
|
194
|
-
stop:
|
195
|
-
maxTokens:
|
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
|
-
|
225
|
-
|
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
|
-
|
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
|
242
|
+
return new PromptFormatTextStreamingModel_js_1.PromptFormatTextStreamingModel({
|
244
243
|
model: this.withSettings({
|
245
|
-
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 {
|
6
|
-
import {
|
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 {
|
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
|
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
|
-
} &
|
148
|
-
user?: string;
|
149
|
-
}>>): Promise<RESULT>;
|
146
|
+
} & FunctionOptions): Promise<RESULT>;
|
150
147
|
get settingsForEvent(): Partial<OpenAITextGenerationModelSettings>;
|
151
|
-
|
152
|
-
|
153
|
-
|
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
|
-
|
156
|
-
|
157
|
-
|
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
|
-
|
169
|
-
|
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<
|
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 {
|
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,
|
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
|
-
...
|
179
|
+
...this.settings,
|
184
180
|
// map to OpenAI API names:
|
185
|
-
stop:
|
186
|
-
maxTokens:
|
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
|
-
|
216
|
-
|
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
|
-
|
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
|
233
|
+
return new PromptFormatTextStreamingModel({
|
235
234
|
model: this.withSettings({
|
236
|
-
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
|
-
|
60
|
-
|
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
|
-
|
68
|
-
|
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:
|
91
|
-
throttle:
|
92
|
-
call: async () => callOpenAITranscriptionAPI(
|
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 {
|
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,
|
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
|
-
|
50
|
-
|
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
|
-
} &
|
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
|
-
|
53
|
-
|
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
|
-
|
61
|
-
|
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:
|
84
|
-
throttle:
|
85
|
-
call: async () => callOpenAITranscriptionAPI(
|
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() {
|