@ai-sdk/gateway 3.0.37 → 3.0.38

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ai-sdk/gateway
2
2
 
3
+ ## 3.0.38
4
+
5
+ ### Patch Changes
6
+
7
+ - 70028ab: feat: report image generation usage info in Gateway
8
+
3
9
  ## 3.0.37
4
10
 
5
11
  ### Patch Changes
package/dist/index.js CHANGED
@@ -761,7 +761,7 @@ var GatewayImageModel = class {
761
761
  headers,
762
762
  abortSignal
763
763
  }) {
764
- var _a8;
764
+ var _a8, _b8, _c, _d;
765
765
  const resolvedHeaders = await (0, import_provider_utils7.resolve)(this.config.headers());
766
766
  try {
767
767
  const {
@@ -807,6 +807,13 @@ var GatewayImageModel = class {
807
807
  timestamp: /* @__PURE__ */ new Date(),
808
808
  modelId: this.modelId,
809
809
  headers: responseHeaders
810
+ },
811
+ ...responseBody.usage != null && {
812
+ usage: {
813
+ inputTokens: (_b8 = responseBody.usage.inputTokens) != null ? _b8 : void 0,
814
+ outputTokens: (_c = responseBody.usage.outputTokens) != null ? _c : void 0,
815
+ totalTokens: (_d = responseBody.usage.totalTokens) != null ? _d : void 0
816
+ }
810
817
  }
811
818
  };
812
819
  } catch (error) {
@@ -835,16 +842,33 @@ function maybeEncodeImageFile(file) {
835
842
  var providerMetadataEntrySchema = import_v47.z.object({
836
843
  images: import_v47.z.array(import_v47.z.unknown()).optional()
837
844
  }).catchall(import_v47.z.unknown());
845
+ var gatewayImageWarningSchema = import_v47.z.discriminatedUnion("type", [
846
+ import_v47.z.object({
847
+ type: import_v47.z.literal("unsupported"),
848
+ feature: import_v47.z.string(),
849
+ details: import_v47.z.string().optional()
850
+ }),
851
+ import_v47.z.object({
852
+ type: import_v47.z.literal("compatibility"),
853
+ feature: import_v47.z.string(),
854
+ details: import_v47.z.string().optional()
855
+ }),
856
+ import_v47.z.object({
857
+ type: import_v47.z.literal("other"),
858
+ message: import_v47.z.string()
859
+ })
860
+ ]);
861
+ var gatewayImageUsageSchema = import_v47.z.object({
862
+ inputTokens: import_v47.z.number().nullish(),
863
+ outputTokens: import_v47.z.number().nullish(),
864
+ totalTokens: import_v47.z.number().nullish()
865
+ });
838
866
  var gatewayImageResponseSchema = import_v47.z.object({
839
867
  images: import_v47.z.array(import_v47.z.string()),
840
868
  // 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()
869
+ warnings: import_v47.z.array(gatewayImageWarningSchema).optional(),
870
+ providerMetadata: import_v47.z.record(import_v47.z.string(), providerMetadataEntrySchema).optional(),
871
+ usage: gatewayImageUsageSchema.optional()
848
872
  });
849
873
 
850
874
  // src/gateway-video-model.ts
@@ -1163,7 +1187,7 @@ async function getVercelRequestId() {
1163
1187
  var import_provider_utils12 = require("@ai-sdk/provider-utils");
1164
1188
 
1165
1189
  // src/version.ts
1166
- var VERSION = true ? "3.0.37" : "0.0.0-test";
1190
+ var VERSION = true ? "3.0.38" : "0.0.0-test";
1167
1191
 
1168
1192
  // src/gateway-provider.ts
1169
1193
  var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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/errors/parse-auth-method.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/gateway-embedding-model.ts","../src/gateway-image-model.ts","../src/gateway-video-model.ts","../src/tool/parallel-search.ts","../src/tool/perplexity-search.ts","../src/gateway-tools.ts","../src/vercel-environment.ts","../src/version.ts"],"sourcesContent":["export type { GatewayModelId } from './gateway-language-model-settings';\nexport type { GatewayVideoModelId } from './gateway-video-model-settings';\nexport type {\n GatewayLanguageModelEntry,\n GatewayLanguageModelSpecification,\n} from './gateway-model-entry';\nexport type { GatewayCreditsResponse } from './gateway-fetch-metadata';\nexport type { GatewayLanguageModelEntry as GatewayModelEntry } from './gateway-model-entry';\nexport {\n createGatewayProvider,\n createGatewayProvider as createGateway,\n gateway,\n} from './gateway-provider';\nexport type {\n GatewayProvider,\n GatewayProviderSettings,\n} from './gateway-provider';\nexport type { GatewayProviderOptions } from './gateway-provider-options';\nexport {\n GatewayError,\n GatewayAuthenticationError,\n GatewayInvalidRequestError,\n GatewayRateLimitError,\n GatewayModelNotFoundError,\n GatewayInternalServerError,\n GatewayResponseError,\n} from './errors';\nexport type { GatewayErrorResponse } from './errors';\n","import {\n loadOptionalSetting,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n parseAuthMethod,\n} from './errors/parse-auth-method';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport { GatewayEmbeddingModel } from './gateway-embedding-model';\nimport { GatewayImageModel } from './gateway-image-model';\nimport { GatewayVideoModel } from './gateway-video-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport type { GatewayVideoModelId } from './gateway-video-model-settings';\nimport { gatewayTools } from './gateway-tools';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport type {\n LanguageModelV3,\n EmbeddingModelV3,\n ImageModelV3,\n Experimental_VideoModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV3 {\n (modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Returns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n\n /**\n * Returns credit information for the authenticated user.\n */\n getCredits(): Promise<GatewayCreditsResponse>;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embedding(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating images.\n */\n image(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating images.\n */\n imageModel(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n video(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n videoModel(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Gateway-specific tools executed server-side.\n */\n tools: typeof gatewayTools;\n}\n\nexport interface GatewayProviderSettings {\n /**\n * The base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * How 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\n/**\n * Create 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/v3/ai';\n\n const getHeaders = async () => {\n try {\n const auth = await getGatewayAuthToken(options);\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${auth.token}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n ...options.headers,\n },\n `ai-sdk/gateway/${VERSION}`,\n );\n } catch (error) {\n throw GatewayAuthenticationError.createContextualError({\n apiKeyProvided: false,\n oidcTokenProvided: false,\n statusCode: 401,\n cause: error,\n });\n }\n };\n\n const createO11yHeaders = () => {\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\n return 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 const createLanguageModel = (modelId: GatewayModelId) => {\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\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\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(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const getCredits = async () => {\n return new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getCredits()\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\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.specificationVersion = 'v3' as const;\n provider.getAvailableModels = getAvailableModels;\n provider.getCredits = getCredits;\n provider.imageModel = (modelId: GatewayImageModelId) => {\n return new GatewayImageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.languageModel = createLanguageModel;\n const createEmbeddingModel = (modelId: GatewayEmbeddingModelId) => {\n return new GatewayEmbeddingModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.videoModel = (modelId: GatewayVideoModelId) => {\n return new GatewayVideoModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.chat = provider.languageModel;\n provider.embedding = provider.embeddingModel;\n provider.image = provider.imageModel;\n provider.video = provider.videoModel;\n provider.tools = gatewayTools;\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n options: GatewayProviderSettings,\n): Promise<{ token: string; authMethod: 'api-key' | 'oidc' }> {\n const apiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n });\n\n if (apiKey) {\n return {\n token: apiKey,\n authMethod: 'api-key',\n };\n }\n\n const oidcToken = await getVercelOidcToken();\n return {\n token: oidcToken,\n authMethod: 'oidc',\n };\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\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 authMethod,\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 authMethod,\n });\n}\n","import { z } from 'zod/v4';\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';\nimport {\n InferSchema,\n lazySchema,\n safeValidateTypes,\n validateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport async function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n authMethod,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n authMethod?: 'api-key' | 'oidc';\n}): Promise<GatewayError> {\n const parseResult = await safeValidateTypes({\n value: response,\n schema: gatewayErrorResponseSchema,\n });\n\n if (!parseResult.success) {\n // Try to extract generationId even if validation failed\n const rawGenerationId =\n typeof response === 'object' &&\n response !== null &&\n 'generationId' in response\n ? (response as { generationId?: string }).generationId\n : undefined;\n\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n generationId: rawGenerationId,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.value;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n const generationId = validatedResponse.generationId ?? undefined;\n\n switch (errorType) {\n case 'authentication_error':\n return GatewayAuthenticationError.createContextualError({\n apiKeyProvided: authMethod === 'api-key',\n oidcTokenProvided: authMethod === 'oidc',\n statusCode,\n cause,\n generationId,\n });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'model_not_found': {\n const modelResult = await safeValidateTypes({\n value: validatedResponse.error.param,\n schema: modelNotFoundParamSchema,\n });\n\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.value.modelId : undefined,\n cause,\n generationId,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n default:\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n }\n}\n\nconst gatewayErrorResponseSchema = lazySchema(() =>\n zodSchema(\n 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 generationId: z.string().nullish(),\n }),\n ),\n);\n\nexport type GatewayErrorResponse = InferSchema<\n typeof gatewayErrorResponseSchema\n>;\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 readonly generationId?: string;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n generationId,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }) {\n super(generationId ? `${message} [${generationId}]` : message);\n this.statusCode = statusCode;\n this.cause = cause;\n this.generationId = generationId;\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a contextual error message when authentication fails\n */\n static createContextualError({\n apiKeyProvided,\n oidcTokenProvided,\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n generationId,\n }: {\n apiKeyProvided: boolean;\n oidcTokenProvided: boolean;\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }): GatewayAuthenticationError {\n let contextualMessage: string;\n\n if (apiKeyProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid API key.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else if (oidcTokenProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.\n\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.\n\nAlternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;\n } else {\n contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nOption 1 - API key:\nCreate an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOption 2 - OIDC token:\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;\n }\n\n return new GatewayAuthenticationError({\n message: contextualMessage,\n statusCode,\n cause,\n generationId,\n });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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/v4';\nimport { GatewayError } from './gateway-error';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = lazySchema(() =>\n zodSchema(\n z.object({\n modelId: z.string(),\n }),\n ),\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { GatewayError } from './gateway-error';\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?: TypeValidationError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n generationId,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: TypeValidationError;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 { z } from 'zod/v4';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\n\nexport async function parseAuthMethod(\n headers: Record<string, string | undefined>,\n) {\n const result = await safeValidateTypes({\n value: headers[GATEWAY_AUTH_METHOD_HEADER],\n schema: gatewayAuthMethodSchema,\n });\n\n return result.success ? result.value : undefined;\n}\n\nconst gatewayAuthMethodSchema = lazySchema(() =>\n zodSchema(z.union([z.literal('api-key'), z.literal('oidc')])),\n);\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n lazySchema,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport interface GatewayCreditsResponse {\n /** The remaining gateway credit balance available for API usage */\n balance: string;\n /** The total amount of gateway credits that have been consumed */\n totalUsed: string;\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 gatewayAvailableModelsResponseSchema,\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 await asGatewayError(error);\n }\n }\n\n async getCredits(): Promise<GatewayCreditsResponse> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/credits`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayCreditsResponseSchema,\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 await asGatewayError(error);\n }\n }\n}\n\nconst gatewayAvailableModelsResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n models: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullish(),\n pricing: z\n .object({\n input: z.string(),\n output: z.string(),\n input_cache_read: z.string().nullish(),\n input_cache_write: z.string().nullish(),\n })\n .transform(\n ({ input, output, input_cache_read, input_cache_write }) => ({\n input,\n output,\n ...(input_cache_read\n ? { cachedInputTokens: input_cache_read }\n : {}),\n ...(input_cache_write\n ? { cacheCreationInputTokens: input_cache_write }\n : {}),\n }),\n )\n .nullish(),\n specification: z.object({\n specificationVersion: z.literal('v3'),\n provider: z.string(),\n modelId: z.string(),\n }),\n modelType: z\n .enum(['embedding', 'image', 'language', 'video'])\n .nullish(),\n }),\n ),\n }),\n ),\n);\n\nconst gatewayCreditsResponseSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n balance: z.string(),\n total_used: z.string(),\n })\n .transform(({ balance, total_used }) => ({\n balance,\n totalUsed: total_used,\n })),\n ),\n);\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n SharedV3Warning,\n LanguageModelV3FilePart,\n LanguageModelV3StreamPart,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\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/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 private async getArgs(options: LanguageModelV3CallOptions) {\n const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n return {\n args: this.maybeEncodeFileParts(optionsWithoutSignal),\n warnings: [],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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: args },\n response: { headers: responseHeaders, body: rawResponse },\n warnings,\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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<LanguageModelV3StreamPart>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n if (warnings.length > 0) {\n controller.enqueue({ type: 'stream-start', warnings });\n }\n },\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n if (\n streamPart.type === 'response-metadata' &&\n streamPart.timestamp &&\n typeof streamPart.timestamp === 'string'\n ) {\n streamPart.timestamp = new Date(streamPart.timestamp);\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body: args },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\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 file parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the file data.\n * @param options - The options to encode.\n * @returns The options with the file parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV3CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV3FilePart;\n // If the file part is a URL it will get cleanly converted to a string.\n // If it's a binary file 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': '3',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import type {\n EmbeddingModelV3,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n lazySchema,\n postJsonToApi,\n resolve,\n zodSchema,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n values,\n ...(providerOptions ? { providerOptions } : {}),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayEmbeddingResponseSchema,\n ),\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 embeddings: responseBody.embeddings,\n usage: responseBody.usage ?? undefined,\n providerMetadata:\n responseBody.providerMetadata as unknown as SharedV3ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/embedding-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-embedding-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embeddings: z.array(z.array(z.number())),\n usage: z.object({ tokens: z.number() }).nullish(),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n ImageModelV3,\n ImageModelV3File,\n ImageModelV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayImageModel implements ImageModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n files,\n mask,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV3['doGenerate']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(size && { size }),\n ...(aspectRatio && { aspectRatio }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(files && {\n files: files.map(file => maybeEncodeImageFile(file)),\n }),\n ...(mask && { mask: maybeEncodeImageFile(mask) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayImageResponseSchema,\n ),\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 images: responseBody.images, // Always base64 strings from server\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as ImageModelV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/image-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-image-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeImageFile(file: ImageModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n images: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayImageResponseSchema = z.object({\n images: z.array(z.string()), // Always base64 strings over the wire\n warnings: z\n .array(\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n )\n .optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import type {\n Experimental_VideoModelV3,\n Experimental_VideoModelV3CallOptions,\n Experimental_VideoModelV3File,\n Experimental_VideoModelV3VideoData,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxVideosPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n image,\n providerOptions,\n headers,\n abortSignal,\n }: Experimental_VideoModelV3CallOptions): Promise<{\n videos: Array<Experimental_VideoModelV3VideoData>;\n warnings: Array<{ type: 'other'; message: string }>;\n providerMetadata?: SharedV3ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n }> {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(aspectRatio && { aspectRatio }),\n ...(resolution && { resolution }),\n ...(duration && { duration }),\n ...(fps && { fps }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(image && { image: maybeEncodeVideoFile(image) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayVideoResponseSchema,\n ),\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 videos: responseBody.videos,\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as SharedV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/video-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-video-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeVideoFile(file: Experimental_VideoModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n videos: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayVideoDataSchema = z.union([\n z.object({\n type: z.literal('url'),\n url: z.string(),\n mediaType: z.string(),\n }),\n z.object({\n type: z.literal('base64'),\n data: z.string(),\n mediaType: z.string(),\n }),\n]);\n\nconst gatewayVideoResponseSchema = z.object({\n videos: z.array(gatewayVideoDataSchema),\n warnings: z\n .array(\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n )\n .optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface ParallelSearchSourcePolicy {\n /**\n * List of domains to include in search results.\n * Example: ['wikipedia.org', 'nature.com']\n */\n includeDomains?: string[];\n\n /**\n * List of domains to exclude from search results.\n * Example: ['reddit.com', 'twitter.com']\n */\n excludeDomains?: string[];\n\n /**\n * Only include results published after this date (ISO 8601 format).\n * Example: '2024-01-01'\n */\n afterDate?: string;\n}\n\nexport interface ParallelSearchExcerpts {\n /**\n * Maximum characters per result.\n */\n maxCharsPerResult?: number;\n\n /**\n * Maximum total characters across all results.\n */\n maxCharsTotal?: number;\n}\n\nexport interface ParallelSearchFetchPolicy {\n /**\n * Maximum age in seconds for cached content.\n * Set to 0 to always fetch fresh content.\n */\n maxAgeSeconds?: number;\n}\n\nexport interface ParallelSearchConfig {\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts for single-response answers (default)\n * - \"agentic\": Concise, token-efficient results for multi-step agentic workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Default maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n maxResults?: number;\n\n /**\n * Default source policy for controlling which domains to include/exclude.\n */\n sourcePolicy?: ParallelSearchSourcePolicy;\n\n /**\n * Default excerpt configuration for controlling result length.\n */\n excerpts?: ParallelSearchExcerpts;\n\n /**\n * Default fetch policy for controlling content freshness.\n */\n fetchPolicy?: ParallelSearchFetchPolicy;\n}\n\nexport interface ParallelSearchResult {\n /** URL of the search result */\n url: string;\n /** Title of the search result */\n title: string;\n /** Extracted text excerpt/content from the page */\n excerpt: string;\n /** Publication date of the content (may be null) */\n publishDate?: string | null;\n /** Relevance score for the result */\n relevanceScore?: number;\n}\n\nexport interface ParallelSearchResponse {\n /** Unique identifier for this search request */\n searchId: string;\n /** Array of search results */\n results: ParallelSearchResult[];\n}\n\nexport interface ParallelSearchError {\n /** Error type */\n error:\n | 'api_error'\n | 'rate_limit'\n | 'timeout'\n | 'invalid_input'\n | 'configuration_error'\n | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface ParallelSearchInput {\n /**\n * Natural-language description of the web research goal.\n * Include source or freshness guidance and broader context from the task.\n * Maximum 5000 characters.\n */\n objective: string;\n\n /**\n * Optional search queries to supplement the objective.\n * Maximum 200 characters per query.\n */\n search_queries?: string[];\n\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts\n * - \"agentic\": Concise, token-efficient results for multi-step workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n max_results?: number;\n\n /**\n * Source policy for controlling which domains to include/exclude.\n */\n source_policy?: {\n include_domains?: string[];\n exclude_domains?: string[];\n after_date?: string;\n };\n\n /**\n * Excerpt configuration for controlling result length.\n */\n excerpts?: {\n max_chars_per_result?: number;\n max_chars_total?: number;\n };\n\n /**\n * Fetch policy for controlling content freshness.\n */\n fetch_policy?: {\n max_age_seconds?: number;\n };\n}\n\nexport type ParallelSearchOutput = ParallelSearchResponse | ParallelSearchError;\n\nconst parallelSearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n objective: z\n .string()\n .describe(\n 'Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters.',\n ),\n\n search_queries: z\n .array(z.string())\n .optional()\n .describe(\n 'Optional search queries to supplement the objective. Maximum 200 characters per query.',\n ),\n\n mode: z\n .enum(['one-shot', 'agentic'])\n .optional()\n .describe(\n 'Mode preset: \"one-shot\" for comprehensive results with longer excerpts (default), \"agentic\" for concise, token-efficient results for multi-step workflows.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of results to return (1-20). Defaults to 10 if not specified.',\n ),\n\n source_policy: z\n .object({\n include_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to include in search results.'),\n exclude_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to exclude from search results.'),\n after_date: z\n .string()\n .optional()\n .describe(\n 'Only include results published after this date (ISO 8601 format).',\n ),\n })\n .optional()\n .describe(\n 'Source policy for controlling which domains to include/exclude and freshness.',\n ),\n\n excerpts: z\n .object({\n max_chars_per_result: z\n .number()\n .optional()\n .describe('Maximum characters per result.'),\n max_chars_total: z\n .number()\n .optional()\n .describe('Maximum total characters across all results.'),\n })\n .optional()\n .describe('Excerpt configuration for controlling result length.'),\n\n fetch_policy: z\n .object({\n max_age_seconds: z\n .number()\n .optional()\n .describe(\n 'Maximum age in seconds for cached content. Set to 0 to always fetch fresh content.',\n ),\n })\n .optional()\n .describe('Fetch policy for controlling content freshness.'),\n }),\n ),\n);\n\nconst parallelSearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n searchId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string(),\n excerpt: z.string(),\n publishDate: z.string().nullable().optional(),\n relevanceScore: z.number().optional(),\n }),\n ),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'configuration_error',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const parallelSearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n ParallelSearchInput,\n ParallelSearchOutput,\n ParallelSearchConfig\n >({\n id: 'gateway.parallel_search',\n inputSchema: parallelSearchInputSchema,\n outputSchema: parallelSearchOutputSchema,\n });\n\nexport const parallelSearch = (\n config: ParallelSearchConfig = {},\n): ReturnType<typeof parallelSearchToolFactory> =>\n parallelSearchToolFactory(config);\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface PerplexitySearchConfig {\n /**\n * Default maximum number of search results to return (1-20, default: 10).\n */\n maxResults?: number;\n\n /**\n * Default maximum tokens to extract per search result page (256-2048, default: 2048).\n */\n maxTokensPerPage?: number;\n\n /**\n * Default maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n maxTokens?: number;\n\n /**\n * Default two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * Default list of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n searchDomainFilter?: string[];\n\n /**\n * Default list of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n searchLanguageFilter?: string[];\n\n /**\n * Default recency filter for results.\n * Cannot be combined with searchAfterDate/searchBeforeDate at runtime.\n */\n searchRecencyFilter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport interface PerplexitySearchResult {\n /** Title of the search result */\n title: string;\n /** URL of the search result */\n url: string;\n /** Text snippet/preview of the content */\n snippet: string;\n /** Publication date of the content */\n date?: string;\n /** Last updated date of the content */\n lastUpdated?: string;\n}\n\nexport interface PerplexitySearchResponse {\n /** Array of search results */\n results: PerplexitySearchResult[];\n /** Unique identifier for this search request */\n id: string;\n}\n\nexport interface PerplexitySearchError {\n /** Error type */\n error: 'api_error' | 'rate_limit' | 'timeout' | 'invalid_input' | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface PerplexitySearchInput {\n /**\n * Search query (string) or multiple queries (array of up to 5 strings).\n * Multi-query searches return combined results from all queries.\n */\n query: string | string[];\n\n /**\n * Maximum number of search results to return (1-20, default: 10).\n */\n max_results?: number;\n\n /**\n * Maximum number of tokens to extract per search result page (256-2048, default: 2048).\n */\n max_tokens_per_page?: number;\n\n /**\n * Maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n max_tokens?: number;\n\n /**\n * Two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * List of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n search_domain_filter?: string[];\n\n /**\n * List of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n search_language_filter?: string[];\n\n /**\n * Include only results published after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n search_after_date?: string;\n\n /**\n * Include only results published before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n search_before_date?: string;\n\n /**\n * Include only results last updated after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_after_filter?: string;\n\n /**\n * Include only results last updated before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_before_filter?: string;\n\n /**\n * Filter results by relative time period.\n * Cannot be used with search_after_date or search_before_date.\n */\n search_recency_filter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport type PerplexitySearchOutput =\n | PerplexitySearchResponse\n | PerplexitySearchError;\n\nconst perplexitySearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n query: z\n .union([z.string(), z.array(z.string())])\n .describe(\n 'Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of search results to return (1-20, default: 10)',\n ),\n\n max_tokens_per_page: z\n .number()\n .optional()\n .describe(\n 'Maximum number of tokens to extract per search result page (256-2048, default: 2048)',\n ),\n\n max_tokens: z\n .number()\n .optional()\n .describe(\n 'Maximum total tokens across all search results (default: 25000, max: 1000000)',\n ),\n\n country: z\n .string()\n .optional()\n .describe(\n \"Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')\",\n ),\n\n search_domain_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']\",\n ),\n\n search_language_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']\",\n ),\n\n search_after_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_before_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_after_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_before_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_recency_filter: z\n .enum(['day', 'week', 'month', 'year'])\n .optional()\n .describe(\n 'Filter results by relative time period. Cannot be used with search_after_date or search_before_date.',\n ),\n }),\n ),\n);\n\nconst perplexitySearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n results: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n date: z.string().optional(),\n lastUpdated: z.string().optional(),\n }),\n ),\n id: z.string(),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const perplexitySearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n PerplexitySearchInput,\n PerplexitySearchOutput,\n PerplexitySearchConfig\n >({\n id: 'gateway.perplexity_search',\n inputSchema: perplexitySearchInputSchema,\n outputSchema: perplexitySearchOutputSchema,\n });\n\nexport const perplexitySearch = (\n config: PerplexitySearchConfig = {},\n): ReturnType<typeof perplexitySearchToolFactory> =>\n perplexitySearchToolFactory(config);\n","import { parallelSearch } from './tool/parallel-search';\nimport { perplexitySearch } from './tool/perplexity-search';\n\n/**\n * Gateway-specific provider-defined tools.\n */\nexport const gatewayTools = {\n /**\n * Search the web using Parallel AI's Search API for LLM-optimized excerpts.\n *\n * Takes a natural language objective and returns relevant excerpts,\n * replacing multiple keyword searches with a single call for broad\n * or complex queries. Supports different search types for depth vs\n * breadth tradeoffs.\n */\n parallelSearch,\n\n /**\n * Search the web using Perplexity's Search API for real-time information,\n * news, research papers, and articles.\n *\n * Provides ranked search results with advanced filtering options including\n * domain, language, date range, and recency filters.\n */\n perplexitySearch,\n};\n","import { getContext } from '@vercel/oidc';\nexport { getVercelOidcToken } from '@vercel/oidc';\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider_utils","import_v4","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","import_provider_utils","_a","_a","import_v4","import_provider_utils","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","_a","import_provider_utils","import_v4","_a","import_provider_utils","import_v4","_a","providerMetadataEntrySchema","import_provider_utils","import_provider_utils","import_zod","import_oidc","_a","import_provider_utils","_a","_b"]}
1
+ {"version":3,"sources":["../src/index.ts","../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/errors/parse-auth-method.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/gateway-embedding-model.ts","../src/gateway-image-model.ts","../src/gateway-video-model.ts","../src/tool/parallel-search.ts","../src/tool/perplexity-search.ts","../src/gateway-tools.ts","../src/vercel-environment.ts","../src/version.ts"],"sourcesContent":["export type { GatewayModelId } from './gateway-language-model-settings';\nexport type { GatewayVideoModelId } from './gateway-video-model-settings';\nexport type {\n GatewayLanguageModelEntry,\n GatewayLanguageModelSpecification,\n} from './gateway-model-entry';\nexport type { GatewayCreditsResponse } from './gateway-fetch-metadata';\nexport type { GatewayLanguageModelEntry as GatewayModelEntry } from './gateway-model-entry';\nexport {\n createGatewayProvider,\n createGatewayProvider as createGateway,\n gateway,\n} from './gateway-provider';\nexport type {\n GatewayProvider,\n GatewayProviderSettings,\n} from './gateway-provider';\nexport type { GatewayProviderOptions } from './gateway-provider-options';\nexport {\n GatewayError,\n GatewayAuthenticationError,\n GatewayInvalidRequestError,\n GatewayRateLimitError,\n GatewayModelNotFoundError,\n GatewayInternalServerError,\n GatewayResponseError,\n} from './errors';\nexport type { GatewayErrorResponse } from './errors';\n","import {\n loadOptionalSetting,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n parseAuthMethod,\n} from './errors/parse-auth-method';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport { GatewayEmbeddingModel } from './gateway-embedding-model';\nimport { GatewayImageModel } from './gateway-image-model';\nimport { GatewayVideoModel } from './gateway-video-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport type { GatewayVideoModelId } from './gateway-video-model-settings';\nimport { gatewayTools } from './gateway-tools';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport type {\n LanguageModelV3,\n EmbeddingModelV3,\n ImageModelV3,\n Experimental_VideoModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV3 {\n (modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Returns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n\n /**\n * Returns credit information for the authenticated user.\n */\n getCredits(): Promise<GatewayCreditsResponse>;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embedding(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating images.\n */\n image(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating images.\n */\n imageModel(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n video(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n videoModel(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Gateway-specific tools executed server-side.\n */\n tools: typeof gatewayTools;\n}\n\nexport interface GatewayProviderSettings {\n /**\n * The base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * How 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\n/**\n * Create 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/v3/ai';\n\n const getHeaders = async () => {\n try {\n const auth = await getGatewayAuthToken(options);\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${auth.token}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n ...options.headers,\n },\n `ai-sdk/gateway/${VERSION}`,\n );\n } catch (error) {\n throw GatewayAuthenticationError.createContextualError({\n apiKeyProvided: false,\n oidcTokenProvided: false,\n statusCode: 401,\n cause: error,\n });\n }\n };\n\n const createO11yHeaders = () => {\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\n return 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 const createLanguageModel = (modelId: GatewayModelId) => {\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\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\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(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const getCredits = async () => {\n return new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getCredits()\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\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.specificationVersion = 'v3' as const;\n provider.getAvailableModels = getAvailableModels;\n provider.getCredits = getCredits;\n provider.imageModel = (modelId: GatewayImageModelId) => {\n return new GatewayImageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.languageModel = createLanguageModel;\n const createEmbeddingModel = (modelId: GatewayEmbeddingModelId) => {\n return new GatewayEmbeddingModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.videoModel = (modelId: GatewayVideoModelId) => {\n return new GatewayVideoModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.chat = provider.languageModel;\n provider.embedding = provider.embeddingModel;\n provider.image = provider.imageModel;\n provider.video = provider.videoModel;\n provider.tools = gatewayTools;\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n options: GatewayProviderSettings,\n): Promise<{ token: string; authMethod: 'api-key' | 'oidc' }> {\n const apiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n });\n\n if (apiKey) {\n return {\n token: apiKey,\n authMethod: 'api-key',\n };\n }\n\n const oidcToken = await getVercelOidcToken();\n return {\n token: oidcToken,\n authMethod: 'oidc',\n };\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\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 authMethod,\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 authMethod,\n });\n}\n","import { z } from 'zod/v4';\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';\nimport {\n InferSchema,\n lazySchema,\n safeValidateTypes,\n validateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport async function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n authMethod,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n authMethod?: 'api-key' | 'oidc';\n}): Promise<GatewayError> {\n const parseResult = await safeValidateTypes({\n value: response,\n schema: gatewayErrorResponseSchema,\n });\n\n if (!parseResult.success) {\n // Try to extract generationId even if validation failed\n const rawGenerationId =\n typeof response === 'object' &&\n response !== null &&\n 'generationId' in response\n ? (response as { generationId?: string }).generationId\n : undefined;\n\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n generationId: rawGenerationId,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.value;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n const generationId = validatedResponse.generationId ?? undefined;\n\n switch (errorType) {\n case 'authentication_error':\n return GatewayAuthenticationError.createContextualError({\n apiKeyProvided: authMethod === 'api-key',\n oidcTokenProvided: authMethod === 'oidc',\n statusCode,\n cause,\n generationId,\n });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'model_not_found': {\n const modelResult = await safeValidateTypes({\n value: validatedResponse.error.param,\n schema: modelNotFoundParamSchema,\n });\n\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.value.modelId : undefined,\n cause,\n generationId,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n default:\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n }\n}\n\nconst gatewayErrorResponseSchema = lazySchema(() =>\n zodSchema(\n 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 generationId: z.string().nullish(),\n }),\n ),\n);\n\nexport type GatewayErrorResponse = InferSchema<\n typeof gatewayErrorResponseSchema\n>;\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 readonly generationId?: string;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n generationId,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }) {\n super(generationId ? `${message} [${generationId}]` : message);\n this.statusCode = statusCode;\n this.cause = cause;\n this.generationId = generationId;\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a contextual error message when authentication fails\n */\n static createContextualError({\n apiKeyProvided,\n oidcTokenProvided,\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n generationId,\n }: {\n apiKeyProvided: boolean;\n oidcTokenProvided: boolean;\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }): GatewayAuthenticationError {\n let contextualMessage: string;\n\n if (apiKeyProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid API key.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else if (oidcTokenProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.\n\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.\n\nAlternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;\n } else {\n contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nOption 1 - API key:\nCreate an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOption 2 - OIDC token:\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;\n }\n\n return new GatewayAuthenticationError({\n message: contextualMessage,\n statusCode,\n cause,\n generationId,\n });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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/v4';\nimport { GatewayError } from './gateway-error';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = lazySchema(() =>\n zodSchema(\n z.object({\n modelId: z.string(),\n }),\n ),\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { GatewayError } from './gateway-error';\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?: TypeValidationError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n generationId,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: TypeValidationError;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 { z } from 'zod/v4';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\n\nexport async function parseAuthMethod(\n headers: Record<string, string | undefined>,\n) {\n const result = await safeValidateTypes({\n value: headers[GATEWAY_AUTH_METHOD_HEADER],\n schema: gatewayAuthMethodSchema,\n });\n\n return result.success ? result.value : undefined;\n}\n\nconst gatewayAuthMethodSchema = lazySchema(() =>\n zodSchema(z.union([z.literal('api-key'), z.literal('oidc')])),\n);\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n lazySchema,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport interface GatewayCreditsResponse {\n /** The remaining gateway credit balance available for API usage */\n balance: string;\n /** The total amount of gateway credits that have been consumed */\n totalUsed: string;\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 gatewayAvailableModelsResponseSchema,\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 await asGatewayError(error);\n }\n }\n\n async getCredits(): Promise<GatewayCreditsResponse> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/credits`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayCreditsResponseSchema,\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 await asGatewayError(error);\n }\n }\n}\n\nconst gatewayAvailableModelsResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n models: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullish(),\n pricing: z\n .object({\n input: z.string(),\n output: z.string(),\n input_cache_read: z.string().nullish(),\n input_cache_write: z.string().nullish(),\n })\n .transform(\n ({ input, output, input_cache_read, input_cache_write }) => ({\n input,\n output,\n ...(input_cache_read\n ? { cachedInputTokens: input_cache_read }\n : {}),\n ...(input_cache_write\n ? { cacheCreationInputTokens: input_cache_write }\n : {}),\n }),\n )\n .nullish(),\n specification: z.object({\n specificationVersion: z.literal('v3'),\n provider: z.string(),\n modelId: z.string(),\n }),\n modelType: z\n .enum(['embedding', 'image', 'language', 'video'])\n .nullish(),\n }),\n ),\n }),\n ),\n);\n\nconst gatewayCreditsResponseSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n balance: z.string(),\n total_used: z.string(),\n })\n .transform(({ balance, total_used }) => ({\n balance,\n totalUsed: total_used,\n })),\n ),\n);\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n SharedV3Warning,\n LanguageModelV3FilePart,\n LanguageModelV3StreamPart,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\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/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 private async getArgs(options: LanguageModelV3CallOptions) {\n const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n return {\n args: this.maybeEncodeFileParts(optionsWithoutSignal),\n warnings: [],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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: args },\n response: { headers: responseHeaders, body: rawResponse },\n warnings,\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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<LanguageModelV3StreamPart>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n if (warnings.length > 0) {\n controller.enqueue({ type: 'stream-start', warnings });\n }\n },\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n if (\n streamPart.type === 'response-metadata' &&\n streamPart.timestamp &&\n typeof streamPart.timestamp === 'string'\n ) {\n streamPart.timestamp = new Date(streamPart.timestamp);\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body: args },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\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 file parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the file data.\n * @param options - The options to encode.\n * @returns The options with the file parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV3CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV3FilePart;\n // If the file part is a URL it will get cleanly converted to a string.\n // If it's a binary file 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': '3',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import type {\n EmbeddingModelV3,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n lazySchema,\n postJsonToApi,\n resolve,\n zodSchema,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n values,\n ...(providerOptions ? { providerOptions } : {}),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayEmbeddingResponseSchema,\n ),\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 embeddings: responseBody.embeddings,\n usage: responseBody.usage ?? undefined,\n providerMetadata:\n responseBody.providerMetadata as unknown as SharedV3ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/embedding-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-embedding-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embeddings: z.array(z.array(z.number())),\n usage: z.object({ tokens: z.number() }).nullish(),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n ImageModelV3,\n ImageModelV3File,\n ImageModelV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayImageModel implements ImageModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n files,\n mask,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV3['doGenerate']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(size && { size }),\n ...(aspectRatio && { aspectRatio }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(files && {\n files: files.map(file => maybeEncodeImageFile(file)),\n }),\n ...(mask && { mask: maybeEncodeImageFile(mask) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayImageResponseSchema,\n ),\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 images: responseBody.images, // Always base64 strings from server\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as ImageModelV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n ...(responseBody.usage != null && {\n usage: {\n inputTokens: responseBody.usage.inputTokens ?? undefined,\n outputTokens: responseBody.usage.outputTokens ?? undefined,\n totalTokens: responseBody.usage.totalTokens ?? undefined,\n },\n }),\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/image-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-image-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeImageFile(file: ImageModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n images: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayImageWarningSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('unsupported'),\n feature: z.string(),\n details: z.string().optional(),\n }),\n z.object({\n type: z.literal('compatibility'),\n feature: z.string(),\n details: z.string().optional(),\n }),\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n]);\n\nconst gatewayImageUsageSchema = z.object({\n inputTokens: z.number().nullish(),\n outputTokens: z.number().nullish(),\n totalTokens: z.number().nullish(),\n});\n\nconst gatewayImageResponseSchema = z.object({\n images: z.array(z.string()), // Always base64 strings over the wire\n warnings: z.array(gatewayImageWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n usage: gatewayImageUsageSchema.optional(),\n});\n","import type {\n Experimental_VideoModelV3,\n Experimental_VideoModelV3CallOptions,\n Experimental_VideoModelV3File,\n Experimental_VideoModelV3VideoData,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxVideosPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n image,\n providerOptions,\n headers,\n abortSignal,\n }: Experimental_VideoModelV3CallOptions): Promise<{\n videos: Array<Experimental_VideoModelV3VideoData>;\n warnings: Array<{ type: 'other'; message: string }>;\n providerMetadata?: SharedV3ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n }> {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(aspectRatio && { aspectRatio }),\n ...(resolution && { resolution }),\n ...(duration && { duration }),\n ...(fps && { fps }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(image && { image: maybeEncodeVideoFile(image) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayVideoResponseSchema,\n ),\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 videos: responseBody.videos,\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as SharedV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/video-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-video-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeVideoFile(file: Experimental_VideoModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n videos: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayVideoDataSchema = z.union([\n z.object({\n type: z.literal('url'),\n url: z.string(),\n mediaType: z.string(),\n }),\n z.object({\n type: z.literal('base64'),\n data: z.string(),\n mediaType: z.string(),\n }),\n]);\n\nconst gatewayVideoResponseSchema = z.object({\n videos: z.array(gatewayVideoDataSchema),\n warnings: z\n .array(\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n )\n .optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface ParallelSearchSourcePolicy {\n /**\n * List of domains to include in search results.\n * Example: ['wikipedia.org', 'nature.com']\n */\n includeDomains?: string[];\n\n /**\n * List of domains to exclude from search results.\n * Example: ['reddit.com', 'twitter.com']\n */\n excludeDomains?: string[];\n\n /**\n * Only include results published after this date (ISO 8601 format).\n * Example: '2024-01-01'\n */\n afterDate?: string;\n}\n\nexport interface ParallelSearchExcerpts {\n /**\n * Maximum characters per result.\n */\n maxCharsPerResult?: number;\n\n /**\n * Maximum total characters across all results.\n */\n maxCharsTotal?: number;\n}\n\nexport interface ParallelSearchFetchPolicy {\n /**\n * Maximum age in seconds for cached content.\n * Set to 0 to always fetch fresh content.\n */\n maxAgeSeconds?: number;\n}\n\nexport interface ParallelSearchConfig {\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts for single-response answers (default)\n * - \"agentic\": Concise, token-efficient results for multi-step agentic workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Default maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n maxResults?: number;\n\n /**\n * Default source policy for controlling which domains to include/exclude.\n */\n sourcePolicy?: ParallelSearchSourcePolicy;\n\n /**\n * Default excerpt configuration for controlling result length.\n */\n excerpts?: ParallelSearchExcerpts;\n\n /**\n * Default fetch policy for controlling content freshness.\n */\n fetchPolicy?: ParallelSearchFetchPolicy;\n}\n\nexport interface ParallelSearchResult {\n /** URL of the search result */\n url: string;\n /** Title of the search result */\n title: string;\n /** Extracted text excerpt/content from the page */\n excerpt: string;\n /** Publication date of the content (may be null) */\n publishDate?: string | null;\n /** Relevance score for the result */\n relevanceScore?: number;\n}\n\nexport interface ParallelSearchResponse {\n /** Unique identifier for this search request */\n searchId: string;\n /** Array of search results */\n results: ParallelSearchResult[];\n}\n\nexport interface ParallelSearchError {\n /** Error type */\n error:\n | 'api_error'\n | 'rate_limit'\n | 'timeout'\n | 'invalid_input'\n | 'configuration_error'\n | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface ParallelSearchInput {\n /**\n * Natural-language description of the web research goal.\n * Include source or freshness guidance and broader context from the task.\n * Maximum 5000 characters.\n */\n objective: string;\n\n /**\n * Optional search queries to supplement the objective.\n * Maximum 200 characters per query.\n */\n search_queries?: string[];\n\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts\n * - \"agentic\": Concise, token-efficient results for multi-step workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n max_results?: number;\n\n /**\n * Source policy for controlling which domains to include/exclude.\n */\n source_policy?: {\n include_domains?: string[];\n exclude_domains?: string[];\n after_date?: string;\n };\n\n /**\n * Excerpt configuration for controlling result length.\n */\n excerpts?: {\n max_chars_per_result?: number;\n max_chars_total?: number;\n };\n\n /**\n * Fetch policy for controlling content freshness.\n */\n fetch_policy?: {\n max_age_seconds?: number;\n };\n}\n\nexport type ParallelSearchOutput = ParallelSearchResponse | ParallelSearchError;\n\nconst parallelSearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n objective: z\n .string()\n .describe(\n 'Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters.',\n ),\n\n search_queries: z\n .array(z.string())\n .optional()\n .describe(\n 'Optional search queries to supplement the objective. Maximum 200 characters per query.',\n ),\n\n mode: z\n .enum(['one-shot', 'agentic'])\n .optional()\n .describe(\n 'Mode preset: \"one-shot\" for comprehensive results with longer excerpts (default), \"agentic\" for concise, token-efficient results for multi-step workflows.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of results to return (1-20). Defaults to 10 if not specified.',\n ),\n\n source_policy: z\n .object({\n include_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to include in search results.'),\n exclude_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to exclude from search results.'),\n after_date: z\n .string()\n .optional()\n .describe(\n 'Only include results published after this date (ISO 8601 format).',\n ),\n })\n .optional()\n .describe(\n 'Source policy for controlling which domains to include/exclude and freshness.',\n ),\n\n excerpts: z\n .object({\n max_chars_per_result: z\n .number()\n .optional()\n .describe('Maximum characters per result.'),\n max_chars_total: z\n .number()\n .optional()\n .describe('Maximum total characters across all results.'),\n })\n .optional()\n .describe('Excerpt configuration for controlling result length.'),\n\n fetch_policy: z\n .object({\n max_age_seconds: z\n .number()\n .optional()\n .describe(\n 'Maximum age in seconds for cached content. Set to 0 to always fetch fresh content.',\n ),\n })\n .optional()\n .describe('Fetch policy for controlling content freshness.'),\n }),\n ),\n);\n\nconst parallelSearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n searchId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string(),\n excerpt: z.string(),\n publishDate: z.string().nullable().optional(),\n relevanceScore: z.number().optional(),\n }),\n ),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'configuration_error',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const parallelSearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n ParallelSearchInput,\n ParallelSearchOutput,\n ParallelSearchConfig\n >({\n id: 'gateway.parallel_search',\n inputSchema: parallelSearchInputSchema,\n outputSchema: parallelSearchOutputSchema,\n });\n\nexport const parallelSearch = (\n config: ParallelSearchConfig = {},\n): ReturnType<typeof parallelSearchToolFactory> =>\n parallelSearchToolFactory(config);\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface PerplexitySearchConfig {\n /**\n * Default maximum number of search results to return (1-20, default: 10).\n */\n maxResults?: number;\n\n /**\n * Default maximum tokens to extract per search result page (256-2048, default: 2048).\n */\n maxTokensPerPage?: number;\n\n /**\n * Default maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n maxTokens?: number;\n\n /**\n * Default two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * Default list of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n searchDomainFilter?: string[];\n\n /**\n * Default list of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n searchLanguageFilter?: string[];\n\n /**\n * Default recency filter for results.\n * Cannot be combined with searchAfterDate/searchBeforeDate at runtime.\n */\n searchRecencyFilter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport interface PerplexitySearchResult {\n /** Title of the search result */\n title: string;\n /** URL of the search result */\n url: string;\n /** Text snippet/preview of the content */\n snippet: string;\n /** Publication date of the content */\n date?: string;\n /** Last updated date of the content */\n lastUpdated?: string;\n}\n\nexport interface PerplexitySearchResponse {\n /** Array of search results */\n results: PerplexitySearchResult[];\n /** Unique identifier for this search request */\n id: string;\n}\n\nexport interface PerplexitySearchError {\n /** Error type */\n error: 'api_error' | 'rate_limit' | 'timeout' | 'invalid_input' | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface PerplexitySearchInput {\n /**\n * Search query (string) or multiple queries (array of up to 5 strings).\n * Multi-query searches return combined results from all queries.\n */\n query: string | string[];\n\n /**\n * Maximum number of search results to return (1-20, default: 10).\n */\n max_results?: number;\n\n /**\n * Maximum number of tokens to extract per search result page (256-2048, default: 2048).\n */\n max_tokens_per_page?: number;\n\n /**\n * Maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n max_tokens?: number;\n\n /**\n * Two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * List of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n search_domain_filter?: string[];\n\n /**\n * List of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n search_language_filter?: string[];\n\n /**\n * Include only results published after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n search_after_date?: string;\n\n /**\n * Include only results published before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n search_before_date?: string;\n\n /**\n * Include only results last updated after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_after_filter?: string;\n\n /**\n * Include only results last updated before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_before_filter?: string;\n\n /**\n * Filter results by relative time period.\n * Cannot be used with search_after_date or search_before_date.\n */\n search_recency_filter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport type PerplexitySearchOutput =\n | PerplexitySearchResponse\n | PerplexitySearchError;\n\nconst perplexitySearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n query: z\n .union([z.string(), z.array(z.string())])\n .describe(\n 'Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of search results to return (1-20, default: 10)',\n ),\n\n max_tokens_per_page: z\n .number()\n .optional()\n .describe(\n 'Maximum number of tokens to extract per search result page (256-2048, default: 2048)',\n ),\n\n max_tokens: z\n .number()\n .optional()\n .describe(\n 'Maximum total tokens across all search results (default: 25000, max: 1000000)',\n ),\n\n country: z\n .string()\n .optional()\n .describe(\n \"Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')\",\n ),\n\n search_domain_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']\",\n ),\n\n search_language_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']\",\n ),\n\n search_after_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_before_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_after_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_before_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_recency_filter: z\n .enum(['day', 'week', 'month', 'year'])\n .optional()\n .describe(\n 'Filter results by relative time period. Cannot be used with search_after_date or search_before_date.',\n ),\n }),\n ),\n);\n\nconst perplexitySearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n results: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n date: z.string().optional(),\n lastUpdated: z.string().optional(),\n }),\n ),\n id: z.string(),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const perplexitySearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n PerplexitySearchInput,\n PerplexitySearchOutput,\n PerplexitySearchConfig\n >({\n id: 'gateway.perplexity_search',\n inputSchema: perplexitySearchInputSchema,\n outputSchema: perplexitySearchOutputSchema,\n });\n\nexport const perplexitySearch = (\n config: PerplexitySearchConfig = {},\n): ReturnType<typeof perplexitySearchToolFactory> =>\n perplexitySearchToolFactory(config);\n","import { parallelSearch } from './tool/parallel-search';\nimport { perplexitySearch } from './tool/perplexity-search';\n\n/**\n * Gateway-specific provider-defined tools.\n */\nexport const gatewayTools = {\n /**\n * Search the web using Parallel AI's Search API for LLM-optimized excerpts.\n *\n * Takes a natural language objective and returns relevant excerpts,\n * replacing multiple keyword searches with a single call for broad\n * or complex queries. Supports different search types for depth vs\n * breadth tradeoffs.\n */\n parallelSearch,\n\n /**\n * Search the web using Perplexity's Search API for real-time information,\n * news, research papers, and articles.\n *\n * Provides ranked search results with advanced filtering options including\n * domain, language, date range, and recency filters.\n */\n perplexitySearch,\n};\n","import { getContext } from '@vercel/oidc';\nexport { getVercelOidcToken } from '@vercel/oidc';\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider_utils","import_v4","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","import_provider_utils","_a","_a","import_v4","import_provider_utils","import_provider_utils","import_v4","import_provider_utils","import_v4","import_provider_utils","import_v4","_a","import_provider_utils","import_v4","_a","_b","import_provider_utils","import_v4","_a","providerMetadataEntrySchema","import_provider_utils","import_provider_utils","import_zod","import_oidc","_a","import_provider_utils","_a","_b"]}
package/dist/index.mjs CHANGED
@@ -766,7 +766,7 @@ var GatewayImageModel = class {
766
766
  headers,
767
767
  abortSignal
768
768
  }) {
769
- var _a8;
769
+ var _a8, _b8, _c, _d;
770
770
  const resolvedHeaders = await resolve4(this.config.headers());
771
771
  try {
772
772
  const {
@@ -812,6 +812,13 @@ var GatewayImageModel = class {
812
812
  timestamp: /* @__PURE__ */ new Date(),
813
813
  modelId: this.modelId,
814
814
  headers: responseHeaders
815
+ },
816
+ ...responseBody.usage != null && {
817
+ usage: {
818
+ inputTokens: (_b8 = responseBody.usage.inputTokens) != null ? _b8 : void 0,
819
+ outputTokens: (_c = responseBody.usage.outputTokens) != null ? _c : void 0,
820
+ totalTokens: (_d = responseBody.usage.totalTokens) != null ? _d : void 0
821
+ }
815
822
  }
816
823
  };
817
824
  } catch (error) {
@@ -840,16 +847,33 @@ function maybeEncodeImageFile(file) {
840
847
  var providerMetadataEntrySchema = z7.object({
841
848
  images: z7.array(z7.unknown()).optional()
842
849
  }).catchall(z7.unknown());
850
+ var gatewayImageWarningSchema = z7.discriminatedUnion("type", [
851
+ z7.object({
852
+ type: z7.literal("unsupported"),
853
+ feature: z7.string(),
854
+ details: z7.string().optional()
855
+ }),
856
+ z7.object({
857
+ type: z7.literal("compatibility"),
858
+ feature: z7.string(),
859
+ details: z7.string().optional()
860
+ }),
861
+ z7.object({
862
+ type: z7.literal("other"),
863
+ message: z7.string()
864
+ })
865
+ ]);
866
+ var gatewayImageUsageSchema = z7.object({
867
+ inputTokens: z7.number().nullish(),
868
+ outputTokens: z7.number().nullish(),
869
+ totalTokens: z7.number().nullish()
870
+ });
843
871
  var gatewayImageResponseSchema = z7.object({
844
872
  images: z7.array(z7.string()),
845
873
  // Always base64 strings over the wire
846
- warnings: z7.array(
847
- z7.object({
848
- type: z7.literal("other"),
849
- message: z7.string()
850
- })
851
- ).optional(),
852
- providerMetadata: z7.record(z7.string(), providerMetadataEntrySchema).optional()
874
+ warnings: z7.array(gatewayImageWarningSchema).optional(),
875
+ providerMetadata: z7.record(z7.string(), providerMetadataEntrySchema).optional(),
876
+ usage: gatewayImageUsageSchema.optional()
853
877
  });
854
878
 
855
879
  // src/gateway-video-model.ts
@@ -1183,7 +1207,7 @@ async function getVercelRequestId() {
1183
1207
  import { withUserAgentSuffix } from "@ai-sdk/provider-utils";
1184
1208
 
1185
1209
  // src/version.ts
1186
- var VERSION = true ? "3.0.37" : "0.0.0-test";
1210
+ var VERSION = true ? "3.0.38" : "0.0.0-test";
1187
1211
 
1188
1212
  // src/gateway-provider.ts
1189
1213
  var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
@@ -1 +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/errors/parse-auth-method.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/gateway-embedding-model.ts","../src/gateway-image-model.ts","../src/gateway-video-model.ts","../src/tool/parallel-search.ts","../src/tool/perplexity-search.ts","../src/gateway-tools.ts","../src/vercel-environment.ts","../src/version.ts"],"sourcesContent":["import {\n loadOptionalSetting,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n parseAuthMethod,\n} from './errors/parse-auth-method';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport { GatewayEmbeddingModel } from './gateway-embedding-model';\nimport { GatewayImageModel } from './gateway-image-model';\nimport { GatewayVideoModel } from './gateway-video-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport type { GatewayVideoModelId } from './gateway-video-model-settings';\nimport { gatewayTools } from './gateway-tools';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport type {\n LanguageModelV3,\n EmbeddingModelV3,\n ImageModelV3,\n Experimental_VideoModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV3 {\n (modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Returns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n\n /**\n * Returns credit information for the authenticated user.\n */\n getCredits(): Promise<GatewayCreditsResponse>;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embedding(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating images.\n */\n image(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating images.\n */\n imageModel(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n video(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n videoModel(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Gateway-specific tools executed server-side.\n */\n tools: typeof gatewayTools;\n}\n\nexport interface GatewayProviderSettings {\n /**\n * The base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * How 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\n/**\n * Create 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/v3/ai';\n\n const getHeaders = async () => {\n try {\n const auth = await getGatewayAuthToken(options);\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${auth.token}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n ...options.headers,\n },\n `ai-sdk/gateway/${VERSION}`,\n );\n } catch (error) {\n throw GatewayAuthenticationError.createContextualError({\n apiKeyProvided: false,\n oidcTokenProvided: false,\n statusCode: 401,\n cause: error,\n });\n }\n };\n\n const createO11yHeaders = () => {\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\n return 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 const createLanguageModel = (modelId: GatewayModelId) => {\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\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\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(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const getCredits = async () => {\n return new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getCredits()\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\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.specificationVersion = 'v3' as const;\n provider.getAvailableModels = getAvailableModels;\n provider.getCredits = getCredits;\n provider.imageModel = (modelId: GatewayImageModelId) => {\n return new GatewayImageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.languageModel = createLanguageModel;\n const createEmbeddingModel = (modelId: GatewayEmbeddingModelId) => {\n return new GatewayEmbeddingModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.videoModel = (modelId: GatewayVideoModelId) => {\n return new GatewayVideoModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.chat = provider.languageModel;\n provider.embedding = provider.embeddingModel;\n provider.image = provider.imageModel;\n provider.video = provider.videoModel;\n provider.tools = gatewayTools;\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n options: GatewayProviderSettings,\n): Promise<{ token: string; authMethod: 'api-key' | 'oidc' }> {\n const apiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n });\n\n if (apiKey) {\n return {\n token: apiKey,\n authMethod: 'api-key',\n };\n }\n\n const oidcToken = await getVercelOidcToken();\n return {\n token: oidcToken,\n authMethod: 'oidc',\n };\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\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 authMethod,\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 authMethod,\n });\n}\n","import { z } from 'zod/v4';\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';\nimport {\n InferSchema,\n lazySchema,\n safeValidateTypes,\n validateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport async function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n authMethod,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n authMethod?: 'api-key' | 'oidc';\n}): Promise<GatewayError> {\n const parseResult = await safeValidateTypes({\n value: response,\n schema: gatewayErrorResponseSchema,\n });\n\n if (!parseResult.success) {\n // Try to extract generationId even if validation failed\n const rawGenerationId =\n typeof response === 'object' &&\n response !== null &&\n 'generationId' in response\n ? (response as { generationId?: string }).generationId\n : undefined;\n\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n generationId: rawGenerationId,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.value;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n const generationId = validatedResponse.generationId ?? undefined;\n\n switch (errorType) {\n case 'authentication_error':\n return GatewayAuthenticationError.createContextualError({\n apiKeyProvided: authMethod === 'api-key',\n oidcTokenProvided: authMethod === 'oidc',\n statusCode,\n cause,\n generationId,\n });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'model_not_found': {\n const modelResult = await safeValidateTypes({\n value: validatedResponse.error.param,\n schema: modelNotFoundParamSchema,\n });\n\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.value.modelId : undefined,\n cause,\n generationId,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n default:\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n }\n}\n\nconst gatewayErrorResponseSchema = lazySchema(() =>\n zodSchema(\n 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 generationId: z.string().nullish(),\n }),\n ),\n);\n\nexport type GatewayErrorResponse = InferSchema<\n typeof gatewayErrorResponseSchema\n>;\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 readonly generationId?: string;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n generationId,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }) {\n super(generationId ? `${message} [${generationId}]` : message);\n this.statusCode = statusCode;\n this.cause = cause;\n this.generationId = generationId;\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a contextual error message when authentication fails\n */\n static createContextualError({\n apiKeyProvided,\n oidcTokenProvided,\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n generationId,\n }: {\n apiKeyProvided: boolean;\n oidcTokenProvided: boolean;\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }): GatewayAuthenticationError {\n let contextualMessage: string;\n\n if (apiKeyProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid API key.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else if (oidcTokenProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.\n\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.\n\nAlternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;\n } else {\n contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nOption 1 - API key:\nCreate an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOption 2 - OIDC token:\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;\n }\n\n return new GatewayAuthenticationError({\n message: contextualMessage,\n statusCode,\n cause,\n generationId,\n });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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/v4';\nimport { GatewayError } from './gateway-error';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = lazySchema(() =>\n zodSchema(\n z.object({\n modelId: z.string(),\n }),\n ),\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { GatewayError } from './gateway-error';\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?: TypeValidationError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n generationId,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: TypeValidationError;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 { z } from 'zod/v4';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\n\nexport async function parseAuthMethod(\n headers: Record<string, string | undefined>,\n) {\n const result = await safeValidateTypes({\n value: headers[GATEWAY_AUTH_METHOD_HEADER],\n schema: gatewayAuthMethodSchema,\n });\n\n return result.success ? result.value : undefined;\n}\n\nconst gatewayAuthMethodSchema = lazySchema(() =>\n zodSchema(z.union([z.literal('api-key'), z.literal('oidc')])),\n);\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n lazySchema,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport interface GatewayCreditsResponse {\n /** The remaining gateway credit balance available for API usage */\n balance: string;\n /** The total amount of gateway credits that have been consumed */\n totalUsed: string;\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 gatewayAvailableModelsResponseSchema,\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 await asGatewayError(error);\n }\n }\n\n async getCredits(): Promise<GatewayCreditsResponse> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/credits`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayCreditsResponseSchema,\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 await asGatewayError(error);\n }\n }\n}\n\nconst gatewayAvailableModelsResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n models: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullish(),\n pricing: z\n .object({\n input: z.string(),\n output: z.string(),\n input_cache_read: z.string().nullish(),\n input_cache_write: z.string().nullish(),\n })\n .transform(\n ({ input, output, input_cache_read, input_cache_write }) => ({\n input,\n output,\n ...(input_cache_read\n ? { cachedInputTokens: input_cache_read }\n : {}),\n ...(input_cache_write\n ? { cacheCreationInputTokens: input_cache_write }\n : {}),\n }),\n )\n .nullish(),\n specification: z.object({\n specificationVersion: z.literal('v3'),\n provider: z.string(),\n modelId: z.string(),\n }),\n modelType: z\n .enum(['embedding', 'image', 'language', 'video'])\n .nullish(),\n }),\n ),\n }),\n ),\n);\n\nconst gatewayCreditsResponseSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n balance: z.string(),\n total_used: z.string(),\n })\n .transform(({ balance, total_used }) => ({\n balance,\n totalUsed: total_used,\n })),\n ),\n);\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n SharedV3Warning,\n LanguageModelV3FilePart,\n LanguageModelV3StreamPart,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\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/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 private async getArgs(options: LanguageModelV3CallOptions) {\n const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n return {\n args: this.maybeEncodeFileParts(optionsWithoutSignal),\n warnings: [],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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: args },\n response: { headers: responseHeaders, body: rawResponse },\n warnings,\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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<LanguageModelV3StreamPart>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n if (warnings.length > 0) {\n controller.enqueue({ type: 'stream-start', warnings });\n }\n },\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n if (\n streamPart.type === 'response-metadata' &&\n streamPart.timestamp &&\n typeof streamPart.timestamp === 'string'\n ) {\n streamPart.timestamp = new Date(streamPart.timestamp);\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body: args },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\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 file parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the file data.\n * @param options - The options to encode.\n * @returns The options with the file parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV3CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV3FilePart;\n // If the file part is a URL it will get cleanly converted to a string.\n // If it's a binary file 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': '3',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import type {\n EmbeddingModelV3,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n lazySchema,\n postJsonToApi,\n resolve,\n zodSchema,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n values,\n ...(providerOptions ? { providerOptions } : {}),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayEmbeddingResponseSchema,\n ),\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 embeddings: responseBody.embeddings,\n usage: responseBody.usage ?? undefined,\n providerMetadata:\n responseBody.providerMetadata as unknown as SharedV3ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/embedding-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-embedding-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embeddings: z.array(z.array(z.number())),\n usage: z.object({ tokens: z.number() }).nullish(),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n ImageModelV3,\n ImageModelV3File,\n ImageModelV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayImageModel implements ImageModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n files,\n mask,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV3['doGenerate']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(size && { size }),\n ...(aspectRatio && { aspectRatio }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(files && {\n files: files.map(file => maybeEncodeImageFile(file)),\n }),\n ...(mask && { mask: maybeEncodeImageFile(mask) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayImageResponseSchema,\n ),\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 images: responseBody.images, // Always base64 strings from server\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as ImageModelV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/image-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-image-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeImageFile(file: ImageModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n images: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayImageResponseSchema = z.object({\n images: z.array(z.string()), // Always base64 strings over the wire\n warnings: z\n .array(\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n )\n .optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import type {\n Experimental_VideoModelV3,\n Experimental_VideoModelV3CallOptions,\n Experimental_VideoModelV3File,\n Experimental_VideoModelV3VideoData,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxVideosPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n image,\n providerOptions,\n headers,\n abortSignal,\n }: Experimental_VideoModelV3CallOptions): Promise<{\n videos: Array<Experimental_VideoModelV3VideoData>;\n warnings: Array<{ type: 'other'; message: string }>;\n providerMetadata?: SharedV3ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n }> {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(aspectRatio && { aspectRatio }),\n ...(resolution && { resolution }),\n ...(duration && { duration }),\n ...(fps && { fps }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(image && { image: maybeEncodeVideoFile(image) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayVideoResponseSchema,\n ),\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 videos: responseBody.videos,\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as SharedV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/video-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-video-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeVideoFile(file: Experimental_VideoModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n videos: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayVideoDataSchema = z.union([\n z.object({\n type: z.literal('url'),\n url: z.string(),\n mediaType: z.string(),\n }),\n z.object({\n type: z.literal('base64'),\n data: z.string(),\n mediaType: z.string(),\n }),\n]);\n\nconst gatewayVideoResponseSchema = z.object({\n videos: z.array(gatewayVideoDataSchema),\n warnings: z\n .array(\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n )\n .optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface ParallelSearchSourcePolicy {\n /**\n * List of domains to include in search results.\n * Example: ['wikipedia.org', 'nature.com']\n */\n includeDomains?: string[];\n\n /**\n * List of domains to exclude from search results.\n * Example: ['reddit.com', 'twitter.com']\n */\n excludeDomains?: string[];\n\n /**\n * Only include results published after this date (ISO 8601 format).\n * Example: '2024-01-01'\n */\n afterDate?: string;\n}\n\nexport interface ParallelSearchExcerpts {\n /**\n * Maximum characters per result.\n */\n maxCharsPerResult?: number;\n\n /**\n * Maximum total characters across all results.\n */\n maxCharsTotal?: number;\n}\n\nexport interface ParallelSearchFetchPolicy {\n /**\n * Maximum age in seconds for cached content.\n * Set to 0 to always fetch fresh content.\n */\n maxAgeSeconds?: number;\n}\n\nexport interface ParallelSearchConfig {\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts for single-response answers (default)\n * - \"agentic\": Concise, token-efficient results for multi-step agentic workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Default maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n maxResults?: number;\n\n /**\n * Default source policy for controlling which domains to include/exclude.\n */\n sourcePolicy?: ParallelSearchSourcePolicy;\n\n /**\n * Default excerpt configuration for controlling result length.\n */\n excerpts?: ParallelSearchExcerpts;\n\n /**\n * Default fetch policy for controlling content freshness.\n */\n fetchPolicy?: ParallelSearchFetchPolicy;\n}\n\nexport interface ParallelSearchResult {\n /** URL of the search result */\n url: string;\n /** Title of the search result */\n title: string;\n /** Extracted text excerpt/content from the page */\n excerpt: string;\n /** Publication date of the content (may be null) */\n publishDate?: string | null;\n /** Relevance score for the result */\n relevanceScore?: number;\n}\n\nexport interface ParallelSearchResponse {\n /** Unique identifier for this search request */\n searchId: string;\n /** Array of search results */\n results: ParallelSearchResult[];\n}\n\nexport interface ParallelSearchError {\n /** Error type */\n error:\n | 'api_error'\n | 'rate_limit'\n | 'timeout'\n | 'invalid_input'\n | 'configuration_error'\n | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface ParallelSearchInput {\n /**\n * Natural-language description of the web research goal.\n * Include source or freshness guidance and broader context from the task.\n * Maximum 5000 characters.\n */\n objective: string;\n\n /**\n * Optional search queries to supplement the objective.\n * Maximum 200 characters per query.\n */\n search_queries?: string[];\n\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts\n * - \"agentic\": Concise, token-efficient results for multi-step workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n max_results?: number;\n\n /**\n * Source policy for controlling which domains to include/exclude.\n */\n source_policy?: {\n include_domains?: string[];\n exclude_domains?: string[];\n after_date?: string;\n };\n\n /**\n * Excerpt configuration for controlling result length.\n */\n excerpts?: {\n max_chars_per_result?: number;\n max_chars_total?: number;\n };\n\n /**\n * Fetch policy for controlling content freshness.\n */\n fetch_policy?: {\n max_age_seconds?: number;\n };\n}\n\nexport type ParallelSearchOutput = ParallelSearchResponse | ParallelSearchError;\n\nconst parallelSearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n objective: z\n .string()\n .describe(\n 'Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters.',\n ),\n\n search_queries: z\n .array(z.string())\n .optional()\n .describe(\n 'Optional search queries to supplement the objective. Maximum 200 characters per query.',\n ),\n\n mode: z\n .enum(['one-shot', 'agentic'])\n .optional()\n .describe(\n 'Mode preset: \"one-shot\" for comprehensive results with longer excerpts (default), \"agentic\" for concise, token-efficient results for multi-step workflows.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of results to return (1-20). Defaults to 10 if not specified.',\n ),\n\n source_policy: z\n .object({\n include_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to include in search results.'),\n exclude_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to exclude from search results.'),\n after_date: z\n .string()\n .optional()\n .describe(\n 'Only include results published after this date (ISO 8601 format).',\n ),\n })\n .optional()\n .describe(\n 'Source policy for controlling which domains to include/exclude and freshness.',\n ),\n\n excerpts: z\n .object({\n max_chars_per_result: z\n .number()\n .optional()\n .describe('Maximum characters per result.'),\n max_chars_total: z\n .number()\n .optional()\n .describe('Maximum total characters across all results.'),\n })\n .optional()\n .describe('Excerpt configuration for controlling result length.'),\n\n fetch_policy: z\n .object({\n max_age_seconds: z\n .number()\n .optional()\n .describe(\n 'Maximum age in seconds for cached content. Set to 0 to always fetch fresh content.',\n ),\n })\n .optional()\n .describe('Fetch policy for controlling content freshness.'),\n }),\n ),\n);\n\nconst parallelSearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n searchId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string(),\n excerpt: z.string(),\n publishDate: z.string().nullable().optional(),\n relevanceScore: z.number().optional(),\n }),\n ),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'configuration_error',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const parallelSearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n ParallelSearchInput,\n ParallelSearchOutput,\n ParallelSearchConfig\n >({\n id: 'gateway.parallel_search',\n inputSchema: parallelSearchInputSchema,\n outputSchema: parallelSearchOutputSchema,\n });\n\nexport const parallelSearch = (\n config: ParallelSearchConfig = {},\n): ReturnType<typeof parallelSearchToolFactory> =>\n parallelSearchToolFactory(config);\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface PerplexitySearchConfig {\n /**\n * Default maximum number of search results to return (1-20, default: 10).\n */\n maxResults?: number;\n\n /**\n * Default maximum tokens to extract per search result page (256-2048, default: 2048).\n */\n maxTokensPerPage?: number;\n\n /**\n * Default maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n maxTokens?: number;\n\n /**\n * Default two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * Default list of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n searchDomainFilter?: string[];\n\n /**\n * Default list of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n searchLanguageFilter?: string[];\n\n /**\n * Default recency filter for results.\n * Cannot be combined with searchAfterDate/searchBeforeDate at runtime.\n */\n searchRecencyFilter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport interface PerplexitySearchResult {\n /** Title of the search result */\n title: string;\n /** URL of the search result */\n url: string;\n /** Text snippet/preview of the content */\n snippet: string;\n /** Publication date of the content */\n date?: string;\n /** Last updated date of the content */\n lastUpdated?: string;\n}\n\nexport interface PerplexitySearchResponse {\n /** Array of search results */\n results: PerplexitySearchResult[];\n /** Unique identifier for this search request */\n id: string;\n}\n\nexport interface PerplexitySearchError {\n /** Error type */\n error: 'api_error' | 'rate_limit' | 'timeout' | 'invalid_input' | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface PerplexitySearchInput {\n /**\n * Search query (string) or multiple queries (array of up to 5 strings).\n * Multi-query searches return combined results from all queries.\n */\n query: string | string[];\n\n /**\n * Maximum number of search results to return (1-20, default: 10).\n */\n max_results?: number;\n\n /**\n * Maximum number of tokens to extract per search result page (256-2048, default: 2048).\n */\n max_tokens_per_page?: number;\n\n /**\n * Maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n max_tokens?: number;\n\n /**\n * Two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * List of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n search_domain_filter?: string[];\n\n /**\n * List of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n search_language_filter?: string[];\n\n /**\n * Include only results published after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n search_after_date?: string;\n\n /**\n * Include only results published before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n search_before_date?: string;\n\n /**\n * Include only results last updated after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_after_filter?: string;\n\n /**\n * Include only results last updated before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_before_filter?: string;\n\n /**\n * Filter results by relative time period.\n * Cannot be used with search_after_date or search_before_date.\n */\n search_recency_filter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport type PerplexitySearchOutput =\n | PerplexitySearchResponse\n | PerplexitySearchError;\n\nconst perplexitySearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n query: z\n .union([z.string(), z.array(z.string())])\n .describe(\n 'Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of search results to return (1-20, default: 10)',\n ),\n\n max_tokens_per_page: z\n .number()\n .optional()\n .describe(\n 'Maximum number of tokens to extract per search result page (256-2048, default: 2048)',\n ),\n\n max_tokens: z\n .number()\n .optional()\n .describe(\n 'Maximum total tokens across all search results (default: 25000, max: 1000000)',\n ),\n\n country: z\n .string()\n .optional()\n .describe(\n \"Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')\",\n ),\n\n search_domain_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']\",\n ),\n\n search_language_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']\",\n ),\n\n search_after_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_before_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_after_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_before_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_recency_filter: z\n .enum(['day', 'week', 'month', 'year'])\n .optional()\n .describe(\n 'Filter results by relative time period. Cannot be used with search_after_date or search_before_date.',\n ),\n }),\n ),\n);\n\nconst perplexitySearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n results: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n date: z.string().optional(),\n lastUpdated: z.string().optional(),\n }),\n ),\n id: z.string(),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const perplexitySearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n PerplexitySearchInput,\n PerplexitySearchOutput,\n PerplexitySearchConfig\n >({\n id: 'gateway.perplexity_search',\n inputSchema: perplexitySearchInputSchema,\n outputSchema: perplexitySearchOutputSchema,\n });\n\nexport const perplexitySearch = (\n config: PerplexitySearchConfig = {},\n): ReturnType<typeof perplexitySearchToolFactory> =>\n perplexitySearchToolFactory(config);\n","import { parallelSearch } from './tool/parallel-search';\nimport { perplexitySearch } from './tool/perplexity-search';\n\n/**\n * Gateway-specific provider-defined tools.\n */\nexport const gatewayTools = {\n /**\n * Search the web using Parallel AI's Search API for LLM-optimized excerpts.\n *\n * Takes a natural language objective and returns relevant excerpts,\n * replacing multiple keyword searches with a single call for broad\n * or complex queries. Supports different search types for depth vs\n * breadth tradeoffs.\n */\n parallelSearch,\n\n /**\n * Search the web using Perplexity's Search API for real-time information,\n * news, research papers, and articles.\n *\n * Provides ranked search results with advanced filtering options including\n * domain, language, date range, and recency filters.\n */\n perplexitySearch,\n};\n","import { getContext } from '@vercel/oidc';\nexport { getVercelOidcToken } from '@vercel/oidc';\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\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","lazySchema","zodSchema","_a","z","_a","z","lazySchema","safeValidateTypes","zodSchema","lazySchema","zodSchema","z","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","resolve","z","resolve","createJsonResponseHandler","z","createJsonErrorResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","lazySchema","postJsonToApi","resolve","zodSchema","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","postJsonToApi","resolve","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","combineHeaders","convertUint8ArrayToBase64","createJsonResponseHandler","createJsonErrorResponseHandler","postJsonToApi","resolve","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","convertUint8ArrayToBase64","providerMetadataEntrySchema","lazySchema","zodSchema","z","createProviderToolFactoryWithOutputSchema","lazySchema","zodSchema","z","_a","_a","_b"]}
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/errors/parse-auth-method.ts","../src/gateway-fetch-metadata.ts","../src/gateway-language-model.ts","../src/gateway-embedding-model.ts","../src/gateway-image-model.ts","../src/gateway-video-model.ts","../src/tool/parallel-search.ts","../src/tool/perplexity-search.ts","../src/gateway-tools.ts","../src/vercel-environment.ts","../src/version.ts"],"sourcesContent":["import {\n loadOptionalSetting,\n withoutTrailingSlash,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n parseAuthMethod,\n} from './errors/parse-auth-method';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport { GatewayEmbeddingModel } from './gateway-embedding-model';\nimport { GatewayImageModel } from './gateway-image-model';\nimport { GatewayVideoModel } from './gateway-video-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport type { GatewayVideoModelId } from './gateway-video-model-settings';\nimport { gatewayTools } from './gateway-tools';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport type {\n LanguageModelV3,\n EmbeddingModelV3,\n ImageModelV3,\n Experimental_VideoModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport { withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV3 {\n (modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: GatewayModelId): LanguageModelV3;\n\n /**\n * Returns available providers and models for use with the remote provider.\n */\n getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n\n /**\n * Returns credit information for the authenticated user.\n */\n getCredits(): Promise<GatewayCreditsResponse>;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embedding(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * Creates a model for generating images.\n */\n image(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating images.\n */\n imageModel(modelId: GatewayImageModelId): ImageModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n video(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Creates a model for generating videos.\n */\n videoModel(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n /**\n * Gateway-specific tools executed server-side.\n */\n tools: typeof gatewayTools;\n}\n\nexport interface GatewayProviderSettings {\n /**\n * The base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n */\n baseURL?: string;\n\n /**\n * API key that is being sent using the `Authorization` header.\n */\n apiKey?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * How 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\n/**\n * Create 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/v3/ai';\n\n const getHeaders = async () => {\n try {\n const auth = await getGatewayAuthToken(options);\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${auth.token}`,\n 'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n ...options.headers,\n },\n `ai-sdk/gateway/${VERSION}`,\n );\n } catch (error) {\n throw GatewayAuthenticationError.createContextualError({\n apiKeyProvided: false,\n oidcTokenProvided: false,\n statusCode: 401,\n cause: error,\n });\n }\n };\n\n const createO11yHeaders = () => {\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\n return 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 const createLanguageModel = (modelId: GatewayModelId) => {\n return new GatewayLanguageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\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\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(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n }\n\n return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n };\n\n const getCredits = async () => {\n return new GatewayFetchMetadata({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getCredits()\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\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.specificationVersion = 'v3' as const;\n provider.getAvailableModels = getAvailableModels;\n provider.getCredits = getCredits;\n provider.imageModel = (modelId: GatewayImageModelId) => {\n return new GatewayImageModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.languageModel = createLanguageModel;\n const createEmbeddingModel = (modelId: GatewayEmbeddingModelId) => {\n return new GatewayEmbeddingModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.videoModel = (modelId: GatewayVideoModelId) => {\n return new GatewayVideoModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.chat = provider.languageModel;\n provider.embedding = provider.embeddingModel;\n provider.image = provider.imageModel;\n provider.video = provider.videoModel;\n provider.tools = gatewayTools;\n return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n options: GatewayProviderSettings,\n): Promise<{ token: string; authMethod: 'api-key' | 'oidc' }> {\n const apiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AI_GATEWAY_API_KEY',\n });\n\n if (apiKey) {\n return {\n token: apiKey,\n authMethod: 'api-key',\n };\n }\n\n const oidcToken = await getVercelOidcToken();\n return {\n token: oidcToken,\n authMethod: 'oidc',\n };\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\n\nexport function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\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 authMethod,\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 authMethod,\n });\n}\n","import { z } from 'zod/v4';\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';\nimport {\n InferSchema,\n lazySchema,\n safeValidateTypes,\n validateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport async function createGatewayErrorFromResponse({\n response,\n statusCode,\n defaultMessage = 'Gateway request failed',\n cause,\n authMethod,\n}: {\n response: unknown;\n statusCode: number;\n defaultMessage?: string;\n cause?: unknown;\n authMethod?: 'api-key' | 'oidc';\n}): Promise<GatewayError> {\n const parseResult = await safeValidateTypes({\n value: response,\n schema: gatewayErrorResponseSchema,\n });\n\n if (!parseResult.success) {\n // Try to extract generationId even if validation failed\n const rawGenerationId =\n typeof response === 'object' &&\n response !== null &&\n 'generationId' in response\n ? (response as { generationId?: string }).generationId\n : undefined;\n\n return new GatewayResponseError({\n message: `Invalid error response format: ${defaultMessage}`,\n statusCode,\n response,\n validationError: parseResult.error,\n cause,\n generationId: rawGenerationId,\n });\n }\n\n const validatedResponse: GatewayErrorResponse = parseResult.value;\n const errorType = validatedResponse.error.type;\n const message = validatedResponse.error.message;\n const generationId = validatedResponse.generationId ?? undefined;\n\n switch (errorType) {\n case 'authentication_error':\n return GatewayAuthenticationError.createContextualError({\n apiKeyProvided: authMethod === 'api-key',\n oidcTokenProvided: authMethod === 'oidc',\n statusCode,\n cause,\n generationId,\n });\n case 'invalid_request_error':\n return new GatewayInvalidRequestError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'rate_limit_exceeded':\n return new GatewayRateLimitError({\n message,\n statusCode,\n cause,\n generationId,\n });\n case 'model_not_found': {\n const modelResult = await safeValidateTypes({\n value: validatedResponse.error.param,\n schema: modelNotFoundParamSchema,\n });\n\n return new GatewayModelNotFoundError({\n message,\n statusCode,\n modelId: modelResult.success ? modelResult.value.modelId : undefined,\n cause,\n generationId,\n });\n }\n case 'internal_server_error':\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n default:\n return new GatewayInternalServerError({\n message,\n statusCode,\n cause,\n generationId,\n });\n }\n}\n\nconst gatewayErrorResponseSchema = lazySchema(() =>\n zodSchema(\n 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 generationId: z.string().nullish(),\n }),\n ),\n);\n\nexport type GatewayErrorResponse = InferSchema<\n typeof gatewayErrorResponseSchema\n>;\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 readonly generationId?: string;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n generationId,\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }) {\n super(generationId ? `${message} [${generationId}]` : message);\n this.statusCode = statusCode;\n this.cause = cause;\n this.generationId = generationId;\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayAuthenticationError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a contextual error message when authentication fails\n */\n static createContextualError({\n apiKeyProvided,\n oidcTokenProvided,\n message = 'Authentication failed',\n statusCode = 401,\n cause,\n generationId,\n }: {\n apiKeyProvided: boolean;\n oidcTokenProvided: boolean;\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }): GatewayAuthenticationError {\n let contextualMessage: string;\n\n if (apiKeyProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid API key.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n } else if (oidcTokenProvided) {\n contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.\n\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.\n\nAlternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;\n } else {\n contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nOption 1 - API key:\nCreate an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOption 2 - OIDC token:\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;\n }\n\n return new GatewayAuthenticationError({\n message: contextualMessage,\n statusCode,\n cause,\n generationId,\n });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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/v4';\nimport { GatewayError } from './gateway-error';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = lazySchema(() =>\n zodSchema(\n z.object({\n modelId: z.string(),\n }),\n ),\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n modelId?: string;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 generationId,\n }: {\n message?: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\n }\n\n static isInstance(error: unknown): error is GatewayInternalServerError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { GatewayError } from './gateway-error';\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?: TypeValidationError;\n\n constructor({\n message = 'Invalid response from Gateway',\n statusCode = 502,\n response,\n validationError,\n cause,\n generationId,\n }: {\n message?: string;\n statusCode?: number;\n response?: unknown;\n validationError?: TypeValidationError;\n cause?: unknown;\n generationId?: string;\n } = {}) {\n super({ message, statusCode, cause, generationId });\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 { z } from 'zod/v4';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\n\nexport async function parseAuthMethod(\n headers: Record<string, string | undefined>,\n) {\n const result = await safeValidateTypes({\n value: headers[GATEWAY_AUTH_METHOD_HEADER],\n schema: gatewayAuthMethodSchema,\n });\n\n return result.success ? result.value : undefined;\n}\n\nconst gatewayAuthMethodSchema = lazySchema(() =>\n zodSchema(z.union([z.literal('api-key'), z.literal('oidc')])),\n);\n","import {\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n getFromApi,\n lazySchema,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayLanguageModelEntry } from './gateway-model-entry';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n models: GatewayLanguageModelEntry[];\n}\n\nexport interface GatewayCreditsResponse {\n /** The remaining gateway credit balance available for API usage */\n balance: string;\n /** The total amount of gateway credits that have been consumed */\n totalUsed: string;\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 gatewayAvailableModelsResponseSchema,\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 await asGatewayError(error);\n }\n }\n\n async getCredits(): Promise<GatewayCreditsResponse> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/credits`,\n headers: await resolve(this.config.headers()),\n successfulResponseHandler: createJsonResponseHandler(\n gatewayCreditsResponseSchema,\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 await asGatewayError(error);\n }\n }\n}\n\nconst gatewayAvailableModelsResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n models: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullish(),\n pricing: z\n .object({\n input: z.string(),\n output: z.string(),\n input_cache_read: z.string().nullish(),\n input_cache_write: z.string().nullish(),\n })\n .transform(\n ({ input, output, input_cache_read, input_cache_write }) => ({\n input,\n output,\n ...(input_cache_read\n ? { cachedInputTokens: input_cache_read }\n : {}),\n ...(input_cache_write\n ? { cacheCreationInputTokens: input_cache_write }\n : {}),\n }),\n )\n .nullish(),\n specification: z.object({\n specificationVersion: z.literal('v3'),\n provider: z.string(),\n modelId: z.string(),\n }),\n modelType: z\n .enum(['embedding', 'image', 'language', 'video'])\n .nullish(),\n }),\n ),\n }),\n ),\n);\n\nconst gatewayCreditsResponseSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n balance: z.string(),\n total_used: z.string(),\n })\n .transform(({ balance, total_used }) => ({\n balance,\n totalUsed: total_used,\n })),\n ),\n);\n","import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n SharedV3Warning,\n LanguageModelV3FilePart,\n LanguageModelV3StreamPart,\n LanguageModelV3GenerateResult,\n LanguageModelV3StreamResult,\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/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV3 {\n readonly specificationVersion = 'v3';\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 private async getArgs(options: LanguageModelV3CallOptions) {\n const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n return {\n args: this.maybeEncodeFileParts(optionsWithoutSignal),\n warnings: [],\n };\n }\n\n async doGenerate(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue: rawResponse,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, false),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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: args },\n response: { headers: responseHeaders, body: rawResponse },\n warnings,\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n async doStream(\n options: LanguageModelV3CallOptions,\n ): Promise<LanguageModelV3StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = await resolve(this.config.headers());\n\n try {\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n options.headers,\n this.getModelConfigHeaders(this.modelId, true),\n await resolve(this.config.o11yHeaders),\n ),\n body: args,\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<LanguageModelV3StreamPart>,\n LanguageModelV3StreamPart\n >({\n start(controller) {\n if (warnings.length > 0) {\n controller.enqueue({ type: 'stream-start', warnings });\n }\n },\n transform(chunk, controller) {\n if (chunk.success) {\n const streamPart = chunk.value;\n\n // Handle raw chunks: if this is a raw chunk from the gateway API,\n // only emit it if includeRawChunks is true\n if (streamPart.type === 'raw' && !options.includeRawChunks) {\n return; // Skip raw chunks if not requested\n }\n\n if (\n streamPart.type === 'response-metadata' &&\n streamPart.timestamp &&\n typeof streamPart.timestamp === 'string'\n ) {\n streamPart.timestamp = new Date(streamPart.timestamp);\n }\n\n controller.enqueue(streamPart);\n } else {\n controller.error(\n (chunk as { success: false; error: unknown }).error,\n );\n }\n },\n }),\n ),\n request: { body: args },\n response: { headers: responseHeaders },\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\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 file parts in the prompt to base64. Mutates the passed options\n * instance directly to avoid copying the file data.\n * @param options - The options to encode.\n * @returns The options with the file parts encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV3CallOptions) {\n for (const message of options.prompt) {\n for (const part of message.content) {\n if (this.isFilePart(part)) {\n const filePart = part as LanguageModelV3FilePart;\n // If the file part is a URL it will get cleanly converted to a string.\n // If it's a binary file 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': '3',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n","import type {\n EmbeddingModelV3,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n lazySchema,\n postJsonToApi,\n resolve,\n zodSchema,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n values,\n ...(providerOptions ? { providerOptions } : {}),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayEmbeddingResponseSchema,\n ),\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 embeddings: responseBody.embeddings,\n usage: responseBody.usage ?? undefined,\n providerMetadata:\n responseBody.providerMetadata as unknown as SharedV3ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n } catch (error) {\n throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/embedding-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-embedding-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayEmbeddingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n embeddings: z.array(z.array(z.number())),\n usage: z.object({ tokens: z.number() }).nullish(),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n ImageModelV3,\n ImageModelV3File,\n ImageModelV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayImageModel implements ImageModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n files,\n mask,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV3['doGenerate']>>\n > {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(size && { size }),\n ...(aspectRatio && { aspectRatio }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(files && {\n files: files.map(file => maybeEncodeImageFile(file)),\n }),\n ...(mask && { mask: maybeEncodeImageFile(mask) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayImageResponseSchema,\n ),\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 images: responseBody.images, // Always base64 strings from server\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as ImageModelV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n ...(responseBody.usage != null && {\n usage: {\n inputTokens: responseBody.usage.inputTokens ?? undefined,\n outputTokens: responseBody.usage.outputTokens ?? undefined,\n totalTokens: responseBody.usage.totalTokens ?? undefined,\n },\n }),\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/image-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-image-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeImageFile(file: ImageModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n images: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayImageWarningSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('unsupported'),\n feature: z.string(),\n details: z.string().optional(),\n }),\n z.object({\n type: z.literal('compatibility'),\n feature: z.string(),\n details: z.string().optional(),\n }),\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n]);\n\nconst gatewayImageUsageSchema = z.object({\n inputTokens: z.number().nullish(),\n outputTokens: z.number().nullish(),\n totalTokens: z.number().nullish(),\n});\n\nconst gatewayImageResponseSchema = z.object({\n images: z.array(z.string()), // Always base64 strings over the wire\n warnings: z.array(gatewayImageWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n usage: gatewayImageUsageSchema.optional(),\n});\n","import type {\n Experimental_VideoModelV3,\n Experimental_VideoModelV3CallOptions,\n Experimental_VideoModelV3File,\n Experimental_VideoModelV3VideoData,\n SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayVideoModel implements Experimental_VideoModelV3 {\n readonly specificationVersion = 'v3' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxVideosPerCall = Number.MAX_SAFE_INTEGER;\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n },\n ) {}\n\n get provider(): string {\n return this.config.provider;\n }\n\n async doGenerate({\n prompt,\n n,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n image,\n providerOptions,\n headers,\n abortSignal,\n }: Experimental_VideoModelV3CallOptions): Promise<{\n videos: Array<Experimental_VideoModelV3VideoData>;\n warnings: Array<{ type: 'other'; message: string }>;\n providerMetadata?: SharedV3ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n }> {\n const resolvedHeaders = await resolve(this.config.headers());\n try {\n const {\n responseHeaders,\n value: responseBody,\n rawValue,\n } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n ),\n body: {\n prompt,\n n,\n ...(aspectRatio && { aspectRatio }),\n ...(resolution && { resolution }),\n ...(duration && { duration }),\n ...(fps && { fps }),\n ...(seed && { seed }),\n ...(providerOptions && { providerOptions }),\n ...(image && { image: maybeEncodeVideoFile(image) }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayVideoResponseSchema,\n ),\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 videos: responseBody.videos,\n warnings: responseBody.warnings ?? [],\n providerMetadata:\n responseBody.providerMetadata as SharedV3ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/video-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-video-model-specification-version': '3',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeVideoFile(file: Experimental_VideoModelV3File) {\n if (file.type === 'file' && file.data instanceof Uint8Array) {\n return {\n ...file,\n data: convertUint8ArrayToBase64(file.data),\n };\n }\n return file;\n}\n\nconst providerMetadataEntrySchema = z\n .object({\n videos: z.array(z.unknown()).optional(),\n })\n .catchall(z.unknown());\n\nconst gatewayVideoDataSchema = z.union([\n z.object({\n type: z.literal('url'),\n url: z.string(),\n mediaType: z.string(),\n }),\n z.object({\n type: z.literal('base64'),\n data: z.string(),\n mediaType: z.string(),\n }),\n]);\n\nconst gatewayVideoResponseSchema = z.object({\n videos: z.array(gatewayVideoDataSchema),\n warnings: z\n .array(\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n )\n .optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface ParallelSearchSourcePolicy {\n /**\n * List of domains to include in search results.\n * Example: ['wikipedia.org', 'nature.com']\n */\n includeDomains?: string[];\n\n /**\n * List of domains to exclude from search results.\n * Example: ['reddit.com', 'twitter.com']\n */\n excludeDomains?: string[];\n\n /**\n * Only include results published after this date (ISO 8601 format).\n * Example: '2024-01-01'\n */\n afterDate?: string;\n}\n\nexport interface ParallelSearchExcerpts {\n /**\n * Maximum characters per result.\n */\n maxCharsPerResult?: number;\n\n /**\n * Maximum total characters across all results.\n */\n maxCharsTotal?: number;\n}\n\nexport interface ParallelSearchFetchPolicy {\n /**\n * Maximum age in seconds for cached content.\n * Set to 0 to always fetch fresh content.\n */\n maxAgeSeconds?: number;\n}\n\nexport interface ParallelSearchConfig {\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts for single-response answers (default)\n * - \"agentic\": Concise, token-efficient results for multi-step agentic workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Default maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n maxResults?: number;\n\n /**\n * Default source policy for controlling which domains to include/exclude.\n */\n sourcePolicy?: ParallelSearchSourcePolicy;\n\n /**\n * Default excerpt configuration for controlling result length.\n */\n excerpts?: ParallelSearchExcerpts;\n\n /**\n * Default fetch policy for controlling content freshness.\n */\n fetchPolicy?: ParallelSearchFetchPolicy;\n}\n\nexport interface ParallelSearchResult {\n /** URL of the search result */\n url: string;\n /** Title of the search result */\n title: string;\n /** Extracted text excerpt/content from the page */\n excerpt: string;\n /** Publication date of the content (may be null) */\n publishDate?: string | null;\n /** Relevance score for the result */\n relevanceScore?: number;\n}\n\nexport interface ParallelSearchResponse {\n /** Unique identifier for this search request */\n searchId: string;\n /** Array of search results */\n results: ParallelSearchResult[];\n}\n\nexport interface ParallelSearchError {\n /** Error type */\n error:\n | 'api_error'\n | 'rate_limit'\n | 'timeout'\n | 'invalid_input'\n | 'configuration_error'\n | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface ParallelSearchInput {\n /**\n * Natural-language description of the web research goal.\n * Include source or freshness guidance and broader context from the task.\n * Maximum 5000 characters.\n */\n objective: string;\n\n /**\n * Optional search queries to supplement the objective.\n * Maximum 200 characters per query.\n */\n search_queries?: string[];\n\n /**\n * Mode preset for different use cases:\n * - \"one-shot\": Comprehensive results with longer excerpts\n * - \"agentic\": Concise, token-efficient results for multi-step workflows\n */\n mode?: 'one-shot' | 'agentic';\n\n /**\n * Maximum number of results to return (1-20).\n * Defaults to 10 if not specified.\n */\n max_results?: number;\n\n /**\n * Source policy for controlling which domains to include/exclude.\n */\n source_policy?: {\n include_domains?: string[];\n exclude_domains?: string[];\n after_date?: string;\n };\n\n /**\n * Excerpt configuration for controlling result length.\n */\n excerpts?: {\n max_chars_per_result?: number;\n max_chars_total?: number;\n };\n\n /**\n * Fetch policy for controlling content freshness.\n */\n fetch_policy?: {\n max_age_seconds?: number;\n };\n}\n\nexport type ParallelSearchOutput = ParallelSearchResponse | ParallelSearchError;\n\nconst parallelSearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n objective: z\n .string()\n .describe(\n 'Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters.',\n ),\n\n search_queries: z\n .array(z.string())\n .optional()\n .describe(\n 'Optional search queries to supplement the objective. Maximum 200 characters per query.',\n ),\n\n mode: z\n .enum(['one-shot', 'agentic'])\n .optional()\n .describe(\n 'Mode preset: \"one-shot\" for comprehensive results with longer excerpts (default), \"agentic\" for concise, token-efficient results for multi-step workflows.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of results to return (1-20). Defaults to 10 if not specified.',\n ),\n\n source_policy: z\n .object({\n include_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to include in search results.'),\n exclude_domains: z\n .array(z.string())\n .optional()\n .describe('List of domains to exclude from search results.'),\n after_date: z\n .string()\n .optional()\n .describe(\n 'Only include results published after this date (ISO 8601 format).',\n ),\n })\n .optional()\n .describe(\n 'Source policy for controlling which domains to include/exclude and freshness.',\n ),\n\n excerpts: z\n .object({\n max_chars_per_result: z\n .number()\n .optional()\n .describe('Maximum characters per result.'),\n max_chars_total: z\n .number()\n .optional()\n .describe('Maximum total characters across all results.'),\n })\n .optional()\n .describe('Excerpt configuration for controlling result length.'),\n\n fetch_policy: z\n .object({\n max_age_seconds: z\n .number()\n .optional()\n .describe(\n 'Maximum age in seconds for cached content. Set to 0 to always fetch fresh content.',\n ),\n })\n .optional()\n .describe('Fetch policy for controlling content freshness.'),\n }),\n ),\n);\n\nconst parallelSearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n searchId: z.string(),\n results: z.array(\n z.object({\n url: z.string(),\n title: z.string(),\n excerpt: z.string(),\n publishDate: z.string().nullable().optional(),\n relevanceScore: z.number().optional(),\n }),\n ),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'configuration_error',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const parallelSearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n ParallelSearchInput,\n ParallelSearchOutput,\n ParallelSearchConfig\n >({\n id: 'gateway.parallel_search',\n inputSchema: parallelSearchInputSchema,\n outputSchema: parallelSearchOutputSchema,\n });\n\nexport const parallelSearch = (\n config: ParallelSearchConfig = {},\n): ReturnType<typeof parallelSearchToolFactory> =>\n parallelSearchToolFactory(config);\n","import {\n createProviderToolFactoryWithOutputSchema,\n lazySchema,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface PerplexitySearchConfig {\n /**\n * Default maximum number of search results to return (1-20, default: 10).\n */\n maxResults?: number;\n\n /**\n * Default maximum tokens to extract per search result page (256-2048, default: 2048).\n */\n maxTokensPerPage?: number;\n\n /**\n * Default maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n maxTokens?: number;\n\n /**\n * Default two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * Default list of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n searchDomainFilter?: string[];\n\n /**\n * Default list of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n searchLanguageFilter?: string[];\n\n /**\n * Default recency filter for results.\n * Cannot be combined with searchAfterDate/searchBeforeDate at runtime.\n */\n searchRecencyFilter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport interface PerplexitySearchResult {\n /** Title of the search result */\n title: string;\n /** URL of the search result */\n url: string;\n /** Text snippet/preview of the content */\n snippet: string;\n /** Publication date of the content */\n date?: string;\n /** Last updated date of the content */\n lastUpdated?: string;\n}\n\nexport interface PerplexitySearchResponse {\n /** Array of search results */\n results: PerplexitySearchResult[];\n /** Unique identifier for this search request */\n id: string;\n}\n\nexport interface PerplexitySearchError {\n /** Error type */\n error: 'api_error' | 'rate_limit' | 'timeout' | 'invalid_input' | 'unknown';\n /** HTTP status code if applicable */\n statusCode?: number;\n /** Human-readable error message */\n message: string;\n}\n\nexport interface PerplexitySearchInput {\n /**\n * Search query (string) or multiple queries (array of up to 5 strings).\n * Multi-query searches return combined results from all queries.\n */\n query: string | string[];\n\n /**\n * Maximum number of search results to return (1-20, default: 10).\n */\n max_results?: number;\n\n /**\n * Maximum number of tokens to extract per search result page (256-2048, default: 2048).\n */\n max_tokens_per_page?: number;\n\n /**\n * Maximum total tokens across all search results (default: 25000, max: 1000000).\n */\n max_tokens?: number;\n\n /**\n * Two-letter ISO 3166-1 alpha-2 country code for regional search results.\n * Examples: 'US', 'GB', 'FR'\n */\n country?: string;\n\n /**\n * List of domains to include or exclude from search results (max 20).\n * To include: ['nature.com', 'science.org']\n * To exclude: ['-example.com', '-spam.net']\n */\n search_domain_filter?: string[];\n\n /**\n * List of ISO 639-1 language codes to filter results (max 10, lowercase).\n * Examples: ['en', 'fr', 'de']\n */\n search_language_filter?: string[];\n\n /**\n * Include only results published after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n search_after_date?: string;\n\n /**\n * Include only results published before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n search_before_date?: string;\n\n /**\n * Include only results last updated after this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_after_filter?: string;\n\n /**\n * Include only results last updated before this date.\n * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n * Cannot be used with search_recency_filter.\n */\n last_updated_before_filter?: string;\n\n /**\n * Filter results by relative time period.\n * Cannot be used with search_after_date or search_before_date.\n */\n search_recency_filter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport type PerplexitySearchOutput =\n | PerplexitySearchResponse\n | PerplexitySearchError;\n\nconst perplexitySearchInputSchema = lazySchema(() =>\n zodSchema(\n z.object({\n query: z\n .union([z.string(), z.array(z.string())])\n .describe(\n 'Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries.',\n ),\n\n max_results: z\n .number()\n .optional()\n .describe(\n 'Maximum number of search results to return (1-20, default: 10)',\n ),\n\n max_tokens_per_page: z\n .number()\n .optional()\n .describe(\n 'Maximum number of tokens to extract per search result page (256-2048, default: 2048)',\n ),\n\n max_tokens: z\n .number()\n .optional()\n .describe(\n 'Maximum total tokens across all search results (default: 25000, max: 1000000)',\n ),\n\n country: z\n .string()\n .optional()\n .describe(\n \"Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')\",\n ),\n\n search_domain_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']\",\n ),\n\n search_language_filter: z\n .array(z.string())\n .optional()\n .describe(\n \"List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']\",\n ),\n\n search_after_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_before_date: z\n .string()\n .optional()\n .describe(\n \"Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_after_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n last_updated_before_filter: z\n .string()\n .optional()\n .describe(\n \"Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n ),\n\n search_recency_filter: z\n .enum(['day', 'week', 'month', 'year'])\n .optional()\n .describe(\n 'Filter results by relative time period. Cannot be used with search_after_date or search_before_date.',\n ),\n }),\n ),\n);\n\nconst perplexitySearchOutputSchema = lazySchema(() =>\n zodSchema(\n z.union([\n // Success response\n z.object({\n results: z.array(\n z.object({\n title: z.string(),\n url: z.string(),\n snippet: z.string(),\n date: z.string().optional(),\n lastUpdated: z.string().optional(),\n }),\n ),\n id: z.string(),\n }),\n // Error response\n z.object({\n error: z.enum([\n 'api_error',\n 'rate_limit',\n 'timeout',\n 'invalid_input',\n 'unknown',\n ]),\n statusCode: z.number().optional(),\n message: z.string(),\n }),\n ]),\n ),\n);\n\nexport const perplexitySearchToolFactory =\n createProviderToolFactoryWithOutputSchema<\n PerplexitySearchInput,\n PerplexitySearchOutput,\n PerplexitySearchConfig\n >({\n id: 'gateway.perplexity_search',\n inputSchema: perplexitySearchInputSchema,\n outputSchema: perplexitySearchOutputSchema,\n });\n\nexport const perplexitySearch = (\n config: PerplexitySearchConfig = {},\n): ReturnType<typeof perplexitySearchToolFactory> =>\n perplexitySearchToolFactory(config);\n","import { parallelSearch } from './tool/parallel-search';\nimport { perplexitySearch } from './tool/perplexity-search';\n\n/**\n * Gateway-specific provider-defined tools.\n */\nexport const gatewayTools = {\n /**\n * Search the web using Parallel AI's Search API for LLM-optimized excerpts.\n *\n * Takes a natural language objective and returns relevant excerpts,\n * replacing multiple keyword searches with a single call for broad\n * or complex queries. Supports different search types for depth vs\n * breadth tradeoffs.\n */\n parallelSearch,\n\n /**\n * Search the web using Perplexity's Search API for real-time information,\n * news, research papers, and articles.\n *\n * Provides ranked search results with advanced filtering options including\n * domain, language, date range, and recency filters.\n */\n perplexitySearch,\n};\n","import { getContext } from '@vercel/oidc';\nexport { getVercelOidcToken } from '@vercel/oidc';\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n return getContext().headers?.['x-vercel-id'];\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;;;ACJP,SAAS,oBAAoB;;;ACA7B,SAAS,KAAAA,UAAS;;;ACAlB,IAAM,SAAS;AACf,IAAM,SAAS,OAAO,IAAI,MAAM;AADhC;AAGO,IAAe,eAAf,MAAe,uBAAqB,YACvB,aADuB,IAAM;AAAA,EAS/C,YAAY;AAAA,IACV;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAKG;AACD,UAAM,eAAe,GAAG,OAAO,KAAK,YAAY,MAAM,OAAO;AAnB/D,SAAkB,MAAU;AAoB1B,SAAK,aAAa;AAClB,SAAK,QAAQ;AACb,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,WAAW,OAAuC;AACvD,WAAO,cAAa,UAAU,KAAK;AAAA,EACrC;AAAA,EAEA,OAAO,UAAU,OAAuC;AACtD,WACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACT,MAAc,MAAM,MAAM;AAAA,EAE/B;AACF;;;AC5CA,IAAM,OAAO;AACb,IAAMC,UAAS,2BAA2B,IAAI;AAC9C,IAAMC,UAAS,OAAO,IAAID,OAAM;AAJhC,IAAAE,KAAAC;AASO,IAAM,6BAAN,MAAM,qCAAmCA,MAAA,cAC5BD,MAAAD,SAD4BE,KAAa;AAAA,EAM3D,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,IAKI,CAAC,GAAG;AACN,UAAM,EAAE,SAAS,YAAY,OAAO,aAAa,CAAC;AAhBpD,SAAkBD,OAAU;AAE5B;AAAA,SAAS,OAAO;AAChB,SAAS,OAAO;AAAA,EAchB;AAAA,EAEA,OAAO,WAAW,OAAqD;AACrE,WAAO,aAAa,UAAU,KAAK,KAAKD,WAAU;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,sBAAsB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,GAO+B;AAC7B,QAAI;AAEJ,QAAI,gBAAgB;AAClB,0BAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKtB,WAAW,mBAAmB;AAC5B,0BAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKtB,OAAO;AACL,0BAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQtB;AAEA,WAAO,IAAI,4BAA2B;AAAA,MACpC,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ACjFA,IAAMG,QAAO;AACb,IAAMC,UAAS,2BAA2BD,KAAI;AAC9C,IAAME,UAAS,OAAO,IAAID,OAAM;AAJhC,IAAAE,KAAAC;AASO,IAAM,6BAAN,eAAyCA,MAAA,cAC5BD,MAAAD,SAD4BE,KAAa;AAAA,EAM3D,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,IAKI,CAAC,GAAG;AACN,UAAM,EAAE,SAAS,YAAY,OAAO,aAAa,CAAC;AAhBpD,SAAkBD,OAAU;AAE5B;AAAA,SAAS,OAAOH;AAChB,SAAS,OAAO;AAAA,EAchB;AAAA,EAEA,OAAO,WAAW,OAAqD;AACrE,WAAO,aAAa,UAAU,KAAK,KAAKE,WAAU;AAAA,EACpD;AACF;;;AC9BA,IAAMG,QAAO;AACb,IAAMC,UAAS,2BAA2BD,KAAI;AAC9C,IAAME,UAAS,OAAO,IAAID,OAAM;AAJhC,IAAAE,KAAAC;AASO,IAAM,wBAAN,eAAoCA,MAAA,cACvBD,MAAAD,SADuBE,KAAa;AAAA,EAMtD,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,IAKI,CAAC,GAAG;AACN,UAAM,EAAE,SAAS,YAAY,OAAO,aAAa,CAAC;AAhBpD,SAAkBD,OAAU;AAE5B;AAAA,SAAS,OAAOH;AAChB,SAAS,OAAO;AAAA,EAchB;AAAA,EAEA,OAAO,WAAW,OAAgD;AAChE,WAAO,aAAa,UAAU,KAAK,KAAKE,WAAU;AAAA,EACpD;AACF;;;AChCA,SAAS,SAAS;AAElB,SAAS,YAAY,iBAAiB;AAEtC,IAAMG,QAAO;AACb,IAAMC,UAAS,2BAA2BD,KAAI;AAC9C,IAAME,UAAS,OAAO,IAAID,OAAM;AAEzB,IAAM,2BAA2B;AAAA,EAAW,MACjD;AAAA,IACE,EAAE,OAAO;AAAA,MACP,SAAS,EAAE,OAAO;AAAA,IACpB,CAAC;AAAA,EACH;AACF;AAdA,IAAAE,KAAAC;AAmBO,IAAM,4BAAN,eAAwCA,MAAA,cAC3BD,MAAAD,SAD2BE,KAAa;AAAA,EAO1D,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAMI,CAAC,GAAG;AACN,UAAM,EAAE,SAAS,YAAY,OAAO,aAAa,CAAC;AAnBpD,SAAkBD,OAAU;AAE5B;AAAA,SAAS,OAAOH;AAChB,SAAS,OAAO;AAiBd,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,WAAW,OAAoD;AACpE,WAAO,aAAa,UAAU,KAAK,KAAKE,WAAU;AAAA,EACpD;AACF;;;AC5CA,IAAMG,QAAO;AACb,IAAMC,UAAS,2BAA2BD,KAAI;AAC9C,IAAME,UAAS,OAAO,IAAID,OAAM;AAJhC,IAAAE,KAAAC;AASO,IAAM,6BAAN,eAAyCA,MAAA,cAC5BD,MAAAD,SAD4BE,KAAa;AAAA,EAM3D,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,EACF,IAKI,CAAC,GAAG;AACN,UAAM,EAAE,SAAS,YAAY,OAAO,aAAa,CAAC;AAhBpD,SAAkBD,OAAU;AAE5B;AAAA,SAAS,OAAOH;AAChB,SAAS,OAAO;AAAA,EAchB;AAAA,EAEA,OAAO,WAAW,OAAqD;AACrE,WAAO,aAAa,UAAU,KAAK,KAAKE,WAAU;AAAA,EACpD;AACF;;;AC7BA,IAAMG,QAAO;AACb,IAAMC,UAAS,2BAA2BD,KAAI;AAC9C,IAAME,UAAS,OAAO,IAAID,OAAM;AALhC,IAAAE,KAAAC;AAUO,IAAM,uBAAN,eAAmCA,MAAA,cACtBD,MAAAD,SADsBE,KAAa;AAAA,EAQrD,YAAY;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAOI,CAAC,GAAG;AACN,UAAM,EAAE,SAAS,YAAY,OAAO,aAAa,CAAC;AAtBpD,SAAkBD,OAAU;AAE5B;AAAA,SAAS,OAAOH;AAChB,SAAS,OAAO;AAoBd,SAAK,WAAW;AAChB,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEA,OAAO,WAAW,OAA+C;AAC/D,WAAO,aAAa,UAAU,KAAK,KAAKE,WAAU;AAAA,EACpD;AACF;;;AP9BA;AAAA,EAEE,cAAAG;AAAA,EACA;AAAA,EAEA,aAAAC;AAAA,OACK;AAEP,eAAsB,+BAA+B;AAAA,EACnD;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA;AACF,GAM0B;AA/B1B,MAAAC;AAgCE,QAAM,cAAc,MAAM,kBAAkB;AAAA,IAC1C,OAAO;AAAA,IACP,QAAQ;AAAA,EACV,CAAC;AAED,MAAI,CAAC,YAAY,SAAS;AAExB,UAAM,kBACJ,OAAO,aAAa,YACpB,aAAa,QACb,kBAAkB,WACb,SAAuC,eACxC;AAEN,WAAO,IAAI,qBAAqB;AAAA,MAC9B,SAAS,kCAAkC,cAAc;AAAA,MACzD;AAAA,MACA;AAAA,MACA,iBAAiB,YAAY;AAAA,MAC7B;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,QAAM,oBAA0C,YAAY;AAC5D,QAAM,YAAY,kBAAkB,MAAM;AAC1C,QAAM,UAAU,kBAAkB,MAAM;AACxC,QAAM,gBAAeA,MAAA,kBAAkB,iBAAlB,OAAAA,MAAkC;AAEvD,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,aAAO,2BAA2B,sBAAsB;AAAA,QACtD,gBAAgB,eAAe;AAAA,QAC/B,mBAAmB,eAAe;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,KAAK;AACH,aAAO,IAAI,2BAA2B;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,KAAK;AACH,aAAO,IAAI,sBAAsB;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,KAAK,mBAAmB;AACtB,YAAM,cAAc,MAAM,kBAAkB;AAAA,QAC1C,OAAO,kBAAkB,MAAM;AAAA,QAC/B,QAAQ;AAAA,MACV,CAAC;AAED,aAAO,IAAI,0BAA0B;AAAA,QACnC;AAAA,QACA;AAAA,QACA,SAAS,YAAY,UAAU,YAAY,MAAM,UAAU;AAAA,QAC3D;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,KAAK;AACH,aAAO,IAAI,2BAA2B;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AACE,aAAO,IAAI,2BAA2B;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,EACL;AACF;AAEA,IAAM,6BAA6BF;AAAA,EAAW,MAC5CC;AAAA,IACEE,GAAE,OAAO;AAAA,MACP,OAAOA,GAAE,OAAO;AAAA,QACd,SAASA,GAAE,OAAO;AAAA,QAClB,MAAMA,GAAE,OAAO,EAAE,QAAQ;AAAA,QACzB,OAAOA,GAAE,QAAQ,EAAE,QAAQ;AAAA,QAC3B,MAAMA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,CAAC,EAAE,QAAQ;AAAA,MAClD,CAAC;AAAA,MACD,cAAcA,GAAE,OAAO,EAAE,QAAQ;AAAA,IACnC,CAAC;AAAA,EACH;AACF;;;AD3HO,SAAS,eACd,OACA,YACA;AAPF,MAAAC;AAQE,MAAI,aAAa,WAAW,KAAK,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,WAAW,KAAK,GAAG;AAClC,WAAO,+BAA+B;AAAA,MACpC,UAAU,uBAAuB,KAAK;AAAA,MACtC,aAAYA,MAAA,MAAM,eAAN,OAAAA,MAAoB;AAAA,MAChC,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,+BAA+B;AAAA,IACpC,UAAU,CAAC;AAAA,IACX,YAAY;AAAA,IACZ,gBACE,iBAAiB,QACb,2BAA2B,MAAM,OAAO,KACxC;AAAA,IACN,OAAO;AAAA,IACP;AAAA,EACF,CAAC;AACH;;;AS9BO,SAAS,uBAAuB,OAA8B;AACnE,MAAI,MAAM,SAAS,QAAW;AAC5B,WAAO,MAAM;AAAA,EACf;AACA,MAAI,MAAM,gBAAgB,MAAM;AAC9B,QAAI;AACF,aAAO,KAAK,MAAM,MAAM,YAAY;AAAA,IACtC,SAAQ;AACN,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AACA,SAAO,CAAC;AACV;;;ACdA,SAAS,KAAAC,UAAS;AAClB;AAAA,EACE,cAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,aAAAC;AAAA,OACK;AAEA,IAAM,6BAA6B;AAE1C,eAAsB,gBACpB,SACA;AACA,QAAM,SAAS,MAAMD,mBAAkB;AAAA,IACrC,OAAO,QAAQ,0BAA0B;AAAA,IACzC,QAAQ;AAAA,EACV,CAAC;AAED,SAAO,OAAO,UAAU,OAAO,QAAQ;AACzC;AAEA,IAAM,0BAA0BD;AAAA,EAAW,MACzCE,WAAUH,GAAE,MAAM,CAACA,GAAE,QAAQ,SAAS,GAAGA,GAAE,QAAQ,MAAM,CAAC,CAAC,CAAC;AAC9D;;;ACtBA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAAI;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,OACK;AACP,SAAS,KAAAC,UAAS;AAkBX,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA6B,QAAoC;AAApC;AAAA,EAAqC;AAAA,EAElE,MAAM,qBAA4D;AAChE,QAAI;AACF,YAAM,EAAE,MAAM,IAAI,MAAM,WAAW;AAAA,QACjC,KAAK,GAAG,KAAK,OAAO,OAAO;AAAA,QAC3B,SAAS,MAAM,QAAQ,KAAK,OAAO,QAAQ,CAAC;AAAA,QAC5C,2BAA2B;AAAA,UACzB;AAAA,QACF;AAAA,QACA,uBAAuB,+BAA+B;AAAA,UACpD,aAAaC,GAAE,IAAI;AAAA,UACnB,gBAAgB,UAAQ;AAAA,QAC1B,CAAC;AAAA,QACD,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,MAAM,eAAe,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAM,aAA8C;AAClD,QAAI;AACF,YAAM,UAAU,IAAI,IAAI,KAAK,OAAO,OAAO;AAE3C,YAAM,EAAE,MAAM,IAAI,MAAM,WAAW;AAAA,QACjC,KAAK,GAAG,QAAQ,MAAM;AAAA,QACtB,SAAS,MAAM,QAAQ,KAAK,OAAO,QAAQ,CAAC;AAAA,QAC5C,2BAA2B;AAAA,UACzB;AAAA,QACF;AAAA,QACA,uBAAuB,+BAA+B;AAAA,UACpD,aAAaA,GAAE,IAAI;AAAA,UACnB,gBAAgB,UAAQ;AAAA,QAC1B,CAAC;AAAA,QACD,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,MAAM,eAAe,KAAK;AAAA,IAClC;AAAA,EACF;AACF;AAEA,IAAM,uCAAuCC;AAAA,EAAW,MACtDC;AAAA,IACEF,GAAE,OAAO;AAAA,MACP,QAAQA,GAAE;AAAA,QACRA,GAAE,OAAO;AAAA,UACP,IAAIA,GAAE,OAAO;AAAA,UACb,MAAMA,GAAE,OAAO;AAAA,UACf,aAAaA,GAAE,OAAO,EAAE,QAAQ;AAAA,UAChC,SAASA,GACN,OAAO;AAAA,YACN,OAAOA,GAAE,OAAO;AAAA,YAChB,QAAQA,GAAE,OAAO;AAAA,YACjB,kBAAkBA,GAAE,OAAO,EAAE,QAAQ;AAAA,YACrC,mBAAmBA,GAAE,OAAO,EAAE,QAAQ;AAAA,UACxC,CAAC,EACA;AAAA,YACC,CAAC,EAAE,OAAO,QAAQ,kBAAkB,kBAAkB,OAAO;AAAA,cAC3D;AAAA,cACA;AAAA,cACA,GAAI,mBACA,EAAE,mBAAmB,iBAAiB,IACtC,CAAC;AAAA,cACL,GAAI,oBACA,EAAE,0BAA0B,kBAAkB,IAC9C,CAAC;AAAA,YACP;AAAA,UACF,EACC,QAAQ;AAAA,UACX,eAAeA,GAAE,OAAO;AAAA,YACtB,sBAAsBA,GAAE,QAAQ,IAAI;AAAA,YACpC,UAAUA,GAAE,OAAO;AAAA,YACnB,SAASA,GAAE,OAAO;AAAA,UACpB,CAAC;AAAA,UACD,WAAWA,GACR,KAAK,CAAC,aAAa,SAAS,YAAY,OAAO,CAAC,EAChD,QAAQ;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,+BAA+BC;AAAA,EAAW,MAC9CC;AAAA,IACEF,GACG,OAAO;AAAA,MACN,SAASA,GAAE,OAAO;AAAA,MAClB,YAAYA,GAAE,OAAO;AAAA,IACvB,CAAC,EACA,UAAU,CAAC,EAAE,SAAS,WAAW,OAAO;AAAA,MACvC;AAAA,MACA,WAAW;AAAA,IACb,EAAE;AAAA,EACN;AACF;;;ACvHA;AAAA,EACE;AAAA,EACA;AAAA,EACA,kCAAAG;AAAA,EACA,6BAAAC;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,OAGK;AACP,SAAS,KAAAC,UAAS;AAWX,IAAM,uBAAN,MAAsD;AAAA,EAI3D,YACW,SACQ,QACjB;AAFS;AACQ;AALnB,SAAS,uBAAuB;AAChC,SAAS,gBAAgB,EAAE,OAAO,CAAC,IAAI,EAAE;AAAA,EAKtC;AAAA,EAEH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAc,QAAQ,SAAqC;AACzD,UAAM,EAAE,aAAa,cAAc,GAAG,qBAAqB,IAAI;AAE/D,WAAO;AAAA,MACL,MAAM,KAAK,qBAAqB,oBAAoB;AAAA,MACpD,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SACwC;AACxC,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AACrD,UAAM,EAAE,YAAY,IAAI;AAExB,UAAM,kBAAkB,MAAMC,SAAQ,KAAK,OAAO,QAAQ,CAAC;AAE3D,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,QACP,UAAU;AAAA,MACZ,IAAI,MAAM,cAAc;AAAA,QACtB,KAAK,KAAK,OAAO;AAAA,QACjB,SAAS;AAAA,UACP;AAAA,UACA,QAAQ;AAAA,UACR,KAAK,sBAAsB,KAAK,SAAS,KAAK;AAAA,UAC9C,MAAMA,SAAQ,KAAK,OAAO,WAAW;AAAA,QACvC;AAAA,QACA,MAAM;AAAA,QACN,2BAA2BC,2BAA0BC,GAAE,IAAI,CAAC;AAAA,QAC5D,uBAAuBC,gCAA+B;AAAA,UACpD,aAAaD,GAAE,IAAI;AAAA,UACnB,gBAAgB,UAAQ;AAAA,QAC1B,CAAC;AAAA,QACD,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,QACL,GAAG;AAAA,QACH,SAAS,EAAE,MAAM,KAAK;AAAA,QACtB,UAAU,EAAE,SAAS,iBAAiB,MAAM,YAAY;AAAA,QACxD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,MAAM,eAAe,OAAO,MAAM,gBAAgB,eAAe,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SACsC;AACtC,UAAM,EAAE,MAAM,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AACrD,UAAM,EAAE,YAAY,IAAI;AAExB,UAAM,kBAAkB,MAAMF,SAAQ,KAAK,OAAO,QAAQ,CAAC;AAE3D,QAAI;AACF,YAAM,EAAE,OAAO,UAAU,gBAAgB,IAAI,MAAM,cAAc;AAAA,QAC/D,KAAK,KAAK,OAAO;AAAA,QACjB,SAAS;AAAA,UACP;AAAA,UACA,QAAQ;AAAA,UACR,KAAK,sBAAsB,KAAK,SAAS,IAAI;AAAA,UAC7C,MAAMA,SAAQ,KAAK,OAAO,WAAW;AAAA,QACvC;AAAA,QACA,MAAM;AAAA,QACN,2BAA2B,iCAAiCE,GAAE,IAAI,CAAC;AAAA,QACnE,uBAAuBC,gCAA+B;AAAA,UACpD,aAAaD,GAAE,IAAI;AAAA,UACnB,gBAAgB,UAAQ;AAAA,QAC1B,CAAC;AAAA,QACD,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,QACL,QAAQ,SAAS;AAAA,UACf,IAAI,gBAGF;AAAA,YACA,MAAM,YAAY;AAChB,kBAAI,SAAS,SAAS,GAAG;AACvB,2BAAW,QAAQ,EAAE,MAAM,gBAAgB,SAAS,CAAC;AAAA,cACvD;AAAA,YACF;AAAA,YACA,UAAU,OAAO,YAAY;AAC3B,kBAAI,MAAM,SAAS;AACjB,sBAAM,aAAa,MAAM;AAIzB,oBAAI,WAAW,SAAS,SAAS,CAAC,QAAQ,kBAAkB;AAC1D;AAAA,gBACF;AAEA,oBACE,WAAW,SAAS,uBACpB,WAAW,aACX,OAAO,WAAW,cAAc,UAChC;AACA,6BAAW,YAAY,IAAI,KAAK,WAAW,SAAS;AAAA,gBACtD;AAEA,2BAAW,QAAQ,UAAU;AAAA,cAC/B,OAAO;AACL,2BAAW;AAAA,kBACR,MAA6C;AAAA,gBAChD;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,QACA,SAAS,EAAE,MAAM,KAAK;AAAA,QACtB,UAAU,EAAE,SAAS,gBAAgB;AAAA,MACvC;AAAA,IACF,SAAS,OAAO;AACd,YAAM,MAAM,eAAe,OAAO,MAAM,gBAAgB,eAAe,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA,EAEQ,WAAW,MAAe;AAChC,WACE,QAAQ,OAAO,SAAS,YAAY,UAAU,QAAQ,KAAK,SAAS;AAAA,EAExE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,qBAAqB,SAAqC;AAChE,eAAW,WAAW,QAAQ,QAAQ;AACpC,iBAAW,QAAQ,QAAQ,SAAS;AAClC,YAAI,KAAK,WAAW,IAAI,GAAG;AACzB,gBAAM,WAAW;AAIjB,cAAI,SAAS,gBAAgB,YAAY;AACvC,kBAAM,SAAS,WAAW,KAAK,SAAS,IAAI;AAC5C,kBAAM,aAAa,OAAO,KAAK,MAAM,EAAE,SAAS,QAAQ;AACxD,qBAAS,OAAO,IAAI;AAAA,cAClB,QAAQ,SAAS,aAAa,0BAA0B,WAAW,UAAU;AAAA,YAC/E;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,SAAS;AACf,WAAO,GAAG,KAAK,OAAO,OAAO;AAAA,EAC/B;AAAA,EAEQ,sBAAsB,SAAiB,WAAoB;AACjE,WAAO;AAAA,MACL,2CAA2C;AAAA,MAC3C,wBAAwB;AAAA,MACxB,+BAA+B,OAAO,SAAS;AAAA,IACjD;AAAA,EACF;AACF;;;AC/MA;AAAA,EACE,kBAAAE;AAAA,EACA,kCAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,OAEK;AACP,SAAS,KAAAC,UAAS;AAKX,IAAM,wBAAN,MAAwD;AAAA,EAK7D,YACW,SACQ,QAIjB;AALS;AACQ;AANnB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AAAA,EAQ9B;AAAA,EAEH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AA3CJ,QAAAC;AA4CI,UAAM,kBAAkB,MAAMC,SAAQ,KAAK,OAAO,QAAQ,CAAC;AAC3D,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,QACP;AAAA,MACF,IAAI,MAAMC,eAAc;AAAA,QACtB,KAAK,KAAK,OAAO;AAAA,QACjB,SAASC;AAAA,UACP;AAAA,UACA,4BAAW,CAAC;AAAA,UACZ,KAAK,sBAAsB;AAAA,UAC3B,MAAMF,SAAQ,KAAK,OAAO,WAAW;AAAA,QACvC;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAAA,QAC/C;AAAA,QACA,2BAA2BG;AAAA,UACzB;AAAA,QACF;AAAA,QACA,uBAAuBC,gCAA+B;AAAA,UACpD,aAAaC,GAAE,IAAI;AAAA,UACnB,gBAAgB,UAAQ;AAAA,QAC1B,CAAC;AAAA,QACD,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,QACL,YAAY,aAAa;AAAA,QACzB,QAAON,MAAA,aAAa,UAAb,OAAAA,MAAsB;AAAA,QAC7B,kBACE,aAAa;AAAA,QACf,UAAU,EAAE,SAAS,iBAAiB,MAAM,SAAS;AAAA,QACrD,UAAU,CAAC;AAAA,MACb;AAAA,IACF,SAAS,OAAO;AACd,YAAM,MAAM,eAAe,OAAO,MAAM,gBAAgB,eAAe,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA,EAEQ,SAAS;AACf,WAAO,GAAG,KAAK,OAAO,OAAO;AAAA,EAC/B;AAAA,EAEQ,wBAAwB;AAC9B,WAAO;AAAA,MACL,4CAA4C;AAAA,MAC5C,eAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF;AAEA,IAAM,iCAAiCO;AAAA,EAAW,MAChDC;AAAA,IACEF,GAAE,OAAO;AAAA,MACP,YAAYA,GAAE,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,CAAC;AAAA,MACvC,OAAOA,GAAE,OAAO,EAAE,QAAQA,GAAE,OAAO,EAAE,CAAC,EAAE,QAAQ;AAAA,MAChD,kBAAkBA,GACf,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,CAAC,EACpD,SAAS;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;ACvGA;AAAA,EACE,kBAAAG;AAAA,EACA;AAAA,EACA,6BAAAC;AAAA,EACA,kCAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,OAEK;AACP,SAAS,KAAAC,UAAS;AAKX,IAAM,oBAAN,MAAgD;AAAA,EAKrD,YACW,SACQ,QAIjB;AALS;AACQ;AANnB,SAAS,uBAAuB;AAEhC;AAAA,SAAS,mBAAmB,OAAO;AAAA,EAQhC;AAAA,EAEH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AAjDJ,QAAAC,KAAAC,KAAA;AAkDI,UAAM,kBAAkB,MAAMC,SAAQ,KAAK,OAAO,QAAQ,CAAC;AAC3D,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,QACP;AAAA,MACF,IAAI,MAAMC,eAAc;AAAA,QACtB,KAAK,KAAK,OAAO;AAAA,QACjB,SAASC;AAAA,UACP;AAAA,UACA,4BAAW,CAAC;AAAA,UACZ,KAAK,sBAAsB;AAAA,UAC3B,MAAMF,SAAQ,KAAK,OAAO,WAAW;AAAA,QACvC;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,GAAI,QAAQ,EAAE,KAAK;AAAA,UACnB,GAAI,eAAe,EAAE,YAAY;AAAA,UACjC,GAAI,QAAQ,EAAE,KAAK;AAAA,UACnB,GAAI,mBAAmB,EAAE,gBAAgB;AAAA,UACzC,GAAI,SAAS;AAAA,YACX,OAAO,MAAM,IAAI,UAAQ,qBAAqB,IAAI,CAAC;AAAA,UACrD;AAAA,UACA,GAAI,QAAQ,EAAE,MAAM,qBAAqB,IAAI,EAAE;AAAA,QACjD;AAAA,QACA,2BAA2BG;AAAA,UACzB;AAAA,QACF;AAAA,QACA,uBAAuBC,gCAA+B;AAAA,UACpD,aAAaC,GAAE,IAAI;AAAA,UACnB,gBAAgB,UAAQ;AAAA,QAC1B,CAAC;AAAA,QACD,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,QACL,QAAQ,aAAa;AAAA;AAAA,QACrB,WAAUP,MAAA,aAAa,aAAb,OAAAA,MAAyB,CAAC;AAAA,QACpC,kBACE,aAAa;AAAA,QACf,UAAU;AAAA,UACR,WAAW,oBAAI,KAAK;AAAA,UACpB,SAAS,KAAK;AAAA,UACd,SAAS;AAAA,QACX;AAAA,QACA,GAAI,aAAa,SAAS,QAAQ;AAAA,UAChC,OAAO;AAAA,YACL,cAAaC,MAAA,aAAa,MAAM,gBAAnB,OAAAA,MAAkC;AAAA,YAC/C,eAAc,kBAAa,MAAM,iBAAnB,YAAmC;AAAA,YACjD,cAAa,kBAAa,MAAM,gBAAnB,YAAkC;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,eAAe,OAAO,MAAM,gBAAgB,eAAe,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAEQ,SAAS;AACf,WAAO,GAAG,KAAK,OAAO,OAAO;AAAA,EAC/B;AAAA,EAEQ,wBAAwB;AAC9B,WAAO;AAAA,MACL,wCAAwC;AAAA,MACxC,eAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,MAAwB;AACpD,MAAI,KAAK,SAAS,UAAU,KAAK,gBAAgB,YAAY;AAC3D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM,0BAA0B,KAAK,IAAI;AAAA,IAC3C;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,8BAA8BM,GACjC,OAAO;AAAA,EACN,QAAQA,GAAE,MAAMA,GAAE,QAAQ,CAAC,EAAE,SAAS;AACxC,CAAC,EACA,SAASA,GAAE,QAAQ,CAAC;AAEvB,IAAM,4BAA4BA,GAAE,mBAAmB,QAAQ;AAAA,EAC7DA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,aAAa;AAAA,IAC7B,SAASA,GAAE,OAAO;AAAA,IAClB,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,eAAe;AAAA,IAC/B,SAASA,GAAE,OAAO;AAAA,IAClB,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,OAAO;AAAA,IACvB,SAASA,GAAE,OAAO;AAAA,EACpB,CAAC;AACH,CAAC;AAED,IAAM,0BAA0BA,GAAE,OAAO;AAAA,EACvC,aAAaA,GAAE,OAAO,EAAE,QAAQ;AAAA,EAChC,cAAcA,GAAE,OAAO,EAAE,QAAQ;AAAA,EACjC,aAAaA,GAAE,OAAO,EAAE,QAAQ;AAClC,CAAC;AAED,IAAM,6BAA6BA,GAAE,OAAO;AAAA,EAC1C,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC;AAAA;AAAA,EAC1B,UAAUA,GAAE,MAAM,yBAAyB,EAAE,SAAS;AAAA,EACtD,kBAAkBA,GACf,OAAOA,GAAE,OAAO,GAAG,2BAA2B,EAC9C,SAAS;AAAA,EACZ,OAAO,wBAAwB,SAAS;AAC1C,CAAC;;;ACjKD;AAAA,EACE,kBAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,6BAAAC;AAAA,EACA,kCAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AAAA,OAEK;AACP,SAAS,KAAAC,UAAS;AAKX,IAAM,oBAAN,MAA6D;AAAA,EAKlE,YACW,SACQ,QAIjB;AALS;AACQ;AANnB,SAAS,uBAAuB;AAEhC;AAAA,SAAS,mBAAmB,OAAO;AAAA,EAQhC;AAAA,EAEH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GASG;AA3DL,QAAAC;AA4DI,UAAM,kBAAkB,MAAMC,SAAQ,KAAK,OAAO,QAAQ,CAAC;AAC3D,QAAI;AACF,YAAM;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,QACP;AAAA,MACF,IAAI,MAAMC,eAAc;AAAA,QACtB,KAAK,KAAK,OAAO;AAAA,QACjB,SAASC;AAAA,UACP;AAAA,UACA,4BAAW,CAAC;AAAA,UACZ,KAAK,sBAAsB;AAAA,UAC3B,MAAMF,SAAQ,KAAK,OAAO,WAAW;AAAA,QACvC;AAAA,QACA,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA,GAAI,eAAe,EAAE,YAAY;AAAA,UACjC,GAAI,cAAc,EAAE,WAAW;AAAA,UAC/B,GAAI,YAAY,EAAE,SAAS;AAAA,UAC3B,GAAI,OAAO,EAAE,IAAI;AAAA,UACjB,GAAI,QAAQ,EAAE,KAAK;AAAA,UACnB,GAAI,mBAAmB,EAAE,gBAAgB;AAAA,UACzC,GAAI,SAAS,EAAE,OAAO,qBAAqB,KAAK,EAAE;AAAA,QACpD;AAAA,QACA,2BAA2BG;AAAA,UACzB;AAAA,QACF;AAAA,QACA,uBAAuBC,gCAA+B;AAAA,UACpD,aAAaC,GAAE,IAAI;AAAA,UACnB,gBAAgB,UAAQ;AAAA,QAC1B,CAAC;AAAA,QACD,GAAI,eAAe,EAAE,YAAY;AAAA,QACjC,OAAO,KAAK,OAAO;AAAA,MACrB,CAAC;AAED,aAAO;AAAA,QACL,QAAQ,aAAa;AAAA,QACrB,WAAUN,MAAA,aAAa,aAAb,OAAAA,MAAyB,CAAC;AAAA,QACpC,kBACE,aAAa;AAAA,QACf,UAAU;AAAA,UACR,WAAW,oBAAI,KAAK;AAAA,UACpB,SAAS,KAAK;AAAA,UACd,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,eAAe,OAAO,MAAM,gBAAgB,eAAe,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAEQ,SAAS;AACf,WAAO,GAAG,KAAK,OAAO,OAAO;AAAA,EAC/B;AAAA,EAEQ,wBAAwB;AAC9B,WAAO;AAAA,MACL,wCAAwC;AAAA,MACxC,eAAe,KAAK;AAAA,IACtB;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,MAAqC;AACjE,MAAI,KAAK,SAAS,UAAU,KAAK,gBAAgB,YAAY;AAC3D,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAMO,2BAA0B,KAAK,IAAI;AAAA,IAC3C;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAMC,+BAA8BF,GACjC,OAAO;AAAA,EACN,QAAQA,GAAE,MAAMA,GAAE,QAAQ,CAAC,EAAE,SAAS;AACxC,CAAC,EACA,SAASA,GAAE,QAAQ,CAAC;AAEvB,IAAM,yBAAyBA,GAAE,MAAM;AAAA,EACrCA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,KAAK;AAAA,IACrB,KAAKA,GAAE,OAAO;AAAA,IACd,WAAWA,GAAE,OAAO;AAAA,EACtB,CAAC;AAAA,EACDA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,QAAQ,QAAQ;AAAA,IACxB,MAAMA,GAAE,OAAO;AAAA,IACf,WAAWA,GAAE,OAAO;AAAA,EACtB,CAAC;AACH,CAAC;AAED,IAAM,6BAA6BA,GAAE,OAAO;AAAA,EAC1C,QAAQA,GAAE,MAAM,sBAAsB;AAAA,EACtC,UAAUA,GACP;AAAA,IACCA,GAAE,OAAO;AAAA,MACP,MAAMA,GAAE,QAAQ,OAAO;AAAA,MACvB,SAASA,GAAE,OAAO;AAAA,IACpB,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,kBAAkBA,GACf,OAAOA,GAAE,OAAO,GAAGE,4BAA2B,EAC9C,SAAS;AACd,CAAC;;;ACtKD;AAAA,EACE;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,OACK;AACP,SAAS,KAAAC,UAAS;AAiKlB,IAAM,4BAA4BF;AAAA,EAAW,MAC3CC;AAAA,IACEC,GAAE,OAAO;AAAA,MACP,WAAWA,GACR,OAAO,EACP;AAAA,QACC;AAAA,MACF;AAAA,MAEF,gBAAgBA,GACb,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,MAAMA,GACH,KAAK,CAAC,YAAY,SAAS,CAAC,EAC5B,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,aAAaA,GACV,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,eAAeA,GACZ,OAAO;AAAA,QACN,iBAAiBA,GACd,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,+CAA+C;AAAA,QAC3D,iBAAiBA,GACd,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,iDAAiD;AAAA,QAC7D,YAAYA,GACT,OAAO,EACP,SAAS,EACT;AAAA,UACC;AAAA,QACF;AAAA,MACJ,CAAC,EACA,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,UAAUA,GACP,OAAO;AAAA,QACN,sBAAsBA,GACnB,OAAO,EACP,SAAS,EACT,SAAS,gCAAgC;AAAA,QAC5C,iBAAiBA,GACd,OAAO,EACP,SAAS,EACT,SAAS,8CAA8C;AAAA,MAC5D,CAAC,EACA,SAAS,EACT,SAAS,sDAAsD;AAAA,MAElE,cAAcA,GACX,OAAO;AAAA,QACN,iBAAiBA,GACd,OAAO,EACP,SAAS,EACT;AAAA,UACC;AAAA,QACF;AAAA,MACJ,CAAC,EACA,SAAS,EACT,SAAS,iDAAiD;AAAA,IAC/D,CAAC;AAAA,EACH;AACF;AAEA,IAAM,6BAA6BF;AAAA,EAAW,MAC5CC;AAAA,IACEC,GAAE,MAAM;AAAA;AAAA,MAENA,GAAE,OAAO;AAAA,QACP,UAAUA,GAAE,OAAO;AAAA,QACnB,SAASA,GAAE;AAAA,UACTA,GAAE,OAAO;AAAA,YACP,KAAKA,GAAE,OAAO;AAAA,YACd,OAAOA,GAAE,OAAO;AAAA,YAChB,SAASA,GAAE,OAAO;AAAA,YAClB,aAAaA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,YAC5C,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,UACtC,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA;AAAA,MAEDA,GAAE,OAAO;AAAA,QACP,OAAOA,GAAE,KAAK;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,QAChC,SAASA,GAAE,OAAO;AAAA,MACpB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,IAAM,4BACX,0CAIE;AAAA,EACA,IAAI;AAAA,EACJ,aAAa;AAAA,EACb,cAAc;AAChB,CAAC;AAEI,IAAM,iBAAiB,CAC5B,SAA+B,CAAC,MAEhC,0BAA0B,MAAM;;;ACtSlC;AAAA,EACE,6CAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,OACK;AACP,SAAS,KAAAC,WAAS;AAyJlB,IAAM,8BAA8BF;AAAA,EAAW,MAC7CC;AAAA,IACEC,IAAE,OAAO;AAAA,MACP,OAAOA,IACJ,MAAM,CAACA,IAAE,OAAO,GAAGA,IAAE,MAAMA,IAAE,OAAO,CAAC,CAAC,CAAC,EACvC;AAAA,QACC;AAAA,MACF;AAAA,MAEF,aAAaA,IACV,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,qBAAqBA,IAClB,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,YAAYA,IACT,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,SAASA,IACN,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,sBAAsBA,IACnB,MAAMA,IAAE,OAAO,CAAC,EAChB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,wBAAwBA,IACrB,MAAMA,IAAE,OAAO,CAAC,EAChB,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,mBAAmBA,IAChB,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,oBAAoBA,IACjB,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,2BAA2BA,IACxB,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,4BAA4BA,IACzB,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,MAEF,uBAAuBA,IACpB,KAAK,CAAC,OAAO,QAAQ,SAAS,MAAM,CAAC,EACrC,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ,CAAC;AAAA,EACH;AACF;AAEA,IAAM,+BAA+BF;AAAA,EAAW,MAC9CC;AAAA,IACEC,IAAE,MAAM;AAAA;AAAA,MAENA,IAAE,OAAO;AAAA,QACP,SAASA,IAAE;AAAA,UACTA,IAAE,OAAO;AAAA,YACP,OAAOA,IAAE,OAAO;AAAA,YAChB,KAAKA,IAAE,OAAO;AAAA,YACd,SAASA,IAAE,OAAO;AAAA,YAClB,MAAMA,IAAE,OAAO,EAAE,SAAS;AAAA,YAC1B,aAAaA,IAAE,OAAO,EAAE,SAAS;AAAA,UACnC,CAAC;AAAA,QACH;AAAA,QACA,IAAIA,IAAE,OAAO;AAAA,MACf,CAAC;AAAA;AAAA,MAEDA,IAAE,OAAO;AAAA,QACP,OAAOA,IAAE,KAAK;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,YAAYA,IAAE,OAAO,EAAE,SAAS;AAAA,QAChC,SAASA,IAAE,OAAO;AAAA,MACpB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,IAAM,8BACXH,2CAIE;AAAA,EACA,IAAI;AAAA,EACJ,aAAa;AAAA,EACb,cAAc;AAChB,CAAC;AAEI,IAAM,mBAAmB,CAC9B,SAAiC,CAAC,MAElC,4BAA4B,MAAM;;;AC/R7B,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA;AACF;;;ACzBA,SAAS,kBAAkB;AAC3B,SAAS,0BAA0B;AAEnC,eAAsB,qBAAkD;AAHxE,MAAAI;AAIE,UAAOA,MAAA,WAAW,EAAE,YAAb,gBAAAA,IAAuB;AAChC;;;ApB2BA,SAAS,2BAA2B;;;AqB9B7B,IAAM,UACX,OACI,WACA;;;ArBiIN,IAAM,8BAA8B;AAK7B,SAAS,sBACd,UAAmC,CAAC,GACnB;AA7InB,MAAAC,KAAAC;AA8IE,MAAI,kBAAgE;AACpE,MAAI,gBAAqD;AACzD,QAAM,sBACJD,MAAA,QAAQ,+BAAR,OAAAA,MAAsC,MAAO,KAAK;AACpD,MAAI,gBAAgB;AAEpB,QAAM,WACJC,MAAA,qBAAqB,QAAQ,OAAO,MAApC,OAAAA,MACA;AAEF,QAAM,aAAa,YAAY;AAC7B,QAAI;AACF,YAAM,OAAO,MAAM,oBAAoB,OAAO;AAC9C,aAAO;AAAA,QACL;AAAA,UACE,eAAe,UAAU,KAAK,KAAK;AAAA,UACnC,+BAA+B;AAAA,UAC/B,CAAC,0BAA0B,GAAG,KAAK;AAAA,UACnC,GAAG,QAAQ;AAAA,QACb;AAAA,QACA,kBAAkB,OAAO;AAAA,MAC3B;AAAA,IACF,SAAS,OAAO;AACd,YAAM,2BAA2B,sBAAsB;AAAA,QACrD,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,QACnB,YAAY;AAAA,QACZ,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,oBAAoB,MAAM;AAC9B,UAAM,eAAe,oBAAoB;AAAA,MACvC,cAAc;AAAA,MACd,yBAAyB;AAAA,IAC3B,CAAC;AACD,UAAM,cAAc,oBAAoB;AAAA,MACtC,cAAc;AAAA,MACd,yBAAyB;AAAA,IAC3B,CAAC;AACD,UAAM,SAAS,oBAAoB;AAAA,MACjC,cAAc;AAAA,MACd,yBAAyB;AAAA,IAC3B,CAAC;AAED,WAAO,YAAY;AACjB,YAAM,YAAY,MAAM,mBAAmB;AAC3C,aAAO;AAAA,QACL,GAAI,gBAAgB,EAAE,yBAAyB,aAAa;AAAA,QAC5D,GAAI,eAAe,EAAE,uBAAuB,YAAY;AAAA,QACxD,GAAI,UAAU,EAAE,kBAAkB,OAAO;AAAA,QACzC,GAAI,aAAa,EAAE,sBAAsB,UAAU;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,sBAAsB,CAAC,YAA4B;AACvD,WAAO,IAAI,qBAAqB,SAAS;AAAA,MACvC,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,aAAa,kBAAkB;AAAA,IACjC,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,YAAY;AAjNzC,QAAAD,KAAAC,KAAA;AAkNI,UAAM,OAAM,MAAAA,OAAAD,MAAA,QAAQ,cAAR,gBAAAA,IAAmB,gBAAnB,gBAAAC,IAAA,KAAAD,KAAmC,cAAnC,YAAgD,KAAK,IAAI;AACrE,QAAI,CAAC,mBAAmB,MAAM,gBAAgB,oBAAoB;AAChE,sBAAgB;AAEhB,wBAAkB,IAAI,qBAAqB;AAAA,QACzC;AAAA,QACA,SAAS;AAAA,QACT,OAAO,QAAQ;AAAA,MACjB,CAAC,EACE,mBAAmB,EACnB,KAAK,cAAY;AAChB,wBAAgB;AAChB,eAAO;AAAA,MACT,CAAC,EACA,MAAM,OAAO,UAAmB;AAC/B,cAAM,MAAM;AAAA,UACV;AAAA,UACA,MAAM,gBAAgB,MAAM,WAAW,CAAC;AAAA,QAC1C;AAAA,MACF,CAAC;AAAA,IACL;AAEA,WAAO,gBAAgB,QAAQ,QAAQ,aAAa,IAAI;AAAA,EAC1D;AAEA,QAAM,aAAa,YAAY;AAC7B,WAAO,IAAI,qBAAqB;AAAA,MAC9B;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB,CAAC,EACE,WAAW,EACX,MAAM,OAAO,UAAmB;AAC/B,YAAM,MAAM;AAAA,QACV;AAAA,QACA,MAAM,gBAAgB,MAAM,WAAW,CAAC;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACL;AAEA,QAAM,WAAW,SAAU,SAAyB;AAClD,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,oBAAoB,OAAO;AAAA,EACpC;AAEA,WAAS,uBAAuB;AAChC,WAAS,qBAAqB;AAC9B,WAAS,aAAa;AACtB,WAAS,aAAa,CAAC,YAAiC;AACtD,WAAO,IAAI,kBAAkB,SAAS;AAAA,MACpC,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,aAAa,kBAAkB;AAAA,IACjC,CAAC;AAAA,EACH;AACA,WAAS,gBAAgB;AACzB,QAAM,uBAAuB,CAAC,YAAqC;AACjE,WAAO,IAAI,sBAAsB,SAAS;AAAA,MACxC,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,aAAa,kBAAkB;AAAA,IACjC,CAAC;AAAA,EACH;AACA,WAAS,iBAAiB;AAC1B,WAAS,qBAAqB;AAC9B,WAAS,aAAa,CAAC,YAAiC;AACtD,WAAO,IAAI,kBAAkB,SAAS;AAAA,MACpC,UAAU;AAAA,MACV;AAAA,MACA,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,aAAa,kBAAkB;AAAA,IACjC,CAAC;AAAA,EACH;AACA,WAAS,OAAO,SAAS;AACzB,WAAS,YAAY,SAAS;AAC9B,WAAS,QAAQ,SAAS;AAC1B,WAAS,QAAQ,SAAS;AAC1B,WAAS,QAAQ;AACjB,SAAO;AACT;AAEO,IAAM,UAAU,sBAAsB;AAE7C,eAAsB,oBACpB,SAC4D;AAC5D,QAAM,SAAS,oBAAoB;AAAA,IACjC,cAAc,QAAQ;AAAA,IACtB,yBAAyB;AAAA,EAC3B,CAAC;AAED,MAAI,QAAQ;AACV,WAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,YAAY,MAAM,mBAAmB;AAC3C,SAAO;AAAA,IACL,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF;","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","lazySchema","zodSchema","_a","z","_a","z","lazySchema","safeValidateTypes","zodSchema","lazySchema","zodSchema","z","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","resolve","z","resolve","createJsonResponseHandler","z","createJsonErrorResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","lazySchema","postJsonToApi","resolve","zodSchema","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","postJsonToApi","resolve","z","_a","_b","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","combineHeaders","convertUint8ArrayToBase64","createJsonResponseHandler","createJsonErrorResponseHandler","postJsonToApi","resolve","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","convertUint8ArrayToBase64","providerMetadataEntrySchema","lazySchema","zodSchema","z","createProviderToolFactoryWithOutputSchema","lazySchema","zodSchema","z","_a","_a","_b"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ai-sdk/gateway",
3
3
  "private": false,
4
- "version": "3.0.37",
4
+ "version": "3.0.38",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",
@@ -95,6 +95,13 @@ export class GatewayImageModel implements ImageModelV3 {
95
95
  modelId: this.modelId,
96
96
  headers: responseHeaders,
97
97
  },
98
+ ...(responseBody.usage != null && {
99
+ usage: {
100
+ inputTokens: responseBody.usage.inputTokens ?? undefined,
101
+ outputTokens: responseBody.usage.outputTokens ?? undefined,
102
+ totalTokens: responseBody.usage.totalTokens ?? undefined,
103
+ },
104
+ }),
98
105
  };
99
106
  } catch (error) {
100
107
  throw asGatewayError(error, await parseAuthMethod(resolvedHeaders));
@@ -129,17 +136,34 @@ const providerMetadataEntrySchema = z
129
136
  })
130
137
  .catchall(z.unknown());
131
138
 
139
+ const gatewayImageWarningSchema = z.discriminatedUnion('type', [
140
+ z.object({
141
+ type: z.literal('unsupported'),
142
+ feature: z.string(),
143
+ details: z.string().optional(),
144
+ }),
145
+ z.object({
146
+ type: z.literal('compatibility'),
147
+ feature: z.string(),
148
+ details: z.string().optional(),
149
+ }),
150
+ z.object({
151
+ type: z.literal('other'),
152
+ message: z.string(),
153
+ }),
154
+ ]);
155
+
156
+ const gatewayImageUsageSchema = z.object({
157
+ inputTokens: z.number().nullish(),
158
+ outputTokens: z.number().nullish(),
159
+ totalTokens: z.number().nullish(),
160
+ });
161
+
132
162
  const gatewayImageResponseSchema = z.object({
133
163
  images: z.array(z.string()), // Always base64 strings over the wire
134
- warnings: z
135
- .array(
136
- z.object({
137
- type: z.literal('other'),
138
- message: z.string(),
139
- }),
140
- )
141
- .optional(),
164
+ warnings: z.array(gatewayImageWarningSchema).optional(),
142
165
  providerMetadata: z
143
166
  .record(z.string(), providerMetadataEntrySchema)
144
167
  .optional(),
168
+ usage: gatewayImageUsageSchema.optional(),
145
169
  });