@ai-sdk/google-vertex 5.0.99 → 5.0.101
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 +24 -0
- package/dist/anthropic/edge/index.d.ts.map +1 -1
- package/dist/anthropic/edge/index.js +10 -4
- package/dist/anthropic/edge/index.js.map +1 -1
- package/dist/anthropic/index.d.ts.map +1 -1
- package/dist/anthropic/index.js +9 -3
- package/dist/anthropic/index.js.map +1 -1
- package/dist/edge/index.d.ts.map +1 -1
- package/dist/edge/index.js +32 -12
- package/dist/edge/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -12
- package/dist/index.js.map +1 -1
- package/dist/maas/edge/index.d.ts.map +1 -1
- package/dist/maas/edge/index.js +15 -7
- package/dist/maas/edge/index.js.map +1 -1
- package/dist/maas/index.d.ts.map +1 -1
- package/dist/maas/index.js +14 -6
- package/dist/maas/index.js.map +1 -1
- package/dist/xai/edge/index.js +1 -1
- package/package.json +6 -6
- package/src/anthropic/google-vertex-anthropic-provider.ts +14 -4
- package/src/gemini-transcription/google-vertex-gemini-transcription-model.ts +5 -1
- package/src/google-vertex-provider-base.ts +28 -15
- package/src/google-vertex-transcription-model-options.ts +2 -1
- package/src/google-vertex-transcription-model.ts +13 -1
- package/src/maas/google-vertex-maas-provider.ts +18 -6
package/dist/maas/edge/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { getRuntimeEnvironmentUserAgent, loadOptionalSetting, loadSetting, resolve, withUserAgentSuffix, withoutTrailingSlash } from "@ai-sdk/provider-utils";
|
|
1
|
+
import { getRuntimeEnvironmentUserAgent, isValidHostnamePart, loadOptionalSetting, loadSetting, resolve, withUserAgentSuffix, withoutTrailingSlash } from "@ai-sdk/provider-utils";
|
|
2
|
+
import { InvalidArgumentError } from "@ai-sdk/provider";
|
|
2
3
|
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
3
4
|
//#region src/version.ts
|
|
4
|
-
const VERSION = "5.0.
|
|
5
|
+
const VERSION = "5.0.101";
|
|
5
6
|
//#endregion
|
|
6
7
|
//#region src/edge/google-vertex-auth-edge.ts
|
|
7
8
|
const loadCredentials = async () => {
|
|
@@ -100,10 +101,17 @@ function transformGoogleVertexMaasRequestBody(args) {
|
|
|
100
101
|
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
|
|
101
102
|
*/
|
|
102
103
|
function createGoogleVertexMaas$1(options = {}) {
|
|
103
|
-
const loadLocation = () =>
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
const loadLocation = () => {
|
|
105
|
+
const location = loadOptionalSetting({
|
|
106
|
+
settingValue: options.location,
|
|
107
|
+
environmentVariableName: "GOOGLE_VERTEX_LOCATION"
|
|
108
|
+
}) ?? "global";
|
|
109
|
+
if (!isValidHostnamePart(location)) throw new InvalidArgumentError({
|
|
110
|
+
argument: "location",
|
|
111
|
+
message: "Invalid Google Vertex location. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints."
|
|
112
|
+
});
|
|
113
|
+
return location;
|
|
114
|
+
};
|
|
107
115
|
const loadProject = () => loadSetting({
|
|
108
116
|
settingValue: options.project,
|
|
109
117
|
settingName: "project",
|
|
@@ -117,7 +125,7 @@ function createGoogleVertexMaas$1(options = {}) {
|
|
|
117
125
|
};
|
|
118
126
|
const constructBaseURL = () => {
|
|
119
127
|
const projectId = loadProject();
|
|
120
|
-
const location = loadLocation()
|
|
128
|
+
const location = loadLocation();
|
|
121
129
|
return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;
|
|
122
130
|
};
|
|
123
131
|
const loadBaseURL = () => withoutTrailingSlash(options.baseURL ?? "") || constructBaseURL();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["createGoogleVertexMaas","createVertexMaasOriginal"],"sources":["../../../src/version.ts","../../../src/edge/google-vertex-auth-edge.ts","../../../src/maas/google-vertex-maas-provider.ts","../../../src/maas/edge/google-vertex-maas-provider-edge.ts"],"sourcesContent":["// 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","import {\n loadOptionalSetting,\n loadSetting,\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n} from '@ai-sdk/provider-utils';\nimport { VERSION } from '../version';\n\nexport interface GoogleCredentials {\n /**\n * The client email for the Google Cloud service account. Defaults to the\n * value of the `GOOGLE_CLIENT_EMAIL` environment variable.\n */\n clientEmail: string;\n\n /**\n * The private key for the Google Cloud service account. Defaults to the\n * value of the `GOOGLE_PRIVATE_KEY` environment variable.\n */\n privateKey: string;\n\n /**\n * Optional. The private key ID for the Google Cloud service account. Defaults\n * to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.\n */\n privateKeyId?: string;\n}\n\nconst loadCredentials = async (): Promise<GoogleCredentials> => {\n try {\n return {\n clientEmail: loadSetting({\n settingValue: undefined,\n settingName: 'clientEmail',\n environmentVariableName: 'GOOGLE_CLIENT_EMAIL',\n description: 'Google client email',\n }),\n privateKey: loadSetting({\n settingValue: undefined,\n settingName: 'privateKey',\n environmentVariableName: 'GOOGLE_PRIVATE_KEY',\n description: 'Google private key',\n }),\n privateKeyId: loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'GOOGLE_PRIVATE_KEY_ID',\n }),\n };\n } catch (error: any) {\n throw new Error(`Failed to load Google credentials: ${error.message}`);\n }\n};\n\n// Convert a string to base64url\nconst base64url = (str: string) => {\n return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n};\nconst importPrivateKey = async (pemKey: string) => {\n const pemHeader = '-----BEGIN PRIVATE KEY-----';\n const pemFooter = '-----END PRIVATE KEY-----';\n\n // Remove header, footer, and any whitespace/newlines\n const pemContents = pemKey\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n // Decode base64 to binary\n const binaryString = atob(pemContents);\n\n // Convert binary string to Uint8Array\n const binaryData = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n binaryData[i] = binaryString.charCodeAt(i);\n }\n\n return await crypto.subtle.importKey(\n 'pkcs8',\n binaryData,\n { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },\n true,\n ['sign'],\n );\n};\n\nconst buildJwt = async (credentials: GoogleCredentials) => {\n const now = Math.floor(Date.now() / 1000);\n\n // Only include kid in header if privateKeyId is provided\n const header: { alg: string; typ: string; kid?: string } = {\n alg: 'RS256',\n typ: 'JWT',\n };\n\n if (credentials.privateKeyId) {\n header.kid = credentials.privateKeyId;\n }\n\n const payload = {\n iss: credentials.clientEmail,\n scope: 'https://www.googleapis.com/auth/cloud-platform',\n aud: 'https://oauth2.googleapis.com/token',\n exp: now + 3600,\n iat: now,\n };\n\n const privateKey = await importPrivateKey(credentials.privateKey);\n\n const signingInput = `${base64url(JSON.stringify(header))}.${base64url(\n JSON.stringify(payload),\n )}`;\n const encoder = new TextEncoder();\n const data = encoder.encode(signingInput);\n\n const signature = await crypto.subtle.sign(\n 'RSASSA-PKCS1-v1_5',\n privateKey,\n data,\n );\n\n const signatureBase64 = base64url(\n String.fromCharCode(...new Uint8Array(signature)),\n );\n\n return `${base64url(JSON.stringify(header))}.${base64url(\n JSON.stringify(payload),\n )}.${signatureBase64}`;\n};\n\n/**\n * Generate an authentication token for Google Vertex AI in a manner compatible\n * with the Edge runtime.\n */\nexport async function generateAuthToken(credentials?: GoogleCredentials) {\n const creds = credentials || (await loadCredentials());\n const jwt = await buildJwt(creds);\n\n const response = await fetch('https://oauth2.googleapis.com/token', {\n method: 'POST',\n headers: withUserAgentSuffix(\n { 'Content-Type': 'application/x-www-form-urlencoded' },\n `ai-sdk-google-vertex/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n body: new URLSearchParams({\n grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n assertion: jwt,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Token request failed: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.access_token;\n}\n","import {\n createOpenAICompatible,\n type OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport {\n loadOptionalSetting,\n loadSetting,\n withoutTrailingSlash,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport type { GoogleVertexMaasModelId } from './google-vertex-maas-options';\n\nconst maxOutputTokensByModel: Record<string, number | undefined> = {\n 'meta/llama-4-maverick-17b-128e-instruct-maas': 8192,\n 'meta/llama-4-scout-17b-16e-instruct-maas': 8192,\n};\n\nfunction transformGoogleVertexMaasRequestBody(args: Record<string, any>) {\n const maxOutputTokens = maxOutputTokensByModel[args.model];\n\n return maxOutputTokens != null && args.max_tokens === undefined\n ? { ...args, max_tokens: maxOutputTokens }\n : args;\n}\n\nexport interface GoogleVertexMaasProvider extends OpenAICompatibleProvider<\n GoogleVertexMaasModelId,\n string,\n string,\n string\n> {}\n\nexport interface GoogleVertexMaasProviderSettings {\n /**\n * Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.\n */\n project?: string;\n\n /**\n * Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.\n * Use 'global' for the global endpoint.\n */\n location?: string;\n\n /**\n * Base URL for the API calls. If not provided, will be constructed from project and location.\n */\n baseURL?: string;\n\n /**\n * Headers to use for requests. Can be:\n * - A headers object\n * - A Promise that resolves to a headers object\n * - A function that returns a headers object\n * - A function that returns a Promise of a headers object\n */\n headers?: Resolvable<Record<string, string | undefined>>;\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/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n // Lazy-load settings to support loading from environment variables at runtime\n const loadLocation = () =>\n loadOptionalSetting({\n settingValue: options.location,\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n });\n\n const loadProject = () =>\n loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n });\n\n const getHost = (location: string) => {\n if (location === 'global') {\n return 'aiplatform.googleapis.com';\n } else if (location === 'eu' || location === 'us') {\n return `aiplatform.${location}.rep.googleapis.com`;\n } else {\n return `${location}-aiplatform.googleapis.com`;\n }\n };\n\n const constructBaseURL = () => {\n const projectId = loadProject();\n const location = loadLocation() ?? 'global';\n\n return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;\n };\n\n const loadBaseURL = () =>\n withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();\n\n let cachedProvider: GoogleVertexMaasProvider | undefined;\n const getProvider = () =>\n (cachedProvider ??= createOpenAICompatible({\n name: 'vertex.maas',\n baseURL: loadBaseURL(),\n fetch: options.fetch,\n transformRequestBody: transformGoogleVertexMaasRequestBody,\n }));\n\n const provider = (modelId: GoogleVertexMaasModelId) => getProvider()(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().languageModel(modelId);\n provider.chatModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().chatModel(modelId);\n provider.completionModel = (modelId: string) =>\n getProvider().completionModel(modelId);\n provider.embeddingModel = (modelId: string) =>\n getProvider().embeddingModel(modelId);\n provider.textEmbeddingModel = (modelId: string) =>\n getProvider().textEmbeddingModel(modelId);\n provider.imageModel = (modelId: string) => getProvider().imageModel(modelId);\n\n return provider as GoogleVertexMaasProvider;\n}\n","import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n generateAuthToken,\n type GoogleCredentials,\n} from '../../edge/google-vertex-auth-edge';\nimport {\n createGoogleVertexMaas as createVertexMaasOriginal,\n type GoogleVertexMaasProvider,\n type GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,\n} from '../google-vertex-maas-provider';\nexport type { GoogleVertexMaasProvider };\n\nexport interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProviderSettingsOriginal {\n /**\n * Optional. The Google credentials for the Google Cloud service account. If\n * not provided, the Google Vertex provider will use environment variables to\n * load the credentials.\n */\n googleCredentials?: GoogleCredentials;\n}\n\n/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance for Edge runtimes.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n * Automatically handles Google Cloud authentication.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n // Create a custom fetch wrapper that adds auth headers\n const customFetch: FetchFunction = async (url, init) => {\n const token = await generateAuthToken(options.googleCredentials);\n const resolvedHeaders = await resolve(options.headers);\n const authHeaders = {\n ...resolvedHeaders,\n Authorization: `Bearer ${token}`,\n };\n\n // Merge auth headers with existing headers from init\n const fetchInit = {\n ...init,\n headers: {\n ...init?.headers,\n ...authHeaders,\n },\n };\n\n // Call the original fetch or user's custom fetch\n return (options.fetch ?? fetch)(url, fetchInit);\n };\n\n return createVertexMaasOriginal({\n ...options,\n fetch: customFetch,\n headers: undefined, // Don't pass headers, we handle them in fetch\n });\n}\n\n/**\n * Default Google Vertex AI MaaS provider instance for Edge runtimes.\n */\nexport const googleVertexMaas = createGoogleVertexMaas();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["createGoogleVertexMaas","createVertexMaasOriginal"],"sources":["../../../src/version.ts","../../../src/edge/google-vertex-auth-edge.ts","../../../src/maas/google-vertex-maas-provider.ts","../../../src/maas/edge/google-vertex-maas-provider-edge.ts"],"sourcesContent":["// 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","import {\n loadOptionalSetting,\n loadSetting,\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n} from '@ai-sdk/provider-utils';\nimport { VERSION } from '../version';\n\nexport interface GoogleCredentials {\n /**\n * The client email for the Google Cloud service account. Defaults to the\n * value of the `GOOGLE_CLIENT_EMAIL` environment variable.\n */\n clientEmail: string;\n\n /**\n * The private key for the Google Cloud service account. Defaults to the\n * value of the `GOOGLE_PRIVATE_KEY` environment variable.\n */\n privateKey: string;\n\n /**\n * Optional. The private key ID for the Google Cloud service account. Defaults\n * to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.\n */\n privateKeyId?: string;\n}\n\nconst loadCredentials = async (): Promise<GoogleCredentials> => {\n try {\n return {\n clientEmail: loadSetting({\n settingValue: undefined,\n settingName: 'clientEmail',\n environmentVariableName: 'GOOGLE_CLIENT_EMAIL',\n description: 'Google client email',\n }),\n privateKey: loadSetting({\n settingValue: undefined,\n settingName: 'privateKey',\n environmentVariableName: 'GOOGLE_PRIVATE_KEY',\n description: 'Google private key',\n }),\n privateKeyId: loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'GOOGLE_PRIVATE_KEY_ID',\n }),\n };\n } catch (error: any) {\n throw new Error(`Failed to load Google credentials: ${error.message}`);\n }\n};\n\n// Convert a string to base64url\nconst base64url = (str: string) => {\n return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n};\nconst importPrivateKey = async (pemKey: string) => {\n const pemHeader = '-----BEGIN PRIVATE KEY-----';\n const pemFooter = '-----END PRIVATE KEY-----';\n\n // Remove header, footer, and any whitespace/newlines\n const pemContents = pemKey\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n // Decode base64 to binary\n const binaryString = atob(pemContents);\n\n // Convert binary string to Uint8Array\n const binaryData = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n binaryData[i] = binaryString.charCodeAt(i);\n }\n\n return await crypto.subtle.importKey(\n 'pkcs8',\n binaryData,\n { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },\n true,\n ['sign'],\n );\n};\n\nconst buildJwt = async (credentials: GoogleCredentials) => {\n const now = Math.floor(Date.now() / 1000);\n\n // Only include kid in header if privateKeyId is provided\n const header: { alg: string; typ: string; kid?: string } = {\n alg: 'RS256',\n typ: 'JWT',\n };\n\n if (credentials.privateKeyId) {\n header.kid = credentials.privateKeyId;\n }\n\n const payload = {\n iss: credentials.clientEmail,\n scope: 'https://www.googleapis.com/auth/cloud-platform',\n aud: 'https://oauth2.googleapis.com/token',\n exp: now + 3600,\n iat: now,\n };\n\n const privateKey = await importPrivateKey(credentials.privateKey);\n\n const signingInput = `${base64url(JSON.stringify(header))}.${base64url(\n JSON.stringify(payload),\n )}`;\n const encoder = new TextEncoder();\n const data = encoder.encode(signingInput);\n\n const signature = await crypto.subtle.sign(\n 'RSASSA-PKCS1-v1_5',\n privateKey,\n data,\n );\n\n const signatureBase64 = base64url(\n String.fromCharCode(...new Uint8Array(signature)),\n );\n\n return `${base64url(JSON.stringify(header))}.${base64url(\n JSON.stringify(payload),\n )}.${signatureBase64}`;\n};\n\n/**\n * Generate an authentication token for Google Vertex AI in a manner compatible\n * with the Edge runtime.\n */\nexport async function generateAuthToken(credentials?: GoogleCredentials) {\n const creds = credentials || (await loadCredentials());\n const jwt = await buildJwt(creds);\n\n const response = await fetch('https://oauth2.googleapis.com/token', {\n method: 'POST',\n headers: withUserAgentSuffix(\n { 'Content-Type': 'application/x-www-form-urlencoded' },\n `ai-sdk-google-vertex/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n body: new URLSearchParams({\n grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n assertion: jwt,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Token request failed: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.access_token;\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport {\n createOpenAICompatible,\n type OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport {\n isValidHostnamePart,\n loadOptionalSetting,\n loadSetting,\n withoutTrailingSlash,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport type { GoogleVertexMaasModelId } from './google-vertex-maas-options';\n\nconst maxOutputTokensByModel: Record<string, number | undefined> = {\n 'meta/llama-4-maverick-17b-128e-instruct-maas': 8192,\n 'meta/llama-4-scout-17b-16e-instruct-maas': 8192,\n};\n\nfunction transformGoogleVertexMaasRequestBody(args: Record<string, any>) {\n const maxOutputTokens = maxOutputTokensByModel[args.model];\n\n return maxOutputTokens != null && args.max_tokens === undefined\n ? { ...args, max_tokens: maxOutputTokens }\n : args;\n}\n\nexport interface GoogleVertexMaasProvider extends OpenAICompatibleProvider<\n GoogleVertexMaasModelId,\n string,\n string,\n string\n> {}\n\nexport interface GoogleVertexMaasProviderSettings {\n /**\n * Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.\n */\n project?: string;\n\n /**\n * Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.\n * Use 'global' for the global endpoint.\n */\n location?: string;\n\n /**\n * Base URL for the API calls. If not provided, will be constructed from project and location.\n */\n baseURL?: string;\n\n /**\n * Headers to use for requests. Can be:\n * - A headers object\n * - A Promise that resolves to a headers object\n * - A function that returns a headers object\n * - A function that returns a Promise of a headers object\n */\n headers?: Resolvable<Record<string, string | undefined>>;\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/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n // Lazy-load settings to support loading from environment variables at runtime\n const loadLocation = () => {\n const location =\n loadOptionalSetting({\n settingValue: options.location,\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n }) ?? 'global';\n if (!isValidHostnamePart(location)) {\n throw new InvalidArgumentError({\n argument: 'location',\n message:\n 'Invalid Google Vertex location. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',\n });\n }\n return location;\n };\n\n const loadProject = () =>\n loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n });\n\n const getHost = (location: string) => {\n if (location === 'global') {\n return 'aiplatform.googleapis.com';\n } else if (location === 'eu' || location === 'us') {\n return `aiplatform.${location}.rep.googleapis.com`;\n } else {\n return `${location}-aiplatform.googleapis.com`;\n }\n };\n\n const constructBaseURL = () => {\n const projectId = loadProject();\n const location = loadLocation();\n\n return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;\n };\n\n const loadBaseURL = () =>\n withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();\n\n let cachedProvider: GoogleVertexMaasProvider | undefined;\n const getProvider = () =>\n (cachedProvider ??= createOpenAICompatible({\n name: 'vertex.maas',\n baseURL: loadBaseURL(),\n fetch: options.fetch,\n transformRequestBody: transformGoogleVertexMaasRequestBody,\n }));\n\n const provider = (modelId: GoogleVertexMaasModelId) => getProvider()(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().languageModel(modelId);\n provider.chatModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().chatModel(modelId);\n provider.completionModel = (modelId: string) =>\n getProvider().completionModel(modelId);\n provider.embeddingModel = (modelId: string) =>\n getProvider().embeddingModel(modelId);\n provider.textEmbeddingModel = (modelId: string) =>\n getProvider().textEmbeddingModel(modelId);\n provider.imageModel = (modelId: string) => getProvider().imageModel(modelId);\n\n return provider as GoogleVertexMaasProvider;\n}\n","import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n generateAuthToken,\n type GoogleCredentials,\n} from '../../edge/google-vertex-auth-edge';\nimport {\n createGoogleVertexMaas as createVertexMaasOriginal,\n type GoogleVertexMaasProvider,\n type GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,\n} from '../google-vertex-maas-provider';\nexport type { GoogleVertexMaasProvider };\n\nexport interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProviderSettingsOriginal {\n /**\n * Optional. The Google credentials for the Google Cloud service account. If\n * not provided, the Google Vertex provider will use environment variables to\n * load the credentials.\n */\n googleCredentials?: GoogleCredentials;\n}\n\n/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance for Edge runtimes.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n * Automatically handles Google Cloud authentication.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n // Create a custom fetch wrapper that adds auth headers\n const customFetch: FetchFunction = async (url, init) => {\n const token = await generateAuthToken(options.googleCredentials);\n const resolvedHeaders = await resolve(options.headers);\n const authHeaders = {\n ...resolvedHeaders,\n Authorization: `Bearer ${token}`,\n };\n\n // Merge auth headers with existing headers from init\n const fetchInit = {\n ...init,\n headers: {\n ...init?.headers,\n ...authHeaders,\n },\n };\n\n // Call the original fetch or user's custom fetch\n return (options.fetch ?? fetch)(url, fetchInit);\n };\n\n return createVertexMaasOriginal({\n ...options,\n fetch: customFetch,\n headers: undefined, // Don't pass headers, we handle them in fetch\n });\n}\n\n/**\n * Default Google Vertex AI MaaS provider instance for Edge runtimes.\n */\nexport const googleVertexMaas = createGoogleVertexMaas();\n"],"mappings":"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"}
|
package/dist/maas/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["GoogleVertexMaasProviderSettings","GoogleVertexMaasProviderSettingsOriginal"],"sources":["../../src/maas/google-vertex-maas-options.ts","../../src/maas/google-vertex-maas-provider.ts","../../src/maas/google-vertex-maas-provider-node.ts"],"mappings":";;;;KACY;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["GoogleVertexMaasProviderSettings","GoogleVertexMaasProviderSettingsOriginal"],"sources":["../../src/maas/google-vertex-maas-options.ts","../../src/maas/google-vertex-maas-provider.ts","../../src/maas/google-vertex-maas-provider-node.ts"],"mappings":";;;;KACY;;;UC2BK,iCAAiC,yBAChD;UAMeA;;;;EAIf;;;;;EAMA;;;;EAKA;;;;;;;;EASA,UAAU,WAAW;;;;;EAMrB,QAAQ;;;;UCvDO,yCAAyCC;;;;;;;EAOxD,oBAAoB;;;;;;;;;wBAUN,uBACd,UAAS,mCACR;;;;qBAmCU,kBAAgB"}
|
package/dist/maas/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { loadOptionalSetting, loadSetting, resolve, withoutTrailingSlash } from "@ai-sdk/provider-utils";
|
|
1
|
+
import { isValidHostnamePart, loadOptionalSetting, loadSetting, resolve, withoutTrailingSlash } from "@ai-sdk/provider-utils";
|
|
2
2
|
import { GoogleAuth } from "google-auth-library";
|
|
3
|
+
import { InvalidArgumentError } from "@ai-sdk/provider";
|
|
3
4
|
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
4
5
|
//#region src/google-vertex-auth-google-auth-library.ts
|
|
5
6
|
function createAuthTokenGenerator(options) {
|
|
@@ -31,10 +32,17 @@ function transformGoogleVertexMaasRequestBody(args) {
|
|
|
31
32
|
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
|
|
32
33
|
*/
|
|
33
34
|
function createGoogleVertexMaas$1(options = {}) {
|
|
34
|
-
const loadLocation = () =>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
const loadLocation = () => {
|
|
36
|
+
const location = loadOptionalSetting({
|
|
37
|
+
settingValue: options.location,
|
|
38
|
+
environmentVariableName: "GOOGLE_VERTEX_LOCATION"
|
|
39
|
+
}) ?? "global";
|
|
40
|
+
if (!isValidHostnamePart(location)) throw new InvalidArgumentError({
|
|
41
|
+
argument: "location",
|
|
42
|
+
message: "Invalid Google Vertex location. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints."
|
|
43
|
+
});
|
|
44
|
+
return location;
|
|
45
|
+
};
|
|
38
46
|
const loadProject = () => loadSetting({
|
|
39
47
|
settingValue: options.project,
|
|
40
48
|
settingName: "project",
|
|
@@ -48,7 +56,7 @@ function createGoogleVertexMaas$1(options = {}) {
|
|
|
48
56
|
};
|
|
49
57
|
const constructBaseURL = () => {
|
|
50
58
|
const projectId = loadProject();
|
|
51
|
-
const location = loadLocation()
|
|
59
|
+
const location = loadLocation();
|
|
52
60
|
return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;
|
|
53
61
|
};
|
|
54
62
|
const loadBaseURL = () => withoutTrailingSlash(options.baseURL ?? "") || constructBaseURL();
|
package/dist/maas/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["createGoogleVertexMaas","createVertexMaasOriginal"],"sources":["../../src/google-vertex-auth-google-auth-library.ts","../../src/maas/google-vertex-maas-provider.ts","../../src/maas/google-vertex-maas-provider-node.ts"],"sourcesContent":["import { GoogleAuth, type GoogleAuthOptions } from 'google-auth-library';\n\nexport function createAuthTokenGenerator(options?: GoogleAuthOptions) {\n const auth = new GoogleAuth({\n scopes: ['https://www.googleapis.com/auth/cloud-platform'],\n ...options,\n });\n\n return async function generateAuthToken() {\n const client = await auth.getClient();\n const token = await client.getAccessToken();\n return token?.token ?? null;\n };\n}\n","import {\n createOpenAICompatible,\n type OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport {\n loadOptionalSetting,\n loadSetting,\n withoutTrailingSlash,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport type { GoogleVertexMaasModelId } from './google-vertex-maas-options';\n\nconst maxOutputTokensByModel: Record<string, number | undefined> = {\n 'meta/llama-4-maverick-17b-128e-instruct-maas': 8192,\n 'meta/llama-4-scout-17b-16e-instruct-maas': 8192,\n};\n\nfunction transformGoogleVertexMaasRequestBody(args: Record<string, any>) {\n const maxOutputTokens = maxOutputTokensByModel[args.model];\n\n return maxOutputTokens != null && args.max_tokens === undefined\n ? { ...args, max_tokens: maxOutputTokens }\n : args;\n}\n\nexport interface GoogleVertexMaasProvider extends OpenAICompatibleProvider<\n GoogleVertexMaasModelId,\n string,\n string,\n string\n> {}\n\nexport interface GoogleVertexMaasProviderSettings {\n /**\n * Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.\n */\n project?: string;\n\n /**\n * Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.\n * Use 'global' for the global endpoint.\n */\n location?: string;\n\n /**\n * Base URL for the API calls. If not provided, will be constructed from project and location.\n */\n baseURL?: string;\n\n /**\n * Headers to use for requests. Can be:\n * - A headers object\n * - A Promise that resolves to a headers object\n * - A function that returns a headers object\n * - A function that returns a Promise of a headers object\n */\n headers?: Resolvable<Record<string, string | undefined>>;\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/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n // Lazy-load settings to support loading from environment variables at runtime\n const loadLocation = () =>\n loadOptionalSetting({\n settingValue: options.location,\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n });\n\n const loadProject = () =>\n loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n });\n\n const getHost = (location: string) => {\n if (location === 'global') {\n return 'aiplatform.googleapis.com';\n } else if (location === 'eu' || location === 'us') {\n return `aiplatform.${location}.rep.googleapis.com`;\n } else {\n return `${location}-aiplatform.googleapis.com`;\n }\n };\n\n const constructBaseURL = () => {\n const projectId = loadProject();\n const location = loadLocation() ?? 'global';\n\n return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;\n };\n\n const loadBaseURL = () =>\n withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();\n\n let cachedProvider: GoogleVertexMaasProvider | undefined;\n const getProvider = () =>\n (cachedProvider ??= createOpenAICompatible({\n name: 'vertex.maas',\n baseURL: loadBaseURL(),\n fetch: options.fetch,\n transformRequestBody: transformGoogleVertexMaasRequestBody,\n }));\n\n const provider = (modelId: GoogleVertexMaasModelId) => getProvider()(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().languageModel(modelId);\n provider.chatModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().chatModel(modelId);\n provider.completionModel = (modelId: string) =>\n getProvider().completionModel(modelId);\n provider.embeddingModel = (modelId: string) =>\n getProvider().embeddingModel(modelId);\n provider.textEmbeddingModel = (modelId: string) =>\n getProvider().textEmbeddingModel(modelId);\n provider.imageModel = (modelId: string) => getProvider().imageModel(modelId);\n\n return provider as GoogleVertexMaasProvider;\n}\n","import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';\nimport type { GoogleAuthOptions } from 'google-auth-library';\nimport { createAuthTokenGenerator } from '../google-vertex-auth-google-auth-library';\nimport {\n createGoogleVertexMaas as createVertexMaasOriginal,\n type GoogleVertexMaasProvider,\n type GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,\n} from './google-vertex-maas-provider';\nexport type { GoogleVertexMaasProvider };\n\nexport interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProviderSettingsOriginal {\n /**\n * Optional. The Authentication options provided by google-auth-library.\n * Complete list of authentication options is documented in the\n * GoogleAuthOptions interface:\n * https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.\n */\n googleAuthOptions?: GoogleAuthOptions;\n}\n\n/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance for Node.js.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n * Automatically handles Google Cloud authentication.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n const generateAuthToken = createAuthTokenGenerator(options.googleAuthOptions);\n\n // Create a custom fetch wrapper that adds auth headers\n const customFetch: FetchFunction = async (url, init) => {\n const token = await generateAuthToken();\n const resolvedHeaders = await resolve(options.headers);\n const authHeaders = {\n ...resolvedHeaders,\n Authorization: `Bearer ${token}`,\n };\n\n // Merge auth headers with existing headers from init\n const fetchInit = {\n ...init,\n headers: {\n ...init?.headers,\n ...authHeaders,\n },\n };\n\n // Call the original fetch or user's custom fetch\n return (options.fetch ?? fetch)(url, fetchInit);\n };\n\n return createVertexMaasOriginal({\n ...options,\n fetch: customFetch,\n headers: undefined, // Don't pass headers, we handle them in fetch\n });\n}\n\n/**\n * Default Google Vertex AI MaaS provider instance for Node.js.\n */\nexport const googleVertexMaas = createGoogleVertexMaas();\n"],"mappings":";;;;AAEA,SAAgB,yBAAyB,SAA6B;CACpE,MAAM,OAAO,IAAI,WAAW;EAC1B,QAAQ,CAAC,gDAAgD;EACzD,GAAG;CACL,CAAC;CAED,OAAO,eAAe,oBAAoB;EAGxC,QAAO,OADa,MADC,KAAK,UAAU,EAAA,CACT,eAAe,EAAA,EAC5B,SAAS;CACzB;AACF;;;ACAA,MAAM,yBAA6D;CACjE,gDAAgD;CAChD,4CAA4C;AAC9C;AAEA,SAAS,qCAAqC,MAA2B;CACvE,MAAM,kBAAkB,uBAAuB,KAAK;CAEpD,OAAO,mBAAmB,QAAQ,KAAK,eAAe,KAAA,IAClD;EAAE,GAAG;EAAM,YAAY;CAAgB,IACvC;AACN;;;;;;;AAgDA,SAAgBA,yBACd,UAA4C,CAAC,GACnB;CAE1B,MAAM,qBACJ,oBAAoB;EAClB,cAAc,QAAQ;EACtB,yBAAyB;CAC3B,CAAC;CAEH,MAAM,oBACJ,YAAY;EACV,cAAc,QAAQ;EACtB,aAAa;EACb,yBAAyB;EACzB,aAAa;CACf,CAAC;CAEH,MAAM,WAAW,aAAqB;EACpC,IAAI,aAAa,UACf,OAAO;OACF,IAAI,aAAa,QAAQ,aAAa,MAC3C,OAAO,cAAc,SAAS;OAE9B,OAAO,GAAG,SAAS;CAEvB;CAEA,MAAM,yBAAyB;EAC7B,MAAM,YAAY,YAAY;EAC9B,MAAM,WAAW,aAAa,KAAK;EAEnC,OAAO,WAAW,QAAQ,QAAQ,EAAE,eAAe,UAAU,aAAa,SAAS;CACrF;CAEA,MAAM,oBACJ,qBAAqB,QAAQ,WAAW,EAAE,KAAK,iBAAiB;CAElE,IAAI;CACJ,MAAM,oBACH,mBAAmB,uBAAuB;EACzC,MAAM;EACN,SAAS,YAAY;EACrB,OAAO,QAAQ;EACf,sBAAsB;CACxB,CAAC;CAEH,MAAM,YAAY,YAAqC,YAAY,CAAC,CAAC,OAAO;CAE5E,SAAS,uBAAuB;CAChC,SAAS,iBAAiB,YACxB,YAAY,CAAC,CAAC,cAAc,OAAO;CACrC,SAAS,aAAa,YACpB,YAAY,CAAC,CAAC,UAAU,OAAO;CACjC,SAAS,mBAAmB,YAC1B,YAAY,CAAC,CAAC,gBAAgB,OAAO;CACvC,SAAS,kBAAkB,YACzB,YAAY,CAAC,CAAC,eAAe,OAAO;CACtC,SAAS,sBAAsB,YAC7B,YAAY,CAAC,CAAC,mBAAmB,OAAO;CAC1C,SAAS,cAAc,YAAoB,YAAY,CAAC,CAAC,WAAW,OAAO;CAE3E,OAAO;AACT;;;;;;;;;;AC5GA,SAAgB,uBACd,UAA4C,CAAC,GACnB;CAC1B,MAAM,oBAAoB,yBAAyB,QAAQ,iBAAiB;CAG5E,MAAM,cAA6B,OAAO,KAAK,SAAS;EACtD,MAAM,QAAQ,MAAM,kBAAkB;EAEtC,MAAM,cAAc;GAClB,GAAG,MAFyB,QAAQ,QAAQ,OAAO;GAGnD,eAAe,UAAU;EAC3B;EAGA,MAAM,YAAY;GAChB,GAAG;GACH,SAAS;IACP,GAAG,MAAM;IACT,GAAG;GACL;EACF;EAGA,QAAQ,QAAQ,SAAS,MAAA,CAAO,KAAK,SAAS;CAChD;CAEA,OAAOC,yBAAyB;EAC9B,GAAG;EACH,OAAO;EACP,SAAS,KAAA;CACX,CAAC;AACH;;;;AAKA,MAAa,mBAAmB,uBAAuB"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["createGoogleVertexMaas","createVertexMaasOriginal"],"sources":["../../src/google-vertex-auth-google-auth-library.ts","../../src/maas/google-vertex-maas-provider.ts","../../src/maas/google-vertex-maas-provider-node.ts"],"sourcesContent":["import { GoogleAuth, type GoogleAuthOptions } from 'google-auth-library';\n\nexport function createAuthTokenGenerator(options?: GoogleAuthOptions) {\n const auth = new GoogleAuth({\n scopes: ['https://www.googleapis.com/auth/cloud-platform'],\n ...options,\n });\n\n return async function generateAuthToken() {\n const client = await auth.getClient();\n const token = await client.getAccessToken();\n return token?.token ?? null;\n };\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport {\n createOpenAICompatible,\n type OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport {\n isValidHostnamePart,\n loadOptionalSetting,\n loadSetting,\n withoutTrailingSlash,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport type { GoogleVertexMaasModelId } from './google-vertex-maas-options';\n\nconst maxOutputTokensByModel: Record<string, number | undefined> = {\n 'meta/llama-4-maverick-17b-128e-instruct-maas': 8192,\n 'meta/llama-4-scout-17b-16e-instruct-maas': 8192,\n};\n\nfunction transformGoogleVertexMaasRequestBody(args: Record<string, any>) {\n const maxOutputTokens = maxOutputTokensByModel[args.model];\n\n return maxOutputTokens != null && args.max_tokens === undefined\n ? { ...args, max_tokens: maxOutputTokens }\n : args;\n}\n\nexport interface GoogleVertexMaasProvider extends OpenAICompatibleProvider<\n GoogleVertexMaasModelId,\n string,\n string,\n string\n> {}\n\nexport interface GoogleVertexMaasProviderSettings {\n /**\n * Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.\n */\n project?: string;\n\n /**\n * Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.\n * Use 'global' for the global endpoint.\n */\n location?: string;\n\n /**\n * Base URL for the API calls. If not provided, will be constructed from project and location.\n */\n baseURL?: string;\n\n /**\n * Headers to use for requests. Can be:\n * - A headers object\n * - A Promise that resolves to a headers object\n * - A function that returns a headers object\n * - A function that returns a Promise of a headers object\n */\n headers?: Resolvable<Record<string, string | undefined>>;\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/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n // Lazy-load settings to support loading from environment variables at runtime\n const loadLocation = () => {\n const location =\n loadOptionalSetting({\n settingValue: options.location,\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n }) ?? 'global';\n if (!isValidHostnamePart(location)) {\n throw new InvalidArgumentError({\n argument: 'location',\n message:\n 'Invalid Google Vertex location. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',\n });\n }\n return location;\n };\n\n const loadProject = () =>\n loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n });\n\n const getHost = (location: string) => {\n if (location === 'global') {\n return 'aiplatform.googleapis.com';\n } else if (location === 'eu' || location === 'us') {\n return `aiplatform.${location}.rep.googleapis.com`;\n } else {\n return `${location}-aiplatform.googleapis.com`;\n }\n };\n\n const constructBaseURL = () => {\n const projectId = loadProject();\n const location = loadLocation();\n\n return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;\n };\n\n const loadBaseURL = () =>\n withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();\n\n let cachedProvider: GoogleVertexMaasProvider | undefined;\n const getProvider = () =>\n (cachedProvider ??= createOpenAICompatible({\n name: 'vertex.maas',\n baseURL: loadBaseURL(),\n fetch: options.fetch,\n transformRequestBody: transformGoogleVertexMaasRequestBody,\n }));\n\n const provider = (modelId: GoogleVertexMaasModelId) => getProvider()(modelId);\n\n provider.specificationVersion = 'v4' as const;\n provider.languageModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().languageModel(modelId);\n provider.chatModel = (modelId: GoogleVertexMaasModelId) =>\n getProvider().chatModel(modelId);\n provider.completionModel = (modelId: string) =>\n getProvider().completionModel(modelId);\n provider.embeddingModel = (modelId: string) =>\n getProvider().embeddingModel(modelId);\n provider.textEmbeddingModel = (modelId: string) =>\n getProvider().textEmbeddingModel(modelId);\n provider.imageModel = (modelId: string) => getProvider().imageModel(modelId);\n\n return provider as GoogleVertexMaasProvider;\n}\n","import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';\nimport type { GoogleAuthOptions } from 'google-auth-library';\nimport { createAuthTokenGenerator } from '../google-vertex-auth-google-auth-library';\nimport {\n createGoogleVertexMaas as createVertexMaasOriginal,\n type GoogleVertexMaasProvider,\n type GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,\n} from './google-vertex-maas-provider';\nexport type { GoogleVertexMaasProvider };\n\nexport interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProviderSettingsOriginal {\n /**\n * Optional. The Authentication options provided by google-auth-library.\n * Complete list of authentication options is documented in the\n * GoogleAuthOptions interface:\n * https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.\n */\n googleAuthOptions?: GoogleAuthOptions;\n}\n\n/**\n * Create a Google Vertex AI MaaS (Model as a Service) provider instance for Node.js.\n * Uses the OpenAI-compatible Chat Completions API for partner and open models.\n * Automatically handles Google Cloud authentication.\n *\n * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models\n */\nexport function createGoogleVertexMaas(\n options: GoogleVertexMaasProviderSettings = {},\n): GoogleVertexMaasProvider {\n const generateAuthToken = createAuthTokenGenerator(options.googleAuthOptions);\n\n // Create a custom fetch wrapper that adds auth headers\n const customFetch: FetchFunction = async (url, init) => {\n const token = await generateAuthToken();\n const resolvedHeaders = await resolve(options.headers);\n const authHeaders = {\n ...resolvedHeaders,\n Authorization: `Bearer ${token}`,\n };\n\n // Merge auth headers with existing headers from init\n const fetchInit = {\n ...init,\n headers: {\n ...init?.headers,\n ...authHeaders,\n },\n };\n\n // Call the original fetch or user's custom fetch\n return (options.fetch ?? fetch)(url, fetchInit);\n };\n\n return createVertexMaasOriginal({\n ...options,\n fetch: customFetch,\n headers: undefined, // Don't pass headers, we handle them in fetch\n });\n}\n\n/**\n * Default Google Vertex AI MaaS provider instance for Node.js.\n */\nexport const googleVertexMaas = createGoogleVertexMaas();\n"],"mappings":";;;;;AAEA,SAAgB,yBAAyB,SAA6B;CACpE,MAAM,OAAO,IAAI,WAAW;EAC1B,QAAQ,CAAC,gDAAgD;EACzD,GAAG;CACL,CAAC;CAED,OAAO,eAAe,oBAAoB;EAGxC,QAAO,OADa,MADC,KAAK,UAAU,EAAA,CACT,eAAe,EAAA,EAC5B,SAAS;CACzB;AACF;;;ACEA,MAAM,yBAA6D;CACjE,gDAAgD;CAChD,4CAA4C;AAC9C;AAEA,SAAS,qCAAqC,MAA2B;CACvE,MAAM,kBAAkB,uBAAuB,KAAK;CAEpD,OAAO,mBAAmB,QAAQ,KAAK,eAAe,KAAA,IAClD;EAAE,GAAG;EAAM,YAAY;CAAgB,IACvC;AACN;;;;;;;AAgDA,SAAgBA,yBACd,UAA4C,CAAC,GACnB;CAE1B,MAAM,qBAAqB;EACzB,MAAM,WACJ,oBAAoB;GAClB,cAAc,QAAQ;GACtB,yBAAyB;EAC3B,CAAC,KAAK;EACR,IAAI,CAAC,oBAAoB,QAAQ,GAC/B,MAAM,IAAI,qBAAqB;GAC7B,UAAU;GACV,SACE;EACJ,CAAC;EAEH,OAAO;CACT;CAEA,MAAM,oBACJ,YAAY;EACV,cAAc,QAAQ;EACtB,aAAa;EACb,yBAAyB;EACzB,aAAa;CACf,CAAC;CAEH,MAAM,WAAW,aAAqB;EACpC,IAAI,aAAa,UACf,OAAO;OACF,IAAI,aAAa,QAAQ,aAAa,MAC3C,OAAO,cAAc,SAAS;OAE9B,OAAO,GAAG,SAAS;CAEvB;CAEA,MAAM,yBAAyB;EAC7B,MAAM,YAAY,YAAY;EAC9B,MAAM,WAAW,aAAa;EAE9B,OAAO,WAAW,QAAQ,QAAQ,EAAE,eAAe,UAAU,aAAa,SAAS;CACrF;CAEA,MAAM,oBACJ,qBAAqB,QAAQ,WAAW,EAAE,KAAK,iBAAiB;CAElE,IAAI;CACJ,MAAM,oBACH,mBAAmB,uBAAuB;EACzC,MAAM;EACN,SAAS,YAAY;EACrB,OAAO,QAAQ;EACf,sBAAsB;CACxB,CAAC;CAEH,MAAM,YAAY,YAAqC,YAAY,CAAC,CAAC,OAAO;CAE5E,SAAS,uBAAuB;CAChC,SAAS,iBAAiB,YACxB,YAAY,CAAC,CAAC,cAAc,OAAO;CACrC,SAAS,aAAa,YACpB,YAAY,CAAC,CAAC,UAAU,OAAO;CACjC,SAAS,mBAAmB,YAC1B,YAAY,CAAC,CAAC,gBAAgB,OAAO;CACvC,SAAS,kBAAkB,YACzB,YAAY,CAAC,CAAC,eAAe,OAAO;CACtC,SAAS,sBAAsB,YAC7B,YAAY,CAAC,CAAC,mBAAmB,OAAO;CAC1C,SAAS,cAAc,YAAoB,YAAY,CAAC,CAAC,WAAW,OAAO;CAE3E,OAAO;AACT;;;;;;;;;;ACxHA,SAAgB,uBACd,UAA4C,CAAC,GACnB;CAC1B,MAAM,oBAAoB,yBAAyB,QAAQ,iBAAiB;CAG5E,MAAM,cAA6B,OAAO,KAAK,SAAS;EACtD,MAAM,QAAQ,MAAM,kBAAkB;EAEtC,MAAM,cAAc;GAClB,GAAG,MAFyB,QAAQ,QAAQ,OAAO;GAGnD,eAAe,UAAU;EAC3B;EAGA,MAAM,YAAY;GAChB,GAAG;GACH,SAAS;IACP,GAAG,MAAM;IACT,GAAG;GACL;EACF;EAGA,QAAQ,QAAQ,SAAS,MAAA,CAAO,KAAK,SAAS;CAChD;CAEA,OAAOC,yBAAyB;EAC9B,GAAG;EACH,OAAO;EACP,SAAS,KAAA;CACX,CAAC;AACH;;;;AAKA,MAAa,mBAAmB,uBAAuB"}
|
package/dist/xai/edge/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { getRuntimeEnvironmentUserAgent, loadOptionalSetting, loadSetting, resol
|
|
|
2
2
|
import { NoSuchModelError } from "@ai-sdk/provider";
|
|
3
3
|
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
|
|
4
4
|
//#region src/version.ts
|
|
5
|
-
const VERSION = "5.0.
|
|
5
|
+
const VERSION = "5.0.101";
|
|
6
6
|
//#endregion
|
|
7
7
|
//#region src/edge/google-vertex-auth-edge.ts
|
|
8
8
|
const loadCredentials = async () => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/google-vertex",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.101",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -71,11 +71,11 @@
|
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@ai-sdk/anthropic": "4.0.
|
|
75
|
-
"@ai-sdk/google": "4.0.
|
|
76
|
-
"@ai-sdk/openai-compatible": "3.0.
|
|
77
|
-
"@ai-sdk/provider": "4.0.
|
|
78
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
74
|
+
"@ai-sdk/anthropic": "4.0.71",
|
|
75
|
+
"@ai-sdk/google": "4.0.87",
|
|
76
|
+
"@ai-sdk/openai-compatible": "3.0.62",
|
|
77
|
+
"@ai-sdk/provider": "4.0.21",
|
|
78
|
+
"@ai-sdk/provider-utils": "5.0.53",
|
|
79
79
|
"google-auth-library": "^10.6.2"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
|
+
InvalidArgumentError,
|
|
2
3
|
NoSuchModelError,
|
|
3
4
|
type LanguageModelV4,
|
|
4
5
|
type ProviderV4,
|
|
5
6
|
} from '@ai-sdk/provider';
|
|
6
7
|
import {
|
|
8
|
+
isValidHostnamePart,
|
|
7
9
|
loadOptionalSetting,
|
|
8
10
|
withoutTrailingSlash,
|
|
9
11
|
type FetchFunction,
|
|
@@ -178,10 +180,21 @@ export function createGoogleVertexAnthropic(
|
|
|
178
180
|
options: GoogleVertexAnthropicProviderSettings = {},
|
|
179
181
|
): GoogleVertexAnthropicProvider {
|
|
180
182
|
const getBaseURL = () => {
|
|
183
|
+
const baseURL = withoutTrailingSlash(options.baseURL);
|
|
184
|
+
if (baseURL != null) {
|
|
185
|
+
return baseURL;
|
|
186
|
+
}
|
|
181
187
|
const location = loadOptionalSetting({
|
|
182
188
|
settingValue: options.location,
|
|
183
189
|
environmentVariableName: 'GOOGLE_VERTEX_LOCATION',
|
|
184
190
|
});
|
|
191
|
+
if (location != null && !isValidHostnamePart(location)) {
|
|
192
|
+
throw new InvalidArgumentError({
|
|
193
|
+
argument: 'location',
|
|
194
|
+
message:
|
|
195
|
+
'Invalid Google Vertex location. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',
|
|
196
|
+
});
|
|
197
|
+
}
|
|
185
198
|
const project = loadOptionalSetting({
|
|
186
199
|
settingValue: options.project,
|
|
187
200
|
environmentVariableName: 'GOOGLE_VERTEX_PROJECT',
|
|
@@ -197,10 +210,7 @@ export function createGoogleVertexAnthropic(
|
|
|
197
210
|
}
|
|
198
211
|
};
|
|
199
212
|
|
|
200
|
-
return (
|
|
201
|
-
withoutTrailingSlash(options.baseURL) ??
|
|
202
|
-
`https://${getHost()}/v1/projects/${project}/locations/${location}/publishers/anthropic/models`
|
|
203
|
-
);
|
|
213
|
+
return `https://${getHost()}/v1/projects/${project}/locations/${location}/publishers/anthropic/models`;
|
|
204
214
|
};
|
|
205
215
|
|
|
206
216
|
const createChatModel = (modelId: GoogleVertexAnthropicModelId) =>
|
|
@@ -248,6 +248,7 @@ export class GoogleVertexGeminiTranscriptionModel implements TranscriptionModelV
|
|
|
248
248
|
},
|
|
249
249
|
...(response.usageMetadata != null
|
|
250
250
|
? {
|
|
251
|
+
usage: response.usageMetadata as JSONObject,
|
|
251
252
|
providerMetadata: {
|
|
252
253
|
google: { usageMetadata: response.usageMetadata as JSONObject },
|
|
253
254
|
},
|
|
@@ -446,7 +447,10 @@ function createVertexLiveTranscriptionStream({
|
|
|
446
447
|
language,
|
|
447
448
|
durationInSeconds: undefined,
|
|
448
449
|
...(usageMetadata != null
|
|
449
|
-
? {
|
|
450
|
+
? {
|
|
451
|
+
usage: usageMetadata,
|
|
452
|
+
providerMetadata: { google: { usageMetadata } },
|
|
453
|
+
}
|
|
450
454
|
: {}),
|
|
451
455
|
});
|
|
452
456
|
controller.close();
|
|
@@ -6,16 +6,18 @@ import {
|
|
|
6
6
|
type GoogleInteractionsModelId,
|
|
7
7
|
type GoogleInteractionsModelInput,
|
|
8
8
|
} from '@ai-sdk/google/internal';
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
import {
|
|
10
|
+
InvalidArgumentError,
|
|
11
|
+
type Experimental_VideoModelV4,
|
|
12
|
+
type ImageModelV4,
|
|
13
|
+
type LanguageModelV4,
|
|
14
|
+
type ProviderV4,
|
|
15
|
+
type SpeechModelV4,
|
|
16
|
+
type TranscriptionModelV4,
|
|
16
17
|
} from '@ai-sdk/provider';
|
|
17
18
|
import {
|
|
18
19
|
generateId,
|
|
20
|
+
isValidHostnamePart,
|
|
19
21
|
loadOptionalSetting,
|
|
20
22
|
loadSetting,
|
|
21
23
|
normalizeHeaders,
|
|
@@ -225,13 +227,22 @@ export function createGoogleVertex(
|
|
|
225
227
|
description: 'Google Vertex project',
|
|
226
228
|
});
|
|
227
229
|
|
|
228
|
-
const loadGoogleVertexLocation = () =>
|
|
229
|
-
loadSetting({
|
|
230
|
+
const loadGoogleVertexLocation = () => {
|
|
231
|
+
const location = loadSetting({
|
|
230
232
|
settingValue: options.location,
|
|
231
233
|
settingName: 'location',
|
|
232
234
|
environmentVariableName: 'GOOGLE_VERTEX_LOCATION',
|
|
233
235
|
description: 'Google Vertex location',
|
|
234
236
|
});
|
|
237
|
+
if (!isValidHostnamePart(location)) {
|
|
238
|
+
throw new InvalidArgumentError({
|
|
239
|
+
argument: 'location',
|
|
240
|
+
message:
|
|
241
|
+
'Invalid Google Vertex location. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
return location;
|
|
245
|
+
};
|
|
235
246
|
|
|
236
247
|
// Tuned models are addressed via their deployed endpoint
|
|
237
248
|
// `.../locations/{region}/endpoints/{id}` instead of the base-model
|
|
@@ -242,6 +253,11 @@ export function createGoogleVertex(
|
|
|
242
253
|
return withoutTrailingSlash(options.baseURL) ?? EXPRESS_MODE_BASE_URL;
|
|
243
254
|
}
|
|
244
255
|
|
|
256
|
+
const baseURL = withoutTrailingSlash(options.baseURL);
|
|
257
|
+
if (baseURL != null) {
|
|
258
|
+
return baseURL;
|
|
259
|
+
}
|
|
260
|
+
|
|
245
261
|
const region = loadGoogleVertexLocation();
|
|
246
262
|
const project = loadGoogleVertexProject();
|
|
247
263
|
|
|
@@ -255,12 +271,9 @@ export function createGoogleVertex(
|
|
|
255
271
|
}
|
|
256
272
|
};
|
|
257
273
|
|
|
258
|
-
return (
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
endpoint ? '' : '/publishers/google'
|
|
262
|
-
}`
|
|
263
|
-
);
|
|
274
|
+
return `https://${getHost()}/v1beta1/projects/${project}/locations/${region}${
|
|
275
|
+
endpoint ? '' : '/publishers/google'
|
|
276
|
+
}`;
|
|
264
277
|
};
|
|
265
278
|
|
|
266
279
|
const createConfig = (
|
|
@@ -32,7 +32,8 @@ export const googleVertexTranscriptionProviderOptionsSchema = z.object({
|
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* The Cloud Speech-to-Text region for the request (e.g. `'us'`, `'eu'`,
|
|
35
|
-
* `'us-central1'`). Defaults to the provider `location`.
|
|
35
|
+
* `'us-central1'`). Defaults to the provider `location`. Must be a single
|
|
36
|
+
* DNS label (letters, digits, and hyphens).
|
|
36
37
|
*
|
|
37
38
|
* Note: Speech-to-Text regions differ from Vertex AI regions. Chirp is only
|
|
38
39
|
* available in specific Speech-to-Text regions and is not available in the
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
InvalidArgumentError,
|
|
3
|
+
type SharedV4Warning,
|
|
4
|
+
type TranscriptionModelV4,
|
|
5
|
+
} from '@ai-sdk/provider';
|
|
2
6
|
import {
|
|
3
7
|
combineHeaders,
|
|
4
8
|
convertUint8ArrayToBase64,
|
|
5
9
|
createJsonResponseHandler,
|
|
10
|
+
isValidHostnamePart,
|
|
6
11
|
parseProviderOptions,
|
|
7
12
|
postJsonToApi,
|
|
8
13
|
resolve,
|
|
@@ -106,6 +111,13 @@ export class GoogleVertexTranscriptionModel implements TranscriptionModelV4 {
|
|
|
106
111
|
}
|
|
107
112
|
|
|
108
113
|
const region = googleOptions?.region ?? this.config.location;
|
|
114
|
+
if (!isValidHostnamePart(region)) {
|
|
115
|
+
throw new InvalidArgumentError({
|
|
116
|
+
argument: googleOptions?.region != null ? 'region' : 'location',
|
|
117
|
+
message:
|
|
118
|
+
'Invalid Google Cloud Speech-to-Text region. Expected a single DNS label (letters, digits, and hyphens).',
|
|
119
|
+
});
|
|
120
|
+
}
|
|
109
121
|
const languageCodes = googleOptions?.languageCodes ?? ['auto'];
|
|
110
122
|
|
|
111
123
|
// The recognize API takes base64-encoded audio in the `content` field. A
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { InvalidArgumentError } from '@ai-sdk/provider';
|
|
1
2
|
import {
|
|
2
3
|
createOpenAICompatible,
|
|
3
4
|
type OpenAICompatibleProvider,
|
|
4
5
|
} from '@ai-sdk/openai-compatible';
|
|
5
6
|
import {
|
|
7
|
+
isValidHostnamePart,
|
|
6
8
|
loadOptionalSetting,
|
|
7
9
|
loadSetting,
|
|
8
10
|
withoutTrailingSlash,
|
|
@@ -74,11 +76,21 @@ export function createGoogleVertexMaas(
|
|
|
74
76
|
options: GoogleVertexMaasProviderSettings = {},
|
|
75
77
|
): GoogleVertexMaasProvider {
|
|
76
78
|
// Lazy-load settings to support loading from environment variables at runtime
|
|
77
|
-
const loadLocation = () =>
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
const loadLocation = () => {
|
|
80
|
+
const location =
|
|
81
|
+
loadOptionalSetting({
|
|
82
|
+
settingValue: options.location,
|
|
83
|
+
environmentVariableName: 'GOOGLE_VERTEX_LOCATION',
|
|
84
|
+
}) ?? 'global';
|
|
85
|
+
if (!isValidHostnamePart(location)) {
|
|
86
|
+
throw new InvalidArgumentError({
|
|
87
|
+
argument: 'location',
|
|
88
|
+
message:
|
|
89
|
+
'Invalid Google Vertex location. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return location;
|
|
93
|
+
};
|
|
82
94
|
|
|
83
95
|
const loadProject = () =>
|
|
84
96
|
loadSetting({
|
|
@@ -100,7 +112,7 @@ export function createGoogleVertexMaas(
|
|
|
100
112
|
|
|
101
113
|
const constructBaseURL = () => {
|
|
102
114
|
const projectId = loadProject();
|
|
103
|
-
const location = loadLocation()
|
|
115
|
+
const location = loadLocation();
|
|
104
116
|
|
|
105
117
|
return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;
|
|
106
118
|
};
|