@ai-sdk/gateway 0.0.0-02dba89b-20251009204516 → 0.0.0-4115c213-20260122152721
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 +886 -167
- package/dist/index.d.mts +205 -34
- package/dist/index.d.ts +205 -34
- package/dist/index.js +459 -180
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +450 -148
- package/dist/index.mjs.map +1 -1
- package/docs/00-ai-gateway.mdx +625 -0
- package/package.json +19 -6
- package/src/errors/as-gateway-error.ts +33 -0
- package/src/errors/create-gateway-error.ts +132 -0
- package/src/errors/extract-api-call-response.ts +15 -0
- package/src/errors/gateway-authentication-error.ts +84 -0
- package/src/errors/gateway-error.ts +47 -0
- package/src/errors/gateway-internal-server-error.ts +33 -0
- package/src/errors/gateway-invalid-request-error.ts +33 -0
- package/src/errors/gateway-model-not-found-error.ts +47 -0
- package/src/errors/gateway-rate-limit-error.ts +33 -0
- package/src/errors/gateway-response-error.ts +42 -0
- package/src/errors/index.ts +16 -0
- package/src/errors/parse-auth-method.ts +23 -0
- package/src/gateway-config.ts +7 -0
- package/src/gateway-embedding-model-settings.ts +22 -0
- package/src/gateway-embedding-model.ts +109 -0
- package/src/gateway-fetch-metadata.ts +127 -0
- package/src/gateway-image-model-settings.ts +12 -0
- package/src/gateway-image-model.ts +145 -0
- package/src/gateway-language-model-settings.ts +159 -0
- package/src/gateway-language-model.ts +212 -0
- package/src/gateway-model-entry.ts +58 -0
- package/src/gateway-provider-options.ts +66 -0
- package/src/gateway-provider.ts +284 -0
- package/src/gateway-tools.ts +15 -0
- package/src/index.ts +27 -0
- package/src/tool/perplexity-search.ts +294 -0
- package/src/vercel-environment.ts +6 -0
- package/src/version.ts +6 -0
package/dist/index.js
CHANGED
|
@@ -34,8 +34,7 @@ __export(src_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(src_exports);
|
|
35
35
|
|
|
36
36
|
// src/gateway-provider.ts
|
|
37
|
-
var
|
|
38
|
-
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
|
37
|
+
var import_provider_utils9 = require("@ai-sdk/provider-utils");
|
|
39
38
|
|
|
40
39
|
// src/errors/as-gateway-error.ts
|
|
41
40
|
var import_provider = require("@ai-sdk/provider");
|
|
@@ -51,12 +50,14 @@ var GatewayError = class _GatewayError extends (_b = Error, _a = symbol, _b) {
|
|
|
51
50
|
constructor({
|
|
52
51
|
message,
|
|
53
52
|
statusCode = 500,
|
|
54
|
-
cause
|
|
53
|
+
cause,
|
|
54
|
+
generationId
|
|
55
55
|
}) {
|
|
56
|
-
super(message);
|
|
56
|
+
super(generationId ? `${message} [${generationId}]` : message);
|
|
57
57
|
this[_a] = true;
|
|
58
58
|
this.statusCode = statusCode;
|
|
59
59
|
this.cause = cause;
|
|
60
|
+
this.generationId = generationId;
|
|
60
61
|
}
|
|
61
62
|
/**
|
|
62
63
|
* Checks if the given error is a Gateway Error.
|
|
@@ -80,9 +81,10 @@ var GatewayAuthenticationError = class _GatewayAuthenticationError extends (_b2
|
|
|
80
81
|
constructor({
|
|
81
82
|
message = "Authentication failed",
|
|
82
83
|
statusCode = 401,
|
|
83
|
-
cause
|
|
84
|
+
cause,
|
|
85
|
+
generationId
|
|
84
86
|
} = {}) {
|
|
85
|
-
super({ message, statusCode, cause });
|
|
87
|
+
super({ message, statusCode, cause, generationId });
|
|
86
88
|
this[_a2] = true;
|
|
87
89
|
// used in isInstance
|
|
88
90
|
this.name = name;
|
|
@@ -99,44 +101,37 @@ var GatewayAuthenticationError = class _GatewayAuthenticationError extends (_b2
|
|
|
99
101
|
oidcTokenProvided,
|
|
100
102
|
message = "Authentication failed",
|
|
101
103
|
statusCode = 401,
|
|
102
|
-
cause
|
|
104
|
+
cause,
|
|
105
|
+
generationId
|
|
103
106
|
}) {
|
|
104
107
|
let contextualMessage;
|
|
105
108
|
if (apiKeyProvided) {
|
|
106
|
-
contextualMessage = `AI Gateway authentication failed: Invalid API key
|
|
109
|
+
contextualMessage = `AI Gateway authentication failed: Invalid API key.
|
|
110
|
+
|
|
111
|
+
Create a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys
|
|
107
112
|
|
|
108
|
-
|
|
113
|
+
Provide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;
|
|
109
114
|
} else if (oidcTokenProvided) {
|
|
110
|
-
contextualMessage = `AI Gateway authentication failed: Invalid OIDC token
|
|
115
|
+
contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.
|
|
111
116
|
|
|
112
|
-
|
|
113
|
-
- make sure your Vercel project settings have OIDC enabled
|
|
114
|
-
- if running locally with 'vercel dev', the token is automatically obtained and refreshed
|
|
115
|
-
- if running locally with your own dev server, run 'vercel env pull' to fetch the token
|
|
116
|
-
- in production/preview, the token is automatically obtained and refreshed
|
|
117
|
+
Run 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.
|
|
117
118
|
|
|
118
|
-
|
|
119
|
+
Alternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;
|
|
119
120
|
} else {
|
|
120
121
|
contextualMessage = `AI Gateway authentication failed: No authentication provided.
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
The token is expected to be provided via the 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.
|
|
123
|
+
Option 1 - API key:
|
|
124
|
+
Create an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys
|
|
125
|
+
Provide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.
|
|
127
126
|
|
|
128
|
-
OIDC token
|
|
129
|
-
|
|
130
|
-
The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
|
|
131
|
-
- make sure your Vercel project settings have OIDC enabled
|
|
132
|
-
- if running locally with 'vercel dev', the token is automatically obtained and refreshed
|
|
133
|
-
- if running locally with your own dev server, run 'vercel env pull' to fetch the token
|
|
134
|
-
- in production/preview, the token is automatically obtained and refreshed`;
|
|
127
|
+
Option 2 - OIDC token:
|
|
128
|
+
Run 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;
|
|
135
129
|
}
|
|
136
130
|
return new _GatewayAuthenticationError({
|
|
137
131
|
message: contextualMessage,
|
|
138
132
|
statusCode,
|
|
139
|
-
cause
|
|
133
|
+
cause,
|
|
134
|
+
generationId
|
|
140
135
|
});
|
|
141
136
|
}
|
|
142
137
|
};
|
|
@@ -150,9 +145,10 @@ var GatewayInvalidRequestError = class extends (_b3 = GatewayError, _a3 = symbol
|
|
|
150
145
|
constructor({
|
|
151
146
|
message = "Invalid request",
|
|
152
147
|
statusCode = 400,
|
|
153
|
-
cause
|
|
148
|
+
cause,
|
|
149
|
+
generationId
|
|
154
150
|
} = {}) {
|
|
155
|
-
super({ message, statusCode, cause });
|
|
151
|
+
super({ message, statusCode, cause, generationId });
|
|
156
152
|
this[_a3] = true;
|
|
157
153
|
// used in isInstance
|
|
158
154
|
this.name = name2;
|
|
@@ -172,9 +168,10 @@ var GatewayRateLimitError = class extends (_b4 = GatewayError, _a4 = symbol4, _b
|
|
|
172
168
|
constructor({
|
|
173
169
|
message = "Rate limit exceeded",
|
|
174
170
|
statusCode = 429,
|
|
175
|
-
cause
|
|
171
|
+
cause,
|
|
172
|
+
generationId
|
|
176
173
|
} = {}) {
|
|
177
|
-
super({ message, statusCode, cause });
|
|
174
|
+
super({ message, statusCode, cause, generationId });
|
|
178
175
|
this[_a4] = true;
|
|
179
176
|
// used in isInstance
|
|
180
177
|
this.name = name3;
|
|
@@ -187,21 +184,27 @@ var GatewayRateLimitError = class extends (_b4 = GatewayError, _a4 = symbol4, _b
|
|
|
187
184
|
|
|
188
185
|
// src/errors/gateway-model-not-found-error.ts
|
|
189
186
|
var import_v4 = require("zod/v4");
|
|
187
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
190
188
|
var name4 = "GatewayModelNotFoundError";
|
|
191
189
|
var marker5 = `vercel.ai.gateway.error.${name4}`;
|
|
192
190
|
var symbol5 = Symbol.for(marker5);
|
|
193
|
-
var modelNotFoundParamSchema =
|
|
194
|
-
|
|
195
|
-
|
|
191
|
+
var modelNotFoundParamSchema = (0, import_provider_utils.lazySchema)(
|
|
192
|
+
() => (0, import_provider_utils.zodSchema)(
|
|
193
|
+
import_v4.z.object({
|
|
194
|
+
modelId: import_v4.z.string()
|
|
195
|
+
})
|
|
196
|
+
)
|
|
197
|
+
);
|
|
196
198
|
var _a5, _b5;
|
|
197
199
|
var GatewayModelNotFoundError = class extends (_b5 = GatewayError, _a5 = symbol5, _b5) {
|
|
198
200
|
constructor({
|
|
199
201
|
message = "Model not found",
|
|
200
202
|
statusCode = 404,
|
|
201
203
|
modelId,
|
|
202
|
-
cause
|
|
204
|
+
cause,
|
|
205
|
+
generationId
|
|
203
206
|
} = {}) {
|
|
204
|
-
super({ message, statusCode, cause });
|
|
207
|
+
super({ message, statusCode, cause, generationId });
|
|
205
208
|
this[_a5] = true;
|
|
206
209
|
// used in isInstance
|
|
207
210
|
this.name = name4;
|
|
@@ -222,9 +225,10 @@ var GatewayInternalServerError = class extends (_b6 = GatewayError, _a6 = symbol
|
|
|
222
225
|
constructor({
|
|
223
226
|
message = "Internal server error",
|
|
224
227
|
statusCode = 500,
|
|
225
|
-
cause
|
|
228
|
+
cause,
|
|
229
|
+
generationId
|
|
226
230
|
} = {}) {
|
|
227
|
-
super({ message, statusCode, cause });
|
|
231
|
+
super({ message, statusCode, cause, generationId });
|
|
228
232
|
this[_a6] = true;
|
|
229
233
|
// used in isInstance
|
|
230
234
|
this.name = name5;
|
|
@@ -246,9 +250,10 @@ var GatewayResponseError = class extends (_b7 = GatewayError, _a7 = symbol7, _b7
|
|
|
246
250
|
statusCode = 502,
|
|
247
251
|
response,
|
|
248
252
|
validationError,
|
|
249
|
-
cause
|
|
253
|
+
cause,
|
|
254
|
+
generationId
|
|
250
255
|
} = {}) {
|
|
251
|
-
super({ message, statusCode, cause });
|
|
256
|
+
super({ message, statusCode, cause, generationId });
|
|
252
257
|
this[_a7] = true;
|
|
253
258
|
// used in isInstance
|
|
254
259
|
this.name = name6;
|
|
@@ -262,63 +267,99 @@ var GatewayResponseError = class extends (_b7 = GatewayError, _a7 = symbol7, _b7
|
|
|
262
267
|
};
|
|
263
268
|
|
|
264
269
|
// src/errors/create-gateway-error.ts
|
|
265
|
-
|
|
270
|
+
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
|
271
|
+
async function createGatewayErrorFromResponse({
|
|
266
272
|
response,
|
|
267
273
|
statusCode,
|
|
268
274
|
defaultMessage = "Gateway request failed",
|
|
269
275
|
cause,
|
|
270
276
|
authMethod
|
|
271
277
|
}) {
|
|
272
|
-
|
|
278
|
+
var _a8;
|
|
279
|
+
const parseResult = await (0, import_provider_utils2.safeValidateTypes)({
|
|
280
|
+
value: response,
|
|
281
|
+
schema: gatewayErrorResponseSchema
|
|
282
|
+
});
|
|
273
283
|
if (!parseResult.success) {
|
|
284
|
+
const rawGenerationId = typeof response === "object" && response !== null && "generationId" in response ? response.generationId : void 0;
|
|
274
285
|
return new GatewayResponseError({
|
|
275
286
|
message: `Invalid error response format: ${defaultMessage}`,
|
|
276
287
|
statusCode,
|
|
277
288
|
response,
|
|
278
289
|
validationError: parseResult.error,
|
|
279
|
-
cause
|
|
290
|
+
cause,
|
|
291
|
+
generationId: rawGenerationId
|
|
280
292
|
});
|
|
281
293
|
}
|
|
282
|
-
const validatedResponse = parseResult.
|
|
294
|
+
const validatedResponse = parseResult.value;
|
|
283
295
|
const errorType = validatedResponse.error.type;
|
|
284
296
|
const message = validatedResponse.error.message;
|
|
297
|
+
const generationId = (_a8 = validatedResponse.generationId) != null ? _a8 : void 0;
|
|
285
298
|
switch (errorType) {
|
|
286
299
|
case "authentication_error":
|
|
287
300
|
return GatewayAuthenticationError.createContextualError({
|
|
288
301
|
apiKeyProvided: authMethod === "api-key",
|
|
289
302
|
oidcTokenProvided: authMethod === "oidc",
|
|
290
303
|
statusCode,
|
|
291
|
-
cause
|
|
304
|
+
cause,
|
|
305
|
+
generationId
|
|
292
306
|
});
|
|
293
307
|
case "invalid_request_error":
|
|
294
|
-
return new GatewayInvalidRequestError({
|
|
308
|
+
return new GatewayInvalidRequestError({
|
|
309
|
+
message,
|
|
310
|
+
statusCode,
|
|
311
|
+
cause,
|
|
312
|
+
generationId
|
|
313
|
+
});
|
|
295
314
|
case "rate_limit_exceeded":
|
|
296
|
-
return new GatewayRateLimitError({
|
|
315
|
+
return new GatewayRateLimitError({
|
|
316
|
+
message,
|
|
317
|
+
statusCode,
|
|
318
|
+
cause,
|
|
319
|
+
generationId
|
|
320
|
+
});
|
|
297
321
|
case "model_not_found": {
|
|
298
|
-
const modelResult =
|
|
299
|
-
validatedResponse.error.param
|
|
300
|
-
|
|
322
|
+
const modelResult = await (0, import_provider_utils2.safeValidateTypes)({
|
|
323
|
+
value: validatedResponse.error.param,
|
|
324
|
+
schema: modelNotFoundParamSchema
|
|
325
|
+
});
|
|
301
326
|
return new GatewayModelNotFoundError({
|
|
302
327
|
message,
|
|
303
328
|
statusCode,
|
|
304
|
-
modelId: modelResult.success ? modelResult.
|
|
305
|
-
cause
|
|
329
|
+
modelId: modelResult.success ? modelResult.value.modelId : void 0,
|
|
330
|
+
cause,
|
|
331
|
+
generationId
|
|
306
332
|
});
|
|
307
333
|
}
|
|
308
334
|
case "internal_server_error":
|
|
309
|
-
return new GatewayInternalServerError({
|
|
335
|
+
return new GatewayInternalServerError({
|
|
336
|
+
message,
|
|
337
|
+
statusCode,
|
|
338
|
+
cause,
|
|
339
|
+
generationId
|
|
340
|
+
});
|
|
310
341
|
default:
|
|
311
|
-
return new GatewayInternalServerError({
|
|
342
|
+
return new GatewayInternalServerError({
|
|
343
|
+
message,
|
|
344
|
+
statusCode,
|
|
345
|
+
cause,
|
|
346
|
+
generationId
|
|
347
|
+
});
|
|
312
348
|
}
|
|
313
349
|
}
|
|
314
|
-
var gatewayErrorResponseSchema =
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
350
|
+
var gatewayErrorResponseSchema = (0, import_provider_utils2.lazySchema)(
|
|
351
|
+
() => (0, import_provider_utils2.zodSchema)(
|
|
352
|
+
import_v42.z.object({
|
|
353
|
+
error: import_v42.z.object({
|
|
354
|
+
message: import_v42.z.string(),
|
|
355
|
+
type: import_v42.z.string().nullish(),
|
|
356
|
+
param: import_v42.z.unknown().nullish(),
|
|
357
|
+
code: import_v42.z.union([import_v42.z.string(), import_v42.z.number()]).nullish()
|
|
358
|
+
}),
|
|
359
|
+
generationId: import_v42.z.string().nullish()
|
|
360
|
+
})
|
|
361
|
+
)
|
|
362
|
+
);
|
|
322
363
|
|
|
323
364
|
// src/errors/as-gateway-error.ts
|
|
324
365
|
function asGatewayError(error, authMethod) {
|
|
@@ -361,20 +402,21 @@ function extractApiCallResponse(error) {
|
|
|
361
402
|
|
|
362
403
|
// src/errors/parse-auth-method.ts
|
|
363
404
|
var import_v43 = require("zod/v4");
|
|
405
|
+
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
364
406
|
var GATEWAY_AUTH_METHOD_HEADER = "ai-gateway-auth-method";
|
|
365
|
-
function parseAuthMethod(headers) {
|
|
366
|
-
const result =
|
|
367
|
-
headers[GATEWAY_AUTH_METHOD_HEADER]
|
|
368
|
-
|
|
369
|
-
|
|
407
|
+
async function parseAuthMethod(headers) {
|
|
408
|
+
const result = await (0, import_provider_utils3.safeValidateTypes)({
|
|
409
|
+
value: headers[GATEWAY_AUTH_METHOD_HEADER],
|
|
410
|
+
schema: gatewayAuthMethodSchema
|
|
411
|
+
});
|
|
412
|
+
return result.success ? result.value : void 0;
|
|
370
413
|
}
|
|
371
|
-
var gatewayAuthMethodSchema =
|
|
372
|
-
import_v43.z.literal("api-key"),
|
|
373
|
-
|
|
374
|
-
]);
|
|
414
|
+
var gatewayAuthMethodSchema = (0, import_provider_utils3.lazySchema)(
|
|
415
|
+
() => (0, import_provider_utils3.zodSchema)(import_v43.z.union([import_v43.z.literal("api-key"), import_v43.z.literal("oidc")]))
|
|
416
|
+
);
|
|
375
417
|
|
|
376
418
|
// src/gateway-fetch-metadata.ts
|
|
377
|
-
var
|
|
419
|
+
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
|
378
420
|
var import_v44 = require("zod/v4");
|
|
379
421
|
var GatewayFetchMetadata = class {
|
|
380
422
|
constructor(config) {
|
|
@@ -382,13 +424,13 @@ var GatewayFetchMetadata = class {
|
|
|
382
424
|
}
|
|
383
425
|
async getAvailableModels() {
|
|
384
426
|
try {
|
|
385
|
-
const { value } = await (0,
|
|
427
|
+
const { value } = await (0, import_provider_utils4.getFromApi)({
|
|
386
428
|
url: `${this.config.baseURL}/config`,
|
|
387
|
-
headers: await (0,
|
|
388
|
-
successfulResponseHandler: (0,
|
|
389
|
-
|
|
429
|
+
headers: await (0, import_provider_utils4.resolve)(this.config.headers()),
|
|
430
|
+
successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
|
|
431
|
+
gatewayAvailableModelsResponseSchema
|
|
390
432
|
),
|
|
391
|
-
failedResponseHandler: (0,
|
|
433
|
+
failedResponseHandler: (0, import_provider_utils4.createJsonErrorResponseHandler)({
|
|
392
434
|
errorSchema: import_v44.z.any(),
|
|
393
435
|
errorToMessage: (data) => data
|
|
394
436
|
}),
|
|
@@ -396,17 +438,19 @@ var GatewayFetchMetadata = class {
|
|
|
396
438
|
});
|
|
397
439
|
return value;
|
|
398
440
|
} catch (error) {
|
|
399
|
-
throw asGatewayError(error);
|
|
441
|
+
throw await asGatewayError(error);
|
|
400
442
|
}
|
|
401
443
|
}
|
|
402
444
|
async getCredits() {
|
|
403
445
|
try {
|
|
404
446
|
const baseUrl = new URL(this.config.baseURL);
|
|
405
|
-
const { value } = await (0,
|
|
447
|
+
const { value } = await (0, import_provider_utils4.getFromApi)({
|
|
406
448
|
url: `${baseUrl.origin}/v1/credits`,
|
|
407
|
-
headers: await (0,
|
|
408
|
-
successfulResponseHandler: (0,
|
|
409
|
-
|
|
449
|
+
headers: await (0, import_provider_utils4.resolve)(this.config.headers()),
|
|
450
|
+
successfulResponseHandler: (0, import_provider_utils4.createJsonResponseHandler)(
|
|
451
|
+
gatewayCreditsResponseSchema
|
|
452
|
+
),
|
|
453
|
+
failedResponseHandler: (0, import_provider_utils4.createJsonErrorResponseHandler)({
|
|
410
454
|
errorSchema: import_v44.z.any(),
|
|
411
455
|
errorToMessage: (data) => data
|
|
412
456
|
}),
|
|
@@ -414,53 +458,62 @@ var GatewayFetchMetadata = class {
|
|
|
414
458
|
});
|
|
415
459
|
return value;
|
|
416
460
|
} catch (error) {
|
|
417
|
-
throw asGatewayError(error);
|
|
461
|
+
throw await asGatewayError(error);
|
|
418
462
|
}
|
|
419
463
|
}
|
|
420
464
|
};
|
|
421
|
-
var
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
465
|
+
var gatewayAvailableModelsResponseSchema = (0, import_provider_utils4.lazySchema)(
|
|
466
|
+
() => (0, import_provider_utils4.zodSchema)(
|
|
467
|
+
import_v44.z.object({
|
|
468
|
+
models: import_v44.z.array(
|
|
469
|
+
import_v44.z.object({
|
|
470
|
+
id: import_v44.z.string(),
|
|
471
|
+
name: import_v44.z.string(),
|
|
472
|
+
description: import_v44.z.string().nullish(),
|
|
473
|
+
pricing: import_v44.z.object({
|
|
474
|
+
input: import_v44.z.string(),
|
|
475
|
+
output: import_v44.z.string(),
|
|
476
|
+
input_cache_read: import_v44.z.string().nullish(),
|
|
477
|
+
input_cache_write: import_v44.z.string().nullish()
|
|
478
|
+
}).transform(
|
|
479
|
+
({ input, output, input_cache_read, input_cache_write }) => ({
|
|
480
|
+
input,
|
|
481
|
+
output,
|
|
482
|
+
...input_cache_read ? { cachedInputTokens: input_cache_read } : {},
|
|
483
|
+
...input_cache_write ? { cacheCreationInputTokens: input_cache_write } : {}
|
|
484
|
+
})
|
|
485
|
+
).nullish(),
|
|
486
|
+
specification: import_v44.z.object({
|
|
487
|
+
specificationVersion: import_v44.z.literal("v3"),
|
|
488
|
+
provider: import_v44.z.string(),
|
|
489
|
+
modelId: import_v44.z.string()
|
|
490
|
+
}),
|
|
491
|
+
modelType: import_v44.z.enum(["language", "embedding", "image"]).nullish()
|
|
492
|
+
})
|
|
493
|
+
)
|
|
494
|
+
})
|
|
495
|
+
)
|
|
496
|
+
);
|
|
497
|
+
var gatewayCreditsResponseSchema = (0, import_provider_utils4.lazySchema)(
|
|
498
|
+
() => (0, import_provider_utils4.zodSchema)(
|
|
499
|
+
import_v44.z.object({
|
|
500
|
+
balance: import_v44.z.string(),
|
|
501
|
+
total_used: import_v44.z.string()
|
|
502
|
+
}).transform(({ balance, total_used }) => ({
|
|
503
|
+
balance,
|
|
504
|
+
totalUsed: total_used
|
|
505
|
+
}))
|
|
506
|
+
)
|
|
507
|
+
);
|
|
455
508
|
|
|
456
509
|
// src/gateway-language-model.ts
|
|
457
|
-
var
|
|
510
|
+
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
|
458
511
|
var import_v45 = require("zod/v4");
|
|
459
512
|
var GatewayLanguageModel = class {
|
|
460
513
|
constructor(modelId, config) {
|
|
461
514
|
this.modelId = modelId;
|
|
462
515
|
this.config = config;
|
|
463
|
-
this.specificationVersion = "
|
|
516
|
+
this.specificationVersion = "v3";
|
|
464
517
|
this.supportedUrls = { "*/*": [/.*/] };
|
|
465
518
|
}
|
|
466
519
|
get provider() {
|
|
@@ -476,23 +529,23 @@ var GatewayLanguageModel = class {
|
|
|
476
529
|
async doGenerate(options) {
|
|
477
530
|
const { args, warnings } = await this.getArgs(options);
|
|
478
531
|
const { abortSignal } = options;
|
|
479
|
-
const resolvedHeaders = await (0,
|
|
532
|
+
const resolvedHeaders = await (0, import_provider_utils5.resolve)(this.config.headers());
|
|
480
533
|
try {
|
|
481
534
|
const {
|
|
482
535
|
responseHeaders,
|
|
483
536
|
value: responseBody,
|
|
484
537
|
rawValue: rawResponse
|
|
485
|
-
} = await (0,
|
|
538
|
+
} = await (0, import_provider_utils5.postJsonToApi)({
|
|
486
539
|
url: this.getUrl(),
|
|
487
|
-
headers: (0,
|
|
540
|
+
headers: (0, import_provider_utils5.combineHeaders)(
|
|
488
541
|
resolvedHeaders,
|
|
489
542
|
options.headers,
|
|
490
543
|
this.getModelConfigHeaders(this.modelId, false),
|
|
491
|
-
await (0,
|
|
544
|
+
await (0, import_provider_utils5.resolve)(this.config.o11yHeaders)
|
|
492
545
|
),
|
|
493
546
|
body: args,
|
|
494
|
-
successfulResponseHandler: (0,
|
|
495
|
-
failedResponseHandler: (0,
|
|
547
|
+
successfulResponseHandler: (0, import_provider_utils5.createJsonResponseHandler)(import_v45.z.any()),
|
|
548
|
+
failedResponseHandler: (0, import_provider_utils5.createJsonErrorResponseHandler)({
|
|
496
549
|
errorSchema: import_v45.z.any(),
|
|
497
550
|
errorToMessage: (data) => data
|
|
498
551
|
}),
|
|
@@ -506,25 +559,25 @@ var GatewayLanguageModel = class {
|
|
|
506
559
|
warnings
|
|
507
560
|
};
|
|
508
561
|
} catch (error) {
|
|
509
|
-
throw asGatewayError(error, parseAuthMethod(resolvedHeaders));
|
|
562
|
+
throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));
|
|
510
563
|
}
|
|
511
564
|
}
|
|
512
565
|
async doStream(options) {
|
|
513
566
|
const { args, warnings } = await this.getArgs(options);
|
|
514
567
|
const { abortSignal } = options;
|
|
515
|
-
const resolvedHeaders = await (0,
|
|
568
|
+
const resolvedHeaders = await (0, import_provider_utils5.resolve)(this.config.headers());
|
|
516
569
|
try {
|
|
517
|
-
const { value: response, responseHeaders } = await (0,
|
|
570
|
+
const { value: response, responseHeaders } = await (0, import_provider_utils5.postJsonToApi)({
|
|
518
571
|
url: this.getUrl(),
|
|
519
|
-
headers: (0,
|
|
572
|
+
headers: (0, import_provider_utils5.combineHeaders)(
|
|
520
573
|
resolvedHeaders,
|
|
521
574
|
options.headers,
|
|
522
575
|
this.getModelConfigHeaders(this.modelId, true),
|
|
523
|
-
await (0,
|
|
576
|
+
await (0, import_provider_utils5.resolve)(this.config.o11yHeaders)
|
|
524
577
|
),
|
|
525
578
|
body: args,
|
|
526
|
-
successfulResponseHandler: (0,
|
|
527
|
-
failedResponseHandler: (0,
|
|
579
|
+
successfulResponseHandler: (0, import_provider_utils5.createEventSourceResponseHandler)(import_v45.z.any()),
|
|
580
|
+
failedResponseHandler: (0, import_provider_utils5.createJsonErrorResponseHandler)({
|
|
528
581
|
errorSchema: import_v45.z.any(),
|
|
529
582
|
errorToMessage: (data) => data
|
|
530
583
|
}),
|
|
@@ -561,7 +614,7 @@ var GatewayLanguageModel = class {
|
|
|
561
614
|
response: { headers: responseHeaders }
|
|
562
615
|
};
|
|
563
616
|
} catch (error) {
|
|
564
|
-
throw asGatewayError(error, parseAuthMethod(resolvedHeaders));
|
|
617
|
+
throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));
|
|
565
618
|
}
|
|
566
619
|
}
|
|
567
620
|
isFilePart(part) {
|
|
@@ -595,7 +648,7 @@ var GatewayLanguageModel = class {
|
|
|
595
648
|
}
|
|
596
649
|
getModelConfigHeaders(modelId, streaming) {
|
|
597
650
|
return {
|
|
598
|
-
"ai-language-model-specification-version": "
|
|
651
|
+
"ai-language-model-specification-version": "3",
|
|
599
652
|
"ai-language-model-id": modelId,
|
|
600
653
|
"ai-language-model-streaming": String(streaming)
|
|
601
654
|
};
|
|
@@ -603,13 +656,13 @@ var GatewayLanguageModel = class {
|
|
|
603
656
|
};
|
|
604
657
|
|
|
605
658
|
// src/gateway-embedding-model.ts
|
|
606
|
-
var
|
|
659
|
+
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
|
607
660
|
var import_v46 = require("zod/v4");
|
|
608
661
|
var GatewayEmbeddingModel = class {
|
|
609
662
|
constructor(modelId, config) {
|
|
610
663
|
this.modelId = modelId;
|
|
611
664
|
this.config = config;
|
|
612
|
-
this.specificationVersion = "
|
|
665
|
+
this.specificationVersion = "v3";
|
|
613
666
|
this.maxEmbeddingsPerCall = 2048;
|
|
614
667
|
this.supportsParallelCalls = true;
|
|
615
668
|
}
|
|
@@ -623,28 +676,28 @@ var GatewayEmbeddingModel = class {
|
|
|
623
676
|
providerOptions
|
|
624
677
|
}) {
|
|
625
678
|
var _a8;
|
|
626
|
-
const resolvedHeaders = await (0,
|
|
679
|
+
const resolvedHeaders = await (0, import_provider_utils6.resolve)(this.config.headers());
|
|
627
680
|
try {
|
|
628
681
|
const {
|
|
629
682
|
responseHeaders,
|
|
630
683
|
value: responseBody,
|
|
631
684
|
rawValue
|
|
632
|
-
} = await (0,
|
|
685
|
+
} = await (0, import_provider_utils6.postJsonToApi)({
|
|
633
686
|
url: this.getUrl(),
|
|
634
|
-
headers: (0,
|
|
687
|
+
headers: (0, import_provider_utils6.combineHeaders)(
|
|
635
688
|
resolvedHeaders,
|
|
636
689
|
headers != null ? headers : {},
|
|
637
690
|
this.getModelConfigHeaders(),
|
|
638
|
-
await (0,
|
|
691
|
+
await (0, import_provider_utils6.resolve)(this.config.o11yHeaders)
|
|
639
692
|
),
|
|
640
693
|
body: {
|
|
641
|
-
|
|
694
|
+
values,
|
|
642
695
|
...providerOptions ? { providerOptions } : {}
|
|
643
696
|
},
|
|
644
|
-
successfulResponseHandler: (0,
|
|
697
|
+
successfulResponseHandler: (0, import_provider_utils6.createJsonResponseHandler)(
|
|
645
698
|
gatewayEmbeddingResponseSchema
|
|
646
699
|
),
|
|
647
|
-
failedResponseHandler: (0,
|
|
700
|
+
failedResponseHandler: (0, import_provider_utils6.createJsonErrorResponseHandler)({
|
|
648
701
|
errorSchema: import_v46.z.any(),
|
|
649
702
|
errorToMessage: (data) => data
|
|
650
703
|
}),
|
|
@@ -655,10 +708,11 @@ var GatewayEmbeddingModel = class {
|
|
|
655
708
|
embeddings: responseBody.embeddings,
|
|
656
709
|
usage: (_a8 = responseBody.usage) != null ? _a8 : void 0,
|
|
657
710
|
providerMetadata: responseBody.providerMetadata,
|
|
658
|
-
response: { headers: responseHeaders, body: rawValue }
|
|
711
|
+
response: { headers: responseHeaders, body: rawValue },
|
|
712
|
+
warnings: []
|
|
659
713
|
};
|
|
660
714
|
} catch (error) {
|
|
661
|
-
throw asGatewayError(error, parseAuthMethod(resolvedHeaders));
|
|
715
|
+
throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));
|
|
662
716
|
}
|
|
663
717
|
}
|
|
664
718
|
getUrl() {
|
|
@@ -666,16 +720,227 @@ var GatewayEmbeddingModel = class {
|
|
|
666
720
|
}
|
|
667
721
|
getModelConfigHeaders() {
|
|
668
722
|
return {
|
|
669
|
-
"ai-embedding-model-specification-version": "
|
|
723
|
+
"ai-embedding-model-specification-version": "3",
|
|
724
|
+
"ai-model-id": this.modelId
|
|
725
|
+
};
|
|
726
|
+
}
|
|
727
|
+
};
|
|
728
|
+
var gatewayEmbeddingResponseSchema = (0, import_provider_utils6.lazySchema)(
|
|
729
|
+
() => (0, import_provider_utils6.zodSchema)(
|
|
730
|
+
import_v46.z.object({
|
|
731
|
+
embeddings: import_v46.z.array(import_v46.z.array(import_v46.z.number())),
|
|
732
|
+
usage: import_v46.z.object({ tokens: import_v46.z.number() }).nullish(),
|
|
733
|
+
providerMetadata: import_v46.z.record(import_v46.z.string(), import_v46.z.record(import_v46.z.string(), import_v46.z.unknown())).optional()
|
|
734
|
+
})
|
|
735
|
+
)
|
|
736
|
+
);
|
|
737
|
+
|
|
738
|
+
// src/gateway-image-model.ts
|
|
739
|
+
var import_provider_utils7 = require("@ai-sdk/provider-utils");
|
|
740
|
+
var import_v47 = require("zod/v4");
|
|
741
|
+
var GatewayImageModel = class {
|
|
742
|
+
constructor(modelId, config) {
|
|
743
|
+
this.modelId = modelId;
|
|
744
|
+
this.config = config;
|
|
745
|
+
this.specificationVersion = "v3";
|
|
746
|
+
// Set a very large number to prevent client-side splitting of requests
|
|
747
|
+
this.maxImagesPerCall = Number.MAX_SAFE_INTEGER;
|
|
748
|
+
}
|
|
749
|
+
get provider() {
|
|
750
|
+
return this.config.provider;
|
|
751
|
+
}
|
|
752
|
+
async doGenerate({
|
|
753
|
+
prompt,
|
|
754
|
+
n,
|
|
755
|
+
size,
|
|
756
|
+
aspectRatio,
|
|
757
|
+
seed,
|
|
758
|
+
files,
|
|
759
|
+
mask,
|
|
760
|
+
providerOptions,
|
|
761
|
+
headers,
|
|
762
|
+
abortSignal
|
|
763
|
+
}) {
|
|
764
|
+
var _a8;
|
|
765
|
+
const resolvedHeaders = await (0, import_provider_utils7.resolve)(this.config.headers());
|
|
766
|
+
try {
|
|
767
|
+
const {
|
|
768
|
+
responseHeaders,
|
|
769
|
+
value: responseBody,
|
|
770
|
+
rawValue
|
|
771
|
+
} = await (0, import_provider_utils7.postJsonToApi)({
|
|
772
|
+
url: this.getUrl(),
|
|
773
|
+
headers: (0, import_provider_utils7.combineHeaders)(
|
|
774
|
+
resolvedHeaders,
|
|
775
|
+
headers != null ? headers : {},
|
|
776
|
+
this.getModelConfigHeaders(),
|
|
777
|
+
await (0, import_provider_utils7.resolve)(this.config.o11yHeaders)
|
|
778
|
+
),
|
|
779
|
+
body: {
|
|
780
|
+
prompt,
|
|
781
|
+
n,
|
|
782
|
+
...size && { size },
|
|
783
|
+
...aspectRatio && { aspectRatio },
|
|
784
|
+
...seed && { seed },
|
|
785
|
+
...providerOptions && { providerOptions },
|
|
786
|
+
...files && {
|
|
787
|
+
files: files.map((file) => maybeEncodeImageFile(file))
|
|
788
|
+
},
|
|
789
|
+
...mask && { mask: maybeEncodeImageFile(mask) }
|
|
790
|
+
},
|
|
791
|
+
successfulResponseHandler: (0, import_provider_utils7.createJsonResponseHandler)(
|
|
792
|
+
gatewayImageResponseSchema
|
|
793
|
+
),
|
|
794
|
+
failedResponseHandler: (0, import_provider_utils7.createJsonErrorResponseHandler)({
|
|
795
|
+
errorSchema: import_v47.z.any(),
|
|
796
|
+
errorToMessage: (data) => data
|
|
797
|
+
}),
|
|
798
|
+
...abortSignal && { abortSignal },
|
|
799
|
+
fetch: this.config.fetch
|
|
800
|
+
});
|
|
801
|
+
return {
|
|
802
|
+
images: responseBody.images,
|
|
803
|
+
// Always base64 strings from server
|
|
804
|
+
warnings: (_a8 = responseBody.warnings) != null ? _a8 : [],
|
|
805
|
+
providerMetadata: responseBody.providerMetadata,
|
|
806
|
+
response: {
|
|
807
|
+
timestamp: /* @__PURE__ */ new Date(),
|
|
808
|
+
modelId: this.modelId,
|
|
809
|
+
headers: responseHeaders
|
|
810
|
+
}
|
|
811
|
+
};
|
|
812
|
+
} catch (error) {
|
|
813
|
+
throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
getUrl() {
|
|
817
|
+
return `${this.config.baseURL}/image-model`;
|
|
818
|
+
}
|
|
819
|
+
getModelConfigHeaders() {
|
|
820
|
+
return {
|
|
821
|
+
"ai-image-model-specification-version": "3",
|
|
670
822
|
"ai-model-id": this.modelId
|
|
671
823
|
};
|
|
672
824
|
}
|
|
673
825
|
};
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
826
|
+
function maybeEncodeImageFile(file) {
|
|
827
|
+
if (file.type === "file" && file.data instanceof Uint8Array) {
|
|
828
|
+
return {
|
|
829
|
+
...file,
|
|
830
|
+
data: (0, import_provider_utils7.convertUint8ArrayToBase64)(file.data)
|
|
831
|
+
};
|
|
832
|
+
}
|
|
833
|
+
return file;
|
|
834
|
+
}
|
|
835
|
+
var providerMetadataEntrySchema = import_v47.z.object({
|
|
836
|
+
images: import_v47.z.array(import_v47.z.unknown()).optional()
|
|
837
|
+
}).catchall(import_v47.z.unknown());
|
|
838
|
+
var gatewayImageResponseSchema = import_v47.z.object({
|
|
839
|
+
images: import_v47.z.array(import_v47.z.string()),
|
|
840
|
+
// Always base64 strings over the wire
|
|
841
|
+
warnings: import_v47.z.array(
|
|
842
|
+
import_v47.z.object({
|
|
843
|
+
type: import_v47.z.literal("other"),
|
|
844
|
+
message: import_v47.z.string()
|
|
845
|
+
})
|
|
846
|
+
).optional(),
|
|
847
|
+
providerMetadata: import_v47.z.record(import_v47.z.string(), providerMetadataEntrySchema).optional()
|
|
848
|
+
});
|
|
849
|
+
|
|
850
|
+
// src/tool/perplexity-search.ts
|
|
851
|
+
var import_provider_utils8 = require("@ai-sdk/provider-utils");
|
|
852
|
+
var import_zod = require("zod");
|
|
853
|
+
var perplexitySearchInputSchema = (0, import_provider_utils8.lazySchema)(
|
|
854
|
+
() => (0, import_provider_utils8.zodSchema)(
|
|
855
|
+
import_zod.z.object({
|
|
856
|
+
query: import_zod.z.union([import_zod.z.string(), import_zod.z.array(import_zod.z.string())]).describe(
|
|
857
|
+
"Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries."
|
|
858
|
+
),
|
|
859
|
+
max_results: import_zod.z.number().optional().describe(
|
|
860
|
+
"Maximum number of search results to return (1-20, default: 10)"
|
|
861
|
+
),
|
|
862
|
+
max_tokens_per_page: import_zod.z.number().optional().describe(
|
|
863
|
+
"Maximum number of tokens to extract per search result page (256-2048, default: 2048)"
|
|
864
|
+
),
|
|
865
|
+
max_tokens: import_zod.z.number().optional().describe(
|
|
866
|
+
"Maximum total tokens across all search results (default: 25000, max: 1000000)"
|
|
867
|
+
),
|
|
868
|
+
country: import_zod.z.string().optional().describe(
|
|
869
|
+
"Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')"
|
|
870
|
+
),
|
|
871
|
+
search_domain_filter: import_zod.z.array(import_zod.z.string()).optional().describe(
|
|
872
|
+
"List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']"
|
|
873
|
+
),
|
|
874
|
+
search_language_filter: import_zod.z.array(import_zod.z.string()).optional().describe(
|
|
875
|
+
"List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']"
|
|
876
|
+
),
|
|
877
|
+
search_after_date: import_zod.z.string().optional().describe(
|
|
878
|
+
"Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter."
|
|
879
|
+
),
|
|
880
|
+
search_before_date: import_zod.z.string().optional().describe(
|
|
881
|
+
"Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter."
|
|
882
|
+
),
|
|
883
|
+
last_updated_after_filter: import_zod.z.string().optional().describe(
|
|
884
|
+
"Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter."
|
|
885
|
+
),
|
|
886
|
+
last_updated_before_filter: import_zod.z.string().optional().describe(
|
|
887
|
+
"Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter."
|
|
888
|
+
),
|
|
889
|
+
search_recency_filter: import_zod.z.enum(["day", "week", "month", "year"]).optional().describe(
|
|
890
|
+
"Filter results by relative time period. Cannot be used with search_after_date or search_before_date."
|
|
891
|
+
)
|
|
892
|
+
})
|
|
893
|
+
)
|
|
894
|
+
);
|
|
895
|
+
var perplexitySearchOutputSchema = (0, import_provider_utils8.lazySchema)(
|
|
896
|
+
() => (0, import_provider_utils8.zodSchema)(
|
|
897
|
+
import_zod.z.union([
|
|
898
|
+
// Success response
|
|
899
|
+
import_zod.z.object({
|
|
900
|
+
results: import_zod.z.array(
|
|
901
|
+
import_zod.z.object({
|
|
902
|
+
title: import_zod.z.string(),
|
|
903
|
+
url: import_zod.z.string(),
|
|
904
|
+
snippet: import_zod.z.string(),
|
|
905
|
+
date: import_zod.z.string().optional(),
|
|
906
|
+
lastUpdated: import_zod.z.string().optional()
|
|
907
|
+
})
|
|
908
|
+
),
|
|
909
|
+
id: import_zod.z.string()
|
|
910
|
+
}),
|
|
911
|
+
// Error response
|
|
912
|
+
import_zod.z.object({
|
|
913
|
+
error: import_zod.z.enum([
|
|
914
|
+
"api_error",
|
|
915
|
+
"rate_limit",
|
|
916
|
+
"timeout",
|
|
917
|
+
"invalid_input",
|
|
918
|
+
"unknown"
|
|
919
|
+
]),
|
|
920
|
+
statusCode: import_zod.z.number().optional(),
|
|
921
|
+
message: import_zod.z.string()
|
|
922
|
+
})
|
|
923
|
+
])
|
|
924
|
+
)
|
|
925
|
+
);
|
|
926
|
+
var perplexitySearchToolFactory = (0, import_provider_utils8.createProviderToolFactoryWithOutputSchema)({
|
|
927
|
+
id: "gateway.perplexity_search",
|
|
928
|
+
inputSchema: perplexitySearchInputSchema,
|
|
929
|
+
outputSchema: perplexitySearchOutputSchema
|
|
678
930
|
});
|
|
931
|
+
var perplexitySearch = (config = {}) => perplexitySearchToolFactory(config);
|
|
932
|
+
|
|
933
|
+
// src/gateway-tools.ts
|
|
934
|
+
var gatewayTools = {
|
|
935
|
+
/**
|
|
936
|
+
* Search the web using Perplexity's Search API for real-time information,
|
|
937
|
+
* news, research papers, and articles.
|
|
938
|
+
*
|
|
939
|
+
* Provides ranked search results with advanced filtering options including
|
|
940
|
+
* domain, language, date range, and recency filters.
|
|
941
|
+
*/
|
|
942
|
+
perplexitySearch
|
|
943
|
+
};
|
|
679
944
|
|
|
680
945
|
// src/vercel-environment.ts
|
|
681
946
|
var import_oidc = require("@vercel/oidc");
|
|
@@ -686,10 +951,10 @@ async function getVercelRequestId() {
|
|
|
686
951
|
}
|
|
687
952
|
|
|
688
953
|
// src/gateway-provider.ts
|
|
689
|
-
var
|
|
954
|
+
var import_provider_utils10 = require("@ai-sdk/provider-utils");
|
|
690
955
|
|
|
691
956
|
// src/version.ts
|
|
692
|
-
var VERSION = true ? "0.0.0-
|
|
957
|
+
var VERSION = true ? "0.0.0-4115c213-20260122152721" : "0.0.0-test";
|
|
693
958
|
|
|
694
959
|
// src/gateway-provider.ts
|
|
695
960
|
var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
|
|
@@ -699,11 +964,11 @@ function createGatewayProvider(options = {}) {
|
|
|
699
964
|
let metadataCache = null;
|
|
700
965
|
const cacheRefreshMillis = (_a8 = options.metadataCacheRefreshMillis) != null ? _a8 : 1e3 * 60 * 5;
|
|
701
966
|
let lastFetchTime = 0;
|
|
702
|
-
const baseURL = (_b8 = (0,
|
|
967
|
+
const baseURL = (_b8 = (0, import_provider_utils9.withoutTrailingSlash)(options.baseURL)) != null ? _b8 : "https://ai-gateway.vercel.sh/v3/ai";
|
|
703
968
|
const getHeaders = async () => {
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
return (0,
|
|
969
|
+
try {
|
|
970
|
+
const auth = await getGatewayAuthToken(options);
|
|
971
|
+
return (0, import_provider_utils10.withUserAgentSuffix)(
|
|
707
972
|
{
|
|
708
973
|
Authorization: `Bearer ${auth.token}`,
|
|
709
974
|
"ai-gateway-protocol-version": AI_GATEWAY_PROTOCOL_VERSION,
|
|
@@ -712,23 +977,25 @@ function createGatewayProvider(options = {}) {
|
|
|
712
977
|
},
|
|
713
978
|
`ai-sdk/gateway/${VERSION}`
|
|
714
979
|
);
|
|
980
|
+
} catch (error) {
|
|
981
|
+
throw GatewayAuthenticationError.createContextualError({
|
|
982
|
+
apiKeyProvided: false,
|
|
983
|
+
oidcTokenProvided: false,
|
|
984
|
+
statusCode: 401,
|
|
985
|
+
cause: error
|
|
986
|
+
});
|
|
715
987
|
}
|
|
716
|
-
throw GatewayAuthenticationError.createContextualError({
|
|
717
|
-
apiKeyProvided: false,
|
|
718
|
-
oidcTokenProvided: false,
|
|
719
|
-
statusCode: 401
|
|
720
|
-
});
|
|
721
988
|
};
|
|
722
989
|
const createO11yHeaders = () => {
|
|
723
|
-
const deploymentId = (0,
|
|
990
|
+
const deploymentId = (0, import_provider_utils9.loadOptionalSetting)({
|
|
724
991
|
settingValue: void 0,
|
|
725
992
|
environmentVariableName: "VERCEL_DEPLOYMENT_ID"
|
|
726
993
|
});
|
|
727
|
-
const environment = (0,
|
|
994
|
+
const environment = (0, import_provider_utils9.loadOptionalSetting)({
|
|
728
995
|
settingValue: void 0,
|
|
729
996
|
environmentVariableName: "VERCEL_ENV"
|
|
730
997
|
});
|
|
731
|
-
const region = (0,
|
|
998
|
+
const region = (0, import_provider_utils9.loadOptionalSetting)({
|
|
732
999
|
settingValue: void 0,
|
|
733
1000
|
environmentVariableName: "VERCEL_REGION"
|
|
734
1001
|
});
|
|
@@ -764,7 +1031,10 @@ function createGatewayProvider(options = {}) {
|
|
|
764
1031
|
metadataCache = metadata;
|
|
765
1032
|
return metadata;
|
|
766
1033
|
}).catch(async (error) => {
|
|
767
|
-
throw
|
|
1034
|
+
throw await asGatewayError(
|
|
1035
|
+
error,
|
|
1036
|
+
await parseAuthMethod(await getHeaders())
|
|
1037
|
+
);
|
|
768
1038
|
});
|
|
769
1039
|
}
|
|
770
1040
|
return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;
|
|
@@ -775,7 +1045,10 @@ function createGatewayProvider(options = {}) {
|
|
|
775
1045
|
headers: getHeaders,
|
|
776
1046
|
fetch: options.fetch
|
|
777
1047
|
}).getCredits().catch(async (error) => {
|
|
778
|
-
throw
|
|
1048
|
+
throw await asGatewayError(
|
|
1049
|
+
error,
|
|
1050
|
+
await parseAuthMethod(await getHeaders())
|
|
1051
|
+
);
|
|
779
1052
|
});
|
|
780
1053
|
};
|
|
781
1054
|
const provider = function(modelId) {
|
|
@@ -786,13 +1059,20 @@ function createGatewayProvider(options = {}) {
|
|
|
786
1059
|
}
|
|
787
1060
|
return createLanguageModel(modelId);
|
|
788
1061
|
};
|
|
1062
|
+
provider.specificationVersion = "v3";
|
|
789
1063
|
provider.getAvailableModels = getAvailableModels;
|
|
790
1064
|
provider.getCredits = getCredits;
|
|
791
1065
|
provider.imageModel = (modelId) => {
|
|
792
|
-
|
|
1066
|
+
return new GatewayImageModel(modelId, {
|
|
1067
|
+
provider: "gateway",
|
|
1068
|
+
baseURL,
|
|
1069
|
+
headers: getHeaders,
|
|
1070
|
+
fetch: options.fetch,
|
|
1071
|
+
o11yHeaders: createO11yHeaders()
|
|
1072
|
+
});
|
|
793
1073
|
};
|
|
794
1074
|
provider.languageModel = createLanguageModel;
|
|
795
|
-
|
|
1075
|
+
const createEmbeddingModel = (modelId) => {
|
|
796
1076
|
return new GatewayEmbeddingModel(modelId, {
|
|
797
1077
|
provider: "gateway",
|
|
798
1078
|
baseURL,
|
|
@@ -801,11 +1081,14 @@ function createGatewayProvider(options = {}) {
|
|
|
801
1081
|
o11yHeaders: createO11yHeaders()
|
|
802
1082
|
});
|
|
803
1083
|
};
|
|
1084
|
+
provider.embeddingModel = createEmbeddingModel;
|
|
1085
|
+
provider.textEmbeddingModel = createEmbeddingModel;
|
|
1086
|
+
provider.tools = gatewayTools;
|
|
804
1087
|
return provider;
|
|
805
1088
|
}
|
|
806
1089
|
var gateway = createGatewayProvider();
|
|
807
1090
|
async function getGatewayAuthToken(options) {
|
|
808
|
-
const apiKey = (0,
|
|
1091
|
+
const apiKey = (0, import_provider_utils9.loadOptionalSetting)({
|
|
809
1092
|
settingValue: options.apiKey,
|
|
810
1093
|
environmentVariableName: "AI_GATEWAY_API_KEY"
|
|
811
1094
|
});
|
|
@@ -815,15 +1098,11 @@ async function getGatewayAuthToken(options) {
|
|
|
815
1098
|
authMethod: "api-key"
|
|
816
1099
|
};
|
|
817
1100
|
}
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
};
|
|
824
|
-
} catch (e) {
|
|
825
|
-
return null;
|
|
826
|
-
}
|
|
1101
|
+
const oidcToken = await (0, import_oidc2.getVercelOidcToken)();
|
|
1102
|
+
return {
|
|
1103
|
+
token: oidcToken,
|
|
1104
|
+
authMethod: "oidc"
|
|
1105
|
+
};
|
|
827
1106
|
}
|
|
828
1107
|
// Annotate the CommonJS export names for ESM import in node:
|
|
829
1108
|
0 && (module.exports = {
|