@ai-sdk/gateway 4.0.0-canary.103 → 4.0.0-canary.104
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 +11 -0
- package/dist/index.js +69 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/gateway-embedding-model.ts +24 -1
- package/src/gateway-image-model.ts +5 -0
- package/src/gateway-reranking-model.ts +24 -1
- package/src/gateway-speech-model.ts +5 -0
- package/src/gateway-transcription-model.ts +5 -0
- package/src/gateway-video-model.ts +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @ai-sdk/gateway
|
|
2
2
|
|
|
3
|
+
## 4.0.0-canary.104
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8c17bf8: fix(gateway): surface provider warnings in embedding and reranking responses
|
|
8
|
+
- 558777f: fix(gateway): accept deprecated warnings in image, speech, transcription, and video responses
|
|
9
|
+
- Updated dependencies [aeda373]
|
|
10
|
+
- Updated dependencies [375fdd7]
|
|
11
|
+
- Updated dependencies [b4507d5]
|
|
12
|
+
- @ai-sdk/provider-utils@5.0.0-canary.48
|
|
13
|
+
|
|
3
14
|
## 4.0.0-canary.103
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -1096,7 +1096,7 @@ var GatewayEmbeddingModel = class _GatewayEmbeddingModel {
|
|
|
1096
1096
|
abortSignal,
|
|
1097
1097
|
providerOptions
|
|
1098
1098
|
}) {
|
|
1099
|
-
var _a10;
|
|
1099
|
+
var _a10, _b10;
|
|
1100
1100
|
const resolvedHeaders = this.config.headers ? await resolve5(this.config.headers) : void 0;
|
|
1101
1101
|
try {
|
|
1102
1102
|
const {
|
|
@@ -1130,7 +1130,7 @@ var GatewayEmbeddingModel = class _GatewayEmbeddingModel {
|
|
|
1130
1130
|
usage: (_a10 = responseBody.usage) != null ? _a10 : void 0,
|
|
1131
1131
|
providerMetadata: responseBody.providerMetadata,
|
|
1132
1132
|
response: { headers: responseHeaders, body: rawValue },
|
|
1133
|
-
warnings: []
|
|
1133
|
+
warnings: (_b10 = responseBody.warnings) != null ? _b10 : []
|
|
1134
1134
|
};
|
|
1135
1135
|
} catch (error) {
|
|
1136
1136
|
throw await asGatewayError(
|
|
@@ -1149,11 +1149,33 @@ var GatewayEmbeddingModel = class _GatewayEmbeddingModel {
|
|
|
1149
1149
|
};
|
|
1150
1150
|
}
|
|
1151
1151
|
};
|
|
1152
|
+
var gatewayEmbeddingWarningSchema = z8.discriminatedUnion("type", [
|
|
1153
|
+
z8.object({
|
|
1154
|
+
type: z8.literal("unsupported"),
|
|
1155
|
+
feature: z8.string(),
|
|
1156
|
+
details: z8.string().optional()
|
|
1157
|
+
}),
|
|
1158
|
+
z8.object({
|
|
1159
|
+
type: z8.literal("compatibility"),
|
|
1160
|
+
feature: z8.string(),
|
|
1161
|
+
details: z8.string().optional()
|
|
1162
|
+
}),
|
|
1163
|
+
z8.object({
|
|
1164
|
+
type: z8.literal("deprecated"),
|
|
1165
|
+
setting: z8.string(),
|
|
1166
|
+
message: z8.string()
|
|
1167
|
+
}),
|
|
1168
|
+
z8.object({
|
|
1169
|
+
type: z8.literal("other"),
|
|
1170
|
+
message: z8.string()
|
|
1171
|
+
})
|
|
1172
|
+
]);
|
|
1152
1173
|
var gatewayEmbeddingResponseSchema = lazySchema7(
|
|
1153
1174
|
() => zodSchema7(
|
|
1154
1175
|
z8.object({
|
|
1155
1176
|
embeddings: z8.array(z8.array(z8.number())),
|
|
1156
1177
|
usage: z8.object({ tokens: z8.number() }).nullish(),
|
|
1178
|
+
warnings: z8.array(gatewayEmbeddingWarningSchema).optional(),
|
|
1157
1179
|
providerMetadata: z8.record(z8.string(), z8.record(z8.string(), z8.unknown())).optional()
|
|
1158
1180
|
})
|
|
1159
1181
|
)
|
|
@@ -1295,6 +1317,11 @@ var gatewayImageWarningSchema = z9.discriminatedUnion("type", [
|
|
|
1295
1317
|
feature: z9.string(),
|
|
1296
1318
|
details: z9.string().optional()
|
|
1297
1319
|
}),
|
|
1320
|
+
z9.object({
|
|
1321
|
+
type: z9.literal("deprecated"),
|
|
1322
|
+
setting: z9.string(),
|
|
1323
|
+
message: z9.string()
|
|
1324
|
+
}),
|
|
1298
1325
|
z9.object({
|
|
1299
1326
|
type: z9.literal("other"),
|
|
1300
1327
|
message: z9.string()
|
|
@@ -1506,6 +1533,11 @@ var gatewayVideoWarningSchema = z10.discriminatedUnion("type", [
|
|
|
1506
1533
|
feature: z10.string(),
|
|
1507
1534
|
details: z10.string().optional()
|
|
1508
1535
|
}),
|
|
1536
|
+
z10.object({
|
|
1537
|
+
type: z10.literal("deprecated"),
|
|
1538
|
+
setting: z10.string(),
|
|
1539
|
+
message: z10.string()
|
|
1540
|
+
}),
|
|
1509
1541
|
z10.object({
|
|
1510
1542
|
type: z10.literal("other"),
|
|
1511
1543
|
message: z10.string()
|
|
@@ -1555,6 +1587,7 @@ var GatewayRerankingModel = class {
|
|
|
1555
1587
|
abortSignal,
|
|
1556
1588
|
providerOptions
|
|
1557
1589
|
}) {
|
|
1590
|
+
var _a10;
|
|
1558
1591
|
const resolvedHeaders = this.config.headers ? await resolve8(this.config.headers) : void 0;
|
|
1559
1592
|
try {
|
|
1560
1593
|
const {
|
|
@@ -1589,7 +1622,7 @@ var GatewayRerankingModel = class {
|
|
|
1589
1622
|
ranking: responseBody.ranking,
|
|
1590
1623
|
providerMetadata: responseBody.providerMetadata,
|
|
1591
1624
|
response: { headers: responseHeaders, body: rawValue },
|
|
1592
|
-
warnings: []
|
|
1625
|
+
warnings: (_a10 = responseBody.warnings) != null ? _a10 : []
|
|
1593
1626
|
};
|
|
1594
1627
|
} catch (error) {
|
|
1595
1628
|
throw await asGatewayError(
|
|
@@ -1608,6 +1641,27 @@ var GatewayRerankingModel = class {
|
|
|
1608
1641
|
};
|
|
1609
1642
|
}
|
|
1610
1643
|
};
|
|
1644
|
+
var gatewayRerankingWarningSchema = z11.discriminatedUnion("type", [
|
|
1645
|
+
z11.object({
|
|
1646
|
+
type: z11.literal("unsupported"),
|
|
1647
|
+
feature: z11.string(),
|
|
1648
|
+
details: z11.string().optional()
|
|
1649
|
+
}),
|
|
1650
|
+
z11.object({
|
|
1651
|
+
type: z11.literal("compatibility"),
|
|
1652
|
+
feature: z11.string(),
|
|
1653
|
+
details: z11.string().optional()
|
|
1654
|
+
}),
|
|
1655
|
+
z11.object({
|
|
1656
|
+
type: z11.literal("deprecated"),
|
|
1657
|
+
setting: z11.string(),
|
|
1658
|
+
message: z11.string()
|
|
1659
|
+
}),
|
|
1660
|
+
z11.object({
|
|
1661
|
+
type: z11.literal("other"),
|
|
1662
|
+
message: z11.string()
|
|
1663
|
+
})
|
|
1664
|
+
]);
|
|
1611
1665
|
var gatewayRerankingResponseSchema = lazySchema8(
|
|
1612
1666
|
() => zodSchema8(
|
|
1613
1667
|
z11.object({
|
|
@@ -1617,6 +1671,7 @@ var gatewayRerankingResponseSchema = lazySchema8(
|
|
|
1617
1671
|
relevanceScore: z11.number()
|
|
1618
1672
|
})
|
|
1619
1673
|
),
|
|
1674
|
+
warnings: z11.array(gatewayRerankingWarningSchema).optional(),
|
|
1620
1675
|
providerMetadata: z11.record(z11.string(), z11.record(z11.string(), z11.unknown())).optional()
|
|
1621
1676
|
})
|
|
1622
1677
|
)
|
|
@@ -1725,6 +1780,11 @@ var gatewaySpeechWarningSchema = z12.discriminatedUnion("type", [
|
|
|
1725
1780
|
feature: z12.string(),
|
|
1726
1781
|
details: z12.string().optional()
|
|
1727
1782
|
}),
|
|
1783
|
+
z12.object({
|
|
1784
|
+
type: z12.literal("deprecated"),
|
|
1785
|
+
setting: z12.string(),
|
|
1786
|
+
message: z12.string()
|
|
1787
|
+
}),
|
|
1728
1788
|
z12.object({
|
|
1729
1789
|
type: z12.literal("other"),
|
|
1730
1790
|
message: z12.string()
|
|
@@ -1835,6 +1895,11 @@ var gatewayTranscriptionWarningSchema = z13.discriminatedUnion("type", [
|
|
|
1835
1895
|
feature: z13.string(),
|
|
1836
1896
|
details: z13.string().optional()
|
|
1837
1897
|
}),
|
|
1898
|
+
z13.object({
|
|
1899
|
+
type: z13.literal("deprecated"),
|
|
1900
|
+
setting: z13.string(),
|
|
1901
|
+
message: z13.string()
|
|
1902
|
+
}),
|
|
1838
1903
|
z13.object({
|
|
1839
1904
|
type: z13.literal("other"),
|
|
1840
1905
|
message: z13.string()
|
|
@@ -2103,7 +2168,7 @@ async function getVercelRequestId() {
|
|
|
2103
2168
|
}
|
|
2104
2169
|
|
|
2105
2170
|
// src/version.ts
|
|
2106
|
-
var VERSION = true ? "4.0.0-canary.
|
|
2171
|
+
var VERSION = true ? "4.0.0-canary.104" : "0.0.0-test";
|
|
2107
2172
|
|
|
2108
2173
|
// src/gateway-provider.ts
|
|
2109
2174
|
var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gateway-realtime-auth.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-failed-dependency-error.ts","../src/errors/gateway-response-error.ts","../src/errors/extract-api-call-response.ts","../src/errors/gateway-timeout-error.ts","../src/gateway-headers.ts","../src/errors/parse-auth-method.ts","../src/gateway-fetch-metadata.ts","../src/gateway-model-entry.ts","../src/gateway-spend-report.ts","../src/gateway-generation-info.ts","../src/gateway-language-model.ts","../src/gateway-embedding-model.ts","../src/gateway-image-model.ts","../src/gateway-video-model.ts","../src/gateway-reranking-model.ts","../src/gateway-speech-model.ts","../src/gateway-transcription-model.ts","../src/gateway-realtime-model.ts","../src/tool/parallel-search.ts","../src/tool/perplexity-search.ts","../src/gateway-tools.ts","../src/vercel-environment.ts","../src/version.ts"],"sourcesContent":["/**\n * Shared WebSocket subprotocol contract for AI Gateway realtime auth.\n *\n * The browser `WebSocket` API cannot set request headers, so the Gateway auth\n * (bearer) token is carried through the `Sec-WebSocket-Protocol` handshake\n * instead of an `Authorization` header — the same workaround OpenAI uses for\n * `openai-insecure-api-key.<token>`.\n *\n * This module is the single source of truth for that contract so the client and\n * the Gateway server can't drift: the client encodes values with\n * `getGatewayRealtimeProtocols`, and the Gateway server decodes them with\n * `getGatewayRealtimeAuthToken` / `getGatewayRealtimeTeamIdOrSlug`.\n *\n * WebSocket subprotocol values must fit the RFC token grammar. The auth token is\n * sent as-is, so callers must use tokens that are valid subprotocol tokens; the\n * optional team scope is base64url-encoded by this module. Keep the complete\n * `Sec-WebSocket-Protocol` header compact (target under an 8 KiB safe header\n * budget) because intermediaries may reject large upgrade headers.\n */\n\n/**\n * Marker subprotocol offered on every handshake so the Gateway can echo a\n * negotiated subprotocol on the 101 response (some clients require the server to\n * select one of the offered subprotocols).\n */\nexport const GATEWAY_REALTIME_SUBPROTOCOL = 'ai-gateway-realtime.v1';\n\n/** Subprotocol prefix that carries the Gateway auth (bearer) token. */\nexport const GATEWAY_AUTH_SUBPROTOCOL_PREFIX = 'ai-gateway-auth.';\n\n/** Subprotocol prefix that carries optional Vercel team scoping. */\nexport const GATEWAY_TEAM_SUBPROTOCOL_PREFIX = 'ai-gateway-team.';\n\n/**\n * Client-side: build the WebSocket subprotocols that carry `token` to the\n * Gateway. Pass the result as the second argument to `new WebSocket(url, ...)`.\n */\nexport function getGatewayRealtimeProtocols(\n token: string,\n options?: { teamIdOrSlug?: string },\n): string[] {\n const protocols = [\n GATEWAY_REALTIME_SUBPROTOCOL,\n `${GATEWAY_AUTH_SUBPROTOCOL_PREFIX}${token}`,\n ];\n\n if (options?.teamIdOrSlug) {\n protocols.push(\n `${GATEWAY_TEAM_SUBPROTOCOL_PREFIX}${encodeSubprotocolValue(options.teamIdOrSlug)}`,\n );\n }\n\n return protocols;\n}\n\n/**\n * Server-side: extract the Gateway auth (bearer) token from a\n * `Sec-WebSocket-Protocol` header value, or `undefined` when it is absent or\n * empty. The Gateway upgrade handler turns this into an\n * `Authorization: Bearer <token>` before its normal auth path.\n *\n * Accepts the raw header value (subprotocols are comma-separated and may carry\n * surrounding whitespace).\n */\nexport function getGatewayRealtimeAuthToken(\n secWebSocketProtocol: string | null | undefined,\n): string | undefined {\n // `findProtocol` trims the protocol, so the sliced token needs no further\n // trimming; `|| undefined` collapses the empty-token case.\n return (\n findProtocol(secWebSocketProtocol, GATEWAY_AUTH_SUBPROTOCOL_PREFIX)?.slice(\n GATEWAY_AUTH_SUBPROTOCOL_PREFIX.length,\n ) || undefined\n );\n}\n\n/**\n * Server-side: extract the optional Vercel team ID or slug from the\n * `Sec-WebSocket-Protocol` header value. Team scoping is base64url-encoded so\n * arbitrary team slugs stay within the WebSocket subprotocol token grammar.\n */\nexport function getGatewayRealtimeTeamIdOrSlug(\n secWebSocketProtocol: string | null | undefined,\n): string | undefined {\n const encoded = findProtocol(\n secWebSocketProtocol,\n GATEWAY_TEAM_SUBPROTOCOL_PREFIX,\n )?.slice(GATEWAY_TEAM_SUBPROTOCOL_PREFIX.length);\n if (!encoded) return undefined;\n\n try {\n return decodeSubprotocolValue(encoded) || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction findProtocol(\n secWebSocketProtocol: string | null | undefined,\n prefix: string,\n): string | undefined {\n return secWebSocketProtocol\n ?.split(',')\n .map(protocol => protocol.trim())\n .find(protocol => protocol.startsWith(prefix));\n}\n\nfunction encodeSubprotocolValue(value: string): string {\n const bytes = new TextEncoder().encode(value);\n let binary = '';\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/u, '');\n}\n\nfunction decodeSubprotocolValue(value: string): string {\n const base64 = value.replace(/-/g, '+').replace(/_/g, '/');\n const padding = '='.repeat((4 - (base64.length % 4)) % 4);\n const binary = atob(`${base64}${padding}`);\n const bytes = Uint8Array.from(binary, char => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n}\n","import {\n loadOptionalSetting,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n VERCEL_AI_GATEWAY_TEAM_HEADER,\n} from './gateway-headers';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport {\n GatewaySpendReport,\n type GatewaySpendReportParams,\n type GatewaySpendReportResponse,\n} from './gateway-spend-report';\nimport {\n GatewayGenerationInfoFetcher,\n type GatewayGenerationInfoParams,\n type GatewayGenerationInfo,\n} from './gateway-generation-info';\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 { GatewayRerankingModel } from './gateway-reranking-model';\nimport { GatewaySpeechModel } from './gateway-speech-model';\nimport { GatewayTranscriptionModel } from './gateway-transcription-model';\nimport { GatewayRealtimeModel } from './gateway-realtime-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport type { GatewayRerankingModelId } from './gateway-reranking-model-settings';\nimport type { GatewaySpeechModelId } from './gateway-speech-model-settings';\nimport type { GatewayTranscriptionModelId } from './gateway-transcription-model-settings';\nimport type { GatewayRealtimeModelId } from './gateway-realtime-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 LanguageModelV4,\n EmbeddingModelV4,\n ImageModelV4,\n RerankingModelV4,\n SpeechModelV4,\n TranscriptionModelV4,\n Experimental_VideoModelV4,\n Experimental_RealtimeFactoryV4 as RealtimeFactoryV4,\n Experimental_RealtimeFactoryV4GetTokenOptions as RealtimeFactoryV4GetTokenOptions,\n ProviderV4,\n} from '@ai-sdk/provider';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV4 {\n (modelId: GatewayModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: GatewayModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: GatewayModelId): LanguageModelV4;\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 * Returns a spend report with cost, token, and request count data,\n * aggregated by the specified dimension.\n */\n getSpendReport(\n params: GatewaySpendReportParams,\n ): Promise<GatewaySpendReportResponse>;\n\n /**\n * Returns detailed information about a specific generation by its ID,\n * including cost, token usage, latency, and provider details.\n */\n getGenerationInfo(\n params: GatewayGenerationInfoParams,\n ): Promise<GatewayGenerationInfo>;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embedding(modelId: GatewayEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for generating images.\n */\n image(modelId: GatewayImageModelId): ImageModelV4;\n\n /**\n * Creates a model for generating images.\n */\n imageModel(modelId: GatewayImageModelId): ImageModelV4;\n\n /**\n * Creates a model for generating videos.\n */\n video(modelId: GatewayVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for generating videos.\n */\n videoModel(modelId: GatewayVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for reranking documents.\n */\n reranking(modelId: GatewayRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for reranking documents.\n */\n rerankingModel(modelId: GatewayRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for text-to-speech generation.\n */\n speech(modelId: GatewaySpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for text-to-speech generation.\n */\n speechModel(modelId: GatewaySpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcription(modelId: GatewayTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcriptionModel(\n modelId: GatewayTranscriptionModelId,\n ): TranscriptionModelV4;\n\n /**\n * Creates an experimental realtime model for bidirectional audio/text\n * communication over WebSocket, normalized through the AI Gateway.\n */\n experimental_realtime: RealtimeFactoryV4;\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/v4/ai`.\n */\n baseURL?: string;\n\n /**\n * API key or Vercel access token that is being sent using the `Authorization`\n * header. It defaults to the `AI_GATEWAY_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Vercel team ID or slug to scope requests for access tokens that can access\n * multiple teams.\n */\n teamIdOrSlug?: 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 createGateway(\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/v4/ai';\n\n const createAuthHeaders = (auth: {\n token: string;\n authMethod: 'api-key' | 'oidc';\n }) =>\n 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.teamIdOrSlug != null\n ? { [VERCEL_AI_GATEWAY_TEAM_HEADER]: options.teamIdOrSlug }\n : {}),\n ...options.headers,\n },\n `ai-sdk/gateway/${VERSION}`,\n );\n\n const getHeaders = async () => {\n try {\n return createAuthHeaders(await getGatewayAuthToken(options));\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 getRealtimeAuthToken = async () => {\n try {\n return await getGatewayAuthToken(options);\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 const projectId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_PROJECT_ID',\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 ...(projectId && { 'ai-o11y-project-id': projectId }),\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 getSpendReport = async (params: GatewaySpendReportParams) => {\n return new GatewaySpendReport({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getSpendReport(params)\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n };\n\n const getGenerationInfo = async (params: GatewayGenerationInfoParams) => {\n return new GatewayGenerationInfoFetcher({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getGenerationInfo(params)\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 = 'v4' as const;\n provider.getAvailableModels = getAvailableModels;\n provider.getCredits = getCredits;\n provider.getSpendReport = getSpendReport;\n provider.getGenerationInfo = getGenerationInfo;\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 const createRerankingModel = (modelId: GatewayRerankingModelId) => {\n return new GatewayRerankingModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.rerankingModel = createRerankingModel;\n provider.reranking = createRerankingModel;\n const createSpeechModel = (modelId: GatewaySpeechModelId) => {\n return new GatewaySpeechModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.speechModel = createSpeechModel;\n provider.speech = createSpeechModel;\n const createTranscriptionModel = (modelId: GatewayTranscriptionModelId) => {\n return new GatewayTranscriptionModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.transcriptionModel = createTranscriptionModel;\n provider.transcription = createTranscriptionModel;\n\n const createRealtimeModel = (modelId: GatewayRealtimeModelId) => {\n assertGatewayRealtimeServerEnvironment();\n return new GatewayRealtimeModel(modelId, {\n provider: 'gateway.realtime',\n baseURL,\n teamIdOrSlug: options.teamIdOrSlug,\n getAuthToken: getRealtimeAuthToken,\n });\n };\n provider.experimental_realtime = Object.assign(\n (modelId: GatewayRealtimeModelId) => createRealtimeModel(modelId),\n {\n getToken: async (tokenOptions: RealtimeFactoryV4GetTokenOptions) => {\n const model = createRealtimeModel(tokenOptions.model);\n const secret = await model.doCreateClientSecret();\n return {\n token: secret.token,\n url: secret.url,\n ...(secret.expiresAt != null && { expiresAt: secret.expiresAt }),\n };\n },\n },\n ) as RealtimeFactoryV4;\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 = createGateway();\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\nfunction assertGatewayRealtimeServerEnvironment(): void {\n if (typeof globalThis.window !== 'undefined') {\n throw new Error(\n 'AI Gateway realtime models cannot be used in browsers yet. Use gateway.experimental_realtime from server-side code only.',\n );\n }\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\nimport { extractApiCallResponse } from './extract-api-call-response';\nimport { GatewayError } from './gateway-error';\nimport { GatewayTimeoutError } from './gateway-timeout-error';\n\n/**\n * Checks if an error is a timeout error from undici.\n * Only checks undici-specific error codes to avoid false positives.\n */\nfunction isTimeoutError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n // Check for undici-specific timeout error codes\n const errorCode = (error as any).code;\n if (typeof errorCode === 'string') {\n const undiciTimeoutCodes = [\n 'UND_ERR_HEADERS_TIMEOUT',\n 'UND_ERR_BODY_TIMEOUT',\n 'UND_ERR_CONNECT_TIMEOUT',\n ];\n return undiciTimeoutCodes.includes(errorCode);\n }\n\n return false;\n}\n\nexport async function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n // Check if this is a timeout error (or has a timeout error in the cause chain)\n if (isTimeoutError(error)) {\n return GatewayTimeoutError.createTimeoutError({\n originalMessage: error instanceof Error ? error.message : 'Unknown error',\n cause: error,\n });\n }\n\n // Check if this is an APICallError caused by a timeout\n if (APICallError.isInstance(error)) {\n // Check if the cause is a timeout error\n if (error.cause && isTimeoutError(error.cause)) {\n return GatewayTimeoutError.createTimeoutError({\n originalMessage: error.message,\n cause: error,\n });\n }\n\n return await 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 await 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 { GatewayFailedDependencyError } from './gateway-failed-dependency-error';\nimport { GatewayResponseError } from './gateway-response-error';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\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 case 'failed_dependency':\n return new GatewayFailedDependencyError({\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 readonly isRetryable: boolean;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n generationId,\n isRetryable = statusCode != null &&\n (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500), // server error\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n isRetryable?: boolean;\n }) {\n super(generationId ? `${message} [${generationId}]` : message);\n this.statusCode = statusCode;\n this.cause = cause;\n this.generationId = generationId;\n this.isRetryable = isRetryable;\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 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 or token.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide an API key or Vercel access token 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\nor pass a Vercel access token via the 'apiKey' option.`;\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 - Vercel access token:\nPass a Vercel personal access token or Vercel app access token via the 'apiKey' option.\n\nOption 3 - 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 { GatewayError } from './gateway-error';\n\nconst name = 'GatewayFailedDependencyError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * The request could not be fulfilled because a dependency it relied on was not\n * available on the credentials or provider used to serve it (HTTP 424). Not\n * retryable — the caller must change the request.\n */\nexport class GatewayFailedDependencyError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'failed_dependency';\n\n constructor({\n message = 'Failed dependency',\n statusCode = 424,\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 GatewayFailedDependencyError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import type { 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 { GatewayError } from './gateway-error';\n\nconst name = 'GatewayTimeoutError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Client request timed out before receiving a response.\n */\nexport class GatewayTimeoutError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'timeout_error';\n\n constructor({\n message = 'Request timed out',\n statusCode = 408,\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 GatewayTimeoutError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a helpful timeout error message with troubleshooting guidance\n */\n static createTimeoutError({\n originalMessage,\n statusCode = 408,\n cause,\n generationId,\n }: {\n originalMessage: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }): GatewayTimeoutError {\n const message = `Gateway request timed out: ${originalMessage}\n\n This is a client-side timeout. To resolve this, increase your timeout configuration: https://vercel.com/docs/ai-gateway/capabilities/video-generation#extending-timeouts-for-node.js`;\n\n return new GatewayTimeoutError({\n message,\n statusCode,\n cause,\n generationId,\n });\n }\n}\n","export const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\nexport const VERCEL_AI_GATEWAY_TEAM_HEADER =\n 'x-vercel-ai-gateway-team' as const;\n","import { z } from 'zod/v4';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { GATEWAY_AUTH_METHOD_HEADER } from '../gateway-headers';\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 {\n KNOWN_MODEL_TYPES,\n type GatewayLanguageModelEntry,\n type KnownModelType,\n} from './gateway-model-entry';\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: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\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: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\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\n .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('v4'),\n provider: z.string(),\n modelId: z.string(),\n }),\n modelType: z.string().nullish(),\n }),\n )\n .transform(models =>\n models.filter(\n (m): m is typeof m & { modelType?: KnownModelType | null } =>\n m.modelType == null ||\n KNOWN_MODEL_TYPES.includes(m.modelType as KnownModelType),\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 { LanguageModelV4 } from '@ai-sdk/provider';\n\nexport const KNOWN_MODEL_TYPES = [\n 'embedding',\n 'image',\n 'language',\n 'reranking',\n 'speech',\n 'transcription',\n 'video',\n] as const;\n\nexport type KnownModelType = (typeof KNOWN_MODEL_TYPES)[number];\n\nexport interface GatewayLanguageModelEntry {\n /**\n * The model id used by the remote provider in model settings and for specifying the\n * intended model for text generation.\n */\n id: string;\n\n /**\n * The display name of the model for presentation in user-facing contexts.\n */\n name: string;\n\n /**\n * Optional description of the model.\n */\n description?: string | null;\n\n /**\n * Optional pricing information for the model.\n */\n pricing?: {\n /**\n * Cost per input token in USD.\n */\n input: string;\n /**\n * Cost per output token in USD.\n */\n output: string;\n /**\n * Cost per cached input token in USD.\n * Only present for providers/models that support prompt caching.\n */\n cachedInputTokens?: string;\n /**\n * Cost per input token to create/write cache entries in USD.\n * Only present for providers/models that support prompt caching.\n */\n cacheCreationInputTokens?: string;\n } | null;\n\n /**\n * Additional AI SDK language model specifications for the model.\n */\n specification: GatewayLanguageModelSpecification;\n\n /**\n * Optional field to differentiate between model types.\n */\n modelType?: KnownModelType | null;\n}\n\nexport type GatewayLanguageModelSpecification = Pick<\n LanguageModelV4,\n 'specificationVersion' | 'provider' | 'modelId'\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';\n\nexport interface GatewaySpendReportParams {\n /** Start date in YYYY-MM-DD format (inclusive) */\n startDate: string;\n /** End date in YYYY-MM-DD format (inclusive) */\n endDate: string;\n /** Primary aggregation dimension. Defaults to 'day'. */\n groupBy?: 'day' | 'user' | 'model' | 'tag' | 'provider' | 'credential_type';\n /** Time granularity when groupBy is 'day'. */\n datePart?: 'day' | 'hour';\n /** Filter to a specific user's spend. */\n userId?: string;\n /** Filter to a specific model (e.g. 'anthropic/claude-sonnet-4.5'). */\n model?: string;\n /** Filter to a specific provider (e.g. 'anthropic'). */\n provider?: string;\n /** Filter to BYOK or system credentials. */\n credentialType?: 'byok' | 'system';\n /** Filter to requests with these tags. */\n tags?: string[];\n}\n\nexport interface GatewaySpendReportRow {\n /** Date string (present when groupBy is 'day') */\n day?: string;\n /** Hour timestamp (present when groupBy is 'day' and datePart is 'hour') */\n hour?: string;\n /** User identifier (present when groupBy is 'user') */\n user?: string;\n /** Model identifier (present when groupBy is 'model') */\n model?: string;\n /** Tag value (present when groupBy is 'tag') */\n tag?: string;\n /** Provider name (present when groupBy is 'provider') */\n provider?: string;\n /** Credential type (present when groupBy is 'credential_type') */\n credentialType?: 'byok' | 'system';\n\n /** Total cost in USD */\n totalCost: number;\n /** Market cost in USD */\n marketCost?: number;\n /** Number of input tokens */\n inputTokens?: number;\n /** Number of output tokens */\n outputTokens?: number;\n /** Number of cached input tokens */\n cachedInputTokens?: number;\n /** Number of cache creation input tokens */\n cacheCreationInputTokens?: number;\n /** Number of reasoning tokens */\n reasoningTokens?: number;\n /** Number of requests */\n requestCount?: number;\n}\n\nexport interface GatewaySpendReportResponse {\n results: GatewaySpendReportRow[];\n}\n\nexport class GatewaySpendReport {\n constructor(private readonly config: GatewayConfig) {}\n\n async getSpendReport(\n params: GatewaySpendReportParams,\n ): Promise<GatewaySpendReportResponse> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const searchParams = new URLSearchParams();\n searchParams.set('start_date', params.startDate);\n searchParams.set('end_date', params.endDate);\n\n if (params.groupBy) {\n searchParams.set('group_by', params.groupBy);\n }\n if (params.datePart) {\n searchParams.set('date_part', params.datePart);\n }\n if (params.userId) {\n searchParams.set('user_id', params.userId);\n }\n if (params.model) {\n searchParams.set('model', params.model);\n }\n if (params.provider) {\n searchParams.set('provider', params.provider);\n }\n if (params.credentialType) {\n searchParams.set('credential_type', params.credentialType);\n }\n if (params.tags && params.tags.length > 0) {\n searchParams.set('tags', params.tags.join(','));\n }\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/report?${searchParams.toString()}`,\n headers: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\n successfulResponseHandler: createJsonResponseHandler(\n gatewaySpendReportResponseSchema,\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 gatewaySpendReportResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n results: z.array(\n z\n .object({\n day: z.string().optional(),\n hour: z.string().optional(),\n user: z.string().optional(),\n model: z.string().optional(),\n tag: z.string().optional(),\n provider: z.string().optional(),\n credential_type: z.enum(['byok', 'system']).optional(),\n total_cost: z.number(),\n market_cost: z.number().optional(),\n input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n cache_creation_input_tokens: z.number().optional(),\n reasoning_tokens: z.number().optional(),\n request_count: z.number().optional(),\n })\n .transform(\n ({\n credential_type,\n total_cost,\n market_cost,\n input_tokens,\n output_tokens,\n cached_input_tokens,\n cache_creation_input_tokens,\n reasoning_tokens,\n request_count,\n ...rest\n }) => ({\n ...rest,\n ...(credential_type !== undefined\n ? { credentialType: credential_type }\n : {}),\n totalCost: total_cost,\n ...(market_cost !== undefined ? { marketCost: market_cost } : {}),\n ...(input_tokens !== undefined\n ? { inputTokens: input_tokens }\n : {}),\n ...(output_tokens !== undefined\n ? { outputTokens: output_tokens }\n : {}),\n ...(cached_input_tokens !== undefined\n ? { cachedInputTokens: cached_input_tokens }\n : {}),\n ...(cache_creation_input_tokens !== undefined\n ? { cacheCreationInputTokens: cache_creation_input_tokens }\n : {}),\n ...(reasoning_tokens !== undefined\n ? { reasoningTokens: reasoning_tokens }\n : {}),\n ...(request_count !== undefined\n ? { requestCount: request_count }\n : {}),\n }),\n ),\n ),\n }),\n ),\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';\n\nexport interface GatewayGenerationInfoParams {\n /** The generation ID to look up (format: gen_<ulid>) */\n id: string;\n}\n\nexport interface GatewayGenerationInfo {\n /** The generation ID */\n id: string;\n /** Total cost in USD */\n totalCost: number;\n /** Upstream inference cost in USD (BYOK only) */\n upstreamInferenceCost: number;\n /** Usage cost in USD (same as totalCost) */\n usage: number;\n /** ISO 8601 timestamp when the generation was created */\n createdAt: string;\n /** Model identifier */\n model: string;\n /** Whether BYOK credentials were used */\n isByok: boolean;\n /** Provider that served this generation */\n providerName: string;\n /** Whether streaming was used */\n streamed: boolean;\n /** Finish reason (e.g. 'stop') */\n finishReason: string;\n /** Time to first token in milliseconds */\n latency: number;\n /** Total generation time in milliseconds */\n generationTime: number;\n /** Number of prompt tokens */\n promptTokens: number;\n /** Number of completion tokens */\n completionTokens: number;\n /** Reasoning tokens used */\n reasoningTokens: number;\n /** Cached tokens used */\n cachedTokens: number;\n /** Cache creation input tokens */\n cacheCreationTokens: number;\n /** Billable web search calls */\n billableWebSearchCalls: number;\n}\n\nexport class GatewayGenerationInfoFetcher {\n constructor(private readonly config: GatewayConfig) {}\n\n async getGenerationInfo(\n params: GatewayGenerationInfoParams,\n ): Promise<GatewayGenerationInfo> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/generation?id=${encodeURIComponent(params.id)}`,\n headers: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\n successfulResponseHandler: createJsonResponseHandler(\n gatewayGenerationInfoResponseSchema,\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 gatewayGenerationInfoResponseSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n data: z\n .object({\n id: z.string(),\n total_cost: z.number(),\n upstream_inference_cost: z.number(),\n usage: z.number(),\n created_at: z.string(),\n model: z.string(),\n is_byok: z.boolean(),\n provider_name: z.string(),\n streamed: z.boolean(),\n finish_reason: z.string(),\n latency: z.number(),\n generation_time: z.number(),\n native_tokens_prompt: z.number(),\n native_tokens_completion: z.number(),\n native_tokens_reasoning: z.number(),\n native_tokens_cached: z.number(),\n native_tokens_cache_creation: z.number(),\n billable_web_search_calls: z.number(),\n })\n .transform(\n ({\n total_cost,\n upstream_inference_cost,\n created_at,\n is_byok,\n provider_name,\n finish_reason,\n generation_time,\n native_tokens_prompt,\n native_tokens_completion,\n native_tokens_reasoning,\n native_tokens_cached,\n native_tokens_cache_creation,\n billable_web_search_calls,\n ...rest\n }) => ({\n ...rest,\n totalCost: total_cost,\n upstreamInferenceCost: upstream_inference_cost,\n createdAt: created_at,\n isByok: is_byok,\n providerName: provider_name,\n finishReason: finish_reason,\n generationTime: generation_time,\n promptTokens: native_tokens_prompt,\n completionTokens: native_tokens_completion,\n reasoningTokens: native_tokens_reasoning,\n cachedTokens: native_tokens_cached,\n cacheCreationTokens: native_tokens_cache_creation,\n billableWebSearchCalls: billable_web_search_calls,\n }),\n ),\n })\n .transform(({ data }) => data),\n ),\n);\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4StreamPart,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamResult,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\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 LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n static [WORKFLOW_SERIALIZE](model: GatewayLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: GatewayModelId;\n config: GatewayChatConfig;\n }) {\n return new GatewayLanguageModel(options.modelId, options.config);\n }\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: LanguageModelV4CallOptions) {\n const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n return {\n args: this.maybeEncodeFileParts(optionsWithoutSignal),\n warnings: [],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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<LanguageModelV4StreamPart>,\n LanguageModelV4StreamPart\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(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n /**\n * Encodes inline `Uint8Array` file data to a base64 string in place.\n * @param options - The options to encode.\n * @returns The options with the file data encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV4CallOptions) {\n for (const message of options.prompt) {\n if (!Array.isArray(message.content)) {\n continue;\n }\n for (const part of message.content) {\n if (part.type === 'file' || part.type === 'reasoning-file') {\n part.data = maybeBase64EncodeFileData(part.data);\n } else if (\n part.type === 'tool-result' &&\n part.output.type === 'content'\n ) {\n for (const contentPart of part.output.value) {\n if (contentPart.type === 'file') {\n contentPart.data = maybeBase64EncodeFileData(contentPart.data);\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': '4',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n\nfunction maybeBase64EncodeFileData<T extends { type: string }>(data: T): T {\n if (data.type === 'data') {\n const bytes = (data as { data?: unknown }).data;\n if (bytes instanceof Uint8Array) {\n return { ...data, data: Buffer.from(bytes).toString('base64') } as T;\n }\n }\n return data;\n}\n","import type {\n EmbeddingModelV4,\n SharedV4ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n lazySchema,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\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\ntype GatewayEmbeddingConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n static [WORKFLOW_SERIALIZE](model: GatewayEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: GatewayEmbeddingConfig;\n }) {\n return new GatewayEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayEmbeddingConfig,\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<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 SharedV4ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\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': '4',\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 ImageModelV4,\n ImageModelV4File,\n ImageModelV4ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\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\ntype GatewayImageConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n static [WORKFLOW_SERIALIZE](model: GatewayImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: GatewayImageConfig;\n }) {\n return new GatewayImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayImageConfig,\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<ImageModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\n try {\n const { responseHeaders, value: responseBody } = 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 ImageModelV4ProviderMetadata,\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 await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\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': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeImageFile(file: ImageModelV4File) {\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 {\n APICallError,\n type Experimental_VideoModelV4,\n type Experimental_VideoModelV4CallOptions,\n type Experimental_VideoModelV4File,\n type Experimental_VideoModelV4VideoData,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n parseJsonEventStream,\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_VideoModelV4 {\n readonly specificationVersion = 'v4' 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_VideoModelV4CallOptions): Promise<{\n videos: Array<Experimental_VideoModelV4VideoData>;\n warnings: Array<SharedV4Warning>;\n providerMetadata?: SharedV4ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n }> {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\n try {\n const { responseHeaders, value: responseBody } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n { accept: 'text/event-stream' },\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: async ({\n response,\n url,\n requestBodyValues,\n }: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n }) => {\n if (response.body == null) {\n throw new APICallError({\n message: 'SSE response body is empty',\n url,\n requestBodyValues,\n statusCode: response.status,\n });\n }\n\n const eventStream = parseJsonEventStream({\n stream: response.body,\n schema: gatewayVideoEventSchema,\n });\n\n const reader = eventStream.getReader();\n const { done, value: parseResult } = await reader.read();\n reader.releaseLock();\n\n if (done || !parseResult) {\n throw new APICallError({\n message: 'SSE stream ended without a data event',\n url,\n requestBodyValues,\n statusCode: response.status,\n });\n }\n\n if (!parseResult.success) {\n throw new APICallError({\n message: 'Failed to parse video SSE event',\n cause: parseResult.error,\n url,\n requestBodyValues,\n statusCode: response.status,\n });\n }\n\n const event = parseResult.value;\n\n if (event.type === 'error') {\n throw new APICallError({\n message: event.message,\n statusCode: event.statusCode,\n url,\n requestBodyValues,\n responseHeaders: Object.fromEntries([...response.headers]),\n responseBody: JSON.stringify(event),\n data: {\n error: {\n message: event.message,\n type: event.errorType,\n param: event.param,\n },\n },\n });\n }\n\n // event.type === 'result'\n return {\n value: {\n videos: event.videos,\n warnings: event.warnings,\n providerMetadata: event.providerMetadata,\n },\n responseHeaders: Object.fromEntries([...response.headers]),\n };\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 SharedV4ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\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': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeVideoFile(file: Experimental_VideoModelV4File) {\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 gatewayVideoWarningSchema = 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 gatewayVideoEventSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('result'),\n videos: z.array(gatewayVideoDataSchema),\n warnings: z.array(gatewayVideoWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n }),\n z.object({\n type: z.literal('error'),\n message: z.string(),\n errorType: z.string(),\n statusCode: z.number(),\n param: z.unknown().nullable(),\n }),\n]);\n","import type {\n RerankingModelV4,\n SharedV4ProviderMetadata,\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 GatewayRerankingModel implements RerankingModelV4 {\n readonly specificationVersion = 'v4';\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 doRerank({\n documents,\n query,\n topN,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<RerankingModelV4['doRerank']>[0]): Promise<\n Awaited<ReturnType<RerankingModelV4['doRerank']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 documents,\n query,\n ...(topN != null ? { topN } : {}),\n ...(providerOptions ? { providerOptions } : {}),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayRerankingResponseSchema,\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 ranking: responseBody.ranking,\n providerMetadata:\n responseBody.providerMetadata as unknown as SharedV4ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: [],\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/reranking-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-reranking-model-specification-version': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayRerankingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n ranking: z.array(\n z.object({\n index: z.number(),\n relevanceScore: z.number(),\n }),\n ),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n SharedV4ProviderMetadata,\n SharedV4Warning,\n SpeechModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\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 GatewaySpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4' as const;\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 text,\n voice,\n outputFormat,\n instructions,\n speed,\n language,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<SpeechModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<SpeechModelV4['doGenerate']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 text,\n ...(voice && { voice }),\n ...(outputFormat && { outputFormat }),\n ...(instructions && { instructions }),\n ...(speed != null && { speed }),\n ...(language && { language }),\n ...(providerOptions && { providerOptions }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewaySpeechResponseSchema,\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 audio: responseBody.audio,\n warnings: (responseBody.warnings ?? []) as Array<SharedV4Warning>,\n providerMetadata:\n responseBody.providerMetadata as SharedV4ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/speech-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-speech-model-specification-version': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst providerMetadataEntrySchema = z.object({}).catchall(z.unknown());\n\nconst gatewaySpeechWarningSchema = 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 gatewaySpeechResponseSchema = z.object({\n audio: z.string(),\n warnings: z.array(gatewaySpeechWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import type {\n SharedV4ProviderMetadata,\n SharedV4Warning,\n TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\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 GatewayTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4' as const;\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 audio,\n mediaType,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 audio:\n audio instanceof Uint8Array\n ? convertUint8ArrayToBase64(audio)\n : audio,\n mediaType,\n ...(providerOptions && { providerOptions }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayTranscriptionResponseSchema,\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 text: responseBody.text,\n segments: responseBody.segments ?? [],\n language: responseBody.language ?? undefined,\n durationInSeconds: responseBody.durationInSeconds ?? undefined,\n warnings: (responseBody.warnings ?? []) as Array<SharedV4Warning>,\n providerMetadata:\n responseBody.providerMetadata as SharedV4ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/transcription-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-transcription-model-specification-version': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst providerMetadataEntrySchema = z.object({}).catchall(z.unknown());\n\nconst gatewayTranscriptionWarningSchema = 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 gatewayTranscriptionResponseSchema = z.object({\n text: z.string(),\n segments: z\n .array(\n z.object({\n text: z.string(),\n startSecond: z.number(),\n endSecond: z.number(),\n }),\n )\n .optional(),\n language: z.string().nullish(),\n durationInSeconds: z.number().nullish(),\n warnings: z.array(gatewayTranscriptionWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import type {\n Experimental_RealtimeModelV4 as RealtimeModelV4,\n Experimental_RealtimeModelV4ClientEvent as RealtimeModelV4ClientEvent,\n Experimental_RealtimeModelV4ClientSecretResult as RealtimeModelV4ClientSecretResult,\n Experimental_RealtimeModelV4ServerEvent as RealtimeModelV4ServerEvent,\n Experimental_RealtimeModelV4SessionConfig as RealtimeModelV4SessionConfig,\n} from '@ai-sdk/provider';\nimport { getGatewayRealtimeProtocols } from './gateway-realtime-auth';\n\nexport type GatewayRealtimeModelConfig = {\n provider: string;\n baseURL: string;\n teamIdOrSlug?: string;\n /**\n * Resolves the Gateway auth token used to authenticate the WebSocket upgrade\n * (API key or Vercel OIDC token).\n */\n getAuthToken: () => PromiseLike<{\n token: string;\n authMethod: 'api-key' | 'oidc';\n }>;\n};\n\n/**\n * Realtime model backed by the AI Gateway.\n *\n * The Gateway normalizes realtime exactly like it normalizes every other\n * modality: the client speaks the normalized AI SDK realtime protocol and the\n * Gateway translates to and from the upstream provider server-side. This model\n * is therefore a thin identity codec over that normalized protocol — only the\n * connection and authentication are Gateway-specific.\n */\nexport class GatewayRealtimeModel implements RealtimeModelV4 {\n readonly specificationVersion = 'v4' as const;\n readonly provider: string;\n readonly modelId: string;\n\n private readonly config: GatewayRealtimeModelConfig;\n\n constructor(modelId: string, config: GatewayRealtimeModelConfig) {\n this.modelId = modelId;\n this.provider = config.provider;\n this.config = config;\n }\n\n /**\n * Unlike providers with a dedicated ephemeral-secret endpoint (e.g. OpenAI),\n * the Gateway v0 realtime path does not mint a new client secret. The returned\n * token is the Gateway credential resolved by the provider (`apiKey`,\n * `AI_GATEWAY_API_KEY`, or Vercel OIDC token) and the WebSocket upgrade is\n * authenticated directly with that credential. The\n * `RealtimeModelV4ClientSecretOptions` are therefore intentionally unused:\n * `sessionConfig` is applied later via the normalized `session-update` event,\n * and `expiresAfterSeconds` has no Gateway-side equivalent.\n */\n async doCreateClientSecret(): Promise<RealtimeModelV4ClientSecretResult> {\n const { token } = await this.config.getAuthToken();\n return {\n token,\n url: toGatewayRealtimeUrl(this.config.baseURL, this.modelId),\n };\n }\n\n getWebSocketConfig(options: { token: string; url: string }): {\n url: string;\n protocols?: string[];\n } {\n return {\n url: options.url,\n protocols: getGatewayRealtimeProtocols(options.token, {\n teamIdOrSlug: this.config.teamIdOrSlug,\n }),\n };\n }\n\n parseServerEvent(raw: unknown): RealtimeModelV4ServerEvent {\n // The Gateway emits normalized AI SDK realtime events, so no\n // provider-specific mapping is needed on the client.\n return raw as RealtimeModelV4ServerEvent;\n }\n\n serializeClientEvent(event: RealtimeModelV4ClientEvent): unknown {\n // The Gateway accepts normalized AI SDK realtime events directly.\n return event;\n }\n\n buildSessionConfig(config: RealtimeModelV4SessionConfig): unknown {\n // The session config is already normalized; the Gateway maps it to the\n // upstream provider's session payload server-side.\n return config;\n }\n}\n\n/**\n * Build the Gateway realtime WebSocket URL. The HTTP(S) base URL is upgraded to\n * WS(S) and the model id rides the `?ai-model-id=` query — the WS transport of\n * the `ai-model-id` header the HTTP routes use, since a browser `WebSocket`\n * cannot set headers. The model id is passed through verbatim; the Gateway owns\n * resolution (including the bare → `openai/` qualification), exactly like the\n * non-realtime routes. The query is slash-safe for qualified ids such as\n * `openai/gpt-realtime-2`.\n */\nfunction toGatewayRealtimeUrl(baseURL: string, modelId: string): string {\n const url = new URL(`${baseURL.replace(/^http/, 'ws')}/realtime-model`);\n url.searchParams.set('ai-model-id', modelId);\n return url.toString();\n}\n","import {\n createProviderExecutedToolFactory,\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 = createProviderExecutedToolFactory<\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 createProviderExecutedToolFactory,\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 = createProviderExecutedToolFactory<\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":["_a","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","name","marker","symbol","_a","_b","lazySchema","zodSchema","_a","z","name","marker","symbol","_a","_b","_a","z","lazySchema","safeValidateTypes","zodSchema","safeValidateTypes","lazySchema","zodSchema","z","lazySchema","zodSchema","z","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","getFromApi","lazySchema","resolve","zodSchema","z","getFromApi","resolve","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","getFromApi","lazySchema","resolve","zodSchema","z","getFromApi","resolve","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","resolve","z","resolve","createJsonResponseHandler","z","createJsonErrorResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","lazySchema","postJsonToApi","resolve","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","zodSchema","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","postJsonToApi","resolve","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","_a","_b","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","APICallError","combineHeaders","convertUint8ArrayToBase64","createJsonErrorResponseHandler","postJsonToApi","resolve","z","_a","resolve","postJsonToApi","combineHeaders","APICallError","createJsonErrorResponseHandler","z","convertUint8ArrayToBase64","providerMetadataEntrySchema","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","lazySchema","postJsonToApi","resolve","zodSchema","z","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","postJsonToApi","resolve","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","providerMetadataEntrySchema","combineHeaders","convertUint8ArrayToBase64","createJsonErrorResponseHandler","createJsonResponseHandler","postJsonToApi","resolve","z","_a","_b","resolve","postJsonToApi","combineHeaders","convertUint8ArrayToBase64","createJsonResponseHandler","createJsonErrorResponseHandler","z","providerMetadataEntrySchema","lazySchema","zodSchema","z","createProviderExecutedToolFactory","lazySchema","zodSchema","z","_a","_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/gateway-realtime-auth.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-failed-dependency-error.ts","../src/errors/gateway-response-error.ts","../src/errors/extract-api-call-response.ts","../src/errors/gateway-timeout-error.ts","../src/gateway-headers.ts","../src/errors/parse-auth-method.ts","../src/gateway-fetch-metadata.ts","../src/gateway-model-entry.ts","../src/gateway-spend-report.ts","../src/gateway-generation-info.ts","../src/gateway-language-model.ts","../src/gateway-embedding-model.ts","../src/gateway-image-model.ts","../src/gateway-video-model.ts","../src/gateway-reranking-model.ts","../src/gateway-speech-model.ts","../src/gateway-transcription-model.ts","../src/gateway-realtime-model.ts","../src/tool/parallel-search.ts","../src/tool/perplexity-search.ts","../src/gateway-tools.ts","../src/vercel-environment.ts","../src/version.ts"],"sourcesContent":["/**\n * Shared WebSocket subprotocol contract for AI Gateway realtime auth.\n *\n * The browser `WebSocket` API cannot set request headers, so the Gateway auth\n * (bearer) token is carried through the `Sec-WebSocket-Protocol` handshake\n * instead of an `Authorization` header — the same workaround OpenAI uses for\n * `openai-insecure-api-key.<token>`.\n *\n * This module is the single source of truth for that contract so the client and\n * the Gateway server can't drift: the client encodes values with\n * `getGatewayRealtimeProtocols`, and the Gateway server decodes them with\n * `getGatewayRealtimeAuthToken` / `getGatewayRealtimeTeamIdOrSlug`.\n *\n * WebSocket subprotocol values must fit the RFC token grammar. The auth token is\n * sent as-is, so callers must use tokens that are valid subprotocol tokens; the\n * optional team scope is base64url-encoded by this module. Keep the complete\n * `Sec-WebSocket-Protocol` header compact (target under an 8 KiB safe header\n * budget) because intermediaries may reject large upgrade headers.\n */\n\n/**\n * Marker subprotocol offered on every handshake so the Gateway can echo a\n * negotiated subprotocol on the 101 response (some clients require the server to\n * select one of the offered subprotocols).\n */\nexport const GATEWAY_REALTIME_SUBPROTOCOL = 'ai-gateway-realtime.v1';\n\n/** Subprotocol prefix that carries the Gateway auth (bearer) token. */\nexport const GATEWAY_AUTH_SUBPROTOCOL_PREFIX = 'ai-gateway-auth.';\n\n/** Subprotocol prefix that carries optional Vercel team scoping. */\nexport const GATEWAY_TEAM_SUBPROTOCOL_PREFIX = 'ai-gateway-team.';\n\n/**\n * Client-side: build the WebSocket subprotocols that carry `token` to the\n * Gateway. Pass the result as the second argument to `new WebSocket(url, ...)`.\n */\nexport function getGatewayRealtimeProtocols(\n token: string,\n options?: { teamIdOrSlug?: string },\n): string[] {\n const protocols = [\n GATEWAY_REALTIME_SUBPROTOCOL,\n `${GATEWAY_AUTH_SUBPROTOCOL_PREFIX}${token}`,\n ];\n\n if (options?.teamIdOrSlug) {\n protocols.push(\n `${GATEWAY_TEAM_SUBPROTOCOL_PREFIX}${encodeSubprotocolValue(options.teamIdOrSlug)}`,\n );\n }\n\n return protocols;\n}\n\n/**\n * Server-side: extract the Gateway auth (bearer) token from a\n * `Sec-WebSocket-Protocol` header value, or `undefined` when it is absent or\n * empty. The Gateway upgrade handler turns this into an\n * `Authorization: Bearer <token>` before its normal auth path.\n *\n * Accepts the raw header value (subprotocols are comma-separated and may carry\n * surrounding whitespace).\n */\nexport function getGatewayRealtimeAuthToken(\n secWebSocketProtocol: string | null | undefined,\n): string | undefined {\n // `findProtocol` trims the protocol, so the sliced token needs no further\n // trimming; `|| undefined` collapses the empty-token case.\n return (\n findProtocol(secWebSocketProtocol, GATEWAY_AUTH_SUBPROTOCOL_PREFIX)?.slice(\n GATEWAY_AUTH_SUBPROTOCOL_PREFIX.length,\n ) || undefined\n );\n}\n\n/**\n * Server-side: extract the optional Vercel team ID or slug from the\n * `Sec-WebSocket-Protocol` header value. Team scoping is base64url-encoded so\n * arbitrary team slugs stay within the WebSocket subprotocol token grammar.\n */\nexport function getGatewayRealtimeTeamIdOrSlug(\n secWebSocketProtocol: string | null | undefined,\n): string | undefined {\n const encoded = findProtocol(\n secWebSocketProtocol,\n GATEWAY_TEAM_SUBPROTOCOL_PREFIX,\n )?.slice(GATEWAY_TEAM_SUBPROTOCOL_PREFIX.length);\n if (!encoded) return undefined;\n\n try {\n return decodeSubprotocolValue(encoded) || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction findProtocol(\n secWebSocketProtocol: string | null | undefined,\n prefix: string,\n): string | undefined {\n return secWebSocketProtocol\n ?.split(',')\n .map(protocol => protocol.trim())\n .find(protocol => protocol.startsWith(prefix));\n}\n\nfunction encodeSubprotocolValue(value: string): string {\n const bytes = new TextEncoder().encode(value);\n let binary = '';\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/u, '');\n}\n\nfunction decodeSubprotocolValue(value: string): string {\n const base64 = value.replace(/-/g, '+').replace(/_/g, '/');\n const padding = '='.repeat((4 - (base64.length % 4)) % 4);\n const binary = atob(`${base64}${padding}`);\n const bytes = Uint8Array.from(binary, char => char.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n}\n","import {\n loadOptionalSetting,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n GATEWAY_AUTH_METHOD_HEADER,\n VERCEL_AI_GATEWAY_TEAM_HEADER,\n} from './gateway-headers';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport {\n GatewayFetchMetadata,\n type GatewayFetchMetadataResponse,\n type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport {\n GatewaySpendReport,\n type GatewaySpendReportParams,\n type GatewaySpendReportResponse,\n} from './gateway-spend-report';\nimport {\n GatewayGenerationInfoFetcher,\n type GatewayGenerationInfoParams,\n type GatewayGenerationInfo,\n} from './gateway-generation-info';\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 { GatewayRerankingModel } from './gateway-reranking-model';\nimport { GatewaySpeechModel } from './gateway-speech-model';\nimport { GatewayTranscriptionModel } from './gateway-transcription-model';\nimport { GatewayRealtimeModel } from './gateway-realtime-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport type { GatewayRerankingModelId } from './gateway-reranking-model-settings';\nimport type { GatewaySpeechModelId } from './gateway-speech-model-settings';\nimport type { GatewayTranscriptionModelId } from './gateway-transcription-model-settings';\nimport type { GatewayRealtimeModelId } from './gateway-realtime-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 LanguageModelV4,\n EmbeddingModelV4,\n ImageModelV4,\n RerankingModelV4,\n SpeechModelV4,\n TranscriptionModelV4,\n Experimental_VideoModelV4,\n Experimental_RealtimeFactoryV4 as RealtimeFactoryV4,\n Experimental_RealtimeFactoryV4GetTokenOptions as RealtimeFactoryV4GetTokenOptions,\n ProviderV4,\n} from '@ai-sdk/provider';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV4 {\n (modelId: GatewayModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n chat(modelId: GatewayModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: GatewayModelId): LanguageModelV4;\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 * Returns a spend report with cost, token, and request count data,\n * aggregated by the specified dimension.\n */\n getSpendReport(\n params: GatewaySpendReportParams,\n ): Promise<GatewaySpendReportResponse>;\n\n /**\n * Returns detailed information about a specific generation by its ID,\n * including cost, token usage, latency, and provider details.\n */\n getGenerationInfo(\n params: GatewayGenerationInfoParams,\n ): Promise<GatewayGenerationInfo>;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embedding(modelId: GatewayEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for generating text embeddings.\n */\n embeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV4;\n\n /**\n * Creates a model for generating images.\n */\n image(modelId: GatewayImageModelId): ImageModelV4;\n\n /**\n * Creates a model for generating images.\n */\n imageModel(modelId: GatewayImageModelId): ImageModelV4;\n\n /**\n * Creates a model for generating videos.\n */\n video(modelId: GatewayVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for generating videos.\n */\n videoModel(modelId: GatewayVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for reranking documents.\n */\n reranking(modelId: GatewayRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for reranking documents.\n */\n rerankingModel(modelId: GatewayRerankingModelId): RerankingModelV4;\n\n /**\n * Creates a model for text-to-speech generation.\n */\n speech(modelId: GatewaySpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for text-to-speech generation.\n */\n speechModel(modelId: GatewaySpeechModelId): SpeechModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcription(modelId: GatewayTranscriptionModelId): TranscriptionModelV4;\n\n /**\n * Creates a model for audio transcription.\n */\n transcriptionModel(\n modelId: GatewayTranscriptionModelId,\n ): TranscriptionModelV4;\n\n /**\n * Creates an experimental realtime model for bidirectional audio/text\n * communication over WebSocket, normalized through the AI Gateway.\n */\n experimental_realtime: RealtimeFactoryV4;\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/v4/ai`.\n */\n baseURL?: string;\n\n /**\n * API key or Vercel access token that is being sent using the `Authorization`\n * header. It defaults to the `AI_GATEWAY_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\n * Vercel team ID or slug to scope requests for access tokens that can access\n * multiple teams.\n */\n teamIdOrSlug?: 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 createGateway(\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/v4/ai';\n\n const createAuthHeaders = (auth: {\n token: string;\n authMethod: 'api-key' | 'oidc';\n }) =>\n 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.teamIdOrSlug != null\n ? { [VERCEL_AI_GATEWAY_TEAM_HEADER]: options.teamIdOrSlug }\n : {}),\n ...options.headers,\n },\n `ai-sdk/gateway/${VERSION}`,\n );\n\n const getHeaders = async () => {\n try {\n return createAuthHeaders(await getGatewayAuthToken(options));\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 getRealtimeAuthToken = async () => {\n try {\n return await getGatewayAuthToken(options);\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 const projectId = loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'VERCEL_PROJECT_ID',\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 ...(projectId && { 'ai-o11y-project-id': projectId }),\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 getSpendReport = async (params: GatewaySpendReportParams) => {\n return new GatewaySpendReport({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getSpendReport(params)\n .catch(async (error: unknown) => {\n throw await asGatewayError(\n error,\n await parseAuthMethod(await getHeaders()),\n );\n });\n };\n\n const getGenerationInfo = async (params: GatewayGenerationInfoParams) => {\n return new GatewayGenerationInfoFetcher({\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n })\n .getGenerationInfo(params)\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 = 'v4' as const;\n provider.getAvailableModels = getAvailableModels;\n provider.getCredits = getCredits;\n provider.getSpendReport = getSpendReport;\n provider.getGenerationInfo = getGenerationInfo;\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 const createRerankingModel = (modelId: GatewayRerankingModelId) => {\n return new GatewayRerankingModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.rerankingModel = createRerankingModel;\n provider.reranking = createRerankingModel;\n const createSpeechModel = (modelId: GatewaySpeechModelId) => {\n return new GatewaySpeechModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.speechModel = createSpeechModel;\n provider.speech = createSpeechModel;\n const createTranscriptionModel = (modelId: GatewayTranscriptionModelId) => {\n return new GatewayTranscriptionModel(modelId, {\n provider: 'gateway',\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n o11yHeaders: createO11yHeaders(),\n });\n };\n provider.transcriptionModel = createTranscriptionModel;\n provider.transcription = createTranscriptionModel;\n\n const createRealtimeModel = (modelId: GatewayRealtimeModelId) => {\n assertGatewayRealtimeServerEnvironment();\n return new GatewayRealtimeModel(modelId, {\n provider: 'gateway.realtime',\n baseURL,\n teamIdOrSlug: options.teamIdOrSlug,\n getAuthToken: getRealtimeAuthToken,\n });\n };\n provider.experimental_realtime = Object.assign(\n (modelId: GatewayRealtimeModelId) => createRealtimeModel(modelId),\n {\n getToken: async (tokenOptions: RealtimeFactoryV4GetTokenOptions) => {\n const model = createRealtimeModel(tokenOptions.model);\n const secret = await model.doCreateClientSecret();\n return {\n token: secret.token,\n url: secret.url,\n ...(secret.expiresAt != null && { expiresAt: secret.expiresAt }),\n };\n },\n },\n ) as RealtimeFactoryV4;\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 = createGateway();\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\nfunction assertGatewayRealtimeServerEnvironment(): void {\n if (typeof globalThis.window !== 'undefined') {\n throw new Error(\n 'AI Gateway realtime models cannot be used in browsers yet. Use gateway.experimental_realtime from server-side code only.',\n );\n }\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\nimport { extractApiCallResponse } from './extract-api-call-response';\nimport { GatewayError } from './gateway-error';\nimport { GatewayTimeoutError } from './gateway-timeout-error';\n\n/**\n * Checks if an error is a timeout error from undici.\n * Only checks undici-specific error codes to avoid false positives.\n */\nfunction isTimeoutError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n // Check for undici-specific timeout error codes\n const errorCode = (error as any).code;\n if (typeof errorCode === 'string') {\n const undiciTimeoutCodes = [\n 'UND_ERR_HEADERS_TIMEOUT',\n 'UND_ERR_BODY_TIMEOUT',\n 'UND_ERR_CONNECT_TIMEOUT',\n ];\n return undiciTimeoutCodes.includes(errorCode);\n }\n\n return false;\n}\n\nexport async function asGatewayError(\n error: unknown,\n authMethod?: 'api-key' | 'oidc',\n) {\n if (GatewayError.isInstance(error)) {\n return error;\n }\n\n // Check if this is a timeout error (or has a timeout error in the cause chain)\n if (isTimeoutError(error)) {\n return GatewayTimeoutError.createTimeoutError({\n originalMessage: error instanceof Error ? error.message : 'Unknown error',\n cause: error,\n });\n }\n\n // Check if this is an APICallError caused by a timeout\n if (APICallError.isInstance(error)) {\n // Check if the cause is a timeout error\n if (error.cause && isTimeoutError(error.cause)) {\n return GatewayTimeoutError.createTimeoutError({\n originalMessage: error.message,\n cause: error,\n });\n }\n\n return await 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 await 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 { GatewayFailedDependencyError } from './gateway-failed-dependency-error';\nimport { GatewayResponseError } from './gateway-response-error';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n type InferSchema,\n} from '@ai-sdk/provider-utils';\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 case 'failed_dependency':\n return new GatewayFailedDependencyError({\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 readonly isRetryable: boolean;\n\n constructor({\n message,\n statusCode = 500,\n cause,\n generationId,\n isRetryable = statusCode != null &&\n (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500), // server error\n }: {\n message: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n isRetryable?: boolean;\n }) {\n super(generationId ? `${message} [${generationId}]` : message);\n this.statusCode = statusCode;\n this.cause = cause;\n this.generationId = generationId;\n this.isRetryable = isRetryable;\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 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 or token.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide an API key or Vercel access token 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\nor pass a Vercel access token via the 'apiKey' option.`;\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 - Vercel access token:\nPass a Vercel personal access token or Vercel app access token via the 'apiKey' option.\n\nOption 3 - 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 { GatewayError } from './gateway-error';\n\nconst name = 'GatewayFailedDependencyError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * The request could not be fulfilled because a dependency it relied on was not\n * available on the credentials or provider used to serve it (HTTP 424). Not\n * retryable — the caller must change the request.\n */\nexport class GatewayFailedDependencyError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'failed_dependency';\n\n constructor({\n message = 'Failed dependency',\n statusCode = 424,\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 GatewayFailedDependencyError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n}\n","import type { 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 { GatewayError } from './gateway-error';\n\nconst name = 'GatewayTimeoutError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Client request timed out before receiving a response.\n */\nexport class GatewayTimeoutError extends GatewayError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly name = name;\n readonly type = 'timeout_error';\n\n constructor({\n message = 'Request timed out',\n statusCode = 408,\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 GatewayTimeoutError {\n return GatewayError.hasMarker(error) && symbol in error;\n }\n\n /**\n * Creates a helpful timeout error message with troubleshooting guidance\n */\n static createTimeoutError({\n originalMessage,\n statusCode = 408,\n cause,\n generationId,\n }: {\n originalMessage: string;\n statusCode?: number;\n cause?: unknown;\n generationId?: string;\n }): GatewayTimeoutError {\n const message = `Gateway request timed out: ${originalMessage}\n\n This is a client-side timeout. To resolve this, increase your timeout configuration: https://vercel.com/docs/ai-gateway/capabilities/video-generation#extending-timeouts-for-node.js`;\n\n return new GatewayTimeoutError({\n message,\n statusCode,\n cause,\n generationId,\n });\n }\n}\n","export const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\nexport const VERCEL_AI_GATEWAY_TEAM_HEADER =\n 'x-vercel-ai-gateway-team' as const;\n","import { z } from 'zod/v4';\nimport {\n lazySchema,\n safeValidateTypes,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { GATEWAY_AUTH_METHOD_HEADER } from '../gateway-headers';\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 {\n KNOWN_MODEL_TYPES,\n type GatewayLanguageModelEntry,\n type KnownModelType,\n} from './gateway-model-entry';\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: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\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: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\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\n .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('v4'),\n provider: z.string(),\n modelId: z.string(),\n }),\n modelType: z.string().nullish(),\n }),\n )\n .transform(models =>\n models.filter(\n (m): m is typeof m & { modelType?: KnownModelType | null } =>\n m.modelType == null ||\n KNOWN_MODEL_TYPES.includes(m.modelType as KnownModelType),\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 { LanguageModelV4 } from '@ai-sdk/provider';\n\nexport const KNOWN_MODEL_TYPES = [\n 'embedding',\n 'image',\n 'language',\n 'reranking',\n 'speech',\n 'transcription',\n 'video',\n] as const;\n\nexport type KnownModelType = (typeof KNOWN_MODEL_TYPES)[number];\n\nexport interface GatewayLanguageModelEntry {\n /**\n * The model id used by the remote provider in model settings and for specifying the\n * intended model for text generation.\n */\n id: string;\n\n /**\n * The display name of the model for presentation in user-facing contexts.\n */\n name: string;\n\n /**\n * Optional description of the model.\n */\n description?: string | null;\n\n /**\n * Optional pricing information for the model.\n */\n pricing?: {\n /**\n * Cost per input token in USD.\n */\n input: string;\n /**\n * Cost per output token in USD.\n */\n output: string;\n /**\n * Cost per cached input token in USD.\n * Only present for providers/models that support prompt caching.\n */\n cachedInputTokens?: string;\n /**\n * Cost per input token to create/write cache entries in USD.\n * Only present for providers/models that support prompt caching.\n */\n cacheCreationInputTokens?: string;\n } | null;\n\n /**\n * Additional AI SDK language model specifications for the model.\n */\n specification: GatewayLanguageModelSpecification;\n\n /**\n * Optional field to differentiate between model types.\n */\n modelType?: KnownModelType | null;\n}\n\nexport type GatewayLanguageModelSpecification = Pick<\n LanguageModelV4,\n 'specificationVersion' | 'provider' | 'modelId'\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';\n\nexport interface GatewaySpendReportParams {\n /** Start date in YYYY-MM-DD format (inclusive) */\n startDate: string;\n /** End date in YYYY-MM-DD format (inclusive) */\n endDate: string;\n /** Primary aggregation dimension. Defaults to 'day'. */\n groupBy?: 'day' | 'user' | 'model' | 'tag' | 'provider' | 'credential_type';\n /** Time granularity when groupBy is 'day'. */\n datePart?: 'day' | 'hour';\n /** Filter to a specific user's spend. */\n userId?: string;\n /** Filter to a specific model (e.g. 'anthropic/claude-sonnet-4.5'). */\n model?: string;\n /** Filter to a specific provider (e.g. 'anthropic'). */\n provider?: string;\n /** Filter to BYOK or system credentials. */\n credentialType?: 'byok' | 'system';\n /** Filter to requests with these tags. */\n tags?: string[];\n}\n\nexport interface GatewaySpendReportRow {\n /** Date string (present when groupBy is 'day') */\n day?: string;\n /** Hour timestamp (present when groupBy is 'day' and datePart is 'hour') */\n hour?: string;\n /** User identifier (present when groupBy is 'user') */\n user?: string;\n /** Model identifier (present when groupBy is 'model') */\n model?: string;\n /** Tag value (present when groupBy is 'tag') */\n tag?: string;\n /** Provider name (present when groupBy is 'provider') */\n provider?: string;\n /** Credential type (present when groupBy is 'credential_type') */\n credentialType?: 'byok' | 'system';\n\n /** Total cost in USD */\n totalCost: number;\n /** Market cost in USD */\n marketCost?: number;\n /** Number of input tokens */\n inputTokens?: number;\n /** Number of output tokens */\n outputTokens?: number;\n /** Number of cached input tokens */\n cachedInputTokens?: number;\n /** Number of cache creation input tokens */\n cacheCreationInputTokens?: number;\n /** Number of reasoning tokens */\n reasoningTokens?: number;\n /** Number of requests */\n requestCount?: number;\n}\n\nexport interface GatewaySpendReportResponse {\n results: GatewaySpendReportRow[];\n}\n\nexport class GatewaySpendReport {\n constructor(private readonly config: GatewayConfig) {}\n\n async getSpendReport(\n params: GatewaySpendReportParams,\n ): Promise<GatewaySpendReportResponse> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const searchParams = new URLSearchParams();\n searchParams.set('start_date', params.startDate);\n searchParams.set('end_date', params.endDate);\n\n if (params.groupBy) {\n searchParams.set('group_by', params.groupBy);\n }\n if (params.datePart) {\n searchParams.set('date_part', params.datePart);\n }\n if (params.userId) {\n searchParams.set('user_id', params.userId);\n }\n if (params.model) {\n searchParams.set('model', params.model);\n }\n if (params.provider) {\n searchParams.set('provider', params.provider);\n }\n if (params.credentialType) {\n searchParams.set('credential_type', params.credentialType);\n }\n if (params.tags && params.tags.length > 0) {\n searchParams.set('tags', params.tags.join(','));\n }\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/report?${searchParams.toString()}`,\n headers: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\n successfulResponseHandler: createJsonResponseHandler(\n gatewaySpendReportResponseSchema,\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 gatewaySpendReportResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n results: z.array(\n z\n .object({\n day: z.string().optional(),\n hour: z.string().optional(),\n user: z.string().optional(),\n model: z.string().optional(),\n tag: z.string().optional(),\n provider: z.string().optional(),\n credential_type: z.enum(['byok', 'system']).optional(),\n total_cost: z.number(),\n market_cost: z.number().optional(),\n input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n cached_input_tokens: z.number().optional(),\n cache_creation_input_tokens: z.number().optional(),\n reasoning_tokens: z.number().optional(),\n request_count: z.number().optional(),\n })\n .transform(\n ({\n credential_type,\n total_cost,\n market_cost,\n input_tokens,\n output_tokens,\n cached_input_tokens,\n cache_creation_input_tokens,\n reasoning_tokens,\n request_count,\n ...rest\n }) => ({\n ...rest,\n ...(credential_type !== undefined\n ? { credentialType: credential_type }\n : {}),\n totalCost: total_cost,\n ...(market_cost !== undefined ? { marketCost: market_cost } : {}),\n ...(input_tokens !== undefined\n ? { inputTokens: input_tokens }\n : {}),\n ...(output_tokens !== undefined\n ? { outputTokens: output_tokens }\n : {}),\n ...(cached_input_tokens !== undefined\n ? { cachedInputTokens: cached_input_tokens }\n : {}),\n ...(cache_creation_input_tokens !== undefined\n ? { cacheCreationInputTokens: cache_creation_input_tokens }\n : {}),\n ...(reasoning_tokens !== undefined\n ? { reasoningTokens: reasoning_tokens }\n : {}),\n ...(request_count !== undefined\n ? { requestCount: request_count }\n : {}),\n }),\n ),\n ),\n }),\n ),\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';\n\nexport interface GatewayGenerationInfoParams {\n /** The generation ID to look up (format: gen_<ulid>) */\n id: string;\n}\n\nexport interface GatewayGenerationInfo {\n /** The generation ID */\n id: string;\n /** Total cost in USD */\n totalCost: number;\n /** Upstream inference cost in USD (BYOK only) */\n upstreamInferenceCost: number;\n /** Usage cost in USD (same as totalCost) */\n usage: number;\n /** ISO 8601 timestamp when the generation was created */\n createdAt: string;\n /** Model identifier */\n model: string;\n /** Whether BYOK credentials were used */\n isByok: boolean;\n /** Provider that served this generation */\n providerName: string;\n /** Whether streaming was used */\n streamed: boolean;\n /** Finish reason (e.g. 'stop') */\n finishReason: string;\n /** Time to first token in milliseconds */\n latency: number;\n /** Total generation time in milliseconds */\n generationTime: number;\n /** Number of prompt tokens */\n promptTokens: number;\n /** Number of completion tokens */\n completionTokens: number;\n /** Reasoning tokens used */\n reasoningTokens: number;\n /** Cached tokens used */\n cachedTokens: number;\n /** Cache creation input tokens */\n cacheCreationTokens: number;\n /** Billable web search calls */\n billableWebSearchCalls: number;\n}\n\nexport class GatewayGenerationInfoFetcher {\n constructor(private readonly config: GatewayConfig) {}\n\n async getGenerationInfo(\n params: GatewayGenerationInfoParams,\n ): Promise<GatewayGenerationInfo> {\n try {\n const baseUrl = new URL(this.config.baseURL);\n\n const { value } = await getFromApi({\n url: `${baseUrl.origin}/v1/generation?id=${encodeURIComponent(params.id)}`,\n headers: this.config.headers\n ? await resolve(this.config.headers)\n : undefined,\n successfulResponseHandler: createJsonResponseHandler(\n gatewayGenerationInfoResponseSchema,\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 gatewayGenerationInfoResponseSchema = lazySchema(() =>\n zodSchema(\n z\n .object({\n data: z\n .object({\n id: z.string(),\n total_cost: z.number(),\n upstream_inference_cost: z.number(),\n usage: z.number(),\n created_at: z.string(),\n model: z.string(),\n is_byok: z.boolean(),\n provider_name: z.string(),\n streamed: z.boolean(),\n finish_reason: z.string(),\n latency: z.number(),\n generation_time: z.number(),\n native_tokens_prompt: z.number(),\n native_tokens_completion: z.number(),\n native_tokens_reasoning: z.number(),\n native_tokens_cached: z.number(),\n native_tokens_cache_creation: z.number(),\n billable_web_search_calls: z.number(),\n })\n .transform(\n ({\n total_cost,\n upstream_inference_cost,\n created_at,\n is_byok,\n provider_name,\n finish_reason,\n generation_time,\n native_tokens_prompt,\n native_tokens_completion,\n native_tokens_reasoning,\n native_tokens_cached,\n native_tokens_cache_creation,\n billable_web_search_calls,\n ...rest\n }) => ({\n ...rest,\n totalCost: total_cost,\n upstreamInferenceCost: upstream_inference_cost,\n createdAt: created_at,\n isByok: is_byok,\n providerName: provider_name,\n finishReason: finish_reason,\n generationTime: generation_time,\n promptTokens: native_tokens_prompt,\n completionTokens: native_tokens_completion,\n reasoningTokens: native_tokens_reasoning,\n cachedTokens: native_tokens_cached,\n cacheCreationTokens: native_tokens_cache_creation,\n billableWebSearchCalls: billable_web_search_calls,\n }),\n ),\n })\n .transform(({ data }) => data),\n ),\n);\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4StreamPart,\n LanguageModelV4GenerateResult,\n LanguageModelV4StreamResult,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\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 LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedUrls = { '*/*': [/.*/] };\n\n static [WORKFLOW_SERIALIZE](model: GatewayLanguageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: GatewayModelId;\n config: GatewayChatConfig;\n }) {\n return new GatewayLanguageModel(options.modelId, options.config);\n }\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: LanguageModelV4CallOptions) {\n const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n return {\n args: this.maybeEncodeFileParts(optionsWithoutSignal),\n warnings: [],\n };\n }\n\n async doGenerate(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4GenerateResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n async doStream(\n options: LanguageModelV4CallOptions,\n ): Promise<LanguageModelV4StreamResult> {\n const { args, warnings } = await this.getArgs(options);\n const { abortSignal } = options;\n\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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<LanguageModelV4StreamPart>,\n LanguageModelV4StreamPart\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(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n /**\n * Encodes inline `Uint8Array` file data to a base64 string in place.\n * @param options - The options to encode.\n * @returns The options with the file data encoded.\n */\n private maybeEncodeFileParts(options: LanguageModelV4CallOptions) {\n for (const message of options.prompt) {\n if (!Array.isArray(message.content)) {\n continue;\n }\n for (const part of message.content) {\n if (part.type === 'file' || part.type === 'reasoning-file') {\n part.data = maybeBase64EncodeFileData(part.data);\n } else if (\n part.type === 'tool-result' &&\n part.output.type === 'content'\n ) {\n for (const contentPart of part.output.value) {\n if (contentPart.type === 'file') {\n contentPart.data = maybeBase64EncodeFileData(contentPart.data);\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': '4',\n 'ai-language-model-id': modelId,\n 'ai-language-model-streaming': String(streaming),\n };\n }\n}\n\nfunction maybeBase64EncodeFileData<T extends { type: string }>(data: T): T {\n if (data.type === 'data') {\n const bytes = (data as { data?: unknown }).data;\n if (bytes instanceof Uint8Array) {\n return { ...data, data: Buffer.from(bytes).toString('base64') } as T;\n }\n }\n return data;\n}\n","import type {\n EmbeddingModelV4,\n SharedV4ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n lazySchema,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\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\ntype GatewayEmbeddingConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n static [WORKFLOW_SERIALIZE](model: GatewayEmbeddingModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: GatewayEmbeddingConfig;\n }) {\n return new GatewayEmbeddingModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayEmbeddingConfig,\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<EmbeddingModelV4['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 SharedV4ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: responseBody.warnings ?? [],\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\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': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayEmbeddingWarningSchema = 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('deprecated'),\n setting: z.string(),\n message: z.string(),\n }),\n z.object({\n type: z.literal('other'),\n message: z.string(),\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 warnings: z.array(gatewayEmbeddingWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n ImageModelV4,\n ImageModelV4File,\n ImageModelV4ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n postJsonToApi,\n resolve,\n serializeModelOptions,\n WORKFLOW_SERIALIZE,\n WORKFLOW_DESERIALIZE,\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\ntype GatewayImageConfig = GatewayConfig & {\n provider: string;\n o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4' as const;\n // Set a very large number to prevent client-side splitting of requests\n readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n static [WORKFLOW_SERIALIZE](model: GatewayImageModel) {\n return serializeModelOptions({\n modelId: model.modelId,\n config: model.config,\n });\n }\n\n static [WORKFLOW_DESERIALIZE](options: {\n modelId: string;\n config: GatewayImageConfig;\n }) {\n return new GatewayImageModel(options.modelId, options.config);\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: GatewayImageConfig,\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<ImageModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV4['doGenerate']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\n try {\n const { responseHeaders, value: responseBody } = 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 ImageModelV4ProviderMetadata,\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 await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\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': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeImageFile(file: ImageModelV4File) {\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('deprecated'),\n setting: z.string(),\n message: z.string(),\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 {\n APICallError,\n type Experimental_VideoModelV4,\n type Experimental_VideoModelV4CallOptions,\n type Experimental_VideoModelV4File,\n type Experimental_VideoModelV4VideoData,\n type SharedV4ProviderMetadata,\n type SharedV4Warning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n parseJsonEventStream,\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_VideoModelV4 {\n readonly specificationVersion = 'v4' 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_VideoModelV4CallOptions): Promise<{\n videos: Array<Experimental_VideoModelV4VideoData>;\n warnings: Array<SharedV4Warning>;\n providerMetadata?: SharedV4ProviderMetadata;\n response: {\n timestamp: Date;\n modelId: string;\n headers: Record<string, string> | undefined;\n };\n }> {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\n try {\n const { responseHeaders, value: responseBody } = await postJsonToApi({\n url: this.getUrl(),\n headers: combineHeaders(\n resolvedHeaders,\n headers ?? {},\n this.getModelConfigHeaders(),\n await resolve(this.config.o11yHeaders),\n { accept: 'text/event-stream' },\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: async ({\n response,\n url,\n requestBodyValues,\n }: {\n url: string;\n requestBodyValues: unknown;\n response: Response;\n }) => {\n if (response.body == null) {\n throw new APICallError({\n message: 'SSE response body is empty',\n url,\n requestBodyValues,\n statusCode: response.status,\n });\n }\n\n const eventStream = parseJsonEventStream({\n stream: response.body,\n schema: gatewayVideoEventSchema,\n });\n\n const reader = eventStream.getReader();\n const { done, value: parseResult } = await reader.read();\n reader.releaseLock();\n\n if (done || !parseResult) {\n throw new APICallError({\n message: 'SSE stream ended without a data event',\n url,\n requestBodyValues,\n statusCode: response.status,\n });\n }\n\n if (!parseResult.success) {\n throw new APICallError({\n message: 'Failed to parse video SSE event',\n cause: parseResult.error,\n url,\n requestBodyValues,\n statusCode: response.status,\n });\n }\n\n const event = parseResult.value;\n\n if (event.type === 'error') {\n throw new APICallError({\n message: event.message,\n statusCode: event.statusCode,\n url,\n requestBodyValues,\n responseHeaders: Object.fromEntries([...response.headers]),\n responseBody: JSON.stringify(event),\n data: {\n error: {\n message: event.message,\n type: event.errorType,\n param: event.param,\n },\n },\n });\n }\n\n // event.type === 'result'\n return {\n value: {\n videos: event.videos,\n warnings: event.warnings,\n providerMetadata: event.providerMetadata,\n },\n responseHeaders: Object.fromEntries([...response.headers]),\n };\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 SharedV4ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\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': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nfunction maybeEncodeVideoFile(file: Experimental_VideoModelV4File) {\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 gatewayVideoWarningSchema = 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('deprecated'),\n setting: z.string(),\n message: z.string(),\n }),\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n]);\n\nconst gatewayVideoEventSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('result'),\n videos: z.array(gatewayVideoDataSchema),\n warnings: z.array(gatewayVideoWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n }),\n z.object({\n type: z.literal('error'),\n message: z.string(),\n errorType: z.string(),\n statusCode: z.number(),\n param: z.unknown().nullable(),\n }),\n]);\n","import type {\n RerankingModelV4,\n SharedV4ProviderMetadata,\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 GatewayRerankingModel implements RerankingModelV4 {\n readonly specificationVersion = 'v4';\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 doRerank({\n documents,\n query,\n topN,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<RerankingModelV4['doRerank']>[0]): Promise<\n Awaited<ReturnType<RerankingModelV4['doRerank']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 documents,\n query,\n ...(topN != null ? { topN } : {}),\n ...(providerOptions ? { providerOptions } : {}),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayRerankingResponseSchema,\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 ranking: responseBody.ranking,\n providerMetadata:\n responseBody.providerMetadata as unknown as SharedV4ProviderMetadata,\n response: { headers: responseHeaders, body: rawValue },\n warnings: responseBody.warnings ?? [],\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/reranking-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-reranking-model-specification-version': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst gatewayRerankingWarningSchema = 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('deprecated'),\n setting: z.string(),\n message: z.string(),\n }),\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n]);\n\nconst gatewayRerankingResponseSchema = lazySchema(() =>\n zodSchema(\n z.object({\n ranking: z.array(\n z.object({\n index: z.number(),\n relevanceScore: z.number(),\n }),\n ),\n warnings: z.array(gatewayRerankingWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), z.record(z.string(), z.unknown()))\n .optional(),\n }),\n ),\n);\n","import type {\n SharedV4ProviderMetadata,\n SharedV4Warning,\n SpeechModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\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 GatewaySpeechModel implements SpeechModelV4 {\n readonly specificationVersion = 'v4' as const;\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 text,\n voice,\n outputFormat,\n instructions,\n speed,\n language,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<SpeechModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<SpeechModelV4['doGenerate']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 text,\n ...(voice && { voice }),\n ...(outputFormat && { outputFormat }),\n ...(instructions && { instructions }),\n ...(speed != null && { speed }),\n ...(language && { language }),\n ...(providerOptions && { providerOptions }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewaySpeechResponseSchema,\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 audio: responseBody.audio,\n warnings: (responseBody.warnings ?? []) as Array<SharedV4Warning>,\n providerMetadata:\n responseBody.providerMetadata as SharedV4ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/speech-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-speech-model-specification-version': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst providerMetadataEntrySchema = z.object({}).catchall(z.unknown());\n\nconst gatewaySpeechWarningSchema = 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('deprecated'),\n setting: z.string(),\n message: z.string(),\n }),\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n]);\n\nconst gatewaySpeechResponseSchema = z.object({\n audio: z.string(),\n warnings: z.array(gatewaySpeechWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import type {\n SharedV4ProviderMetadata,\n SharedV4Warning,\n TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\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 GatewayTranscriptionModel implements TranscriptionModelV4 {\n readonly specificationVersion = 'v4' as const;\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 audio,\n mediaType,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<TranscriptionModelV4['doGenerate']>[0]): Promise<\n Awaited<ReturnType<TranscriptionModelV4['doGenerate']>>\n > {\n const resolvedHeaders = this.config.headers\n ? await resolve(this.config.headers)\n : undefined;\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 audio:\n audio instanceof Uint8Array\n ? convertUint8ArrayToBase64(audio)\n : audio,\n mediaType,\n ...(providerOptions && { providerOptions }),\n },\n successfulResponseHandler: createJsonResponseHandler(\n gatewayTranscriptionResponseSchema,\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 text: responseBody.text,\n segments: responseBody.segments ?? [],\n language: responseBody.language ?? undefined,\n durationInSeconds: responseBody.durationInSeconds ?? undefined,\n warnings: (responseBody.warnings ?? []) as Array<SharedV4Warning>,\n providerMetadata:\n responseBody.providerMetadata as SharedV4ProviderMetadata,\n response: {\n timestamp: new Date(),\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n } catch (error) {\n throw await asGatewayError(\n error,\n await parseAuthMethod(resolvedHeaders ?? {}),\n );\n }\n }\n\n private getUrl() {\n return `${this.config.baseURL}/transcription-model`;\n }\n\n private getModelConfigHeaders() {\n return {\n 'ai-transcription-model-specification-version': '4',\n 'ai-model-id': this.modelId,\n };\n }\n}\n\nconst providerMetadataEntrySchema = z.object({}).catchall(z.unknown());\n\nconst gatewayTranscriptionWarningSchema = 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('deprecated'),\n setting: z.string(),\n message: z.string(),\n }),\n z.object({\n type: z.literal('other'),\n message: z.string(),\n }),\n]);\n\nconst gatewayTranscriptionResponseSchema = z.object({\n text: z.string(),\n segments: z\n .array(\n z.object({\n text: z.string(),\n startSecond: z.number(),\n endSecond: z.number(),\n }),\n )\n .optional(),\n language: z.string().nullish(),\n durationInSeconds: z.number().nullish(),\n warnings: z.array(gatewayTranscriptionWarningSchema).optional(),\n providerMetadata: z\n .record(z.string(), providerMetadataEntrySchema)\n .optional(),\n});\n","import type {\n Experimental_RealtimeModelV4 as RealtimeModelV4,\n Experimental_RealtimeModelV4ClientEvent as RealtimeModelV4ClientEvent,\n Experimental_RealtimeModelV4ClientSecretResult as RealtimeModelV4ClientSecretResult,\n Experimental_RealtimeModelV4ServerEvent as RealtimeModelV4ServerEvent,\n Experimental_RealtimeModelV4SessionConfig as RealtimeModelV4SessionConfig,\n} from '@ai-sdk/provider';\nimport { getGatewayRealtimeProtocols } from './gateway-realtime-auth';\n\nexport type GatewayRealtimeModelConfig = {\n provider: string;\n baseURL: string;\n teamIdOrSlug?: string;\n /**\n * Resolves the Gateway auth token used to authenticate the WebSocket upgrade\n * (API key or Vercel OIDC token).\n */\n getAuthToken: () => PromiseLike<{\n token: string;\n authMethod: 'api-key' | 'oidc';\n }>;\n};\n\n/**\n * Realtime model backed by the AI Gateway.\n *\n * The Gateway normalizes realtime exactly like it normalizes every other\n * modality: the client speaks the normalized AI SDK realtime protocol and the\n * Gateway translates to and from the upstream provider server-side. This model\n * is therefore a thin identity codec over that normalized protocol — only the\n * connection and authentication are Gateway-specific.\n */\nexport class GatewayRealtimeModel implements RealtimeModelV4 {\n readonly specificationVersion = 'v4' as const;\n readonly provider: string;\n readonly modelId: string;\n\n private readonly config: GatewayRealtimeModelConfig;\n\n constructor(modelId: string, config: GatewayRealtimeModelConfig) {\n this.modelId = modelId;\n this.provider = config.provider;\n this.config = config;\n }\n\n /**\n * Unlike providers with a dedicated ephemeral-secret endpoint (e.g. OpenAI),\n * the Gateway v0 realtime path does not mint a new client secret. The returned\n * token is the Gateway credential resolved by the provider (`apiKey`,\n * `AI_GATEWAY_API_KEY`, or Vercel OIDC token) and the WebSocket upgrade is\n * authenticated directly with that credential. The\n * `RealtimeModelV4ClientSecretOptions` are therefore intentionally unused:\n * `sessionConfig` is applied later via the normalized `session-update` event,\n * and `expiresAfterSeconds` has no Gateway-side equivalent.\n */\n async doCreateClientSecret(): Promise<RealtimeModelV4ClientSecretResult> {\n const { token } = await this.config.getAuthToken();\n return {\n token,\n url: toGatewayRealtimeUrl(this.config.baseURL, this.modelId),\n };\n }\n\n getWebSocketConfig(options: { token: string; url: string }): {\n url: string;\n protocols?: string[];\n } {\n return {\n url: options.url,\n protocols: getGatewayRealtimeProtocols(options.token, {\n teamIdOrSlug: this.config.teamIdOrSlug,\n }),\n };\n }\n\n parseServerEvent(raw: unknown): RealtimeModelV4ServerEvent {\n // The Gateway emits normalized AI SDK realtime events, so no\n // provider-specific mapping is needed on the client.\n return raw as RealtimeModelV4ServerEvent;\n }\n\n serializeClientEvent(event: RealtimeModelV4ClientEvent): unknown {\n // The Gateway accepts normalized AI SDK realtime events directly.\n return event;\n }\n\n buildSessionConfig(config: RealtimeModelV4SessionConfig): unknown {\n // The session config is already normalized; the Gateway maps it to the\n // upstream provider's session payload server-side.\n return config;\n }\n}\n\n/**\n * Build the Gateway realtime WebSocket URL. The HTTP(S) base URL is upgraded to\n * WS(S) and the model id rides the `?ai-model-id=` query — the WS transport of\n * the `ai-model-id` header the HTTP routes use, since a browser `WebSocket`\n * cannot set headers. The model id is passed through verbatim; the Gateway owns\n * resolution (including the bare → `openai/` qualification), exactly like the\n * non-realtime routes. The query is slash-safe for qualified ids such as\n * `openai/gpt-realtime-2`.\n */\nfunction toGatewayRealtimeUrl(baseURL: string, modelId: string): string {\n const url = new URL(`${baseURL.replace(/^http/, 'ws')}/realtime-model`);\n url.searchParams.set('ai-model-id', modelId);\n return url.toString();\n}\n","import {\n createProviderExecutedToolFactory,\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 = createProviderExecutedToolFactory<\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 createProviderExecutedToolFactory,\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 = createProviderExecutedToolFactory<\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":["_a","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","name","marker","symbol","_a","_b","lazySchema","zodSchema","_a","z","name","marker","symbol","_a","_b","_a","z","lazySchema","safeValidateTypes","zodSchema","safeValidateTypes","lazySchema","zodSchema","z","lazySchema","zodSchema","z","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","getFromApi","lazySchema","resolve","zodSchema","z","getFromApi","resolve","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","getFromApi","lazySchema","resolve","zodSchema","z","getFromApi","resolve","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","createJsonErrorResponseHandler","createJsonResponseHandler","resolve","z","resolve","createJsonResponseHandler","z","createJsonErrorResponseHandler","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","lazySchema","postJsonToApi","resolve","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","zodSchema","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","_a","_b","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","postJsonToApi","resolve","serializeModelOptions","WORKFLOW_SERIALIZE","WORKFLOW_DESERIALIZE","z","WORKFLOW_SERIALIZE","serializeModelOptions","WORKFLOW_DESERIALIZE","_a","_b","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","APICallError","combineHeaders","convertUint8ArrayToBase64","createJsonErrorResponseHandler","postJsonToApi","resolve","z","_a","resolve","postJsonToApi","combineHeaders","APICallError","createJsonErrorResponseHandler","z","convertUint8ArrayToBase64","providerMetadataEntrySchema","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","lazySchema","postJsonToApi","resolve","zodSchema","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","lazySchema","zodSchema","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","postJsonToApi","resolve","z","_a","resolve","postJsonToApi","combineHeaders","createJsonResponseHandler","createJsonErrorResponseHandler","z","providerMetadataEntrySchema","combineHeaders","convertUint8ArrayToBase64","createJsonErrorResponseHandler","createJsonResponseHandler","postJsonToApi","resolve","z","_a","_b","resolve","postJsonToApi","combineHeaders","convertUint8ArrayToBase64","createJsonResponseHandler","createJsonErrorResponseHandler","z","providerMetadataEntrySchema","lazySchema","zodSchema","z","createProviderExecutedToolFactory","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": "4.0.0-canary.
|
|
4
|
+
"version": "4.0.0-canary.104",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"sideEffects": false,
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@vercel/oidc": "3.2.0",
|
|
34
|
-
"@ai-sdk/provider
|
|
35
|
-
"@ai-sdk/provider": "
|
|
34
|
+
"@ai-sdk/provider": "4.0.0-canary.18",
|
|
35
|
+
"@ai-sdk/provider-utils": "5.0.0-canary.48"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "22.19.19",
|
|
@@ -98,7 +98,7 @@ export class GatewayEmbeddingModel implements EmbeddingModelV4 {
|
|
|
98
98
|
providerMetadata:
|
|
99
99
|
responseBody.providerMetadata as unknown as SharedV4ProviderMetadata,
|
|
100
100
|
response: { headers: responseHeaders, body: rawValue },
|
|
101
|
-
warnings: [],
|
|
101
|
+
warnings: responseBody.warnings ?? [],
|
|
102
102
|
};
|
|
103
103
|
} catch (error) {
|
|
104
104
|
throw await asGatewayError(
|
|
@@ -120,11 +120,34 @@ export class GatewayEmbeddingModel implements EmbeddingModelV4 {
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
+
const gatewayEmbeddingWarningSchema = z.discriminatedUnion('type', [
|
|
124
|
+
z.object({
|
|
125
|
+
type: z.literal('unsupported'),
|
|
126
|
+
feature: z.string(),
|
|
127
|
+
details: z.string().optional(),
|
|
128
|
+
}),
|
|
129
|
+
z.object({
|
|
130
|
+
type: z.literal('compatibility'),
|
|
131
|
+
feature: z.string(),
|
|
132
|
+
details: z.string().optional(),
|
|
133
|
+
}),
|
|
134
|
+
z.object({
|
|
135
|
+
type: z.literal('deprecated'),
|
|
136
|
+
setting: z.string(),
|
|
137
|
+
message: z.string(),
|
|
138
|
+
}),
|
|
139
|
+
z.object({
|
|
140
|
+
type: z.literal('other'),
|
|
141
|
+
message: z.string(),
|
|
142
|
+
}),
|
|
143
|
+
]);
|
|
144
|
+
|
|
123
145
|
const gatewayEmbeddingResponseSchema = lazySchema(() =>
|
|
124
146
|
zodSchema(
|
|
125
147
|
z.object({
|
|
126
148
|
embeddings: z.array(z.array(z.number())),
|
|
127
149
|
usage: z.object({ tokens: z.number() }).nullish(),
|
|
150
|
+
warnings: z.array(gatewayEmbeddingWarningSchema).optional(),
|
|
128
151
|
providerMetadata: z
|
|
129
152
|
.record(z.string(), z.record(z.string(), z.unknown()))
|
|
130
153
|
.optional(),
|
|
@@ -167,6 +167,11 @@ const gatewayImageWarningSchema = z.discriminatedUnion('type', [
|
|
|
167
167
|
feature: z.string(),
|
|
168
168
|
details: z.string().optional(),
|
|
169
169
|
}),
|
|
170
|
+
z.object({
|
|
171
|
+
type: z.literal('deprecated'),
|
|
172
|
+
setting: z.string(),
|
|
173
|
+
message: z.string(),
|
|
174
|
+
}),
|
|
170
175
|
z.object({
|
|
171
176
|
type: z.literal('other'),
|
|
172
177
|
message: z.string(),
|
|
@@ -80,7 +80,7 @@ export class GatewayRerankingModel implements RerankingModelV4 {
|
|
|
80
80
|
providerMetadata:
|
|
81
81
|
responseBody.providerMetadata as unknown as SharedV4ProviderMetadata,
|
|
82
82
|
response: { headers: responseHeaders, body: rawValue },
|
|
83
|
-
warnings: [],
|
|
83
|
+
warnings: responseBody.warnings ?? [],
|
|
84
84
|
};
|
|
85
85
|
} catch (error) {
|
|
86
86
|
throw await asGatewayError(
|
|
@@ -102,6 +102,28 @@ export class GatewayRerankingModel implements RerankingModelV4 {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
const gatewayRerankingWarningSchema = z.discriminatedUnion('type', [
|
|
106
|
+
z.object({
|
|
107
|
+
type: z.literal('unsupported'),
|
|
108
|
+
feature: z.string(),
|
|
109
|
+
details: z.string().optional(),
|
|
110
|
+
}),
|
|
111
|
+
z.object({
|
|
112
|
+
type: z.literal('compatibility'),
|
|
113
|
+
feature: z.string(),
|
|
114
|
+
details: z.string().optional(),
|
|
115
|
+
}),
|
|
116
|
+
z.object({
|
|
117
|
+
type: z.literal('deprecated'),
|
|
118
|
+
setting: z.string(),
|
|
119
|
+
message: z.string(),
|
|
120
|
+
}),
|
|
121
|
+
z.object({
|
|
122
|
+
type: z.literal('other'),
|
|
123
|
+
message: z.string(),
|
|
124
|
+
}),
|
|
125
|
+
]);
|
|
126
|
+
|
|
105
127
|
const gatewayRerankingResponseSchema = lazySchema(() =>
|
|
106
128
|
zodSchema(
|
|
107
129
|
z.object({
|
|
@@ -111,6 +133,7 @@ const gatewayRerankingResponseSchema = lazySchema(() =>
|
|
|
111
133
|
relevanceScore: z.number(),
|
|
112
134
|
}),
|
|
113
135
|
),
|
|
136
|
+
warnings: z.array(gatewayRerankingWarningSchema).optional(),
|
|
114
137
|
providerMetadata: z
|
|
115
138
|
.record(z.string(), z.record(z.string(), z.unknown()))
|
|
116
139
|
.optional(),
|
|
@@ -125,6 +125,11 @@ const gatewaySpeechWarningSchema = z.discriminatedUnion('type', [
|
|
|
125
125
|
feature: z.string(),
|
|
126
126
|
details: z.string().optional(),
|
|
127
127
|
}),
|
|
128
|
+
z.object({
|
|
129
|
+
type: z.literal('deprecated'),
|
|
130
|
+
setting: z.string(),
|
|
131
|
+
message: z.string(),
|
|
132
|
+
}),
|
|
128
133
|
z.object({
|
|
129
134
|
type: z.literal('other'),
|
|
130
135
|
message: z.string(),
|
|
@@ -124,6 +124,11 @@ const gatewayTranscriptionWarningSchema = z.discriminatedUnion('type', [
|
|
|
124
124
|
feature: z.string(),
|
|
125
125
|
details: z.string().optional(),
|
|
126
126
|
}),
|
|
127
|
+
z.object({
|
|
128
|
+
type: z.literal('deprecated'),
|
|
129
|
+
setting: z.string(),
|
|
130
|
+
message: z.string(),
|
|
131
|
+
}),
|
|
127
132
|
z.object({
|
|
128
133
|
type: z.literal('other'),
|
|
129
134
|
message: z.string(),
|
|
@@ -239,6 +239,11 @@ const gatewayVideoWarningSchema = z.discriminatedUnion('type', [
|
|
|
239
239
|
feature: z.string(),
|
|
240
240
|
details: z.string().optional(),
|
|
241
241
|
}),
|
|
242
|
+
z.object({
|
|
243
|
+
type: z.literal('deprecated'),
|
|
244
|
+
setting: z.string(),
|
|
245
|
+
message: z.string(),
|
|
246
|
+
}),
|
|
242
247
|
z.object({
|
|
243
248
|
type: z.literal('other'),
|
|
244
249
|
message: z.string(),
|