ai 3.1.0-canary.3 → 3.1.0-canary.4
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 +1 -1
- package/ai-model-specification/dist/index.d.mts +77 -18
- package/ai-model-specification/dist/index.d.ts +77 -18
- package/ai-model-specification/dist/index.js +236 -137
- package/ai-model-specification/dist/index.js.map +1 -1
- package/ai-model-specification/dist/index.mjs +232 -136
- package/ai-model-specification/dist/index.mjs.map +1 -1
- package/core/dist/index.d.mts +42 -6
- package/core/dist/index.d.ts +42 -6
- package/core/dist/index.js +681 -291
- package/core/dist/index.js.map +1 -1
- package/core/dist/index.mjs +683 -291
- package/core/dist/index.mjs.map +1 -1
- package/{provider → openai}/dist/index.js +153 -116
- package/openai/dist/index.js.map +1 -0
- package/{provider → openai}/dist/index.mjs +149 -112
- package/openai/dist/index.mjs.map +1 -0
- package/package.json +12 -12
- package/react/dist/index.d.mts +4 -0
- package/react/dist/index.d.ts +4 -0
- package/react/dist/index.js +2 -1
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs +2 -1
- package/react/dist/index.mjs.map +1 -1
- package/provider/dist/index.js.map +0 -1
- package/provider/dist/index.mjs.map +0 -1
- /package/{provider → openai}/dist/index.d.mts +0 -0
- /package/{provider → openai}/dist/index.d.ts +0 -0
@@ -27,13 +27,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
27
27
|
));
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
29
29
|
|
30
|
-
//
|
31
|
-
var
|
32
|
-
__export(
|
30
|
+
// openai/index.ts
|
31
|
+
var openai_exports = {};
|
32
|
+
__export(openai_exports, {
|
33
33
|
OpenAI: () => OpenAI,
|
34
34
|
openai: () => openai
|
35
35
|
});
|
36
|
-
module.exports = __toCommonJS(
|
36
|
+
module.exports = __toCommonJS(openai_exports);
|
37
37
|
|
38
38
|
// ai-model-specification/errors/api-call-error.ts
|
39
39
|
var APICallError = class extends Error {
|
@@ -52,7 +52,7 @@ var APICallError = class extends Error {
|
|
52
52
|
data
|
53
53
|
}) {
|
54
54
|
super(message);
|
55
|
-
this.name = "
|
55
|
+
this.name = "AI_APICallError";
|
56
56
|
this.url = url;
|
57
57
|
this.requestBodyValues = requestBodyValues;
|
58
58
|
this.statusCode = statusCode;
|
@@ -61,6 +61,9 @@ var APICallError = class extends Error {
|
|
61
61
|
this.isRetryable = isRetryable;
|
62
62
|
this.data = data;
|
63
63
|
}
|
64
|
+
static isAPICallError(error) {
|
65
|
+
return error instanceof Error && error.name === "AI_APICallError" && typeof error.url === "string" && typeof error.requestBodyValues === "object" && (error.statusCode == null || typeof error.statusCode === "number") && (error.responseBody == null || typeof error.responseBody === "string") && (error.cause == null || typeof error.cause === "object") && typeof error.isRetryable === "boolean" && (error.data == null || typeof error.data === "object");
|
66
|
+
}
|
64
67
|
toJSON() {
|
65
68
|
return {
|
66
69
|
name: this.name,
|
@@ -76,6 +79,26 @@ var APICallError = class extends Error {
|
|
76
79
|
}
|
77
80
|
};
|
78
81
|
|
82
|
+
// ai-model-specification/errors/invalid-prompt-error.ts
|
83
|
+
var InvalidPromptError = class extends Error {
|
84
|
+
constructor({ prompt: prompt2, message }) {
|
85
|
+
super(`Invalid prompt: ${message}`);
|
86
|
+
this.name = "AI_InvalidPromptError";
|
87
|
+
this.prompt = prompt2;
|
88
|
+
}
|
89
|
+
static isInvalidPromptError(error) {
|
90
|
+
return error instanceof Error && error.name === "AI_InvalidPromptError" && prompt != null;
|
91
|
+
}
|
92
|
+
toJSON() {
|
93
|
+
return {
|
94
|
+
name: this.name,
|
95
|
+
message: this.message,
|
96
|
+
stack: this.stack,
|
97
|
+
prompt: this.prompt
|
98
|
+
};
|
99
|
+
}
|
100
|
+
};
|
101
|
+
|
79
102
|
// ai-model-specification/util/get-error-message.ts
|
80
103
|
function getErrorMessage(error) {
|
81
104
|
if (error == null) {
|
@@ -90,6 +113,50 @@ function getErrorMessage(error) {
|
|
90
113
|
return JSON.stringify(error);
|
91
114
|
}
|
92
115
|
|
116
|
+
// ai-model-specification/errors/load-api-key-error.ts
|
117
|
+
var LoadAPIKeyError = class extends Error {
|
118
|
+
constructor({ message }) {
|
119
|
+
super(message);
|
120
|
+
this.name = "AI_LoadAPIKeyError";
|
121
|
+
}
|
122
|
+
static isLoadAPIKeyError(error) {
|
123
|
+
return error instanceof Error && error.name === "AI_LoadAPIKeyError";
|
124
|
+
}
|
125
|
+
toJSON() {
|
126
|
+
return {
|
127
|
+
name: this.name,
|
128
|
+
message: this.message
|
129
|
+
};
|
130
|
+
}
|
131
|
+
};
|
132
|
+
|
133
|
+
// ai-model-specification/util/load-api-key.ts
|
134
|
+
function loadApiKey({
|
135
|
+
apiKey,
|
136
|
+
environmentVariableName,
|
137
|
+
apiKeyParameterName = "apiKey",
|
138
|
+
description
|
139
|
+
}) {
|
140
|
+
if (apiKey != null) {
|
141
|
+
return apiKey;
|
142
|
+
}
|
143
|
+
if (typeof process === "undefined") {
|
144
|
+
throw new LoadAPIKeyError({
|
145
|
+
message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`
|
146
|
+
});
|
147
|
+
}
|
148
|
+
apiKey = process.env[environmentVariableName];
|
149
|
+
if (apiKey == null) {
|
150
|
+
throw new LoadAPIKeyError({
|
151
|
+
message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`
|
152
|
+
});
|
153
|
+
}
|
154
|
+
return apiKey;
|
155
|
+
}
|
156
|
+
|
157
|
+
// ai-model-specification/util/parse-json.ts
|
158
|
+
var import_secure_json_parse = __toESM(require("secure-json-parse"));
|
159
|
+
|
93
160
|
// ai-model-specification/errors/json-parse-error.ts
|
94
161
|
var JSONParseError = class extends Error {
|
95
162
|
constructor({ text, cause }) {
|
@@ -97,10 +164,13 @@ var JSONParseError = class extends Error {
|
|
97
164
|
`JSON parsing failed: Text: ${text}.
|
98
165
|
Error message: ${getErrorMessage(cause)}`
|
99
166
|
);
|
100
|
-
this.name = "
|
167
|
+
this.name = "AI_JSONParseError";
|
101
168
|
this.cause = cause;
|
102
169
|
this.text = text;
|
103
170
|
}
|
171
|
+
static isJSONParseError(error) {
|
172
|
+
return error instanceof Error && error.name === "AI_JSONParseError" && typeof error.text === "string" && typeof error.cause === "string";
|
173
|
+
}
|
104
174
|
toJSON() {
|
105
175
|
return {
|
106
176
|
name: this.name,
|
@@ -112,20 +182,6 @@ Error message: ${getErrorMessage(cause)}`
|
|
112
182
|
}
|
113
183
|
};
|
114
184
|
|
115
|
-
// ai-model-specification/errors/load-api-key-error.ts
|
116
|
-
var LoadAPIKeyError = class extends Error {
|
117
|
-
constructor({ message }) {
|
118
|
-
super(message);
|
119
|
-
this.name = "LoadAPIKeyError";
|
120
|
-
}
|
121
|
-
toJSON() {
|
122
|
-
return {
|
123
|
-
name: this.name,
|
124
|
-
message: this.message
|
125
|
-
};
|
126
|
-
}
|
127
|
-
};
|
128
|
-
|
129
185
|
// ai-model-specification/errors/type-validation-error.ts
|
130
186
|
var TypeValidationError = class extends Error {
|
131
187
|
constructor({ value, cause }) {
|
@@ -133,10 +189,13 @@ var TypeValidationError = class extends Error {
|
|
133
189
|
`Type validation failed: Value: ${JSON.stringify(value)}.
|
134
190
|
Error message: ${getErrorMessage(cause)}`
|
135
191
|
);
|
136
|
-
this.name = "
|
192
|
+
this.name = "AI_TypeValidationError";
|
137
193
|
this.cause = cause;
|
138
194
|
this.value = value;
|
139
195
|
}
|
196
|
+
static isTypeValidationError(error) {
|
197
|
+
return error instanceof Error && error.name === "AI_TypeValidationError" && typeof error.value === "string" && typeof error.cause === "string";
|
198
|
+
}
|
140
199
|
toJSON() {
|
141
200
|
return {
|
142
201
|
name: this.name,
|
@@ -148,58 +207,6 @@ Error message: ${getErrorMessage(cause)}`
|
|
148
207
|
}
|
149
208
|
};
|
150
209
|
|
151
|
-
// ai-model-specification/errors/unsupported-functionality-error.ts
|
152
|
-
var UnsupportedFunctionalityError = class extends Error {
|
153
|
-
constructor({
|
154
|
-
provider,
|
155
|
-
functionality
|
156
|
-
}) {
|
157
|
-
super(
|
158
|
-
`Functionality not supported by the provider. Provider: ${provider}.
|
159
|
-
Functionality: ${functionality}`
|
160
|
-
);
|
161
|
-
this.name = "UnsupportedFunctionalityError";
|
162
|
-
this.provider = provider;
|
163
|
-
this.functionality = functionality;
|
164
|
-
}
|
165
|
-
toJSON() {
|
166
|
-
return {
|
167
|
-
name: this.name,
|
168
|
-
message: this.message,
|
169
|
-
stack: this.stack,
|
170
|
-
provider: this.provider,
|
171
|
-
functionality: this.functionality
|
172
|
-
};
|
173
|
-
}
|
174
|
-
};
|
175
|
-
|
176
|
-
// ai-model-specification/util/load-api-key.ts
|
177
|
-
function loadApiKey({
|
178
|
-
apiKey,
|
179
|
-
environmentVariableName,
|
180
|
-
apiKeyParameterName = "apiKey",
|
181
|
-
description
|
182
|
-
}) {
|
183
|
-
if (apiKey != null) {
|
184
|
-
return apiKey;
|
185
|
-
}
|
186
|
-
if (typeof process === "undefined") {
|
187
|
-
throw new LoadAPIKeyError({
|
188
|
-
message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`
|
189
|
-
});
|
190
|
-
}
|
191
|
-
apiKey = process.env[environmentVariableName];
|
192
|
-
if (apiKey == null) {
|
193
|
-
throw new LoadAPIKeyError({
|
194
|
-
message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`
|
195
|
-
});
|
196
|
-
}
|
197
|
-
return apiKey;
|
198
|
-
}
|
199
|
-
|
200
|
-
// ai-model-specification/util/parse-json.ts
|
201
|
-
var import_secure_json_parse = __toESM(require("secure-json-parse"));
|
202
|
-
|
203
210
|
// ai-model-specification/util/validate-types.ts
|
204
211
|
function validateTypes({
|
205
212
|
value,
|
@@ -233,7 +240,7 @@ function safeValidateTypes({
|
|
233
240
|
} catch (error) {
|
234
241
|
return {
|
235
242
|
success: false,
|
236
|
-
error: error
|
243
|
+
error: TypeValidationError.isTypeValidationError(error) ? error : new TypeValidationError({ value, cause: error })
|
237
244
|
};
|
238
245
|
}
|
239
246
|
}
|
@@ -250,7 +257,7 @@ function parseJSON({
|
|
250
257
|
}
|
251
258
|
return validateTypes({ value, schema });
|
252
259
|
} catch (error) {
|
253
|
-
if (error
|
260
|
+
if (JSONParseError.isJSONParseError(error) || TypeValidationError.isTypeValidationError(error)) {
|
254
261
|
throw error;
|
255
262
|
}
|
256
263
|
throw new JSONParseError({ text, cause: error });
|
@@ -272,7 +279,7 @@ function safeParseJSON({
|
|
272
279
|
} catch (error) {
|
273
280
|
return {
|
274
281
|
success: false,
|
275
|
-
error: error
|
282
|
+
error: JSONParseError.isJSONParseError(error) ? error : new JSONParseError({ text, cause: error })
|
276
283
|
};
|
277
284
|
}
|
278
285
|
}
|
@@ -334,7 +341,7 @@ var postToApi = async ({
|
|
334
341
|
});
|
335
342
|
} catch (error) {
|
336
343
|
if (error instanceof Error) {
|
337
|
-
if (error.name === "AbortError" || error
|
344
|
+
if (error.name === "AbortError" || APICallError.isAPICallError(error)) {
|
338
345
|
throw error;
|
339
346
|
}
|
340
347
|
}
|
@@ -355,7 +362,7 @@ var postToApi = async ({
|
|
355
362
|
});
|
356
363
|
} catch (error) {
|
357
364
|
if (error instanceof Error) {
|
358
|
-
if (error.name === "AbortError" || error
|
365
|
+
if (error.name === "AbortError" || APICallError.isAPICallError(error)) {
|
359
366
|
throw error;
|
360
367
|
}
|
361
368
|
}
|
@@ -498,14 +505,42 @@ function convertUint8ArrayToBase64(array) {
|
|
498
505
|
return globalThis.btoa(latin1string);
|
499
506
|
}
|
500
507
|
|
501
|
-
//
|
508
|
+
// ai-model-specification/errors/unsupported-functionality-error.ts
|
509
|
+
var UnsupportedFunctionalityError = class extends Error {
|
510
|
+
constructor({
|
511
|
+
provider,
|
512
|
+
functionality
|
513
|
+
}) {
|
514
|
+
super(
|
515
|
+
`Functionality not supported by the provider. Provider: ${provider}.
|
516
|
+
Functionality: ${functionality}`
|
517
|
+
);
|
518
|
+
this.name = "AI_UnsupportedFunctionalityError";
|
519
|
+
this.provider = provider;
|
520
|
+
this.functionality = functionality;
|
521
|
+
}
|
522
|
+
static isUnsupportedFunctionalityError(error) {
|
523
|
+
return error instanceof Error && error.name === "AI_UnsupportedFunctionalityError" && typeof error.provider === "string" && typeof error.functionality === "string";
|
524
|
+
}
|
525
|
+
toJSON() {
|
526
|
+
return {
|
527
|
+
name: this.name,
|
528
|
+
message: this.message,
|
529
|
+
stack: this.stack,
|
530
|
+
provider: this.provider,
|
531
|
+
functionality: this.functionality
|
532
|
+
};
|
533
|
+
}
|
534
|
+
};
|
535
|
+
|
536
|
+
// openai/openai-chat-language-model.ts
|
502
537
|
var import_nanoid = require("nanoid");
|
503
538
|
var import_zod2 = require("zod");
|
504
539
|
|
505
|
-
//
|
506
|
-
function convertToOpenAIChatMessages(
|
540
|
+
// openai/convert-to-openai-chat-messages.ts
|
541
|
+
function convertToOpenAIChatMessages(prompt2) {
|
507
542
|
const messages = [];
|
508
|
-
for (const { role, content } of
|
543
|
+
for (const { role, content } of prompt2) {
|
509
544
|
switch (role) {
|
510
545
|
case "system": {
|
511
546
|
messages.push({ role: "system", content });
|
@@ -585,22 +620,7 @@ function convertToOpenAIChatMessages(prompt) {
|
|
585
620
|
return messages;
|
586
621
|
}
|
587
622
|
|
588
|
-
//
|
589
|
-
var import_zod = require("zod");
|
590
|
-
var openAIErrorDataSchema = import_zod.z.object({
|
591
|
-
error: import_zod.z.object({
|
592
|
-
message: import_zod.z.string(),
|
593
|
-
type: import_zod.z.string(),
|
594
|
-
param: import_zod.z.any().nullable(),
|
595
|
-
code: import_zod.z.string().nullable()
|
596
|
-
})
|
597
|
-
});
|
598
|
-
var openaiFailedResponseHandler = createJsonErrorResponseHandler({
|
599
|
-
errorSchema: openAIErrorDataSchema,
|
600
|
-
errorToMessage: (data) => data.error.message
|
601
|
-
});
|
602
|
-
|
603
|
-
// provider/openai/map-openai-finish-reason.ts
|
623
|
+
// openai/map-openai-finish-reason.ts
|
604
624
|
function mapOpenAIFinishReason(finishReason) {
|
605
625
|
switch (finishReason) {
|
606
626
|
case "stop":
|
@@ -617,7 +637,22 @@ function mapOpenAIFinishReason(finishReason) {
|
|
617
637
|
}
|
618
638
|
}
|
619
639
|
|
620
|
-
//
|
640
|
+
// openai/openai-error.ts
|
641
|
+
var import_zod = require("zod");
|
642
|
+
var openAIErrorDataSchema = import_zod.z.object({
|
643
|
+
error: import_zod.z.object({
|
644
|
+
message: import_zod.z.string(),
|
645
|
+
type: import_zod.z.string(),
|
646
|
+
param: import_zod.z.any().nullable(),
|
647
|
+
code: import_zod.z.string().nullable()
|
648
|
+
})
|
649
|
+
});
|
650
|
+
var openaiFailedResponseHandler = createJsonErrorResponseHandler({
|
651
|
+
errorSchema: openAIErrorDataSchema,
|
652
|
+
errorToMessage: (data) => data.error.message
|
653
|
+
});
|
654
|
+
|
655
|
+
// openai/openai-chat-language-model.ts
|
621
656
|
var OpenAIChatLanguageModel = class {
|
622
657
|
constructor(modelId, settings, config) {
|
623
658
|
this.specificationVersion = "v1";
|
@@ -631,7 +666,7 @@ var OpenAIChatLanguageModel = class {
|
|
631
666
|
}
|
632
667
|
getArgs({
|
633
668
|
mode,
|
634
|
-
prompt,
|
669
|
+
prompt: prompt2,
|
635
670
|
maxTokens,
|
636
671
|
temperature,
|
637
672
|
topP,
|
@@ -671,7 +706,7 @@ var OpenAIChatLanguageModel = class {
|
|
671
706
|
}),
|
672
707
|
seed,
|
673
708
|
// messages:
|
674
|
-
messages: convertToOpenAIChatMessages(
|
709
|
+
messages: convertToOpenAIChatMessages(prompt2)
|
675
710
|
};
|
676
711
|
switch (type) {
|
677
712
|
case "regular": {
|
@@ -874,32 +909,34 @@ var openaiChatChunkSchema = import_zod2.z.object({
|
|
874
909
|
)
|
875
910
|
});
|
876
911
|
|
877
|
-
//
|
912
|
+
// openai/openai-completion-language-model.ts
|
878
913
|
var import_zod3 = require("zod");
|
879
914
|
|
880
|
-
//
|
915
|
+
// openai/convert-to-openai-completion-prompt.ts
|
881
916
|
function convertToOpenAICompletionPrompt({
|
882
|
-
prompt,
|
917
|
+
prompt: prompt2,
|
883
918
|
inputFormat,
|
884
919
|
provider,
|
885
920
|
user = "user",
|
886
921
|
assistant = "assistant"
|
887
922
|
}) {
|
888
|
-
if (inputFormat === "prompt" &&
|
889
|
-
return { prompt:
|
923
|
+
if (inputFormat === "prompt" && prompt2.length === 1 && prompt2[0].role === "user" && prompt2[0].content.length === 1 && prompt2[0].content[0].type === "text") {
|
924
|
+
return { prompt: prompt2[0].content[0].text };
|
890
925
|
}
|
891
926
|
let text = "";
|
892
|
-
if (
|
893
|
-
text += `${
|
927
|
+
if (prompt2[0].role === "system") {
|
928
|
+
text += `${prompt2[0].content}
|
894
929
|
|
895
930
|
`;
|
896
|
-
|
931
|
+
prompt2 = prompt2.slice(1);
|
897
932
|
}
|
898
|
-
for (const { role, content } of
|
933
|
+
for (const { role, content } of prompt2) {
|
899
934
|
switch (role) {
|
900
935
|
case "system": {
|
901
|
-
throw new
|
902
|
-
|
936
|
+
throw new InvalidPromptError({
|
937
|
+
message: "Unexpected system message in prompt: ${content}",
|
938
|
+
prompt: prompt2
|
939
|
+
});
|
903
940
|
}
|
904
941
|
case "user": {
|
905
942
|
const userMessage = content.map((part) => {
|
@@ -962,7 +999,7 @@ ${user}:`]
|
|
962
999
|
};
|
963
1000
|
}
|
964
1001
|
|
965
|
-
//
|
1002
|
+
// openai/openai-completion-language-model.ts
|
966
1003
|
var OpenAICompletionLanguageModel = class {
|
967
1004
|
constructor(modelId, settings, config) {
|
968
1005
|
this.specificationVersion = "v1";
|
@@ -977,7 +1014,7 @@ var OpenAICompletionLanguageModel = class {
|
|
977
1014
|
getArgs({
|
978
1015
|
mode,
|
979
1016
|
inputFormat,
|
980
|
-
prompt,
|
1017
|
+
prompt: prompt2,
|
981
1018
|
maxTokens,
|
982
1019
|
temperature,
|
983
1020
|
topP,
|
@@ -988,7 +1025,7 @@ var OpenAICompletionLanguageModel = class {
|
|
988
1025
|
var _a;
|
989
1026
|
const type = mode.type;
|
990
1027
|
const { prompt: completionPrompt, stopSequences } = convertToOpenAICompletionPrompt({
|
991
|
-
prompt,
|
1028
|
+
prompt: prompt2,
|
992
1029
|
inputFormat,
|
993
1030
|
provider: this.provider
|
994
1031
|
});
|
@@ -1150,7 +1187,7 @@ var openaiCompletionChunkSchema = import_zod3.z.object({
|
|
1150
1187
|
)
|
1151
1188
|
});
|
1152
1189
|
|
1153
|
-
//
|
1190
|
+
// openai/openai-facade.ts
|
1154
1191
|
var OpenAI = class {
|
1155
1192
|
constructor(options = {}) {
|
1156
1193
|
this.baseUrl = options.baseUrl;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../index.ts","../../ai-model-specification/errors/api-call-error.ts","../../ai-model-specification/errors/invalid-prompt-error.ts","../../ai-model-specification/util/get-error-message.ts","../../ai-model-specification/errors/load-api-key-error.ts","../../ai-model-specification/util/load-api-key.ts","../../ai-model-specification/util/parse-json.ts","../../ai-model-specification/errors/json-parse-error.ts","../../ai-model-specification/errors/type-validation-error.ts","../../ai-model-specification/util/validate-types.ts","../../ai-model-specification/util/post-to-api.ts","../../ai-model-specification/util/response-handler.ts","../../ai-model-specification/util/scale.ts","../../ai-model-specification/util/uint8-utils.ts","../../ai-model-specification/errors/unsupported-functionality-error.ts","../openai-chat-language-model.ts","../convert-to-openai-chat-messages.ts","../map-openai-finish-reason.ts","../openai-error.ts","../openai-completion-language-model.ts","../convert-to-openai-completion-prompt.ts","../openai-facade.ts"],"sourcesContent":["export * from './openai-facade';\n","export class APICallError extends Error {\n readonly url: string;\n readonly requestBodyValues: unknown;\n readonly statusCode?: number;\n readonly responseBody?: string;\n readonly cause?: unknown;\n readonly isRetryable: boolean;\n readonly data?: unknown;\n\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseBody,\n cause,\n isRetryable = statusCode != null &&\n (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500), // server error\n data,\n }: {\n message: string;\n url: string;\n requestBodyValues: unknown;\n statusCode?: number;\n responseBody?: string;\n cause?: unknown;\n isRetryable?: boolean;\n data?: unknown;\n }) {\n super(message);\n\n this.name = 'AI_APICallError';\n\n this.url = url;\n this.requestBodyValues = requestBodyValues;\n this.statusCode = statusCode;\n this.responseBody = responseBody;\n this.cause = cause;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n\n static isAPICallError(error: unknown): error is APICallError {\n return (\n error instanceof Error &&\n error.name === 'AI_APICallError' &&\n typeof (error as APICallError).url === 'string' &&\n typeof (error as APICallError).requestBodyValues === 'object' &&\n ((error as APICallError).statusCode == null ||\n typeof (error as APICallError).statusCode === 'number') &&\n ((error as APICallError).responseBody == null ||\n typeof (error as APICallError).responseBody === 'string') &&\n ((error as APICallError).cause == null ||\n typeof (error as APICallError).cause === 'object') &&\n typeof (error as APICallError).isRetryable === 'boolean' &&\n ((error as APICallError).data == null ||\n typeof (error as APICallError).data === 'object')\n );\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n url: this.url,\n requestBodyValues: this.requestBodyValues,\n statusCode: this.statusCode,\n responseBody: this.responseBody,\n cause: this.cause,\n isRetryable: this.isRetryable,\n data: this.data,\n };\n }\n}\n","export class InvalidPromptError extends Error {\n readonly prompt: unknown;\n\n constructor({ prompt, message }: { prompt: unknown; message: string }) {\n super(`Invalid prompt: ${message}`);\n\n this.name = 'AI_InvalidPromptError';\n\n this.prompt = prompt;\n }\n\n static isInvalidPromptError(error: unknown): error is InvalidPromptError {\n return (\n error instanceof Error &&\n error.name === 'AI_InvalidPromptError' &&\n prompt != null\n );\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n\n prompt: this.prompt,\n };\n }\n}\n","export function getErrorMessage(error: unknown | undefined) {\n if (error == null) {\n return 'unknown error';\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return JSON.stringify(error);\n}\n","export class LoadAPIKeyError extends Error {\n constructor({ message }: { message: string }) {\n super(message);\n\n this.name = 'AI_LoadAPIKeyError';\n }\n\n static isLoadAPIKeyError(error: unknown): error is LoadAPIKeyError {\n return error instanceof Error && error.name === 'AI_LoadAPIKeyError';\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n };\n }\n}\n","import { LoadAPIKeyError } from '../errors/load-api-key-error';\n\nexport function loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = 'apiKey',\n description,\n}: {\n apiKey: string | undefined;\n environmentVariableName: string;\n apiKeyParameterName?: string;\n description: string;\n}): string {\n if (apiKey != null) {\n return apiKey;\n }\n\n if (typeof process === 'undefined') {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables is not supported in this environment.`,\n });\n }\n\n apiKey = process.env[environmentVariableName];\n\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`,\n });\n }\n\n return apiKey;\n}\n","import SecureJSON from 'secure-json-parse';\nimport { ZodSchema } from 'zod';\nimport { JSONParseError } from '../errors/json-parse-error';\nimport { TypeValidationError } from '../errors/type-validation-error';\nimport { safeValidateTypes, validateTypes } from './validate-types';\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {unknown} - The parsed JSON object.\n */\nexport function parseJSON({ text }: { text: string }): unknown;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Schema<T>} schema - The schema to use for parsing the JSON.\n * @returns {T} - The parsed object.\n */\nexport function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema: ZodSchema<T>;\n}): T;\nexport function parseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: ZodSchema<T>;\n}): T {\n try {\n const value = SecureJSON.parse(text);\n\n if (schema == null) {\n return value;\n }\n\n return validateTypes({ value, schema });\n } catch (error) {\n if (\n JSONParseError.isJSONParseError(error) ||\n TypeValidationError.isTypeValidationError(error)\n ) {\n throw error;\n }\n\n throw new JSONParseError({ text, cause: error });\n }\n}\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {object} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport function safeParseJSON({\n text,\n}: {\n text: string;\n}):\n | { success: true; value: unknown }\n | { success: false; error: JSONParseError | TypeValidationError };\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Schema<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema: ZodSchema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: JSONParseError | TypeValidationError };\nexport function safeParseJSON<T>({\n text,\n schema,\n}: {\n text: string;\n schema?: ZodSchema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: JSONParseError | TypeValidationError } {\n try {\n const value = SecureJSON.parse(text);\n\n if (schema == null) {\n return {\n success: true,\n value: value as T,\n };\n }\n\n return safeValidateTypes({ value, schema });\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isJSONParseError(error)\n ? error\n : new JSONParseError({ text, cause: error }),\n };\n }\n}\n\nexport function isParseableJson(input: string): boolean {\n try {\n SecureJSON.parse(input);\n return true;\n } catch {\n return false;\n }\n}\n","import { getErrorMessage } from '../util/get-error-message';\n\nexport class JSONParseError extends Error {\n // note: property order determines debugging output\n readonly text: string;\n readonly cause: unknown;\n\n constructor({ text, cause }: { text: string; cause: unknown }) {\n super(\n `JSON parsing failed: ` +\n `Text: ${text}.\\n` +\n `Error message: ${getErrorMessage(cause)}`,\n );\n\n this.name = 'AI_JSONParseError';\n\n this.cause = cause;\n this.text = text;\n }\n\n static isJSONParseError(error: unknown): error is JSONParseError {\n return (\n error instanceof Error &&\n error.name === 'AI_JSONParseError' &&\n typeof (error as JSONParseError).text === 'string' &&\n typeof (error as JSONParseError).cause === 'string'\n );\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n cause: this.cause,\n stack: this.stack,\n\n valueText: this.text,\n };\n }\n}\n","import { getErrorMessage } from '../util/get-error-message';\n\nexport class TypeValidationError extends Error {\n readonly value: unknown;\n readonly cause: unknown;\n\n constructor({ value, cause }: { value: unknown; cause: unknown }) {\n super(\n `Type validation failed: ` +\n `Value: ${JSON.stringify(value)}.\\n` +\n `Error message: ${getErrorMessage(cause)}`,\n );\n\n this.name = 'AI_TypeValidationError';\n\n this.cause = cause;\n this.value = value;\n }\n\n static isTypeValidationError(error: unknown): error is TypeValidationError {\n return (\n error instanceof Error &&\n error.name === 'AI_TypeValidationError' &&\n typeof (error as TypeValidationError).value === 'string' &&\n typeof (error as TypeValidationError).cause === 'string'\n );\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n cause: this.cause,\n stack: this.stack,\n\n value: this.value,\n };\n }\n}\n","import { ZodSchema } from 'zod';\nimport { TypeValidationError } from '../errors/type-validation-error';\n\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Schema<T>} options.schema - The schema to use for validating the JSON.\n * @returns {T} - The typed object.\n */\nexport function validateTypes<T>({\n value,\n schema,\n}: {\n value: unknown;\n schema: ZodSchema<T>;\n}): T {\n try {\n return schema.parse(value);\n } catch (error) {\n throw new TypeValidationError({ value, cause: error });\n }\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Schema<T>} options.schema - The schema to use for validating the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeValidateTypes<T>({\n value,\n schema,\n}: {\n value: unknown;\n schema: ZodSchema<T>;\n}):\n | { success: true; value: T }\n | { success: false; error: TypeValidationError } {\n try {\n const validationResult = schema.safeParse(value);\n\n if (validationResult.success) {\n return {\n success: true,\n value: validationResult.data,\n };\n }\n\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: validationResult.error,\n }),\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError.isTypeValidationError(error)\n ? error\n : new TypeValidationError({ value, cause: error }),\n };\n }\n}\n","import { APICallError } from '../errors/api-call-error';\nimport { ResponseHandler } from './response-handler';\n\nexport const postJsonToApi = async <T>({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: unknown;\n failedResponseHandler: ResponseHandler<APICallError>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n}) =>\n postToApi({\n url,\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n });\n\nexport const postToApi = async <T>({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n}: {\n url: string;\n headers?: Record<string, string | undefined>;\n body: {\n content: string | FormData | Uint8Array;\n values: unknown;\n };\n failedResponseHandler: ResponseHandler<Error>;\n successfulResponseHandler: ResponseHandler<T>;\n abortSignal?: AbortSignal;\n}) => {\n try {\n // remove undefined headers:\n const definedHeaders = Object.fromEntries(\n Object.entries(headers).filter(([_key, value]) => value != null),\n ) as Record<string, string>;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: definedHeaders,\n body: body.content,\n signal: abortSignal,\n });\n\n if (!response.ok) {\n try {\n throw await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (\n error.name === 'AbortError' ||\n APICallError.isAPICallError(error)\n ) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process error response',\n cause: error,\n statusCode: response.status,\n url,\n requestBodyValues: body.values,\n });\n }\n }\n\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values,\n });\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError' || APICallError.isAPICallError(error)) {\n throw error;\n }\n }\n\n throw new APICallError({\n message: 'Failed to process successful response',\n cause: error,\n statusCode: response.status,\n url,\n requestBodyValues: body.values,\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw error;\n }\n }\n\n // unwrap original error when fetch failed (for easier debugging):\n if (error instanceof TypeError && error.message === 'fetch failed') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const cause = (error as any).cause;\n\n if (cause != null) {\n // Failed to connect to server:\n throw new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues: body.values,\n isRetryable: true, // retry when network error\n });\n }\n }\n\n throw error;\n }\n};\n","import {\n EventSourceParserStream,\n ParsedEvent,\n} from 'eventsource-parser/stream';\nimport { ZodSchema } from 'zod';\nimport { APICallError } from '../errors';\nimport { parseJSON, safeParseJSON } from './parse-json';\nimport { ParsedChunk } from './parsed-chunk';\n\nexport type ResponseHandler<RETURN_TYPE> = (options: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n}) => PromiseLike<RETURN_TYPE>;\n\nexport const createJsonErrorResponseHandler =\n <T>({\n errorSchema,\n errorToMessage,\n isRetryable,\n }: {\n errorSchema: ZodSchema<T>;\n errorToMessage: (error: T) => string;\n isRetryable?: (response: Response, error?: T) => boolean;\n }): ResponseHandler<APICallError> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n // Some providers return an empty response body for some errors:\n if (responseBody.trim() === '') {\n return new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n }\n\n // resilient parsing in case the response is not JSON or does not match the schema:\n try {\n const parsedError = parseJSON({\n text: responseBody,\n schema: errorSchema,\n });\n\n return new APICallError({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable?.(response, parsedError),\n });\n } catch (parseError) {\n return new APICallError({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseBody,\n isRetryable: isRetryable?.(response),\n });\n }\n };\n\nexport const createEventSourceResponseHandler =\n <T>(\n chunkSchema: ZodSchema<T>,\n ): ResponseHandler<ReadableStream<ParsedChunk<T>>> =>\n async ({ response }: { response: Response }) => {\n if (response.body == null) {\n throw new Error('No response body'); // TODO AI error\n }\n\n return response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream())\n .pipeThrough(\n new TransformStream<ParsedEvent, ParsedChunk<T>>({\n transform({ data }, controller) {\n if (data === '[DONE]') {\n return;\n }\n\n const parseResult = safeParseJSON({\n text: data,\n schema: chunkSchema,\n });\n\n controller.enqueue(\n parseResult.success\n ? { type: 'value', value: parseResult.value }\n : { type: 'error', error: parseResult.error },\n );\n },\n }),\n );\n };\n\nexport const createJsonResponseHandler =\n <T>(responseSchema: ZodSchema<T>): ResponseHandler<T> =>\n async ({ response, url, requestBodyValues }) => {\n const responseBody = await response.text();\n\n const parsedResult = safeParseJSON({\n text: responseBody,\n schema: responseSchema,\n });\n\n if (!parsedResult.success) {\n throw new APICallError({\n message: 'Invalid JSON response',\n cause: parsedResult.error,\n statusCode: response.status,\n responseBody,\n url,\n requestBodyValues,\n });\n }\n\n return parsedResult.value;\n };\n","export function scale({\n inputMin = 0,\n inputMax = 1,\n outputMin,\n outputMax,\n value,\n}: {\n inputMin?: number;\n inputMax?: number;\n outputMin: number;\n outputMax: number;\n value: number | undefined;\n}) {\n if (value === undefined) {\n return undefined;\n }\n\n const inputRange = inputMax - inputMin;\n const outputRange = outputMax - outputMin;\n return ((value - inputMin) * outputRange) / inputRange + outputMin;\n}\n","export function convertBase64ToUint8Array(base64String: string) {\n const base64Url = base64String.replace(/-/g, '+').replace(/_/g, '/');\n const latin1string = globalThis.atob(base64Url);\n return Uint8Array.from(latin1string, byte => byte.codePointAt(0)!);\n}\n\nexport function convertUint8ArrayToBase64(array: Uint8Array): string {\n let latin1string = '';\n for (const value of array) {\n latin1string += String.fromCodePoint(value);\n }\n return globalThis.btoa(latin1string);\n}\n","export class UnsupportedFunctionalityError extends Error {\n readonly functionality: string;\n readonly provider: string;\n\n constructor({\n provider,\n functionality,\n }: {\n provider: string;\n functionality: string;\n }) {\n super(\n `Functionality not supported by the provider. ` +\n `Provider: ${provider}.\\n` +\n `Functionality: ${functionality}`,\n );\n\n this.name = 'AI_UnsupportedFunctionalityError';\n\n this.provider = provider;\n this.functionality = functionality;\n }\n\n static isUnsupportedFunctionalityError(\n error: unknown,\n ): error is UnsupportedFunctionalityError {\n return (\n error instanceof Error &&\n error.name === 'AI_UnsupportedFunctionalityError' &&\n typeof (error as UnsupportedFunctionalityError).provider === 'string' &&\n typeof (error as UnsupportedFunctionalityError).functionality === 'string'\n );\n }\n\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n\n provider: this.provider,\n functionality: this.functionality,\n };\n }\n}\n","import { nanoid } from 'nanoid';\nimport { z } from 'zod';\nimport {\n LanguageModelV1,\n LanguageModelV1StreamPart,\n ParsedChunk,\n UnsupportedFunctionalityError,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n isParseableJson,\n postJsonToApi,\n scale,\n} from '../ai-model-specification';\nimport { convertToOpenAIChatMessages } from './convert-to-openai-chat-messages';\nimport { mapOpenAIFinishReason } from './map-openai-finish-reason';\nimport { OpenAIChatModelId, OpenAIChatSettings } from './openai-chat-settings';\nimport { openaiFailedResponseHandler } from './openai-error';\n\ntype OpenAIChatConfig = {\n provider: string;\n baseUrl: string;\n headers: () => Record<string, string | undefined>;\n};\n\nexport class OpenAIChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = 'tool';\n\n readonly modelId: OpenAIChatModelId;\n readonly settings: OpenAIChatSettings;\n\n private readonly config: OpenAIChatConfig;\n\n constructor(\n modelId: OpenAIChatModelId,\n settings: OpenAIChatSettings,\n config: OpenAIChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n\n // model specific settings:\n logit_bias: this.settings.logitBias,\n user: this.settings.user,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature: scale({\n value: temperature,\n outputMin: 0,\n outputMax: 2,\n }),\n top_p: topP,\n frequency_penalty: scale({\n value: frequencyPenalty,\n inputMin: -1,\n inputMax: 1,\n outputMin: -2,\n outputMax: 2,\n }),\n presence_penalty: scale({\n value: presencePenalty,\n inputMin: -1,\n inputMax: 1,\n outputMin: -2,\n outputMax: 2,\n }),\n seed,\n\n // messages:\n messages: convertToOpenAIChatMessages(prompt),\n };\n\n switch (type) {\n case 'regular': {\n // when the tools array is empty, change it to undefined to prevent OpenAI errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n return {\n ...baseArgs,\n tools: tools?.map(tool => ({\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n },\n })),\n };\n }\n\n case 'object-json': {\n return {\n ...baseArgs,\n response_format: { type: 'json_object' },\n };\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n tool_choice: { type: 'function', function: { name: mode.tool.name } },\n tools: [{ type: 'function', function: mode.tool }],\n };\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n provider: this.provider,\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseUrl}/chat/completions`,\n headers: this.config.headers(),\n body: args,\n failedResponseHandler: openaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAIChatResponseSchema,\n ),\n abortSignal: options.abortSignal,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n return {\n text: choice.message.content ?? undefined,\n toolCalls: choice.message.tool_calls?.map(toolCall => ({\n toolCallType: 'function',\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n args: toolCall.function.arguments!,\n })),\n finishReason: mapOpenAIFinishReason(choice.finish_reason),\n usage: {\n promptTokens: response.usage.prompt_tokens,\n completionTokens: response.usage.completion_tokens,\n },\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseUrl}/chat/completions`,\n headers: this.config.headers(),\n body: {\n ...args,\n stream: true,\n },\n failedResponseHandler: openaiFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openaiChatChunkSchema,\n ),\n abortSignal: options.abortSignal,\n });\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const toolCalls: Array<{\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }> = [];\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParsedChunk<z.infer<typeof openaiChatChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.type === 'error') {\n controller.enqueue(chunk);\n return;\n }\n\n const value = chunk.value;\n\n if (value.choices?.[0]?.delta == null) {\n return;\n }\n\n const delta = value.choices[0].delta;\n\n if (delta.content != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: delta.content,\n });\n }\n\n if (delta.tool_calls != null) {\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n\n // new tool call, add to list\n if (toolCalls[index] == null) {\n toolCalls[index] = toolCallDelta;\n continue;\n }\n\n // existing tool call, merge\n const toolCall = toolCalls[index];\n\n if (toolCallDelta.function?.arguments != null) {\n toolCall.function!.arguments +=\n toolCallDelta.function?.arguments ?? '';\n }\n\n // send delta\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: toolCall.id ?? '', // TODO empty?\n toolName: toolCall.function?.name ?? '', // TODO empty?\n argsTextDelta: toolCallDelta.function?.arguments ?? '', // TODO empty?\n });\n\n // check if tool call is complete\n if (\n toolCall.function?.name == null ||\n toolCall.function?.arguments == null ||\n !isParseableJson(toolCall.function.arguments)\n ) {\n continue;\n }\n\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.id ?? nanoid(),\n toolName: toolCall.function.name,\n args: toolCall.function.arguments,\n });\n }\n }\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst openAIChatResponseSchema = z.object({\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal('assistant'),\n content: z.string().nullable(),\n tool_calls: z\n .array(\n z.object({\n id: z.string(),\n type: z.literal('function'),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n }),\n )\n .optional(),\n }),\n index: z.number(),\n finish_reason: z.string().optional().nullable(),\n }),\n ),\n object: z.literal('chat.completion'),\n usage: z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n }),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst openaiChatChunkSchema = z.object({\n object: z.literal('chat.completion.chunk'),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.enum(['assistant']).optional(),\n content: z.string().nullable().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal('function').optional(),\n function: z.object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable().optional(),\n index: z.number(),\n }),\n ),\n});\n","import {\n LanguageModelV1Prompt,\n convertUint8ArrayToBase64,\n} from '../ai-model-specification';\nimport { OpenAIChatPrompt } from './openai-chat-prompt';\n\nexport function convertToOpenAIChatMessages(\n prompt: LanguageModelV1Prompt,\n): OpenAIChatPrompt {\n const messages: OpenAIChatPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'image': {\n return {\n type: 'image_url',\n image_url: {\n url:\n part.image instanceof URL\n ? part.image.toString()\n : `data:${\n part.mimeType ?? 'image/jpeg'\n };base64,${convertUint8ArrayToBase64(part.image)}`,\n },\n };\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Array<{\n id: string;\n type: 'function';\n function: { name: string; arguments: string };\n }> = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.args),\n },\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: text,\n tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n });\n\n break;\n }\n\n case 'tool': {\n for (const toolResponse of content) {\n messages.push({\n role: 'tool',\n tool_call_id: toolResponse.toolCallId,\n content: JSON.stringify(toolResponse.result),\n });\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { LanguageModelV1FinishReason } from '../ai-model-specification';\n\nexport function mapOpenAIFinishReason(\n finishReason: string | null | undefined,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'content-filter':\n return 'content-filter';\n case 'function_call':\n case 'tool-calls':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n","import { z } from 'zod';\nimport { createJsonErrorResponseHandler } from '../ai-model-specification';\n\nconst openAIErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string(),\n param: z.any().nullable(),\n code: z.string().nullable(),\n }),\n});\n\nexport type OpenAIErrorData = z.infer<typeof openAIErrorDataSchema>;\n\nexport const openaiFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: openAIErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { z } from 'zod';\nimport {\n LanguageModelV1,\n LanguageModelV1StreamPart,\n ParsedChunk,\n UnsupportedFunctionalityError,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n scale,\n} from '../ai-model-specification';\nimport { convertToOpenAICompletionPrompt } from './convert-to-openai-completion-prompt';\nimport { mapOpenAIFinishReason } from './map-openai-finish-reason';\nimport {\n OpenAICompletionModelId,\n OpenAICompletionSettings,\n} from './openai-completion-settings';\nimport { openaiFailedResponseHandler } from './openai-error';\n\ntype OpenAICompletionConfig = {\n provider: string;\n baseUrl: string;\n headers: () => Record<string, string | undefined>;\n};\nexport class OpenAICompletionLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: OpenAICompletionModelId;\n readonly settings: OpenAICompletionSettings;\n\n private readonly config: OpenAICompletionConfig;\n\n constructor(\n modelId: OpenAICompletionModelId,\n settings: OpenAICompletionSettings,\n config: OpenAICompletionConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n inputFormat,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const { prompt: completionPrompt, stopSequences } =\n convertToOpenAICompletionPrompt({\n prompt,\n inputFormat,\n provider: this.provider,\n });\n\n const baseArgs = {\n // model id:\n model: this.modelId,\n\n // model specific settings:\n echo: this.settings.echo,\n logit_bias: this.settings.logitBias,\n suffix: this.settings.suffix,\n user: this.settings.user,\n\n // standardized settings:\n max_tokens: maxTokens,\n temperature: scale({\n value: temperature,\n outputMin: 0,\n outputMax: 2,\n }),\n top_p: topP,\n frequency_penalty: scale({\n value: frequencyPenalty,\n inputMin: -1,\n inputMax: 1,\n outputMin: -2,\n outputMax: 2,\n }),\n presence_penalty: scale({\n value: presencePenalty,\n inputMin: -1,\n inputMax: 1,\n outputMin: -2,\n outputMax: 2,\n }),\n seed,\n\n // prompt:\n prompt: completionPrompt,\n\n // stop sequences:\n stop: stopSequences,\n };\n\n switch (type) {\n case 'regular': {\n if (mode.tools?.length) {\n throw new UnsupportedFunctionalityError({\n functionality: 'tools',\n provider: this.provider,\n });\n }\n\n return baseArgs;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n provider: this.provider,\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n provider: this.provider,\n });\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n provider: this.provider,\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseUrl}/completions`,\n headers: this.config.headers(),\n body: args,\n failedResponseHandler: openaiFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n openAICompletionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n const choice = response.choices[0];\n\n return {\n text: choice.text,\n usage: {\n promptTokens: response.usage.prompt_tokens,\n completionTokens: response.usage.completion_tokens,\n },\n finishReason: mapOpenAIFinishReason(choice.finish_reason),\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseUrl}/completions`,\n headers: this.config.headers(),\n body: {\n ...this.getArgs(options),\n stream: true,\n },\n failedResponseHandler: openaiFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n openaiCompletionChunkSchema,\n ),\n abortSignal: options.abortSignal,\n });\n\n const { prompt: rawPrompt, ...rawSettings } = args;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParsedChunk<z.infer<typeof openaiCompletionChunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.type === 'error') {\n controller.enqueue(chunk);\n return;\n }\n\n const value = chunk.value;\n\n if (value.choices?.[0]?.text != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: value.choices[0].text,\n });\n }\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst openAICompletionResponseSchema = z.object({\n choices: z.array(\n z.object({\n text: z.string(),\n finish_reason: z.string(),\n }),\n ),\n usage: z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n }),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst openaiCompletionChunkSchema = z.object({\n object: z.literal('text_completion'),\n choices: z.array(\n z.object({\n text: z.string(),\n finish_reason: z\n .enum(['stop', 'length', 'content_filter'])\n .optional()\n .nullable(),\n index: z.number(),\n }),\n ),\n});\n","import {\n InvalidPromptError,\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '../ai-model-specification';\n\nexport function convertToOpenAICompletionPrompt({\n prompt,\n inputFormat,\n provider,\n user = 'user',\n assistant = 'assistant',\n}: {\n prompt: LanguageModelV1Prompt;\n inputFormat: 'prompt' | 'messages';\n provider: string;\n user?: string;\n assistant?: string;\n}): {\n prompt: string;\n stopSequences?: string[];\n} {\n // When the user supplied a prompt input, we don't transform it:\n if (\n inputFormat === 'prompt' &&\n prompt.length === 1 &&\n prompt[0].role === 'user' &&\n prompt[0].content.length === 1 &&\n prompt[0].content[0].type === 'text'\n ) {\n return { prompt: prompt[0].content[0].text };\n }\n\n // otherwise transform to a chat message format:\n let text = '';\n\n // if first message is a system message, add it to the text:\n if (prompt[0].role === 'system') {\n text += `${prompt[0].content}\\n\\n`;\n prompt = prompt.slice(1);\n }\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n throw new InvalidPromptError({\n message: 'Unexpected system message in prompt: ${content}',\n prompt,\n });\n }\n\n case 'user': {\n const userMessage = content\n .map(part => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'image': {\n throw new UnsupportedFunctionalityError({\n provider,\n functionality: 'images',\n });\n }\n }\n })\n .join('');\n\n text += `${user}:\\n${userMessage}\\n\\n`;\n break;\n }\n\n case 'assistant': {\n const assistantMessage = content\n .map(part => {\n switch (part.type) {\n case 'text': {\n return part.text;\n }\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n provider,\n functionality: 'tool-call messages',\n });\n }\n }\n })\n .join('');\n\n text += `${assistant}:\\n${assistantMessage}\\n\\n`;\n break;\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n provider,\n functionality: 'tool messages',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n // Assistant message prefix:\n text += `${assistant}:\\n`;\n\n return {\n prompt: text,\n stopSequences: [`\\n${user}:`],\n };\n}\n","import { loadApiKey } from '../ai-model-specification';\nimport { OpenAIChatLanguageModel } from './openai-chat-language-model';\nimport { OpenAIChatModelId, OpenAIChatSettings } from './openai-chat-settings';\nimport { OpenAICompletionLanguageModel } from './openai-completion-language-model';\nimport {\n OpenAICompletionModelId,\n OpenAICompletionSettings,\n} from './openai-completion-settings';\n\n/**\n * OpenAI provider.\n */\nexport class OpenAI {\n readonly baseUrl?: string;\n readonly apiKey?: string;\n readonly organization?: string;\n\n constructor(\n options: { baseUrl?: string; apiKey?: string; organization?: string } = {},\n ) {\n this.baseUrl = options.baseUrl;\n this.apiKey = options.apiKey;\n this.organization = options.organization;\n }\n\n private get baseConfig() {\n return {\n organization: this.organization,\n baseUrl: this.baseUrl ?? 'https://api.openai.com/v1',\n headers: () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: this.apiKey,\n environmentVariableName: 'OPENAI_API_KEY',\n description: 'OpenAI',\n })}`,\n 'OpenAI-Organization': this.organization,\n }),\n };\n }\n\n chat(modelId: OpenAIChatModelId, settings: OpenAIChatSettings = {}) {\n return new OpenAIChatLanguageModel(modelId, settings, {\n provider: 'openai.chat',\n ...this.baseConfig,\n });\n }\n\n completion(\n modelId: OpenAICompletionModelId,\n settings: OpenAICompletionSettings = {},\n ) {\n return new OpenAICompletionLanguageModel(modelId, settings, {\n provider: 'openai.completion',\n ...this.baseConfig,\n });\n }\n}\n\n/**\n * Default OpenAI provider instance.\n */\nexport const openai = new OpenAI();\n"],"mappings":"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","names":["prompt","SecureJSON","import_zod","prompt","prompt","import_zod","prompt","prompt"]}
|