@ai-sdk/gateway 1.0.0-alpha.10

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/dist/index.mjs ADDED
@@ -0,0 +1,581 @@
1
+ // src/gateway-provider.ts
2
+ import { NoSuchModelError } from "@ai-sdk/provider";
3
+ import {
4
+ loadOptionalSetting,
5
+ withoutTrailingSlash
6
+ } from "@ai-sdk/provider-utils";
7
+
8
+ // src/errors/as-gateway-error.ts
9
+ import { APICallError } from "@ai-sdk/provider";
10
+
11
+ // src/errors/create-gateway-error.ts
12
+ import { z as z2 } from "zod";
13
+
14
+ // src/errors/gateway-error.ts
15
+ var marker = "vercel.ai.gateway.error";
16
+ var symbol = Symbol.for(marker);
17
+ var _a, _b;
18
+ var GatewayError = class _GatewayError extends (_b = Error, _a = symbol, _b) {
19
+ constructor({
20
+ message,
21
+ statusCode = 500,
22
+ cause
23
+ }) {
24
+ super(message);
25
+ this[_a] = true;
26
+ this.statusCode = statusCode;
27
+ this.cause = cause;
28
+ }
29
+ /**
30
+ * Checks if the given error is a Gateway Error.
31
+ * @param {unknown} error - The error to check.
32
+ * @returns {boolean} True if the error is a Gateway Error, false otherwise.
33
+ */
34
+ static isInstance(error) {
35
+ return _GatewayError.hasMarker(error);
36
+ }
37
+ static hasMarker(error) {
38
+ return typeof error === "object" && error !== null && symbol in error && error[symbol] === true;
39
+ }
40
+ };
41
+
42
+ // src/errors/gateway-authentication-error.ts
43
+ var name = "GatewayAuthenticationError";
44
+ var marker2 = `vercel.ai.gateway.error.${name}`;
45
+ var symbol2 = Symbol.for(marker2);
46
+ var _a2, _b2;
47
+ var GatewayAuthenticationError = class extends (_b2 = GatewayError, _a2 = symbol2, _b2) {
48
+ constructor({
49
+ message = "Authentication failed",
50
+ statusCode = 401,
51
+ cause
52
+ } = {}) {
53
+ super({ message, statusCode, cause });
54
+ this[_a2] = true;
55
+ // used in isInstance
56
+ this.name = name;
57
+ this.type = "authentication_error";
58
+ }
59
+ static isInstance(error) {
60
+ return GatewayError.hasMarker(error) && symbol2 in error;
61
+ }
62
+ };
63
+
64
+ // src/errors/gateway-invalid-request-error.ts
65
+ var name2 = "GatewayInvalidRequestError";
66
+ var marker3 = `vercel.ai.gateway.error.${name2}`;
67
+ var symbol3 = Symbol.for(marker3);
68
+ var _a3, _b3;
69
+ var GatewayInvalidRequestError = class extends (_b3 = GatewayError, _a3 = symbol3, _b3) {
70
+ constructor({
71
+ message = "Invalid request",
72
+ statusCode = 400,
73
+ cause
74
+ } = {}) {
75
+ super({ message, statusCode, cause });
76
+ this[_a3] = true;
77
+ // used in isInstance
78
+ this.name = name2;
79
+ this.type = "invalid_request_error";
80
+ }
81
+ static isInstance(error) {
82
+ return GatewayError.hasMarker(error) && symbol3 in error;
83
+ }
84
+ };
85
+
86
+ // src/errors/gateway-rate-limit-error.ts
87
+ var name3 = "GatewayRateLimitError";
88
+ var marker4 = `vercel.ai.gateway.error.${name3}`;
89
+ var symbol4 = Symbol.for(marker4);
90
+ var _a4, _b4;
91
+ var GatewayRateLimitError = class extends (_b4 = GatewayError, _a4 = symbol4, _b4) {
92
+ constructor({
93
+ message = "Rate limit exceeded",
94
+ statusCode = 429,
95
+ cause
96
+ } = {}) {
97
+ super({ message, statusCode, cause });
98
+ this[_a4] = true;
99
+ // used in isInstance
100
+ this.name = name3;
101
+ this.type = "rate_limit_exceeded";
102
+ }
103
+ static isInstance(error) {
104
+ return GatewayError.hasMarker(error) && symbol4 in error;
105
+ }
106
+ };
107
+
108
+ // src/errors/gateway-model-not-found-error.ts
109
+ import { z } from "zod";
110
+ var name4 = "GatewayModelNotFoundError";
111
+ var marker5 = `vercel.ai.gateway.error.${name4}`;
112
+ var symbol5 = Symbol.for(marker5);
113
+ var modelNotFoundParamSchema = z.object({
114
+ modelId: z.string()
115
+ });
116
+ var _a5, _b5;
117
+ var GatewayModelNotFoundError = class extends (_b5 = GatewayError, _a5 = symbol5, _b5) {
118
+ constructor({
119
+ message = "Model not found",
120
+ statusCode = 404,
121
+ modelId,
122
+ cause
123
+ } = {}) {
124
+ super({ message, statusCode, cause });
125
+ this[_a5] = true;
126
+ // used in isInstance
127
+ this.name = name4;
128
+ this.type = "model_not_found";
129
+ this.modelId = modelId;
130
+ }
131
+ static isInstance(error) {
132
+ return GatewayError.hasMarker(error) && symbol5 in error;
133
+ }
134
+ };
135
+
136
+ // src/errors/gateway-internal-server-error.ts
137
+ var name5 = "GatewayInternalServerError";
138
+ var marker6 = `vercel.ai.gateway.error.${name5}`;
139
+ var symbol6 = Symbol.for(marker6);
140
+ var _a6, _b6;
141
+ var GatewayInternalServerError = class extends (_b6 = GatewayError, _a6 = symbol6, _b6) {
142
+ constructor({
143
+ message = "Internal server error",
144
+ statusCode = 500,
145
+ cause
146
+ } = {}) {
147
+ super({ message, statusCode, cause });
148
+ this[_a6] = true;
149
+ // used in isInstance
150
+ this.name = name5;
151
+ this.type = "internal_server_error";
152
+ }
153
+ static isInstance(error) {
154
+ return GatewayError.hasMarker(error) && symbol6 in error;
155
+ }
156
+ };
157
+
158
+ // src/errors/gateway-response-error.ts
159
+ var name6 = "GatewayResponseError";
160
+ var marker7 = `vercel.ai.gateway.error.${name6}`;
161
+ var symbol7 = Symbol.for(marker7);
162
+ var _a7, _b7;
163
+ var GatewayResponseError = class extends (_b7 = GatewayError, _a7 = symbol7, _b7) {
164
+ constructor({
165
+ message = "Invalid response from Gateway",
166
+ statusCode = 502,
167
+ response,
168
+ validationError,
169
+ cause
170
+ } = {}) {
171
+ super({ message, statusCode, cause });
172
+ this[_a7] = true;
173
+ // used in isInstance
174
+ this.name = name6;
175
+ this.type = "response_error";
176
+ this.response = response;
177
+ this.validationError = validationError;
178
+ }
179
+ static isInstance(error) {
180
+ return GatewayError.hasMarker(error) && symbol7 in error;
181
+ }
182
+ };
183
+
184
+ // src/errors/create-gateway-error.ts
185
+ function createGatewayErrorFromResponse({
186
+ response,
187
+ statusCode,
188
+ defaultMessage = "Gateway request failed",
189
+ cause
190
+ }) {
191
+ const parseResult = gatewayErrorResponseSchema.safeParse(response);
192
+ if (!parseResult.success) {
193
+ return new GatewayResponseError({
194
+ message: `Invalid error response format: ${defaultMessage}`,
195
+ statusCode,
196
+ response,
197
+ validationError: parseResult.error,
198
+ cause
199
+ });
200
+ }
201
+ const validatedResponse = parseResult.data;
202
+ const errorType = validatedResponse.error.type;
203
+ const message = validatedResponse.error.message;
204
+ switch (errorType) {
205
+ case "authentication_error":
206
+ return new GatewayAuthenticationError({ message, statusCode, cause });
207
+ case "invalid_request_error":
208
+ return new GatewayInvalidRequestError({ message, statusCode, cause });
209
+ case "rate_limit_exceeded":
210
+ return new GatewayRateLimitError({ message, statusCode, cause });
211
+ case "model_not_found": {
212
+ const modelResult = modelNotFoundParamSchema.safeParse(
213
+ validatedResponse.error.param
214
+ );
215
+ return new GatewayModelNotFoundError({
216
+ message,
217
+ statusCode,
218
+ modelId: modelResult.success ? modelResult.data.modelId : void 0,
219
+ cause
220
+ });
221
+ }
222
+ case "internal_server_error":
223
+ return new GatewayInternalServerError({ message, statusCode, cause });
224
+ default:
225
+ return new GatewayInternalServerError({ message, statusCode, cause });
226
+ }
227
+ }
228
+ var gatewayErrorResponseSchema = z2.object({
229
+ error: z2.object({
230
+ message: z2.string(),
231
+ type: z2.string().nullish(),
232
+ param: z2.unknown().nullish(),
233
+ code: z2.union([z2.string(), z2.number()]).nullish()
234
+ })
235
+ });
236
+
237
+ // src/errors/as-gateway-error.ts
238
+ function asGatewayError(error) {
239
+ var _a8;
240
+ if (GatewayError.isInstance(error)) {
241
+ return error;
242
+ }
243
+ if (APICallError.isInstance(error)) {
244
+ return createGatewayErrorFromResponse({
245
+ response: extractApiCallResponse(error),
246
+ statusCode: (_a8 = error.statusCode) != null ? _a8 : 500,
247
+ defaultMessage: "Gateway request failed",
248
+ cause: error
249
+ });
250
+ }
251
+ return createGatewayErrorFromResponse({
252
+ response: {},
253
+ statusCode: 500,
254
+ defaultMessage: error instanceof Error ? `Gateway request failed: ${error.message}` : "Unknown Gateway error",
255
+ cause: error
256
+ });
257
+ }
258
+
259
+ // src/errors/extract-api-call-response.ts
260
+ function extractApiCallResponse(error) {
261
+ if (error.data !== void 0) {
262
+ return error.data;
263
+ }
264
+ if (error.responseBody != null) {
265
+ try {
266
+ return JSON.parse(error.responseBody);
267
+ } catch (e) {
268
+ return error.responseBody;
269
+ }
270
+ }
271
+ return {};
272
+ }
273
+
274
+ // src/gateway-fetch-metadata.ts
275
+ import {
276
+ createJsonErrorResponseHandler,
277
+ createJsonResponseHandler,
278
+ getFromApi,
279
+ resolve
280
+ } from "@ai-sdk/provider-utils";
281
+ import { z as z3 } from "zod";
282
+ var GatewayFetchMetadata = class {
283
+ constructor(config) {
284
+ this.config = config;
285
+ }
286
+ async getAvailableModels() {
287
+ try {
288
+ const { value } = await getFromApi({
289
+ url: `${this.config.baseURL}/config`,
290
+ headers: await resolve(this.config.headers()),
291
+ successfulResponseHandler: createJsonResponseHandler(
292
+ gatewayFetchMetadataSchema
293
+ ),
294
+ failedResponseHandler: createJsonErrorResponseHandler({
295
+ errorSchema: z3.any(),
296
+ errorToMessage: (data) => data
297
+ }),
298
+ fetch: this.config.fetch
299
+ });
300
+ return value;
301
+ } catch (error) {
302
+ throw asGatewayError(error);
303
+ }
304
+ }
305
+ };
306
+ var gatewayLanguageModelSpecificationSchema = z3.object({
307
+ specificationVersion: z3.literal("v2"),
308
+ provider: z3.string(),
309
+ modelId: z3.string()
310
+ });
311
+ var gatewayLanguageModelEntrySchema = z3.object({
312
+ id: z3.string(),
313
+ name: z3.string(),
314
+ specification: gatewayLanguageModelSpecificationSchema
315
+ });
316
+ var gatewayFetchMetadataSchema = z3.object({
317
+ models: z3.array(gatewayLanguageModelEntrySchema)
318
+ });
319
+
320
+ // src/gateway-language-model.ts
321
+ import {
322
+ combineHeaders,
323
+ createEventSourceResponseHandler,
324
+ createJsonErrorResponseHandler as createJsonErrorResponseHandler2,
325
+ createJsonResponseHandler as createJsonResponseHandler2,
326
+ postJsonToApi,
327
+ resolve as resolve2
328
+ } from "@ai-sdk/provider-utils";
329
+ import { z as z4 } from "zod";
330
+ var GatewayLanguageModel = class {
331
+ constructor(modelId, config) {
332
+ this.modelId = modelId;
333
+ this.config = config;
334
+ this.specificationVersion = "v2";
335
+ this.supportedUrls = { "*/*": [/.*/] };
336
+ }
337
+ get provider() {
338
+ return this.config.provider;
339
+ }
340
+ async doGenerate(options) {
341
+ const { abortSignal, ...body } = options;
342
+ try {
343
+ const {
344
+ responseHeaders,
345
+ value: responseBody,
346
+ rawValue: rawResponse
347
+ } = await postJsonToApi({
348
+ url: this.getUrl(),
349
+ headers: combineHeaders(
350
+ await resolve2(this.config.headers()),
351
+ options.headers,
352
+ this.getModelConfigHeaders(this.modelId, false),
353
+ await resolve2(this.config.o11yHeaders)
354
+ ),
355
+ body: this.maybeEncodeFileParts(body),
356
+ successfulResponseHandler: createJsonResponseHandler2(z4.any()),
357
+ failedResponseHandler: createJsonErrorResponseHandler2({
358
+ errorSchema: z4.any(),
359
+ errorToMessage: (data) => data
360
+ }),
361
+ ...abortSignal && { abortSignal },
362
+ fetch: this.config.fetch
363
+ });
364
+ return {
365
+ ...responseBody,
366
+ request: { body },
367
+ response: { headers: responseHeaders, body: rawResponse },
368
+ warnings: []
369
+ };
370
+ } catch (error) {
371
+ throw asGatewayError(error);
372
+ }
373
+ }
374
+ async doStream(options) {
375
+ const { abortSignal, ...body } = options;
376
+ try {
377
+ const { value: response, responseHeaders } = await postJsonToApi({
378
+ url: this.getUrl(),
379
+ headers: combineHeaders(
380
+ await resolve2(this.config.headers()),
381
+ options.headers,
382
+ this.getModelConfigHeaders(this.modelId, true),
383
+ await resolve2(this.config.o11yHeaders)
384
+ ),
385
+ body: this.maybeEncodeFileParts(body),
386
+ successfulResponseHandler: createEventSourceResponseHandler(z4.any()),
387
+ failedResponseHandler: createJsonErrorResponseHandler2({
388
+ errorSchema: z4.any(),
389
+ errorToMessage: (data) => data
390
+ }),
391
+ ...abortSignal && { abortSignal },
392
+ fetch: this.config.fetch
393
+ });
394
+ return {
395
+ stream: response.pipeThrough(
396
+ new TransformStream({
397
+ transform(chunk, controller) {
398
+ if (chunk.success) {
399
+ controller.enqueue(chunk.value);
400
+ } else {
401
+ controller.error(
402
+ chunk.error
403
+ );
404
+ }
405
+ }
406
+ })
407
+ ),
408
+ request: { body },
409
+ response: { headers: responseHeaders }
410
+ };
411
+ } catch (error) {
412
+ throw asGatewayError(error);
413
+ }
414
+ }
415
+ isFilePart(part) {
416
+ return part && typeof part === "object" && "type" in part && part.type === "file";
417
+ }
418
+ /**
419
+ * Encodes image parts in the prompt to base64. Mutates the passed options
420
+ * instance directly to avoid copying the image data.
421
+ * @param options - The options to encode.
422
+ * @returns The options with the image parts encoded.
423
+ */
424
+ maybeEncodeFileParts(options) {
425
+ for (const message of options.prompt) {
426
+ for (const part of message.content) {
427
+ if (this.isFilePart(part)) {
428
+ const filePart = part;
429
+ if (filePart.data instanceof Uint8Array) {
430
+ const buffer = Uint8Array.from(filePart.data);
431
+ const base64Data = Buffer.from(buffer).toString("base64");
432
+ filePart.data = new URL(
433
+ `data:${filePart.mediaType || "application/octet-stream"};base64,${base64Data}`
434
+ );
435
+ }
436
+ }
437
+ }
438
+ }
439
+ return options;
440
+ }
441
+ getUrl() {
442
+ return `${this.config.baseURL}/language-model`;
443
+ }
444
+ getModelConfigHeaders(modelId, streaming) {
445
+ return {
446
+ "ai-language-model-specification-version": "2",
447
+ "ai-language-model-id": modelId,
448
+ "ai-language-model-streaming": String(streaming)
449
+ };
450
+ }
451
+ };
452
+
453
+ // src/vercel-environment.ts
454
+ async function getVercelOidcToken() {
455
+ var _a8, _b8;
456
+ const token = (_b8 = (_a8 = getContext().headers) == null ? void 0 : _a8["x-vercel-oidc-token"]) != null ? _b8 : process.env.VERCEL_OIDC_TOKEN;
457
+ if (!token) {
458
+ throw new GatewayAuthenticationError({
459
+ message: `Failed to get Vercel OIDC token for AI Gateway access.
460
+ The token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.
461
+ - make sure your Vercel project settings have OIDC enabled
462
+ - if you're running locally with 'vercel dev' the token is automatically obtained and refreshed for you
463
+ - if you're running locally with your own dev server script you can fetch/update the token by running 'vercel env pull'
464
+ - in production or preview the token is automatically obtained and refreshed for you`,
465
+ statusCode: 401
466
+ });
467
+ }
468
+ return token;
469
+ }
470
+ async function getVercelRequestId() {
471
+ var _a8;
472
+ return (_a8 = getContext().headers) == null ? void 0 : _a8["x-vercel-id"];
473
+ }
474
+ var SYMBOL_FOR_REQ_CONTEXT = Symbol.for("@vercel/request-context");
475
+ function getContext() {
476
+ var _a8, _b8, _c;
477
+ const fromSymbol = globalThis;
478
+ return (_c = (_b8 = (_a8 = fromSymbol[SYMBOL_FOR_REQ_CONTEXT]) == null ? void 0 : _a8.get) == null ? void 0 : _b8.call(_a8)) != null ? _c : {};
479
+ }
480
+
481
+ // src/gateway-provider.ts
482
+ var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
483
+ async function getGatewayAuthToken(options) {
484
+ var _a8;
485
+ return (_a8 = loadOptionalSetting({
486
+ settingValue: options.apiKey,
487
+ environmentVariableName: "AI_GATEWAY_API_KEY"
488
+ })) != null ? _a8 : await getVercelOidcToken();
489
+ }
490
+ function createGatewayProvider(options = {}) {
491
+ var _a8, _b8;
492
+ let pendingMetadata = null;
493
+ let metadataCache = null;
494
+ const cacheRefreshMillis = (_a8 = options.metadataCacheRefreshMillis) != null ? _a8 : 1e3 * 60 * 5;
495
+ let lastFetchTime = 0;
496
+ const baseURL = (_b8 = withoutTrailingSlash(options.baseURL)) != null ? _b8 : "https://ai-gateway.vercel.sh/v1/ai";
497
+ const getHeaders = async () => {
498
+ return {
499
+ Authorization: `Bearer ${await getGatewayAuthToken(options)}`,
500
+ "ai-gateway-protocol-version": AI_GATEWAY_PROTOCOL_VERSION,
501
+ ...options.headers
502
+ };
503
+ };
504
+ const createLanguageModel = (modelId) => {
505
+ const deploymentId = loadOptionalSetting({
506
+ settingValue: void 0,
507
+ environmentVariableName: "VERCEL_DEPLOYMENT_ID"
508
+ });
509
+ const environment = loadOptionalSetting({
510
+ settingValue: void 0,
511
+ environmentVariableName: "VERCEL_ENV"
512
+ });
513
+ const region = loadOptionalSetting({
514
+ settingValue: void 0,
515
+ environmentVariableName: "VERCEL_REGION"
516
+ });
517
+ return new GatewayLanguageModel(modelId, {
518
+ provider: "gateway",
519
+ baseURL,
520
+ headers: getHeaders,
521
+ fetch: options.fetch,
522
+ o11yHeaders: async () => {
523
+ const requestId = await getVercelRequestId();
524
+ return {
525
+ ...deploymentId && { "ai-o11y-deployment-id": deploymentId },
526
+ ...environment && { "ai-o11y-environment": environment },
527
+ ...region && { "ai-o11y-region": region },
528
+ ...requestId && { "ai-o11y-request-id": requestId }
529
+ };
530
+ }
531
+ });
532
+ };
533
+ const getAvailableModels = async () => {
534
+ var _a9, _b9, _c;
535
+ const now = (_c = (_b9 = (_a9 = options._internal) == null ? void 0 : _a9.currentDate) == null ? void 0 : _b9.call(_a9).getTime()) != null ? _c : Date.now();
536
+ if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {
537
+ lastFetchTime = now;
538
+ pendingMetadata = new GatewayFetchMetadata({
539
+ baseURL,
540
+ headers: getHeaders,
541
+ fetch: options.fetch
542
+ }).getAvailableModels().then((metadata) => {
543
+ metadataCache = metadata;
544
+ return metadata;
545
+ }).catch((error) => {
546
+ throw asGatewayError(error);
547
+ });
548
+ }
549
+ return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;
550
+ };
551
+ const provider = function(modelId) {
552
+ if (new.target) {
553
+ throw new Error(
554
+ "The Gateway Provider model function cannot be called with the new keyword."
555
+ );
556
+ }
557
+ return createLanguageModel(modelId);
558
+ };
559
+ provider.getAvailableModels = getAvailableModels;
560
+ provider.imageModel = (modelId) => {
561
+ throw new NoSuchModelError({ modelId, modelType: "imageModel" });
562
+ };
563
+ provider.languageModel = createLanguageModel;
564
+ provider.textEmbeddingModel = (modelId) => {
565
+ throw new NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
566
+ };
567
+ return provider;
568
+ }
569
+ var gateway = createGatewayProvider();
570
+ export {
571
+ GatewayAuthenticationError,
572
+ GatewayError,
573
+ GatewayInternalServerError,
574
+ GatewayInvalidRequestError,
575
+ GatewayModelNotFoundError,
576
+ GatewayRateLimitError,
577
+ GatewayResponseError,
578
+ createGatewayProvider,
579
+ gateway
580
+ };
581
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gateway-provider.ts","../src/errors/as-gateway-error.ts","../src/errors/create-gateway-error.ts","../src/errors/gateway-error.ts","../src/errors/gateway-authentication-error.ts","../src/errors/gateway-invalid-request-error.ts","../src/errors/gateway-rate-limit-error.ts","../src/errors/gateway-model-not-found-error.ts","../src/errors/gateway-internal-server-error.ts","../src/errors/gateway-response-error.ts","../src/errors/extract-api-call-response.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/vercel-environment.ts"],"sourcesContent":["import type { LanguageModelV2, ProviderV2 } from '@ai-sdk/provider';\nimport { NoSuchModelError } from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { type FetchFunction } from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\n\nexport interface GatewayProvider extends ProviderV2 {\n (modelId: GatewayModelId): LanguageModelV2;\n\n /**\nCreates a model for text generation.\n*/\n languageModel(modelId: GatewayModelId): LanguageModelV2;\n\n /**\nReturns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n}\n\nexport interface GatewayProviderSettings {\n /**\nThe base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\nAPI key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\nHow frequently to refresh the metadata cache in milliseconds.\n */\n metadataCacheRefreshMillis?: number;\n\n /**\n * @internal For testing purposes only\n */\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\nexport async function getGatewayAuthToken(options: GatewayProviderSettings) {\n return (\n loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n }) ?? (await getVercelOidcToken())\n );\n}\n\n/**\nCreate a remote provider instance.\n */\nexport function createGatewayProvider(\n options: GatewayProviderSettings = {},\n): GatewayProvider {\n let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n let metadataCache: GatewayFetchMetadataResponse | null = null;\n const cacheRefreshMillis =\n options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n let lastFetchTime = 0;\n\n const baseURL =\n withoutTrailingSlash(options.baseURL) ??\n 'https://ai-gateway.vercel.sh/v1/ai';\n\n const getHeaders = async () => {\n return {\n Authorization: `Bearer ${await getGatewayAuthToken(options)}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n ...options.headers,\n };\n };\n\n const createLanguageModel = (modelId: GatewayModelId) => {\n const deploymentId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n });\n const environment = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_ENV',\n });\n const region = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_REGION',\n });\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: async () => {\n const requestId = await getVercelRequestId();\n return {\n ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n ...(environment && { 'ai-o11y-environment': environment }),\n ...(region && { 'ai-o11y-region': region }),\n ...(requestId && { 'ai-o11y-request-id': requestId }),\n };\n },\n });\n };\n\n const getAvailableModels = async () => {\n const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n lastFetchTime = now;\n pendingMetadata = new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getAvailableModels()\n .then(metadata => {\n metadataCache = metadata;\n return metadata;\n })\n .catch((error: unknown) => {\n throw asGatewayError(error);\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const provider = function (modelId: GatewayModelId) {\n if (new.target) {\n throw new Error(\n 'The Gateway Provider model function cannot be called with the new keyword.',\n );\n }\n\n return createLanguageModel(modelId);\n };\n\n provider.getAvailableModels = getAvailableModels;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n provider.languageModel = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(error: unknown) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n if (APICallError.isInstance(error)) {\n return createGatewayErrorFromResponse({\n response: extractApiCallResponse(error),\n statusCode: error.statusCode ?? 500,\n defaultMessage: 'Gateway request failed',\n cause: error,\n });\n }\n\n return createGatewayErrorFromResponse({\n response: {},\n statusCode: 500,\n defaultMessage:\n error instanceof Error\n ? `Gateway request failed: ${error.message}`\n : 'Unknown Gateway error',\n cause: error,\n });\n}\n","import { z } from 'zod';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n GatewayModelNotFoundError,\n modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\n\nexport function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n}): GatewayError {\n const parseResult = gatewayErrorResponseSchema.safeParse(response);\n if (!parseResult.success) {\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.data;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n\n switch (errorType) {\n case 'authentication_error':\n return new GatewayAuthenticationError({ message, statusCode, cause });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({ message, statusCode, cause });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({ message, statusCode, cause });\n case 'model_not_found': {\n const modelResult = modelNotFoundParamSchema.safeParse(\n validatedResponse.error.param,\n );\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.data.modelId : undefined,\n cause,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({ message, statusCode, cause });\n default:\n return new GatewayInternalServerError({ message, statusCode, cause });\n }\n}\n\nconst gatewayErrorResponseSchema = z.object({\n error: z.object({\n message: z.string(),\n type: z.string().nullish(),\n param: z.unknown().nullish(),\n code: z.union([z.string(), z.number()]).nullish(),\n }),\n});\n\nexport type GatewayErrorResponse = z.infer<typeof gatewayErrorResponseSchema>;\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n private readonly [symbol] = true; // used in isInstance\n\n abstract readonly name: string;\n abstract readonly type: string;\n readonly statusCode: number;\n readonly cause?: unknown;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n }) {\n super(message);\n this.statusCode = statusCode;\n this.cause = cause;\n }\n\n /**\n * Checks if the given error is a Gateway Error.\n * @param {unknown} error - The error to check.\n * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n */\n static isInstance(error: unknown): error is GatewayError {\n return GatewayError.hasMarker(error);\n }\n\n static hasMarker(error: unknown): error is GatewayError {\n return (\n typeof error === 'object' &&\n error !== null &&\n symbol in error &&\n (error as any)[symbol] === true\n );\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'authentication_error';\n\n constructor({\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'invalid_request_error';\n\n constructor({\n message = 'Invalid request',\n statusCode = 400,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInvalidRequestError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'rate_limit_exceeded';\n\n constructor({\n message = 'Rate limit exceeded',\n statusCode = 429,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayRateLimitError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { z } from 'zod';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = z.object({\n modelId: z.string(),\n});\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'model_not_found';\n readonly modelId?: string;\n\n constructor({\n message = 'Model not found',\n statusCode = 404,\n modelId,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.modelId = modelId;\n }\n\n static isInstance(error: unknown): error is GatewayModelNotFoundError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'internal_server_error';\n\n constructor({\n message = 'Internal server error',\n statusCode = 500,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { GatewayError } from './gateway-error';\nimport type { ZodError } from 'zod';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'response_error';\n readonly response?: unknown;\n readonly validationError?: ZodError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: ZodError;\n cause?: unknown;\n } = {}) {\n super({ message, statusCode, cause });\n this.response = response;\n this.validationError = validationError;\n }\n\n static isInstance(error: unknown): error is GatewayResponseError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n if (error.data !== undefined) {\n return error.data;\n }\n if (error.responseBody != null) {\n try {\n return JSON.parse(error.responseBody);\n } catch {\n return error.responseBody;\n }\n }\n return {};\n}\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\nimport { z } from 'zod';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport class GatewayFetchMetadata {\n constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n try {\n const { value } = await getFromApi({\n url: `${this.config.baseURL}/config`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayFetchMetadataSchema,\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n fetch: this.config.fetch,\n });\n\n return value;\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n}\n\nconst gatewayLanguageModelSpecificationSchema = z.object({\n specificationVersion: z.literal('v2'),\n provider: z.string(),\n modelId: z.string(),\n});\n\nconst gatewayLanguageModelEntrySchema = z.object({\n id: z.string(),\n name: z.string(),\n specification: gatewayLanguageModelSpecificationSchema,\n});\n\nconst gatewayFetchMetadataSchema = z.object({\n models: z.array(gatewayLanguageModelEntrySchema),\n});\n","import type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FilePart,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n type ParseResult,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n constructor(\n readonly modelId: GatewayModelId,\n private readonly config: GatewayChatConfig,\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const { abortSignal, ...body } = options;\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n await resolve(this.config.headers()),\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createJsonResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n ...responseBody,\n request: { body },\n response: { headers: responseHeaders, body: rawResponse },\n warnings: [],\n };\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n\n async doStream(\n options: Parameters<LanguageModelV2['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const { abortSignal, ...body } = options;\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n await resolve(this.config.headers()),\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: this.maybeEncodeFileParts(body),\n successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: z.any(),\n errorToMessage: data => data,\n }),\n ...(abortSignal && { abortSignal }),\n fetch: this.config.fetch,\n });\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<LanguageModelV2StreamPart>,\n LanguageModelV2StreamPart\n >({\n transform(chunk, controller) {\n if (chunk.success) {\n controller.enqueue(chunk.value);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw asGatewayError(error);\n }\n }\n\n private isFilePart(part: unknown) {\n return (\n part && typeof part === 'object' && 'type' in part && part.type === 'file'\n );\n }\n\n /**\n * Encodes image parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the image data.\n * @param options - The options to encode.\n * @returns The options with the image parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV2CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV2FilePart;\n // If the image part is a URL it will get cleanly converted to a string.\n // If it's a binary image attachment we convert it to a data url.\n // In either case, server-side we should only ever see URLs as strings.\n if (filePart.data instanceof Uint8Array) {\n const buffer = Uint8Array.from(filePart.data);\n const base64Data = Buffer.from(buffer).toString('base64');\n filePart.data = new URL(\n `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n );\n }\n }\n }\n }\n return options;\n }\n\n private getUrl() {\n return `${this.config.baseURL}/language-model`;\n }\n\n private getModelConfigHeaders(modelId: string, streaming: boolean) {\n return {\n 'ai-language-model-specification-version': '2',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import { GatewayAuthenticationError } from './errors';\n\nexport async function getVercelOidcToken(): Promise<string> {\n const token =\n getContext().headers?.['x-vercel-oidc-token'] ??\n process.env.VERCEL_OIDC_TOKEN;\n\n if (!token) {\n throw new GatewayAuthenticationError({\n message: `Failed to get Vercel OIDC token for AI Gateway access.\nThe token is expected to be provided via the 'VERCEL_OIDC_TOKEN' environment variable. It expires every 12 hours.\n- make sure your Vercel project settings have OIDC enabled\n- if you're running locally with 'vercel dev' the token is automatically obtained and refreshed for you\n- if you're running locally with your own dev server script you can fetch/update the token by running 'vercel env pull'\n- in production or preview the token is automatically obtained and refreshed for you`,\n statusCode: 401,\n });\n }\n\n return token;\n}\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n\ntype Context = {\n headers?: Record<string, string>;\n};\n\nconst SYMBOL_FOR_REQ_CONTEXT = Symbol.for('@vercel/request-context');\n\nfunction getContext(): Context {\n const fromSymbol: typeof globalThis & {\n [SYMBOL_FOR_REQ_CONTEXT]?: { get?: () => Context };\n } = globalThis;\n return fromSymbol[SYMBOL_FOR_REQ_CONTEXT]?.get?.() ?? {};\n}\n"],"mappings":"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","names":["z","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","name","marker","symbol","_a","_b","z","_a","z","createJsonErrorResponseHandler","createJsonResponseHandler","resolve","z","resolve","createJsonResponseHandler","z","createJsonErrorResponseHandler","_a","_b","_a","_b"]}