@ai-sdk/google-vertex 5.0.0-beta.62 → 5.0.0-beta.64

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/anthropic/edge/index.d.ts +10 -5
  3. package/dist/anthropic/edge/index.js +15 -13
  4. package/dist/anthropic/edge/index.js.map +1 -1
  5. package/dist/anthropic/index.d.ts +10 -5
  6. package/dist/anthropic/index.js +14 -12
  7. package/dist/anthropic/index.js.map +1 -1
  8. package/dist/edge/index.d.ts +3 -3
  9. package/dist/edge/index.js +190 -153
  10. package/dist/edge/index.js.map +1 -1
  11. package/dist/index.d.ts +7 -7
  12. package/dist/index.js +192 -155
  13. package/dist/index.js.map +1 -1
  14. package/dist/maas/edge/index.d.ts +3 -3
  15. package/dist/maas/edge/index.js +9 -7
  16. package/dist/maas/edge/index.js.map +1 -1
  17. package/dist/maas/index.d.ts +3 -3
  18. package/dist/maas/index.js +8 -6
  19. package/dist/maas/index.js.map +1 -1
  20. package/dist/xai/edge/index.d.ts +92 -0
  21. package/dist/xai/edge/index.js +259 -0
  22. package/dist/xai/edge/index.js.map +1 -0
  23. package/dist/xai/index.d.ts +76 -0
  24. package/dist/xai/index.js +164 -0
  25. package/dist/xai/index.js.map +1 -0
  26. package/docs/16-google-vertex.mdx +257 -78
  27. package/package.json +18 -6
  28. package/src/anthropic/edge/google-vertex-anthropic-provider-edge.ts +13 -7
  29. package/src/anthropic/edge/index.ts +6 -2
  30. package/src/anthropic/google-vertex-anthropic-provider-node.ts +13 -7
  31. package/src/anthropic/google-vertex-anthropic-provider.ts +5 -5
  32. package/src/anthropic/index.ts +6 -2
  33. package/src/edge/google-vertex-provider-edge.ts +6 -6
  34. package/src/edge/index.ts +8 -1
  35. package/src/google-vertex-embedding-model.ts +10 -2
  36. package/src/google-vertex-image-model-options.ts +74 -0
  37. package/src/google-vertex-image-model.ts +42 -102
  38. package/src/google-vertex-provider-base.ts +245 -0
  39. package/src/google-vertex-provider.ts +35 -233
  40. package/src/google-vertex-video-model-options.ts +49 -0
  41. package/src/google-vertex-video-model.ts +30 -66
  42. package/src/index.ts +12 -5
  43. package/src/maas/edge/google-vertex-maas-provider-edge.ts +3 -3
  44. package/src/maas/edge/index.ts +6 -2
  45. package/src/maas/google-vertex-maas-provider-node.ts +3 -3
  46. package/src/maas/google-vertex-maas-provider.ts +1 -1
  47. package/src/maas/index.ts +6 -2
  48. package/src/xai/edge/google-vertex-xai-provider-edge.ts +61 -0
  49. package/src/xai/edge/index.ts +9 -0
  50. package/src/xai/google-vertex-xai-options.ts +7 -0
  51. package/src/xai/google-vertex-xai-provider-node.ts +60 -0
  52. package/src/xai/google-vertex-xai-provider.ts +212 -0
  53. package/src/xai/index.ts +9 -0
  54. package/xai/edge.d.ts +1 -0
  55. package/xai/index.d.ts +1 -0
  56. package/src/google-vertex-provider-node.ts +0 -47
  57. /package/src/{google-vertex-embedding-options.ts → google-vertex-embedding-model-options.ts} +0 -0
@@ -8,40 +8,20 @@ import {
8
8
  convertUint8ArrayToBase64,
9
9
  createJsonResponseHandler,
10
10
  delay,
11
- lazySchema,
12
11
  parseProviderOptions,
13
12
  postJsonToApi,
14
13
  resolve,
15
- zodSchema,
16
14
  type FetchFunction,
17
15
  type Resolvable,
18
16
  } from '@ai-sdk/provider-utils';
19
17
  import { z } from 'zod/v4';
20
18
  import { googleVertexFailedResponseHandler } from './google-vertex-error';
19
+ import {
20
+ googleVertexVideoModelOptionsSchema,
21
+ type GoogleVertexVideoModelOptions,
22
+ } from './google-vertex-video-model-options';
21
23
  import type { GoogleVertexVideoModelId } from './google-vertex-video-settings';
22
24
 
23
- export type GoogleVertexVideoModelOptions = {
24
- // Polling configuration
25
- pollIntervalMs?: number | null;
26
- pollTimeoutMs?: number | null;
27
-
28
- // Video generation options
29
- personGeneration?: 'dont_allow' | 'allow_adult' | 'allow_all' | null;
30
- negativePrompt?: string | null;
31
- generateAudio?: boolean | null;
32
-
33
- // Output configuration
34
- gcsOutputDirectory?: string | null;
35
-
36
- // Reference images (for style/asset reference)
37
- referenceImages?: Array<{
38
- bytesBase64Encoded?: string;
39
- gcsUri?: string;
40
- }> | null;
41
-
42
- [key: string]: unknown; // For passthrough
43
- };
44
-
45
25
  interface GoogleVertexVideoModelConfig {
46
26
  provider: string;
47
27
  baseURL: string;
@@ -76,11 +56,16 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
76
56
  const currentDate = this.config._internal?.currentDate?.() ?? new Date();
77
57
  const warnings: SharedV4Warning[] = [];
78
58
 
79
- const vertexOptions = (await parseProviderOptions({
80
- provider: 'vertex',
59
+ const googleVertexOptions = ((await parseProviderOptions({
60
+ provider: 'googleVertex',
81
61
  providerOptions: options.providerOptions,
82
62
  schema: googleVertexVideoModelOptionsSchema,
83
- })) as GoogleVertexVideoModelOptions | undefined;
63
+ })) ??
64
+ (await parseProviderOptions({
65
+ provider: 'vertex',
66
+ providerOptions: options.providerOptions,
67
+ schema: googleVertexVideoModelOptionsSchema,
68
+ }))) as GoogleVertexVideoModelOptions | undefined;
84
69
 
85
70
  const instances: Array<Record<string, unknown>> = [{}];
86
71
  const instance = instances[0];
@@ -110,8 +95,8 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
110
95
  }
111
96
  }
112
97
 
113
- if (vertexOptions?.referenceImages != null) {
114
- instance.referenceImages = vertexOptions.referenceImages;
98
+ if (googleVertexOptions?.referenceImages != null) {
99
+ instance.referenceImages = googleVertexOptions.referenceImages;
115
100
  }
116
101
 
117
102
  const parameters: Record<string, unknown> = {
@@ -140,8 +125,8 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
140
125
  parameters.seed = options.seed;
141
126
  }
142
127
 
143
- if (vertexOptions != null) {
144
- const opts = vertexOptions;
128
+ if (googleVertexOptions != null) {
129
+ const opts = googleVertexOptions;
145
130
 
146
131
  if (
147
132
  opts.personGeneration !== undefined &&
@@ -190,7 +175,7 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
190
175
  parameters,
191
176
  },
192
177
  successfulResponseHandler: createJsonResponseHandler(
193
- vertexOperationSchema,
178
+ googleVertexOperationSchema,
194
179
  ),
195
180
  failedResponseHandler: googleVertexFailedResponseHandler,
196
181
  abortSignal: options.abortSignal,
@@ -205,8 +190,8 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
205
190
  });
206
191
  }
207
192
 
208
- const pollIntervalMs = vertexOptions?.pollIntervalMs ?? 10000; // 10 seconds
209
- const pollTimeoutMs = vertexOptions?.pollTimeoutMs ?? 600000; // 10 minutes
193
+ const pollIntervalMs = googleVertexOptions?.pollIntervalMs ?? 10000; // 10 seconds
194
+ const pollTimeoutMs = googleVertexOptions?.pollTimeoutMs ?? 600000; // 10 minutes
210
195
 
211
196
  const startTime = Date.now();
212
197
  let finalOperation = operation;
@@ -240,7 +225,7 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
240
225
  operationName,
241
226
  },
242
227
  successfulResponseHandler: createJsonResponseHandler(
243
- vertexOperationSchema,
228
+ googleVertexOperationSchema,
244
229
  ),
245
230
  failedResponseHandler: googleVertexFailedResponseHandler,
246
231
  abortSignal: options.abortSignal,
@@ -314,16 +299,20 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
314
299
  modelId: this.modelId,
315
300
  headers: responseHeaders,
316
301
  },
317
- providerMetadata: {
318
- 'google-vertex': {
319
- videos: videoMetadata,
320
- },
321
- },
302
+ providerMetadata: (() => {
303
+ const payload = { videos: videoMetadata };
304
+ return {
305
+ googleVertex: payload,
306
+ // Legacy keys preserved for backward compatibility.
307
+ 'google-vertex': payload,
308
+ vertex: payload,
309
+ };
310
+ })(),
322
311
  };
323
312
  }
324
313
  }
325
314
 
326
- const vertexOperationSchema = z.object({
315
+ const googleVertexOperationSchema = z.object({
327
316
  name: z.string().nullish(),
328
317
  done: z.boolean().nullish(),
329
318
  error: z
@@ -348,28 +337,3 @@ const vertexOperationSchema = z.object({
348
337
  })
349
338
  .nullish(),
350
339
  });
351
-
352
- const googleVertexVideoModelOptionsSchema = lazySchema(() =>
353
- zodSchema(
354
- z
355
- .object({
356
- pollIntervalMs: z.number().positive().nullish(),
357
- pollTimeoutMs: z.number().positive().nullish(),
358
- personGeneration: z
359
- .enum(['dont_allow', 'allow_adult', 'allow_all'])
360
- .nullish(),
361
- negativePrompt: z.string().nullish(),
362
- generateAudio: z.boolean().nullish(),
363
- gcsOutputDirectory: z.string().nullish(),
364
- referenceImages: z
365
- .array(
366
- z.object({
367
- bytesBase64Encoded: z.string().nullish(),
368
- gcsUri: z.string().nullish(),
369
- }),
370
- )
371
- .nullish(),
372
- })
373
- .passthrough(),
374
- ),
375
- );
package/src/index.ts CHANGED
@@ -1,18 +1,25 @@
1
- export type { GoogleVertexEmbeddingModelOptions } from './google-vertex-embedding-options';
1
+ export type { GoogleVertexEmbeddingModelOptions } from './google-vertex-embedding-model-options';
2
2
  export type {
3
3
  GoogleVertexImageModelOptions,
4
4
  /** @deprecated Use `GoogleVertexImageModelOptions` instead. */
5
5
  GoogleVertexImageModelOptions as GoogleVertexImageProviderOptions,
6
- } from './google-vertex-image-model';
6
+ } from './google-vertex-image-model-options';
7
7
  export type {
8
8
  GoogleVertexVideoModelOptions,
9
9
  /** @deprecated Use `GoogleVertexVideoModelOptions` instead. */
10
10
  GoogleVertexVideoModelOptions as GoogleVertexVideoProviderOptions,
11
- } from './google-vertex-video-model';
11
+ } from './google-vertex-video-model-options';
12
12
  export type { GoogleVertexVideoModelId } from './google-vertex-video-settings';
13
- export { createVertex, vertex } from './google-vertex-provider-node';
13
+ export {
14
+ createGoogleVertex,
15
+ /** @deprecated Use `createGoogleVertex` instead. */
16
+ createGoogleVertex as createVertex,
17
+ googleVertex,
18
+ /** @deprecated Use `googleVertex` instead. */
19
+ googleVertex as vertex,
20
+ } from './google-vertex-provider';
14
21
  export type {
15
22
  GoogleVertexProvider,
16
23
  GoogleVertexProviderSettings,
17
- } from './google-vertex-provider-node';
24
+ } from './google-vertex-provider';
18
25
  export { VERSION } from './version';
@@ -4,7 +4,7 @@ import {
4
4
  type GoogleCredentials,
5
5
  } from '../../edge/google-vertex-auth-edge';
6
6
  import {
7
- createVertexMaas as createVertexMaasOriginal,
7
+ createGoogleVertexMaas as createVertexMaasOriginal,
8
8
  type GoogleVertexMaasProvider,
9
9
  type GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,
10
10
  } from '../google-vertex-maas-provider';
@@ -26,7 +26,7 @@ export interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProvid
26
26
  *
27
27
  * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
28
28
  */
29
- export function createVertexMaas(
29
+ export function createGoogleVertexMaas(
30
30
  options: GoogleVertexMaasProviderSettings = {},
31
31
  ): GoogleVertexMaasProvider {
32
32
  // Create a custom fetch wrapper that adds auth headers
@@ -61,4 +61,4 @@ export function createVertexMaas(
61
61
  /**
62
62
  * Default Google Vertex AI MaaS provider instance for Edge runtimes.
63
63
  */
64
- export const vertexMaas = createVertexMaas();
64
+ export const googleVertexMaas = createGoogleVertexMaas();
@@ -1,6 +1,10 @@
1
1
  export {
2
- createVertexMaas,
3
- vertexMaas,
2
+ createGoogleVertexMaas,
3
+ /** @deprecated Use `createGoogleVertexMaas` instead. */
4
+ createGoogleVertexMaas as createVertexMaas,
5
+ googleVertexMaas,
6
+ /** @deprecated Use `googleVertexMaas` instead. */
7
+ googleVertexMaas as vertexMaas,
4
8
  } from './google-vertex-maas-provider-edge';
5
9
  export type {
6
10
  GoogleVertexMaasProvider,
@@ -2,7 +2,7 @@ import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';
2
2
  import type { GoogleAuthOptions } from 'google-auth-library';
3
3
  import { generateAuthToken } from '../google-vertex-auth-google-auth-library';
4
4
  import {
5
- createVertexMaas as createVertexMaasOriginal,
5
+ createGoogleVertexMaas as createVertexMaasOriginal,
6
6
  type GoogleVertexMaasProvider,
7
7
  type GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,
8
8
  } from './google-vertex-maas-provider';
@@ -25,7 +25,7 @@ export interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProvid
25
25
  *
26
26
  * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
27
27
  */
28
- export function createVertexMaas(
28
+ export function createGoogleVertexMaas(
29
29
  options: GoogleVertexMaasProviderSettings = {},
30
30
  ): GoogleVertexMaasProvider {
31
31
  // Create a custom fetch wrapper that adds auth headers
@@ -60,4 +60,4 @@ export function createVertexMaas(
60
60
  /**
61
61
  * Default Google Vertex AI MaaS provider instance for Node.js.
62
62
  */
63
- export const vertexMaas = createVertexMaas();
63
+ export const googleVertexMaas = createGoogleVertexMaas();
@@ -57,7 +57,7 @@ export interface GoogleVertexMaasProviderSettings {
57
57
  *
58
58
  * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
59
59
  */
60
- export function createVertexMaas(
60
+ export function createGoogleVertexMaas(
61
61
  options: GoogleVertexMaasProviderSettings = {},
62
62
  ): GoogleVertexMaasProvider {
63
63
  // Lazy-load settings to support loading from environment variables at runtime
package/src/maas/index.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  export {
2
- createVertexMaas,
3
- vertexMaas,
2
+ createGoogleVertexMaas,
3
+ /** @deprecated Use `createGoogleVertexMaas` instead. */
4
+ createGoogleVertexMaas as createVertexMaas,
5
+ googleVertexMaas,
6
+ /** @deprecated Use `googleVertexMaas` instead. */
7
+ googleVertexMaas as vertexMaas,
4
8
  } from './google-vertex-maas-provider-node';
5
9
  export type {
6
10
  GoogleVertexMaasProvider,
@@ -0,0 +1,61 @@
1
+ import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';
2
+ import {
3
+ generateAuthToken,
4
+ type GoogleCredentials,
5
+ } from '../../edge/google-vertex-auth-edge';
6
+ import {
7
+ createGoogleVertexXai as createGoogleVertexXaiOriginal,
8
+ type GoogleVertexXaiProvider,
9
+ type GoogleVertexXaiProviderSettings as GoogleVertexXaiProviderSettingsOriginal,
10
+ } from '../google-vertex-xai-provider';
11
+ export type { GoogleVertexXaiProvider };
12
+
13
+ export interface GoogleVertexXaiProviderSettings extends GoogleVertexXaiProviderSettingsOriginal {
14
+ /**
15
+ * Optional. The Google credentials for the Google Cloud service account. If
16
+ * not provided, the Google Vertex provider will use environment variables to
17
+ * load the credentials.
18
+ */
19
+ googleCredentials?: GoogleCredentials;
20
+ }
21
+
22
+ /**
23
+ * Create a Google Vertex AI xAI provider instance for Edge runtimes.
24
+ * Uses the OpenAI-compatible Chat Completions API for Grok partner models.
25
+ * Automatically handles Google Cloud authentication.
26
+ *
27
+ * @see https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
28
+ */
29
+ export function createGoogleVertexXai(
30
+ options: GoogleVertexXaiProviderSettings = {},
31
+ ): GoogleVertexXaiProvider {
32
+ const customFetch: FetchFunction = async (url, init) => {
33
+ const token = await generateAuthToken(options.googleCredentials);
34
+ const resolvedHeaders = await resolve(options.headers);
35
+ const authHeaders = {
36
+ ...resolvedHeaders,
37
+ Authorization: `Bearer ${token}`,
38
+ };
39
+
40
+ const fetchInit = {
41
+ ...init,
42
+ headers: {
43
+ ...init?.headers,
44
+ ...authHeaders,
45
+ },
46
+ };
47
+
48
+ return (options.fetch ?? fetch)(url, fetchInit);
49
+ };
50
+
51
+ return createGoogleVertexXaiOriginal({
52
+ ...options,
53
+ fetch: customFetch,
54
+ headers: undefined,
55
+ });
56
+ }
57
+
58
+ /**
59
+ * Default Google Vertex AI xAI provider instance for Edge runtimes.
60
+ */
61
+ export const googleVertexXai = createGoogleVertexXai();
@@ -0,0 +1,9 @@
1
+ export {
2
+ createGoogleVertexXai,
3
+ googleVertexXai,
4
+ } from './google-vertex-xai-provider-edge';
5
+ export type {
6
+ GoogleVertexXaiProvider,
7
+ GoogleVertexXaiProviderSettings,
8
+ } from './google-vertex-xai-provider-edge';
9
+ export type { GoogleVertexXaiModelId } from '../google-vertex-xai-options';
@@ -0,0 +1,7 @@
1
+ // https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
2
+ export type GoogleVertexXaiModelId =
3
+ | 'xai/grok-4.20-reasoning'
4
+ | 'xai/grok-4.20-non-reasoning'
5
+ | 'xai/grok-4.1-fast-reasoning'
6
+ | 'xai/grok-4.1-fast-non-reasoning'
7
+ | (string & {});
@@ -0,0 +1,60 @@
1
+ import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';
2
+ import type { GoogleAuthOptions } from 'google-auth-library';
3
+ import { generateAuthToken } from '../google-vertex-auth-google-auth-library';
4
+ import {
5
+ createGoogleVertexXai as createGoogleVertexXaiOriginal,
6
+ type GoogleVertexXaiProvider,
7
+ type GoogleVertexXaiProviderSettings as GoogleVertexXaiProviderSettingsOriginal,
8
+ } from './google-vertex-xai-provider';
9
+ export type { GoogleVertexXaiProvider };
10
+
11
+ export interface GoogleVertexXaiProviderSettings extends GoogleVertexXaiProviderSettingsOriginal {
12
+ /**
13
+ * Optional. The Authentication options provided by google-auth-library.
14
+ * Complete list of authentication options is documented in the
15
+ * GoogleAuthOptions interface:
16
+ * https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.
17
+ */
18
+ googleAuthOptions?: GoogleAuthOptions;
19
+ }
20
+
21
+ /**
22
+ * Create a Google Vertex AI xAI provider instance for Node.js.
23
+ * Uses the OpenAI-compatible Chat Completions API for Grok partner models.
24
+ * Automatically handles Google Cloud authentication.
25
+ *
26
+ * @see https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
27
+ */
28
+ export function createGoogleVertexXai(
29
+ options: GoogleVertexXaiProviderSettings = {},
30
+ ): GoogleVertexXaiProvider {
31
+ const customFetch: FetchFunction = async (url, init) => {
32
+ const token = await generateAuthToken(options.googleAuthOptions);
33
+ const resolvedHeaders = await resolve(options.headers);
34
+ const authHeaders = {
35
+ ...resolvedHeaders,
36
+ Authorization: `Bearer ${token}`,
37
+ };
38
+
39
+ const fetchInit = {
40
+ ...init,
41
+ headers: {
42
+ ...init?.headers,
43
+ ...authHeaders,
44
+ },
45
+ };
46
+
47
+ return (options.fetch ?? fetch)(url, fetchInit);
48
+ };
49
+
50
+ return createGoogleVertexXaiOriginal({
51
+ ...options,
52
+ fetch: customFetch,
53
+ headers: undefined,
54
+ });
55
+ }
56
+
57
+ /**
58
+ * Default Google Vertex AI xAI provider instance for Node.js.
59
+ */
60
+ export const googleVertexXai = createGoogleVertexXai();
@@ -0,0 +1,212 @@
1
+ import {
2
+ NoSuchModelError,
3
+ type LanguageModelV4,
4
+ type LanguageModelV4Usage,
5
+ type ProviderV4,
6
+ } from '@ai-sdk/provider';
7
+ import {
8
+ createOpenAICompatible,
9
+ type OpenAICompatibleProvider,
10
+ } from '@ai-sdk/openai-compatible';
11
+ import {
12
+ loadOptionalSetting,
13
+ loadSetting,
14
+ withoutTrailingSlash,
15
+ type FetchFunction,
16
+ type Resolvable,
17
+ } from '@ai-sdk/provider-utils';
18
+ import type { GoogleVertexXaiModelId } from './google-vertex-xai-options';
19
+
20
+ export interface GoogleVertexXaiProvider extends ProviderV4 {
21
+ /**
22
+ * Creates a model for text generation.
23
+ */
24
+ (modelId: GoogleVertexXaiModelId): LanguageModelV4;
25
+
26
+ /**
27
+ * Creates a model for text generation.
28
+ */
29
+ languageModel(modelId: GoogleVertexXaiModelId): LanguageModelV4;
30
+
31
+ /**
32
+ * Creates a chat model for text generation.
33
+ */
34
+ chatModel(modelId: GoogleVertexXaiModelId): LanguageModelV4;
35
+
36
+ /**
37
+ * @deprecated Use `embeddingModel` instead.
38
+ */
39
+ textEmbeddingModel(modelId: string): never;
40
+ }
41
+
42
+ export interface GoogleVertexXaiProviderSettings {
43
+ /**
44
+ * Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.
45
+ */
46
+ project?: string;
47
+
48
+ /**
49
+ * Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.
50
+ * Use 'global' for the global endpoint.
51
+ */
52
+ location?: string;
53
+
54
+ /**
55
+ * Base URL for the API calls. If not provided, will be constructed from project and location.
56
+ */
57
+ baseURL?: string;
58
+
59
+ /**
60
+ * Headers to use for requests. Can be:
61
+ * - A headers object
62
+ * - A Promise that resolves to a headers object
63
+ * - A function that returns a headers object
64
+ * - A function that returns a Promise of a headers object
65
+ */
66
+ headers?: Resolvable<Record<string, string | undefined>>;
67
+
68
+ /**
69
+ * Custom fetch implementation. You can use it as a middleware to intercept requests,
70
+ * or to provide a custom fetch implementation for e.g. testing.
71
+ */
72
+ fetch?: FetchFunction;
73
+ }
74
+
75
+ type GoogleVertexXaiUsage =
76
+ | {
77
+ prompt_tokens?: number | null;
78
+ completion_tokens?: number | null;
79
+ prompt_tokens_details?: {
80
+ cached_tokens?: number | null;
81
+ } | null;
82
+ completion_tokens_details?: {
83
+ reasoning_tokens?: number | null;
84
+ } | null;
85
+ }
86
+ | undefined
87
+ | null;
88
+
89
+ function convertGoogleVertexXaiUsage(
90
+ usage: GoogleVertexXaiUsage,
91
+ ): LanguageModelV4Usage {
92
+ if (usage == null) {
93
+ return {
94
+ inputTokens: {
95
+ total: undefined,
96
+ noCache: undefined,
97
+ cacheRead: undefined,
98
+ cacheWrite: undefined,
99
+ },
100
+ outputTokens: {
101
+ total: undefined,
102
+ text: undefined,
103
+ reasoning: undefined,
104
+ },
105
+ raw: undefined,
106
+ };
107
+ }
108
+
109
+ const promptTokens = usage.prompt_tokens ?? 0;
110
+ const completionTokens = usage.completion_tokens ?? 0;
111
+ const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;
112
+ const reasoningTokens =
113
+ usage.completion_tokens_details?.reasoning_tokens ?? 0;
114
+
115
+ return {
116
+ inputTokens: {
117
+ total: promptTokens,
118
+ noCache: promptTokens - cacheReadTokens,
119
+ cacheRead: cacheReadTokens,
120
+ cacheWrite: undefined,
121
+ },
122
+ outputTokens: {
123
+ total: completionTokens + reasoningTokens,
124
+ text: completionTokens,
125
+ reasoning: reasoningTokens,
126
+ },
127
+ raw: usage,
128
+ };
129
+ }
130
+
131
+ function transformGoogleVertexXaiRequestBody(args: Record<string, any>) {
132
+ const { reasoning_effort: _reasoningEffort, ...rest } = args;
133
+ return rest;
134
+ }
135
+
136
+ /**
137
+ * Create a Google Vertex AI xAI provider instance.
138
+ * Uses the OpenAI-compatible Chat Completions API for Grok partner models.
139
+ *
140
+ * @see https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
141
+ */
142
+ export function createGoogleVertexXai(
143
+ options: GoogleVertexXaiProviderSettings = {},
144
+ ): GoogleVertexXaiProvider {
145
+ const loadLocation = () =>
146
+ loadOptionalSetting({
147
+ settingValue: options.location,
148
+ environmentVariableName: 'GOOGLE_VERTEX_LOCATION',
149
+ });
150
+
151
+ const loadProject = () =>
152
+ loadSetting({
153
+ settingValue: options.project,
154
+ settingName: 'project',
155
+ environmentVariableName: 'GOOGLE_VERTEX_PROJECT',
156
+ description: 'Google Vertex project',
157
+ });
158
+
159
+ const constructBaseURL = () => {
160
+ const projectId = loadProject();
161
+ const location = loadLocation() ?? 'global';
162
+
163
+ return `https://aiplatform.googleapis.com/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;
164
+ };
165
+
166
+ const loadBaseURL = () =>
167
+ withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();
168
+
169
+ let cachedProvider:
170
+ | OpenAICompatibleProvider<GoogleVertexXaiModelId, string, string, string>
171
+ | undefined;
172
+ const getProvider = () =>
173
+ (cachedProvider ??= createOpenAICompatible({
174
+ name: 'googleVertex.xai',
175
+ baseURL: loadBaseURL(),
176
+ fetch: options.fetch,
177
+ includeUsage: true,
178
+ supportsStructuredOutputs: true,
179
+ supportedUrls: () => ({
180
+ 'image/*': [/^https?:\/\/.*$/],
181
+ }),
182
+ transformRequestBody: transformGoogleVertexXaiRequestBody,
183
+ convertUsage: convertGoogleVertexXaiUsage,
184
+ }));
185
+
186
+ const createChatModel = (modelId: GoogleVertexXaiModelId) =>
187
+ getProvider().languageModel(modelId);
188
+
189
+ const provider = function (modelId: GoogleVertexXaiModelId) {
190
+ if (new.target) {
191
+ throw new Error(
192
+ 'The Google Vertex xAI model function cannot be called with the new keyword.',
193
+ );
194
+ }
195
+
196
+ return createChatModel(modelId);
197
+ };
198
+
199
+ provider.specificationVersion = 'v4' as const;
200
+ provider.languageModel = createChatModel;
201
+ provider.chatModel = (modelId: GoogleVertexXaiModelId) =>
202
+ getProvider().chatModel(modelId);
203
+ provider.embeddingModel = (modelId: string): never => {
204
+ throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });
205
+ };
206
+ provider.textEmbeddingModel = provider.embeddingModel;
207
+ provider.imageModel = (modelId: string): never => {
208
+ throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
209
+ };
210
+
211
+ return provider;
212
+ }
@@ -0,0 +1,9 @@
1
+ export {
2
+ createGoogleVertexXai,
3
+ googleVertexXai,
4
+ } from './google-vertex-xai-provider-node';
5
+ export type {
6
+ GoogleVertexXaiProvider,
7
+ GoogleVertexXaiProviderSettings,
8
+ } from './google-vertex-xai-provider-node';
9
+ export type { GoogleVertexXaiModelId } from './google-vertex-xai-options';
package/xai/edge.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from '../dist/xai/edge';
package/xai/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from '../dist/xai/index';