modelfusion 0.106.0 → 0.108.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/CHANGELOG.md +59 -0
- package/README.md +19 -59
- package/model-function/generate-text/prompt-template/ChatMLPromptTemplate.test.cjs +11 -0
- package/model-function/generate-text/prompt-template/ChatMLPromptTemplate.test.js +11 -0
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.cjs +9 -7
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.js +9 -7
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.test.cjs +11 -0
- package/model-function/generate-text/prompt-template/Llama2PromptTemplate.test.js +11 -0
- package/model-function/generate-text/prompt-template/MistralInstructPromptTemplate.cjs +150 -0
- package/model-function/generate-text/prompt-template/MistralInstructPromptTemplate.d.ts +62 -0
- package/model-function/generate-text/prompt-template/MistralInstructPromptTemplate.js +143 -0
- package/model-function/generate-text/prompt-template/MistralInstructPromptTemplate.test.cjs +60 -0
- package/model-function/generate-text/prompt-template/MistralInstructPromptTemplate.test.js +58 -0
- package/model-function/generate-text/prompt-template/NeuralChatPromptTemplate.test.cjs +11 -0
- package/model-function/generate-text/prompt-template/NeuralChatPromptTemplate.test.js +11 -0
- package/model-function/generate-text/prompt-template/TextPromptTemplate.test.cjs +11 -0
- package/model-function/generate-text/prompt-template/TextPromptTemplate.test.js +11 -0
- package/model-function/generate-text/prompt-template/VicunaPromptTemplate.test.cjs +11 -0
- package/model-function/generate-text/prompt-template/VicunaPromptTemplate.test.js +11 -0
- package/model-function/generate-text/prompt-template/index.cjs +2 -1
- package/model-function/generate-text/prompt-template/index.d.ts +1 -0
- package/model-function/generate-text/prompt-template/index.js +1 -0
- package/model-provider/llamacpp/LlamaCppBakLLaVA1PromptTemplate.d.ts +3 -3
- package/model-provider/llamacpp/{LlamaCppTextGenerationModel.cjs → LlamaCppCompletionModel.cjs} +25 -11
- package/model-provider/llamacpp/{LlamaCppTextGenerationModel.d.ts → LlamaCppCompletionModel.d.ts} +125 -38
- package/model-provider/llamacpp/{LlamaCppTextGenerationModel.js → LlamaCppCompletionModel.js} +23 -9
- package/model-provider/llamacpp/{LlamaCppTextGenerationModel.test.cjs → LlamaCppCompletionModel.test.cjs} +3 -3
- package/model-provider/llamacpp/LlamaCppCompletionModel.test.d.ts +1 -0
- package/model-provider/llamacpp/{LlamaCppTextGenerationModel.test.js → LlamaCppCompletionModel.test.js} +3 -3
- package/model-provider/llamacpp/LlamaCppFacade.cjs +2 -2
- package/model-provider/llamacpp/LlamaCppFacade.d.ts +2 -2
- package/model-provider/llamacpp/LlamaCppFacade.js +2 -2
- package/model-provider/llamacpp/index.cjs +1 -1
- package/model-provider/llamacpp/index.d.ts +1 -1
- package/model-provider/llamacpp/index.js +1 -1
- package/model-provider/mistral/MistralChatModel.cjs +4 -4
- package/model-provider/mistral/MistralChatModel.d.ts +6 -6
- package/model-provider/mistral/MistralChatModel.js +1 -1
- package/model-provider/mistral/index.cjs +3 -3
- package/model-provider/mistral/index.d.ts +2 -2
- package/model-provider/mistral/index.js +2 -2
- package/model-provider/openai/AbstractOpenAIChatModel.cjs +2 -10
- package/model-provider/openai/AbstractOpenAIChatModel.d.ts +13 -195
- package/model-provider/openai/AbstractOpenAIChatModel.js +2 -10
- package/model-provider/openai/AbstractOpenAICompletionModel.cjs +167 -0
- package/model-provider/openai/AbstractOpenAICompletionModel.d.ts +199 -0
- package/model-provider/openai/AbstractOpenAICompletionModel.js +163 -0
- package/model-provider/openai/OpenAIChatFunctionCallStructureGenerationModel.d.ts +1 -3
- package/model-provider/openai/OpenAIChatModel.d.ts +3 -6
- package/model-provider/openai/OpenAICompletionModel.cjs +4 -156
- package/model-provider/openai/OpenAICompletionModel.d.ts +4 -191
- package/model-provider/openai/OpenAICompletionModel.js +3 -155
- package/model-provider/openai/index.cjs +1 -0
- package/model-provider/openai/index.d.ts +1 -0
- package/model-provider/openai/index.js +1 -0
- package/model-provider/openai-compatible/OpenAICompatibleChatModel.d.ts +4 -5
- package/model-provider/openai-compatible/OpenAICompatibleCompletionModel.cjs +74 -0
- package/model-provider/openai-compatible/OpenAICompatibleCompletionModel.d.ts +27 -0
- package/model-provider/openai-compatible/OpenAICompatibleCompletionModel.js +70 -0
- package/model-provider/openai-compatible/OpenAICompatibleFacade.cjs +37 -6
- package/model-provider/openai-compatible/OpenAICompatibleFacade.d.ts +33 -5
- package/model-provider/openai-compatible/OpenAICompatibleFacade.js +35 -5
- package/model-provider/openai-compatible/OpenAICompatibleProviderName.cjs +2 -0
- package/model-provider/openai-compatible/OpenAICompatibleProviderName.d.ts +1 -0
- package/model-provider/openai-compatible/OpenAICompatibleProviderName.js +1 -0
- package/model-provider/openai-compatible/TogetherAIApiConfiguration.cjs +29 -0
- package/model-provider/openai-compatible/TogetherAIApiConfiguration.d.ts +18 -0
- package/model-provider/openai-compatible/TogetherAIApiConfiguration.js +25 -0
- package/model-provider/openai-compatible/index.cjs +4 -1
- package/model-provider/openai-compatible/index.d.ts +4 -1
- package/model-provider/openai-compatible/index.js +4 -1
- package/package.json +16 -16
- package/tool/generate-tool-call/index.cjs +1 -0
- package/tool/generate-tool-call/index.d.ts +1 -0
- package/tool/generate-tool-call/index.js +1 -0
- package/tool/generate-tool-call/jsonToolCallPrompt.cjs +30 -0
- package/tool/generate-tool-call/jsonToolCallPrompt.d.ts +5 -0
- package/tool/generate-tool-call/jsonToolCallPrompt.js +27 -0
- /package/{model-provider/llamacpp/LlamaCppTextGenerationModel.test.d.ts → model-function/generate-text/prompt-template/MistralInstructPromptTemplate.test.d.ts} +0 -0
- /package/model-provider/mistral/{MistralPromptTemplate.cjs → MistralChatPromptTemplate.cjs} +0 -0
- /package/model-provider/mistral/{MistralPromptTemplate.d.ts → MistralChatPromptTemplate.d.ts} +0 -0
- /package/model-provider/mistral/{MistralPromptTemplate.js → MistralChatPromptTemplate.js} +0 -0
@@ -0,0 +1,199 @@
|
|
1
|
+
import { z } from "zod";
|
2
|
+
import { FunctionOptions } from "../../core/FunctionOptions.js";
|
3
|
+
import { ApiConfiguration } from "../../core/api/ApiConfiguration.js";
|
4
|
+
import { ResponseHandler } from "../../core/api/postToApi.js";
|
5
|
+
import { AbstractModel } from "../../model-function/AbstractModel.js";
|
6
|
+
import { TextGenerationModelSettings } from "../../model-function/generate-text/TextGenerationModel.js";
|
7
|
+
import { TextGenerationFinishReason } from "../../model-function/generate-text/TextGenerationResult.js";
|
8
|
+
export interface AbstractOpenAICompletionModelSettings extends TextGenerationModelSettings {
|
9
|
+
api?: ApiConfiguration;
|
10
|
+
model: string;
|
11
|
+
suffix?: string;
|
12
|
+
temperature?: number;
|
13
|
+
topP?: number;
|
14
|
+
logprobs?: number;
|
15
|
+
echo?: boolean;
|
16
|
+
presencePenalty?: number;
|
17
|
+
frequencyPenalty?: number;
|
18
|
+
bestOf?: number;
|
19
|
+
logitBias?: Record<number, number>;
|
20
|
+
seed?: number | null;
|
21
|
+
isUserIdForwardingEnabled?: boolean;
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* Abstract completion model that calls an API that is compatible with the OpenAI completions API.
|
25
|
+
*
|
26
|
+
* @see https://platform.openai.com/docs/api-reference/completions/create
|
27
|
+
*/
|
28
|
+
export declare abstract class AbstractOpenAICompletionModel<SETTINGS extends AbstractOpenAICompletionModelSettings> extends AbstractModel<SETTINGS> {
|
29
|
+
constructor(settings: SETTINGS);
|
30
|
+
callAPI<RESULT>(prompt: string, options: {
|
31
|
+
responseFormat: OpenAITextResponseFormatType<RESULT>;
|
32
|
+
} & FunctionOptions): Promise<RESULT>;
|
33
|
+
doGenerateTexts(prompt: string, options?: FunctionOptions): Promise<{
|
34
|
+
response: {
|
35
|
+
object: "text_completion";
|
36
|
+
usage: {
|
37
|
+
prompt_tokens: number;
|
38
|
+
completion_tokens: number;
|
39
|
+
total_tokens: number;
|
40
|
+
};
|
41
|
+
model: string;
|
42
|
+
id: string;
|
43
|
+
created: number;
|
44
|
+
choices: {
|
45
|
+
text: string;
|
46
|
+
index: number;
|
47
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
48
|
+
logprobs?: any;
|
49
|
+
}[];
|
50
|
+
system_fingerprint?: string | undefined;
|
51
|
+
};
|
52
|
+
textGenerationResults: {
|
53
|
+
finishReason: TextGenerationFinishReason;
|
54
|
+
text: string;
|
55
|
+
}[];
|
56
|
+
usage: {
|
57
|
+
promptTokens: number;
|
58
|
+
completionTokens: number;
|
59
|
+
totalTokens: number;
|
60
|
+
};
|
61
|
+
}>;
|
62
|
+
private translateFinishReason;
|
63
|
+
doStreamText(prompt: string, options?: FunctionOptions): Promise<AsyncIterable<import("../../index.js").Delta<{
|
64
|
+
object: "text_completion";
|
65
|
+
model: string;
|
66
|
+
id: string;
|
67
|
+
created: number;
|
68
|
+
choices: {
|
69
|
+
text: string;
|
70
|
+
index: number;
|
71
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
72
|
+
}[];
|
73
|
+
system_fingerprint?: string | undefined;
|
74
|
+
}>>>;
|
75
|
+
extractTextDelta(delta: unknown): string | undefined;
|
76
|
+
}
|
77
|
+
declare const OpenAICompletionResponseSchema: z.ZodObject<{
|
78
|
+
id: z.ZodString;
|
79
|
+
choices: z.ZodArray<z.ZodObject<{
|
80
|
+
finish_reason: z.ZodNullable<z.ZodOptional<z.ZodEnum<["stop", "length", "content_filter"]>>>;
|
81
|
+
index: z.ZodNumber;
|
82
|
+
logprobs: z.ZodNullable<z.ZodAny>;
|
83
|
+
text: z.ZodString;
|
84
|
+
}, "strip", z.ZodTypeAny, {
|
85
|
+
text: string;
|
86
|
+
index: number;
|
87
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
88
|
+
logprobs?: any;
|
89
|
+
}, {
|
90
|
+
text: string;
|
91
|
+
index: number;
|
92
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
93
|
+
logprobs?: any;
|
94
|
+
}>, "many">;
|
95
|
+
created: z.ZodNumber;
|
96
|
+
model: z.ZodString;
|
97
|
+
system_fingerprint: z.ZodOptional<z.ZodString>;
|
98
|
+
object: z.ZodLiteral<"text_completion">;
|
99
|
+
usage: z.ZodObject<{
|
100
|
+
prompt_tokens: z.ZodNumber;
|
101
|
+
completion_tokens: z.ZodNumber;
|
102
|
+
total_tokens: z.ZodNumber;
|
103
|
+
}, "strip", z.ZodTypeAny, {
|
104
|
+
prompt_tokens: number;
|
105
|
+
completion_tokens: number;
|
106
|
+
total_tokens: number;
|
107
|
+
}, {
|
108
|
+
prompt_tokens: number;
|
109
|
+
completion_tokens: number;
|
110
|
+
total_tokens: number;
|
111
|
+
}>;
|
112
|
+
}, "strip", z.ZodTypeAny, {
|
113
|
+
object: "text_completion";
|
114
|
+
usage: {
|
115
|
+
prompt_tokens: number;
|
116
|
+
completion_tokens: number;
|
117
|
+
total_tokens: number;
|
118
|
+
};
|
119
|
+
model: string;
|
120
|
+
id: string;
|
121
|
+
created: number;
|
122
|
+
choices: {
|
123
|
+
text: string;
|
124
|
+
index: number;
|
125
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
126
|
+
logprobs?: any;
|
127
|
+
}[];
|
128
|
+
system_fingerprint?: string | undefined;
|
129
|
+
}, {
|
130
|
+
object: "text_completion";
|
131
|
+
usage: {
|
132
|
+
prompt_tokens: number;
|
133
|
+
completion_tokens: number;
|
134
|
+
total_tokens: number;
|
135
|
+
};
|
136
|
+
model: string;
|
137
|
+
id: string;
|
138
|
+
created: number;
|
139
|
+
choices: {
|
140
|
+
text: string;
|
141
|
+
index: number;
|
142
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
143
|
+
logprobs?: any;
|
144
|
+
}[];
|
145
|
+
system_fingerprint?: string | undefined;
|
146
|
+
}>;
|
147
|
+
export type OpenAICompletionResponse = z.infer<typeof OpenAICompletionResponseSchema>;
|
148
|
+
export type OpenAITextResponseFormatType<T> = {
|
149
|
+
stream: boolean;
|
150
|
+
handler: ResponseHandler<T>;
|
151
|
+
};
|
152
|
+
export declare const OpenAITextResponseFormat: {
|
153
|
+
/**
|
154
|
+
* Returns the response as a JSON object.
|
155
|
+
*/
|
156
|
+
json: {
|
157
|
+
stream: boolean;
|
158
|
+
handler: ResponseHandler<{
|
159
|
+
object: "text_completion";
|
160
|
+
usage: {
|
161
|
+
prompt_tokens: number;
|
162
|
+
completion_tokens: number;
|
163
|
+
total_tokens: number;
|
164
|
+
};
|
165
|
+
model: string;
|
166
|
+
id: string;
|
167
|
+
created: number;
|
168
|
+
choices: {
|
169
|
+
text: string;
|
170
|
+
index: number;
|
171
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
172
|
+
logprobs?: any;
|
173
|
+
}[];
|
174
|
+
system_fingerprint?: string | undefined;
|
175
|
+
}>;
|
176
|
+
};
|
177
|
+
/**
|
178
|
+
* Returns an async iterable over the full deltas (all choices, including full current state at time of event)
|
179
|
+
* of the response stream.
|
180
|
+
*/
|
181
|
+
deltaIterable: {
|
182
|
+
stream: boolean;
|
183
|
+
handler: ({ response }: {
|
184
|
+
response: Response;
|
185
|
+
}) => Promise<AsyncIterable<import("../../index.js").Delta<{
|
186
|
+
object: "text_completion";
|
187
|
+
model: string;
|
188
|
+
id: string;
|
189
|
+
created: number;
|
190
|
+
choices: {
|
191
|
+
text: string;
|
192
|
+
index: number;
|
193
|
+
finish_reason?: "length" | "stop" | "content_filter" | null | undefined;
|
194
|
+
}[];
|
195
|
+
system_fingerprint?: string | undefined;
|
196
|
+
}>>>;
|
197
|
+
};
|
198
|
+
};
|
199
|
+
export {};
|
@@ -0,0 +1,163 @@
|
|
1
|
+
import { z } from "zod";
|
2
|
+
import { callWithRetryAndThrottle } from "../../core/api/callWithRetryAndThrottle.js";
|
3
|
+
import { createJsonResponseHandler, postJsonToApi, } from "../../core/api/postToApi.js";
|
4
|
+
import { zodSchema } from "../../core/schema/ZodSchema.js";
|
5
|
+
import { AbstractModel } from "../../model-function/AbstractModel.js";
|
6
|
+
import { createEventSourceResponseHandler } from "../../util/streaming/createEventSourceResponseHandler.js";
|
7
|
+
import { OpenAIApiConfiguration } from "./OpenAIApiConfiguration.js";
|
8
|
+
import { failedOpenAICallResponseHandler } from "./OpenAIError.js";
|
9
|
+
/**
|
10
|
+
* Abstract completion model that calls an API that is compatible with the OpenAI completions API.
|
11
|
+
*
|
12
|
+
* @see https://platform.openai.com/docs/api-reference/completions/create
|
13
|
+
*/
|
14
|
+
export class AbstractOpenAICompletionModel extends AbstractModel {
|
15
|
+
constructor(settings) {
|
16
|
+
super({ settings });
|
17
|
+
}
|
18
|
+
async callAPI(prompt, options) {
|
19
|
+
const api = this.settings.api ?? new OpenAIApiConfiguration();
|
20
|
+
const user = this.settings.isUserIdForwardingEnabled
|
21
|
+
? options.run?.userId
|
22
|
+
: undefined;
|
23
|
+
const abortSignal = options.run?.abortSignal;
|
24
|
+
const openaiResponseFormat = options.responseFormat;
|
25
|
+
// empty arrays are not allowed for stop:
|
26
|
+
const stopSequences = this.settings.stopSequences != null &&
|
27
|
+
Array.isArray(this.settings.stopSequences) &&
|
28
|
+
this.settings.stopSequences.length === 0
|
29
|
+
? undefined
|
30
|
+
: this.settings.stopSequences;
|
31
|
+
return callWithRetryAndThrottle({
|
32
|
+
retry: api.retry,
|
33
|
+
throttle: api.throttle,
|
34
|
+
call: async () => {
|
35
|
+
return postJsonToApi({
|
36
|
+
url: api.assembleUrl("/completions"),
|
37
|
+
headers: api.headers,
|
38
|
+
body: {
|
39
|
+
stream: openaiResponseFormat.stream,
|
40
|
+
model: this.settings.model,
|
41
|
+
prompt,
|
42
|
+
suffix: this.settings.suffix,
|
43
|
+
max_tokens: this.settings.maxGenerationTokens,
|
44
|
+
temperature: this.settings.temperature,
|
45
|
+
top_p: this.settings.topP,
|
46
|
+
n: this.settings.numberOfGenerations,
|
47
|
+
logprobs: this.settings.logprobs,
|
48
|
+
echo: this.settings.echo,
|
49
|
+
stop: stopSequences,
|
50
|
+
seed: this.settings.seed,
|
51
|
+
presence_penalty: this.settings.presencePenalty,
|
52
|
+
frequency_penalty: this.settings.frequencyPenalty,
|
53
|
+
best_of: this.settings.bestOf,
|
54
|
+
logit_bias: this.settings.logitBias,
|
55
|
+
user,
|
56
|
+
},
|
57
|
+
failedResponseHandler: failedOpenAICallResponseHandler,
|
58
|
+
successfulResponseHandler: openaiResponseFormat.handler,
|
59
|
+
abortSignal,
|
60
|
+
});
|
61
|
+
},
|
62
|
+
});
|
63
|
+
}
|
64
|
+
async doGenerateTexts(prompt, options) {
|
65
|
+
const response = await this.callAPI(prompt, {
|
66
|
+
...options,
|
67
|
+
responseFormat: OpenAITextResponseFormat.json,
|
68
|
+
});
|
69
|
+
return {
|
70
|
+
response,
|
71
|
+
textGenerationResults: response.choices.map((choice) => {
|
72
|
+
return {
|
73
|
+
finishReason: this.translateFinishReason(choice.finish_reason),
|
74
|
+
text: choice.text,
|
75
|
+
};
|
76
|
+
}),
|
77
|
+
usage: {
|
78
|
+
promptTokens: response.usage.prompt_tokens,
|
79
|
+
completionTokens: response.usage.completion_tokens,
|
80
|
+
totalTokens: response.usage.total_tokens,
|
81
|
+
},
|
82
|
+
};
|
83
|
+
}
|
84
|
+
translateFinishReason(finishReason) {
|
85
|
+
switch (finishReason) {
|
86
|
+
case "stop":
|
87
|
+
return "stop";
|
88
|
+
case "length":
|
89
|
+
return "length";
|
90
|
+
case "content_filter":
|
91
|
+
return "content-filter";
|
92
|
+
default:
|
93
|
+
return "unknown";
|
94
|
+
}
|
95
|
+
}
|
96
|
+
doStreamText(prompt, options) {
|
97
|
+
return this.callAPI(prompt, {
|
98
|
+
...options,
|
99
|
+
responseFormat: OpenAITextResponseFormat.deltaIterable,
|
100
|
+
});
|
101
|
+
}
|
102
|
+
extractTextDelta(delta) {
|
103
|
+
const chunk = delta;
|
104
|
+
const firstChoice = chunk.choices[0];
|
105
|
+
if (firstChoice.index > 0) {
|
106
|
+
return undefined;
|
107
|
+
}
|
108
|
+
return chunk.choices[0].text;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
const OpenAICompletionResponseSchema = z.object({
|
112
|
+
id: z.string(),
|
113
|
+
choices: z.array(z.object({
|
114
|
+
finish_reason: z
|
115
|
+
.enum(["stop", "length", "content_filter"])
|
116
|
+
.optional()
|
117
|
+
.nullable(),
|
118
|
+
index: z.number(),
|
119
|
+
logprobs: z.nullable(z.any()),
|
120
|
+
text: z.string(),
|
121
|
+
})),
|
122
|
+
created: z.number(),
|
123
|
+
model: z.string(),
|
124
|
+
system_fingerprint: z.string().optional(),
|
125
|
+
object: z.literal("text_completion"),
|
126
|
+
usage: z.object({
|
127
|
+
prompt_tokens: z.number(),
|
128
|
+
completion_tokens: z.number(),
|
129
|
+
total_tokens: z.number(),
|
130
|
+
}),
|
131
|
+
});
|
132
|
+
const openaiCompletionStreamChunkSchema = zodSchema(z.object({
|
133
|
+
choices: z.array(z.object({
|
134
|
+
text: z.string(),
|
135
|
+
finish_reason: z
|
136
|
+
.enum(["stop", "length", "content_filter"])
|
137
|
+
.optional()
|
138
|
+
.nullable(),
|
139
|
+
index: z.number(),
|
140
|
+
})),
|
141
|
+
created: z.number(),
|
142
|
+
id: z.string(),
|
143
|
+
model: z.string(),
|
144
|
+
system_fingerprint: z.string().optional(),
|
145
|
+
object: z.literal("text_completion"),
|
146
|
+
}));
|
147
|
+
export const OpenAITextResponseFormat = {
|
148
|
+
/**
|
149
|
+
* Returns the response as a JSON object.
|
150
|
+
*/
|
151
|
+
json: {
|
152
|
+
stream: false,
|
153
|
+
handler: createJsonResponseHandler(OpenAICompletionResponseSchema),
|
154
|
+
},
|
155
|
+
/**
|
156
|
+
* Returns an async iterable over the full deltas (all choices, including full current state at time of event)
|
157
|
+
* of the response stream.
|
158
|
+
*/
|
159
|
+
deltaIterable: {
|
160
|
+
stream: true,
|
161
|
+
handler: createEventSourceResponseHandler(openaiCompletionStreamChunkSchema),
|
162
|
+
},
|
163
|
+
};
|
@@ -47,8 +47,8 @@ OpenAIChatSettings> {
|
|
47
47
|
object: "chat.completion";
|
48
48
|
usage: {
|
49
49
|
prompt_tokens: number;
|
50
|
-
total_tokens: number;
|
51
50
|
completion_tokens: number;
|
51
|
+
total_tokens: number;
|
52
52
|
};
|
53
53
|
model: string;
|
54
54
|
id: string;
|
@@ -111,8 +111,6 @@ OpenAIChatSettings> {
|
|
111
111
|
finish_reason?: "length" | "stop" | "function_call" | "tool_calls" | "content_filter" | null | undefined;
|
112
112
|
}[];
|
113
113
|
system_fingerprint?: string | null | undefined;
|
114
|
-
} | {
|
115
|
-
object: string;
|
116
114
|
}>>>;
|
117
115
|
extractStructureTextDelta(delta: unknown): string | undefined;
|
118
116
|
parseAccumulatedStructureText(accumulatedText: string): unknown;
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import { StructureFromTextPromptTemplate } from "../../model-function/generate-structure/StructureFromTextPromptTemplate.js";
|
2
2
|
import { StructureFromTextStreamingModel } from "../../model-function/generate-structure/StructureFromTextStreamingModel.js";
|
3
3
|
import { PromptTemplateFullTextModel } from "../../model-function/generate-text/PromptTemplateFullTextModel.js";
|
4
|
-
import {
|
4
|
+
import { TextStreamingModel } from "../../model-function/generate-text/TextGenerationModel.js";
|
5
5
|
import { TextGenerationPromptTemplate } from "../../model-function/generate-text/TextGenerationPromptTemplate.js";
|
6
6
|
import { ToolCallGenerationModel } from "../../tool/generate-tool-call/ToolCallGenerationModel.js";
|
7
7
|
import { ToolCallsOrTextGenerationModel } from "../../tool/generate-tool-calls-or-text/ToolCallsOrTextGenerationModel.js";
|
8
|
-
import {
|
8
|
+
import { AbstractOpenAIChatModel, AbstractOpenAIChatSettings, OpenAIChatPrompt, OpenAIChatResponse } from "./AbstractOpenAIChatModel.js";
|
9
9
|
import { OpenAIChatFunctionCallStructureGenerationModel } from "./OpenAIChatFunctionCallStructureGenerationModel.js";
|
10
10
|
import { TikTokenTokenizer } from "./TikTokenTokenizer.js";
|
11
11
|
export declare const OPENAI_CHAT_MODELS: {
|
@@ -102,12 +102,9 @@ export declare const calculateOpenAIChatCostInMillicents: ({ model, response, }:
|
|
102
102
|
model: OpenAIChatModelType;
|
103
103
|
response: OpenAIChatResponse;
|
104
104
|
}) => number | null;
|
105
|
-
export interface
|
105
|
+
export interface OpenAIChatSettings extends AbstractOpenAIChatSettings {
|
106
106
|
model: OpenAIChatModelType;
|
107
107
|
}
|
108
|
-
export interface OpenAIChatSettings extends TextGenerationModelSettings, Omit<OpenAIChatCallSettings, "stop" | "maxTokens"> {
|
109
|
-
isUserIdForwardingEnabled?: boolean;
|
110
|
-
}
|
111
108
|
/**
|
112
109
|
* Create a text generation model that calls the OpenAI chat API.
|
113
110
|
*
|
@@ -1,18 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
4
|
-
const zod_1 = require("zod");
|
5
|
-
const callWithRetryAndThrottle_js_1 = require("../../core/api/callWithRetryAndThrottle.cjs");
|
6
|
-
const postToApi_js_1 = require("../../core/api/postToApi.cjs");
|
7
|
-
const ZodSchema_js_1 = require("../../core/schema/ZodSchema.cjs");
|
8
|
-
const AbstractModel_js_1 = require("../../model-function/AbstractModel.cjs");
|
3
|
+
exports.OpenAICompletionModel = exports.calculateOpenAICompletionCostInMillicents = exports.isOpenAICompletionModel = exports.getOpenAICompletionModelInformation = exports.OPENAI_TEXT_GENERATION_MODELS = void 0;
|
9
4
|
const PromptTemplateTextStreamingModel_js_1 = require("../../model-function/generate-text/PromptTemplateTextStreamingModel.cjs");
|
10
5
|
const TextGenerationModel_js_1 = require("../../model-function/generate-text/TextGenerationModel.cjs");
|
11
6
|
const TextPromptTemplate_js_1 = require("../../model-function/generate-text/prompt-template/TextPromptTemplate.cjs");
|
12
7
|
const countTokens_js_1 = require("../../model-function/tokenize-text/countTokens.cjs");
|
13
|
-
const
|
14
|
-
const OpenAIApiConfiguration_js_1 = require("./OpenAIApiConfiguration.cjs");
|
15
|
-
const OpenAIError_js_1 = require("./OpenAIError.cjs");
|
8
|
+
const AbstractOpenAICompletionModel_js_1 = require("./AbstractOpenAICompletionModel.cjs");
|
16
9
|
const TikTokenTokenizer_js_1 = require("./TikTokenTokenizer.cjs");
|
17
10
|
/**
|
18
11
|
* @see https://platform.openai.com/docs/models/
|
@@ -145,9 +138,9 @@ exports.calculateOpenAICompletionCostInMillicents = calculateOpenAICompletionCos
|
|
145
138
|
* "Write a short story about a robot learning to love:\n\n"
|
146
139
|
* );
|
147
140
|
*/
|
148
|
-
class OpenAICompletionModel extends
|
141
|
+
class OpenAICompletionModel extends AbstractOpenAICompletionModel_js_1.AbstractOpenAICompletionModel {
|
149
142
|
constructor(settings) {
|
150
|
-
super(
|
143
|
+
super(settings);
|
151
144
|
Object.defineProperty(this, "provider", {
|
152
145
|
enumerable: true,
|
153
146
|
configurable: true,
|
@@ -178,52 +171,6 @@ class OpenAICompletionModel extends AbstractModel_js_1.AbstractModel {
|
|
178
171
|
async countPromptTokens(input) {
|
179
172
|
return (0, countTokens_js_1.countTokens)(this.tokenizer, input);
|
180
173
|
}
|
181
|
-
async callAPI(prompt, options) {
|
182
|
-
const api = this.settings.api ?? new OpenAIApiConfiguration_js_1.OpenAIApiConfiguration();
|
183
|
-
const user = this.settings.isUserIdForwardingEnabled
|
184
|
-
? options.run?.userId
|
185
|
-
: undefined;
|
186
|
-
const abortSignal = options.run?.abortSignal;
|
187
|
-
const openaiResponseFormat = options.responseFormat;
|
188
|
-
// empty arrays are not allowed for stop:
|
189
|
-
const stopSequences = this.settings.stopSequences != null &&
|
190
|
-
Array.isArray(this.settings.stopSequences) &&
|
191
|
-
this.settings.stopSequences.length === 0
|
192
|
-
? undefined
|
193
|
-
: this.settings.stopSequences;
|
194
|
-
return (0, callWithRetryAndThrottle_js_1.callWithRetryAndThrottle)({
|
195
|
-
retry: api.retry,
|
196
|
-
throttle: api.throttle,
|
197
|
-
call: async () => {
|
198
|
-
return (0, postToApi_js_1.postJsonToApi)({
|
199
|
-
url: api.assembleUrl("/completions"),
|
200
|
-
headers: api.headers,
|
201
|
-
body: {
|
202
|
-
stream: openaiResponseFormat.stream,
|
203
|
-
model: this.settings.model,
|
204
|
-
prompt,
|
205
|
-
suffix: this.settings.suffix,
|
206
|
-
max_tokens: this.settings.maxGenerationTokens,
|
207
|
-
temperature: this.settings.temperature,
|
208
|
-
top_p: this.settings.topP,
|
209
|
-
n: this.settings.numberOfGenerations,
|
210
|
-
logprobs: this.settings.logprobs,
|
211
|
-
echo: this.settings.echo,
|
212
|
-
stop: stopSequences,
|
213
|
-
seed: this.settings.seed,
|
214
|
-
presence_penalty: this.settings.presencePenalty,
|
215
|
-
frequency_penalty: this.settings.frequencyPenalty,
|
216
|
-
best_of: this.settings.bestOf,
|
217
|
-
logit_bias: this.settings.logitBias,
|
218
|
-
user,
|
219
|
-
},
|
220
|
-
failedResponseHandler: OpenAIError_js_1.failedOpenAICallResponseHandler,
|
221
|
-
successfulResponseHandler: openaiResponseFormat.handler,
|
222
|
-
abortSignal,
|
223
|
-
});
|
224
|
-
},
|
225
|
-
});
|
226
|
-
}
|
227
174
|
get settingsForEvent() {
|
228
175
|
const eventSettingProperties = [
|
229
176
|
...TextGenerationModel_js_1.textGenerationModelProperties,
|
@@ -240,52 +187,6 @@ class OpenAICompletionModel extends AbstractModel_js_1.AbstractModel {
|
|
240
187
|
];
|
241
188
|
return Object.fromEntries(Object.entries(this.settings).filter(([key]) => eventSettingProperties.includes(key)));
|
242
189
|
}
|
243
|
-
async doGenerateTexts(prompt, options) {
|
244
|
-
const response = await this.callAPI(prompt, {
|
245
|
-
...options,
|
246
|
-
responseFormat: exports.OpenAITextResponseFormat.json,
|
247
|
-
});
|
248
|
-
return {
|
249
|
-
response,
|
250
|
-
textGenerationResults: response.choices.map((choice) => {
|
251
|
-
return {
|
252
|
-
finishReason: this.translateFinishReason(choice.finish_reason),
|
253
|
-
text: choice.text,
|
254
|
-
};
|
255
|
-
}),
|
256
|
-
usage: {
|
257
|
-
promptTokens: response.usage.prompt_tokens,
|
258
|
-
completionTokens: response.usage.completion_tokens,
|
259
|
-
totalTokens: response.usage.total_tokens,
|
260
|
-
},
|
261
|
-
};
|
262
|
-
}
|
263
|
-
translateFinishReason(finishReason) {
|
264
|
-
switch (finishReason) {
|
265
|
-
case "stop":
|
266
|
-
return "stop";
|
267
|
-
case "length":
|
268
|
-
return "length";
|
269
|
-
case "content_filter":
|
270
|
-
return "content-filter";
|
271
|
-
default:
|
272
|
-
return "unknown";
|
273
|
-
}
|
274
|
-
}
|
275
|
-
doStreamText(prompt, options) {
|
276
|
-
return this.callAPI(prompt, {
|
277
|
-
...options,
|
278
|
-
responseFormat: exports.OpenAITextResponseFormat.deltaIterable,
|
279
|
-
});
|
280
|
-
}
|
281
|
-
extractTextDelta(delta) {
|
282
|
-
const chunk = delta;
|
283
|
-
const firstChoice = chunk.choices[0];
|
284
|
-
if (firstChoice.index > 0) {
|
285
|
-
return undefined;
|
286
|
-
}
|
287
|
-
return chunk.choices[0].text;
|
288
|
-
}
|
289
190
|
/**
|
290
191
|
* Returns this model with an instruction prompt template.
|
291
192
|
*/
|
@@ -314,56 +215,3 @@ class OpenAICompletionModel extends AbstractModel_js_1.AbstractModel {
|
|
314
215
|
}
|
315
216
|
}
|
316
217
|
exports.OpenAICompletionModel = OpenAICompletionModel;
|
317
|
-
const OpenAICompletionResponseSchema = zod_1.z.object({
|
318
|
-
id: zod_1.z.string(),
|
319
|
-
choices: zod_1.z.array(zod_1.z.object({
|
320
|
-
finish_reason: zod_1.z
|
321
|
-
.enum(["stop", "length", "content_filter"])
|
322
|
-
.optional()
|
323
|
-
.nullable(),
|
324
|
-
index: zod_1.z.number(),
|
325
|
-
logprobs: zod_1.z.nullable(zod_1.z.any()),
|
326
|
-
text: zod_1.z.string(),
|
327
|
-
})),
|
328
|
-
created: zod_1.z.number(),
|
329
|
-
model: zod_1.z.string(),
|
330
|
-
system_fingerprint: zod_1.z.string().optional(),
|
331
|
-
object: zod_1.z.literal("text_completion"),
|
332
|
-
usage: zod_1.z.object({
|
333
|
-
prompt_tokens: zod_1.z.number(),
|
334
|
-
completion_tokens: zod_1.z.number(),
|
335
|
-
total_tokens: zod_1.z.number(),
|
336
|
-
}),
|
337
|
-
});
|
338
|
-
const openaiCompletionStreamChunkSchema = (0, ZodSchema_js_1.zodSchema)(zod_1.z.object({
|
339
|
-
choices: zod_1.z.array(zod_1.z.object({
|
340
|
-
text: zod_1.z.string(),
|
341
|
-
finish_reason: zod_1.z
|
342
|
-
.enum(["stop", "length", "content_filter"])
|
343
|
-
.optional()
|
344
|
-
.nullable(),
|
345
|
-
index: zod_1.z.number(),
|
346
|
-
})),
|
347
|
-
created: zod_1.z.number(),
|
348
|
-
id: zod_1.z.string(),
|
349
|
-
model: zod_1.z.string(),
|
350
|
-
system_fingerprint: zod_1.z.string().optional(),
|
351
|
-
object: zod_1.z.literal("text_completion"),
|
352
|
-
}));
|
353
|
-
exports.OpenAITextResponseFormat = {
|
354
|
-
/**
|
355
|
-
* Returns the response as a JSON object.
|
356
|
-
*/
|
357
|
-
json: {
|
358
|
-
stream: false,
|
359
|
-
handler: (0, postToApi_js_1.createJsonResponseHandler)(OpenAICompletionResponseSchema),
|
360
|
-
},
|
361
|
-
/**
|
362
|
-
* Returns an async iterable over the full deltas (all choices, including full current state at time of event)
|
363
|
-
* of the response stream.
|
364
|
-
*/
|
365
|
-
deltaIterable: {
|
366
|
-
stream: true,
|
367
|
-
handler: (0, createEventSourceResponseHandler_js_1.createEventSourceResponseHandler)(openaiCompletionStreamChunkSchema),
|
368
|
-
},
|
369
|
-
};
|