@ai-sdk/gateway 3.0.39 → 3.0.40
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 +6 -0
- package/dist/index.js +93 -24
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +91 -22
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/errors/as-gateway-error.ts +44 -3
- package/src/errors/gateway-timeout-error.ts +59 -0
- package/src/errors/index.ts +1 -0
package/dist/index.mjs
CHANGED
|
@@ -247,7 +247,7 @@ async function createGatewayErrorFromResponse({
|
|
|
247
247
|
cause,
|
|
248
248
|
authMethod
|
|
249
249
|
}) {
|
|
250
|
-
var
|
|
250
|
+
var _a9;
|
|
251
251
|
const parseResult = await safeValidateTypes({
|
|
252
252
|
value: response,
|
|
253
253
|
schema: gatewayErrorResponseSchema
|
|
@@ -266,7 +266,7 @@ async function createGatewayErrorFromResponse({
|
|
|
266
266
|
const validatedResponse = parseResult.value;
|
|
267
267
|
const errorType = validatedResponse.error.type;
|
|
268
268
|
const message = validatedResponse.error.message;
|
|
269
|
-
const generationId = (
|
|
269
|
+
const generationId = (_a9 = validatedResponse.generationId) != null ? _a9 : void 0;
|
|
270
270
|
switch (errorType) {
|
|
271
271
|
case "authentication_error":
|
|
272
272
|
return GatewayAuthenticationError.createContextualError({
|
|
@@ -333,22 +333,91 @@ var gatewayErrorResponseSchema = lazySchema2(
|
|
|
333
333
|
)
|
|
334
334
|
);
|
|
335
335
|
|
|
336
|
+
// src/errors/gateway-timeout-error.ts
|
|
337
|
+
var name7 = "GatewayTimeoutError";
|
|
338
|
+
var marker8 = `vercel.ai.gateway.error.${name7}`;
|
|
339
|
+
var symbol8 = Symbol.for(marker8);
|
|
340
|
+
var _a8, _b8;
|
|
341
|
+
var GatewayTimeoutError = class _GatewayTimeoutError extends (_b8 = GatewayError, _a8 = symbol8, _b8) {
|
|
342
|
+
constructor({
|
|
343
|
+
message = "Request timed out",
|
|
344
|
+
statusCode = 408,
|
|
345
|
+
cause,
|
|
346
|
+
generationId
|
|
347
|
+
} = {}) {
|
|
348
|
+
super({ message, statusCode, cause, generationId });
|
|
349
|
+
this[_a8] = true;
|
|
350
|
+
// used in isInstance
|
|
351
|
+
this.name = name7;
|
|
352
|
+
this.type = "timeout_error";
|
|
353
|
+
}
|
|
354
|
+
static isInstance(error) {
|
|
355
|
+
return GatewayError.hasMarker(error) && symbol8 in error;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Creates a helpful timeout error message with troubleshooting guidance
|
|
359
|
+
*/
|
|
360
|
+
static createTimeoutError({
|
|
361
|
+
originalMessage,
|
|
362
|
+
statusCode = 408,
|
|
363
|
+
cause,
|
|
364
|
+
generationId
|
|
365
|
+
}) {
|
|
366
|
+
const message = `Gateway request timed out: ${originalMessage}
|
|
367
|
+
|
|
368
|
+
This is a client-side timeout. To resolve this, increase your timeout configuration: https://vercel.com/docs/ai-gateway/capabilities/video-generation#extending-timeouts-for-node.js`;
|
|
369
|
+
return new _GatewayTimeoutError({
|
|
370
|
+
message,
|
|
371
|
+
statusCode,
|
|
372
|
+
cause,
|
|
373
|
+
generationId
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
|
|
336
378
|
// src/errors/as-gateway-error.ts
|
|
337
|
-
function
|
|
338
|
-
|
|
379
|
+
function isTimeoutError(error) {
|
|
380
|
+
if (!(error instanceof Error)) {
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
const errorCode = error.code;
|
|
384
|
+
if (typeof errorCode === "string") {
|
|
385
|
+
const undiciTimeoutCodes = [
|
|
386
|
+
"UND_ERR_HEADERS_TIMEOUT",
|
|
387
|
+
"UND_ERR_BODY_TIMEOUT",
|
|
388
|
+
"UND_ERR_CONNECT_TIMEOUT"
|
|
389
|
+
];
|
|
390
|
+
return undiciTimeoutCodes.includes(errorCode);
|
|
391
|
+
}
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
|
+
async function asGatewayError(error, authMethod) {
|
|
395
|
+
var _a9;
|
|
339
396
|
if (GatewayError.isInstance(error)) {
|
|
340
397
|
return error;
|
|
341
398
|
}
|
|
399
|
+
if (isTimeoutError(error)) {
|
|
400
|
+
return GatewayTimeoutError.createTimeoutError({
|
|
401
|
+
originalMessage: error instanceof Error ? error.message : "Unknown error",
|
|
402
|
+
cause: error
|
|
403
|
+
});
|
|
404
|
+
}
|
|
342
405
|
if (APICallError.isInstance(error)) {
|
|
343
|
-
|
|
406
|
+
if (error.cause && isTimeoutError(error.cause)) {
|
|
407
|
+
return GatewayTimeoutError.createTimeoutError({
|
|
408
|
+
originalMessage: error.message,
|
|
409
|
+
cause: error
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
return await createGatewayErrorFromResponse({
|
|
344
413
|
response: extractApiCallResponse(error),
|
|
345
|
-
statusCode: (
|
|
414
|
+
statusCode: (_a9 = error.statusCode) != null ? _a9 : 500,
|
|
346
415
|
defaultMessage: "Gateway request failed",
|
|
347
416
|
cause: error,
|
|
348
417
|
authMethod
|
|
349
418
|
});
|
|
350
419
|
}
|
|
351
|
-
return createGatewayErrorFromResponse({
|
|
420
|
+
return await createGatewayErrorFromResponse({
|
|
352
421
|
response: {},
|
|
353
422
|
statusCode: 500,
|
|
354
423
|
defaultMessage: error instanceof Error ? `Gateway request failed: ${error.message}` : "Unknown Gateway error",
|
|
@@ -673,7 +742,7 @@ var GatewayEmbeddingModel = class {
|
|
|
673
742
|
abortSignal,
|
|
674
743
|
providerOptions
|
|
675
744
|
}) {
|
|
676
|
-
var
|
|
745
|
+
var _a9;
|
|
677
746
|
const resolvedHeaders = await resolve3(this.config.headers());
|
|
678
747
|
try {
|
|
679
748
|
const {
|
|
@@ -704,7 +773,7 @@ var GatewayEmbeddingModel = class {
|
|
|
704
773
|
});
|
|
705
774
|
return {
|
|
706
775
|
embeddings: responseBody.embeddings,
|
|
707
|
-
usage: (
|
|
776
|
+
usage: (_a9 = responseBody.usage) != null ? _a9 : void 0,
|
|
708
777
|
providerMetadata: responseBody.providerMetadata,
|
|
709
778
|
response: { headers: responseHeaders, body: rawValue },
|
|
710
779
|
warnings: []
|
|
@@ -766,7 +835,7 @@ var GatewayImageModel = class {
|
|
|
766
835
|
headers,
|
|
767
836
|
abortSignal
|
|
768
837
|
}) {
|
|
769
|
-
var
|
|
838
|
+
var _a9, _b9, _c, _d;
|
|
770
839
|
const resolvedHeaders = await resolve4(this.config.headers());
|
|
771
840
|
try {
|
|
772
841
|
const {
|
|
@@ -806,7 +875,7 @@ var GatewayImageModel = class {
|
|
|
806
875
|
return {
|
|
807
876
|
images: responseBody.images,
|
|
808
877
|
// Always base64 strings from server
|
|
809
|
-
warnings: (
|
|
878
|
+
warnings: (_a9 = responseBody.warnings) != null ? _a9 : [],
|
|
810
879
|
providerMetadata: responseBody.providerMetadata,
|
|
811
880
|
response: {
|
|
812
881
|
timestamp: /* @__PURE__ */ new Date(),
|
|
@@ -815,7 +884,7 @@ var GatewayImageModel = class {
|
|
|
815
884
|
},
|
|
816
885
|
...responseBody.usage != null && {
|
|
817
886
|
usage: {
|
|
818
|
-
inputTokens: (
|
|
887
|
+
inputTokens: (_b9 = responseBody.usage.inputTokens) != null ? _b9 : void 0,
|
|
819
888
|
outputTokens: (_c = responseBody.usage.outputTokens) != null ? _c : void 0,
|
|
820
889
|
totalTokens: (_d = responseBody.usage.totalTokens) != null ? _d : void 0
|
|
821
890
|
}
|
|
@@ -910,7 +979,7 @@ var GatewayVideoModel = class {
|
|
|
910
979
|
headers,
|
|
911
980
|
abortSignal
|
|
912
981
|
}) {
|
|
913
|
-
var
|
|
982
|
+
var _a9;
|
|
914
983
|
const resolvedHeaders = await resolve5(this.config.headers());
|
|
915
984
|
try {
|
|
916
985
|
const {
|
|
@@ -948,7 +1017,7 @@ var GatewayVideoModel = class {
|
|
|
948
1017
|
});
|
|
949
1018
|
return {
|
|
950
1019
|
videos: responseBody.videos,
|
|
951
|
-
warnings: (
|
|
1020
|
+
warnings: (_a9 = responseBody.warnings) != null ? _a9 : [],
|
|
952
1021
|
providerMetadata: responseBody.providerMetadata,
|
|
953
1022
|
response: {
|
|
954
1023
|
timestamp: /* @__PURE__ */ new Date(),
|
|
@@ -1199,25 +1268,25 @@ var gatewayTools = {
|
|
|
1199
1268
|
import { getContext } from "@vercel/oidc";
|
|
1200
1269
|
import { getVercelOidcToken } from "@vercel/oidc";
|
|
1201
1270
|
async function getVercelRequestId() {
|
|
1202
|
-
var
|
|
1203
|
-
return (
|
|
1271
|
+
var _a9;
|
|
1272
|
+
return (_a9 = getContext().headers) == null ? void 0 : _a9["x-vercel-id"];
|
|
1204
1273
|
}
|
|
1205
1274
|
|
|
1206
1275
|
// src/gateway-provider.ts
|
|
1207
1276
|
import { withUserAgentSuffix } from "@ai-sdk/provider-utils";
|
|
1208
1277
|
|
|
1209
1278
|
// src/version.ts
|
|
1210
|
-
var VERSION = true ? "3.0.
|
|
1279
|
+
var VERSION = true ? "3.0.40" : "0.0.0-test";
|
|
1211
1280
|
|
|
1212
1281
|
// src/gateway-provider.ts
|
|
1213
1282
|
var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
|
|
1214
1283
|
function createGatewayProvider(options = {}) {
|
|
1215
|
-
var
|
|
1284
|
+
var _a9, _b9;
|
|
1216
1285
|
let pendingMetadata = null;
|
|
1217
1286
|
let metadataCache = null;
|
|
1218
|
-
const cacheRefreshMillis = (
|
|
1287
|
+
const cacheRefreshMillis = (_a9 = options.metadataCacheRefreshMillis) != null ? _a9 : 1e3 * 60 * 5;
|
|
1219
1288
|
let lastFetchTime = 0;
|
|
1220
|
-
const baseURL = (
|
|
1289
|
+
const baseURL = (_b9 = withoutTrailingSlash(options.baseURL)) != null ? _b9 : "https://ai-gateway.vercel.sh/v3/ai";
|
|
1221
1290
|
const getHeaders = async () => {
|
|
1222
1291
|
try {
|
|
1223
1292
|
const auth = await getGatewayAuthToken(options);
|
|
@@ -1272,8 +1341,8 @@ function createGatewayProvider(options = {}) {
|
|
|
1272
1341
|
});
|
|
1273
1342
|
};
|
|
1274
1343
|
const getAvailableModels = async () => {
|
|
1275
|
-
var
|
|
1276
|
-
const now = (_c = (
|
|
1344
|
+
var _a10, _b10, _c;
|
|
1345
|
+
const now = (_c = (_b10 = (_a10 = options._internal) == null ? void 0 : _a10.currentDate) == null ? void 0 : _b10.call(_a10).getTime()) != null ? _c : Date.now();
|
|
1277
1346
|
if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {
|
|
1278
1347
|
lastFetchTime = now;
|
|
1279
1348
|
pendingMetadata = new GatewayFetchMetadata({
|