@ai-sdk/google-vertex 5.0.0-beta.4 → 5.0.0-beta.41

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 (58) hide show
  1. package/CHANGELOG.md +324 -8
  2. package/README.md +65 -1
  3. package/dist/anthropic/edge/index.d.mts +60 -15
  4. package/dist/anthropic/edge/index.d.ts +60 -15
  5. package/dist/anthropic/edge/index.js +29 -7
  6. package/dist/anthropic/edge/index.js.map +1 -1
  7. package/dist/anthropic/edge/index.mjs +26 -4
  8. package/dist/anthropic/edge/index.mjs.map +1 -1
  9. package/dist/anthropic/index.d.mts +60 -15
  10. package/dist/anthropic/index.d.ts +60 -15
  11. package/dist/anthropic/index.js +28 -6
  12. package/dist/anthropic/index.js.map +1 -1
  13. package/dist/anthropic/index.mjs +25 -3
  14. package/dist/anthropic/index.mjs.map +1 -1
  15. package/dist/edge/index.d.mts +19 -19
  16. package/dist/edge/index.d.ts +19 -19
  17. package/dist/edge/index.js +8 -8
  18. package/dist/edge/index.js.map +1 -1
  19. package/dist/edge/index.mjs +5 -5
  20. package/dist/edge/index.mjs.map +1 -1
  21. package/dist/index.d.mts +19 -19
  22. package/dist/index.d.ts +19 -19
  23. package/dist/index.js +8 -8
  24. package/dist/index.js.map +1 -1
  25. package/dist/index.mjs +5 -5
  26. package/dist/index.mjs.map +1 -1
  27. package/dist/maas/edge/index.d.mts +76 -0
  28. package/dist/maas/edge/index.d.ts +76 -0
  29. package/dist/maas/edge/index.js +215 -0
  30. package/dist/maas/edge/index.js.map +1 -0
  31. package/dist/maas/edge/index.mjs +196 -0
  32. package/dist/maas/edge/index.mjs.map +1 -0
  33. package/dist/maas/index.d.mts +60 -0
  34. package/dist/maas/index.d.ts +60 -0
  35. package/dist/maas/index.js +125 -0
  36. package/dist/maas/index.js.map +1 -0
  37. package/dist/maas/index.mjs +101 -0
  38. package/dist/maas/index.mjs.map +1 -0
  39. package/docs/16-google-vertex.mdx +227 -6
  40. package/maas/edge.d.ts +1 -0
  41. package/maas/index.d.ts +1 -0
  42. package/package.json +19 -8
  43. package/src/anthropic/edge/google-vertex-anthropic-provider-edge.ts +1 -2
  44. package/src/anthropic/google-vertex-anthropic-provider-node.ts +1 -2
  45. package/src/anthropic/google-vertex-anthropic-provider.ts +32 -7
  46. package/src/edge/google-vertex-provider-edge.ts +1 -2
  47. package/src/google-vertex-embedding-model.ts +5 -5
  48. package/src/google-vertex-embedding-options.ts +2 -0
  49. package/src/google-vertex-image-model.ts +17 -17
  50. package/src/google-vertex-provider-node.ts +1 -2
  51. package/src/google-vertex-provider.ts +12 -12
  52. package/src/google-vertex-video-model.ts +7 -7
  53. package/src/maas/edge/google-vertex-maas-provider-edge.ts +65 -0
  54. package/src/maas/edge/index.ts +9 -0
  55. package/src/maas/google-vertex-maas-options.ts +15 -0
  56. package/src/maas/google-vertex-maas-provider-node.ts +64 -0
  57. package/src/maas/google-vertex-maas-provider.ts +111 -0
  58. package/src/maas/index.ts +9 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
- LanguageModelV3,
2
+ LanguageModelV4,
3
3
  NoSuchModelError,
4
- ProviderV3,
4
+ ProviderV4,
5
5
  } from '@ai-sdk/provider';
6
6
  import {
7
7
  FetchFunction,
@@ -78,24 +78,47 @@ export const vertexAnthropicTools = {
78
78
  * Creates a web search tool that gives Claude direct access to real-time web content.
79
79
  */
80
80
  webSearch_20250305: anthropicTools.webSearch_20250305,
81
+
82
+ /**
83
+ * Creates a tool search tool that uses regex patterns to find tools.
84
+ *
85
+ * The tool search tool enables Claude to work with hundreds or thousands of tools
86
+ * by dynamically discovering and loading them on-demand.
87
+ *
88
+ * Use `providerOptions: { anthropic: { deferLoading: true } }` on other tools
89
+ * to mark them for deferred loading.
90
+ */
91
+ toolSearchRegex_20251119: anthropicTools.toolSearchRegex_20251119,
92
+
93
+ /**
94
+ * Creates a tool search tool that uses BM25 (natural language) to find tools.
95
+ *
96
+ * The tool search tool enables Claude to work with hundreds or thousands of tools
97
+ * by dynamically discovering and loading them on-demand.
98
+ *
99
+ * Use `providerOptions: { anthropic: { deferLoading: true } }` on other tools
100
+ * to mark them for deferred loading.
101
+ */
102
+ toolSearchBm25_20251119: anthropicTools.toolSearchBm25_20251119,
81
103
  };
82
- export interface GoogleVertexAnthropicProvider extends ProviderV3 {
104
+ export interface GoogleVertexAnthropicProvider extends ProviderV4 {
83
105
  /**
84
106
  * Creates a model for text generation.
85
107
  */
86
- (modelId: GoogleVertexAnthropicMessagesModelId): LanguageModelV3;
108
+ (modelId: GoogleVertexAnthropicMessagesModelId): LanguageModelV4;
87
109
 
88
110
  /**
89
111
  * Creates a model for text generation.
90
112
  */
91
- languageModel(modelId: GoogleVertexAnthropicMessagesModelId): LanguageModelV3;
113
+ languageModel(modelId: GoogleVertexAnthropicMessagesModelId): LanguageModelV4;
92
114
 
93
115
  /**
94
116
  * Anthropic tools supported by Google Vertex.
95
117
  * Note: Only a subset of Anthropic tools are available on Vertex.
96
118
  * Supported tools: bash_20241022, bash_20250124, textEditor_20241022,
97
119
  * textEditor_20250124, textEditor_20250429, textEditor_20250728,
98
- * computer_20241022, webSearch_20250305
120
+ * computer_20241022, webSearch_20250305, toolSearchRegex_20251119,
121
+ * toolSearchBm25_20251119
99
122
  */
100
123
  tools: typeof vertexAnthropicTools;
101
124
 
@@ -179,6 +202,8 @@ export function createVertexAnthropic(
179
202
  supportedUrls: () => ({}),
180
203
  // force the use of JSON tool fallback for structured outputs since beta header isn't supported
181
204
  supportsNativeStructuredOutput: false,
205
+ // Vertex Anthropic doesn't support strict mode on tool definitions.
206
+ supportsStrictTools: false,
182
207
  });
183
208
 
184
209
  const provider = function (modelId: GoogleVertexAnthropicMessagesModelId) {
@@ -191,7 +216,7 @@ export function createVertexAnthropic(
191
216
  return createChatModel(modelId);
192
217
  };
193
218
 
194
- provider.specificationVersion = 'v3' as const;
219
+ provider.specificationVersion = 'v4' as const;
195
220
  provider.languageModel = createChatModel;
196
221
  provider.chat = createChatModel;
197
222
  provider.messages = createChatModel;
@@ -11,8 +11,7 @@ import {
11
11
 
12
12
  export type { GoogleVertexProvider };
13
13
 
14
- export interface GoogleVertexProviderSettings
15
- extends GoogleVertexProviderSettingsOriginal {
14
+ export interface GoogleVertexProviderSettings extends GoogleVertexProviderSettingsOriginal {
16
15
  /**
17
16
  * Optional. The Google credentials for the Google Cloud service account. If
18
17
  * not provided, the Google Vertex provider will use environment variables to
@@ -1,5 +1,5 @@
1
1
  import {
2
- EmbeddingModelV3,
2
+ EmbeddingModelV4,
3
3
  TooManyEmbeddingValuesForCallError,
4
4
  } from '@ai-sdk/provider';
5
5
  import {
@@ -17,8 +17,8 @@ import {
17
17
  } from './google-vertex-embedding-options';
18
18
  import { GoogleVertexConfig } from './google-vertex-config';
19
19
 
20
- export class GoogleVertexEmbeddingModel implements EmbeddingModelV3 {
21
- readonly specificationVersion = 'v3';
20
+ export class GoogleVertexEmbeddingModel implements EmbeddingModelV4 {
21
+ readonly specificationVersion = 'v4';
22
22
  readonly modelId: GoogleVertexEmbeddingModelId;
23
23
  readonly maxEmbeddingsPerCall = 2048;
24
24
  readonly supportsParallelCalls = true;
@@ -42,8 +42,8 @@ export class GoogleVertexEmbeddingModel implements EmbeddingModelV3 {
42
42
  headers,
43
43
  abortSignal,
44
44
  providerOptions,
45
- }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<
46
- Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>
45
+ }: Parameters<EmbeddingModelV4['doEmbed']>[0]): Promise<
46
+ Awaited<ReturnType<EmbeddingModelV4['doEmbed']>>
47
47
  > {
48
48
  let googleOptions = await parseProviderOptions({
49
49
  provider: 'vertex',
@@ -10,6 +10,8 @@ export type GoogleVertexEmbeddingModelId =
10
10
  | 'text-multilingual-embedding-002'
11
11
  | 'text-embedding-004'
12
12
  | 'text-embedding-005'
13
+ | 'gemini-embedding-001'
14
+ | 'gemini-embedding-2-preview'
13
15
  | (string & {});
14
16
 
15
17
  export const googleVertexEmbeddingModelOptions = z.object({
@@ -1,10 +1,10 @@
1
1
  import type { GoogleLanguageModelOptions } from '@ai-sdk/google';
2
2
  import { GoogleGenerativeAILanguageModel } from '@ai-sdk/google/internal';
3
3
  import {
4
- ImageModelV3,
5
- ImageModelV3File,
6
- LanguageModelV3Prompt,
7
- SharedV3Warning,
4
+ ImageModelV4,
5
+ ImageModelV4File,
6
+ LanguageModelV4Prompt,
7
+ SharedV4Warning,
8
8
  } from '@ai-sdk/provider';
9
9
  import {
10
10
  Resolvable,
@@ -33,8 +33,8 @@ interface GoogleVertexImageModelConfig {
33
33
  }
34
34
 
35
35
  // https://cloud.google.com/vertex-ai/generative-ai/docs/image/generate-images
36
- export class GoogleVertexImageModel implements ImageModelV3 {
37
- readonly specificationVersion = 'v3';
36
+ export class GoogleVertexImageModel implements ImageModelV4 {
37
+ readonly specificationVersion = 'v4';
38
38
 
39
39
  get maxImagesPerCall(): number {
40
40
  if (isGeminiModel(this.modelId)) {
@@ -53,8 +53,8 @@ export class GoogleVertexImageModel implements ImageModelV3 {
53
53
  ) {}
54
54
 
55
55
  async doGenerate(
56
- options: Parameters<ImageModelV3['doGenerate']>[0],
57
- ): Promise<Awaited<ReturnType<ImageModelV3['doGenerate']>>> {
56
+ options: Parameters<ImageModelV4['doGenerate']>[0],
57
+ ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {
58
58
  if (isGeminiModel(this.modelId)) {
59
59
  return this.doGenerateGemini(options);
60
60
  }
@@ -72,10 +72,10 @@ export class GoogleVertexImageModel implements ImageModelV3 {
72
72
  abortSignal,
73
73
  files,
74
74
  mask,
75
- }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<
76
- Awaited<ReturnType<ImageModelV3['doGenerate']>>
75
+ }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<
76
+ Awaited<ReturnType<ImageModelV4['doGenerate']>>
77
77
  > {
78
- const warnings: Array<SharedV3Warning> = [];
78
+ const warnings: Array<SharedV4Warning> = [];
79
79
 
80
80
  if (size != null) {
81
81
  warnings.push({
@@ -212,10 +212,10 @@ export class GoogleVertexImageModel implements ImageModelV3 {
212
212
  abortSignal,
213
213
  files,
214
214
  mask,
215
- }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<
216
- Awaited<ReturnType<ImageModelV3['doGenerate']>>
215
+ }: Parameters<ImageModelV4['doGenerate']>[0]): Promise<
216
+ Awaited<ReturnType<ImageModelV4['doGenerate']>>
217
217
  > {
218
- const warnings: Array<SharedV3Warning> = [];
218
+ const warnings: Array<SharedV4Warning> = [];
219
219
 
220
220
  if (mask != null) {
221
221
  throw new Error(
@@ -268,7 +268,7 @@ export class GoogleVertexImageModel implements ImageModelV3 {
268
268
  }
269
269
  }
270
270
 
271
- const languageModelPrompt: LanguageModelV3Prompt = [
271
+ const languageModelPrompt: LanguageModelV4Prompt = [
272
272
  { role: 'user', content: userContent },
273
273
  ];
274
274
 
@@ -433,9 +433,9 @@ export type GoogleVertexImageModelOptions = z.infer<
433
433
  >;
434
434
 
435
435
  /**
436
- * Helper to convert ImageModelV3File data to base64 string
436
+ * Helper to convert ImageModelV4File data to base64 string
437
437
  */
438
- function getBase64Data(file: ImageModelV3File): string {
438
+ function getBase64Data(file: ImageModelV4File): string {
439
439
  if (file.type === 'url') {
440
440
  throw new Error(
441
441
  'URL-based images are not supported for Google Vertex image editing. Please provide the image data directly.',
@@ -7,8 +7,7 @@ import {
7
7
  GoogleVertexProviderSettings as GoogleVertexProviderSettingsOriginal,
8
8
  } from './google-vertex-provider';
9
9
 
10
- export interface GoogleVertexProviderSettings
11
- extends GoogleVertexProviderSettingsOriginal {
10
+ export interface GoogleVertexProviderSettings extends GoogleVertexProviderSettingsOriginal {
12
11
  /**
13
12
  * Optional. The Authentication options provided by google-auth-library.
14
13
  * Complete list of authentication options is documented in the
@@ -1,9 +1,9 @@
1
1
  import { GoogleGenerativeAILanguageModel } from '@ai-sdk/google/internal';
2
2
  import {
3
- Experimental_VideoModelV3,
4
- ImageModelV3,
5
- LanguageModelV3,
6
- ProviderV3,
3
+ Experimental_VideoModelV4,
4
+ ImageModelV4,
5
+ LanguageModelV4,
6
+ ProviderV4,
7
7
  } from '@ai-sdk/provider';
8
8
  import {
9
9
  FetchFunction,
@@ -47,23 +47,23 @@ function createExpressModeFetch(
47
47
  };
48
48
  }
49
49
 
50
- export interface GoogleVertexProvider extends ProviderV3 {
50
+ export interface GoogleVertexProvider extends ProviderV4 {
51
51
  /**
52
52
  * Creates a model for text generation.
53
53
  */
54
- (modelId: GoogleVertexModelId): LanguageModelV3;
54
+ (modelId: GoogleVertexModelId): LanguageModelV4;
55
55
 
56
- languageModel: (modelId: GoogleVertexModelId) => LanguageModelV3;
56
+ languageModel: (modelId: GoogleVertexModelId) => LanguageModelV4;
57
57
 
58
58
  /**
59
59
  * Creates a model for image generation.
60
60
  */
61
- image(modelId: GoogleVertexImageModelId): ImageModelV3;
61
+ image(modelId: GoogleVertexImageModelId): ImageModelV4;
62
62
 
63
63
  /**
64
64
  * Creates a model for image generation.
65
65
  */
66
- imageModel(modelId: GoogleVertexImageModelId): ImageModelV3;
66
+ imageModel(modelId: GoogleVertexImageModelId): ImageModelV4;
67
67
 
68
68
  tools: typeof googleVertexTools;
69
69
 
@@ -77,12 +77,12 @@ export interface GoogleVertexProvider extends ProviderV3 {
77
77
  /**
78
78
  * Creates a model for video generation.
79
79
  */
80
- video(modelId: GoogleVertexVideoModelId): Experimental_VideoModelV3;
80
+ video(modelId: GoogleVertexVideoModelId): Experimental_VideoModelV4;
81
81
 
82
82
  /**
83
83
  * Creates a model for video generation.
84
84
  */
85
- videoModel(modelId: GoogleVertexVideoModelId): Experimental_VideoModelV3;
85
+ videoModel(modelId: GoogleVertexVideoModelId): Experimental_VideoModelV4;
86
86
  }
87
87
 
88
88
  export interface GoogleVertexProviderSettings {
@@ -231,7 +231,7 @@ export function createVertex(
231
231
  return createChatModel(modelId);
232
232
  };
233
233
 
234
- provider.specificationVersion = 'v3' as const;
234
+ provider.specificationVersion = 'v4' as const;
235
235
  provider.languageModel = createChatModel;
236
236
  provider.embeddingModel = createEmbeddingModel;
237
237
  provider.textEmbeddingModel = createEmbeddingModel;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AISDKError,
3
- type Experimental_VideoModelV3,
4
- type SharedV3Warning,
3
+ type Experimental_VideoModelV4,
4
+ type SharedV4Warning,
5
5
  } from '@ai-sdk/provider';
6
6
  import {
7
7
  combineHeaders,
@@ -53,8 +53,8 @@ interface GoogleVertexVideoModelConfig {
53
53
  };
54
54
  }
55
55
 
56
- export class GoogleVertexVideoModel implements Experimental_VideoModelV3 {
57
- readonly specificationVersion = 'v3';
56
+ export class GoogleVertexVideoModel implements Experimental_VideoModelV4 {
57
+ readonly specificationVersion = 'v4';
58
58
 
59
59
  get provider(): string {
60
60
  return this.config.provider;
@@ -71,10 +71,10 @@ export class GoogleVertexVideoModel implements Experimental_VideoModelV3 {
71
71
  ) {}
72
72
 
73
73
  async doGenerate(
74
- options: Parameters<Experimental_VideoModelV3['doGenerate']>[0],
75
- ): Promise<Awaited<ReturnType<Experimental_VideoModelV3['doGenerate']>>> {
74
+ options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],
75
+ ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {
76
76
  const currentDate = this.config._internal?.currentDate?.() ?? new Date();
77
- const warnings: SharedV3Warning[] = [];
77
+ const warnings: SharedV4Warning[] = [];
78
78
 
79
79
  const vertexOptions = (await parseProviderOptions({
80
80
  provider: 'vertex',
@@ -0,0 +1,65 @@
1
+ import { FetchFunction, resolve } from '@ai-sdk/provider-utils';
2
+ import {
3
+ generateAuthToken,
4
+ GoogleCredentials,
5
+ } from '../../edge/google-vertex-auth-edge';
6
+ import {
7
+ createVertexMaas as createVertexMaasOriginal,
8
+ GoogleVertexMaasProvider,
9
+ GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,
10
+ } from '../google-vertex-maas-provider';
11
+
12
+ export type { GoogleVertexMaasProvider };
13
+
14
+ export interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProviderSettingsOriginal {
15
+ /**
16
+ * Optional. The Google credentials for the Google Cloud service account. If
17
+ * not provided, the Google Vertex provider will use environment variables to
18
+ * load the credentials.
19
+ */
20
+ googleCredentials?: GoogleCredentials;
21
+ }
22
+
23
+ /**
24
+ * Create a Google Vertex AI MaaS (Model as a Service) provider instance for Edge runtimes.
25
+ * Uses the OpenAI-compatible Chat Completions API for partner and open models.
26
+ * Automatically handles Google Cloud authentication.
27
+ *
28
+ * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
29
+ */
30
+ export function createVertexMaas(
31
+ options: GoogleVertexMaasProviderSettings = {},
32
+ ): GoogleVertexMaasProvider {
33
+ // Create a custom fetch wrapper that adds auth headers
34
+ const customFetch: FetchFunction = async (url, init) => {
35
+ const token = await generateAuthToken(options.googleCredentials);
36
+ const resolvedHeaders = await resolve(options.headers);
37
+ const authHeaders = {
38
+ ...resolvedHeaders,
39
+ Authorization: `Bearer ${token}`,
40
+ };
41
+
42
+ // Merge auth headers with existing headers from init
43
+ const fetchInit = {
44
+ ...init,
45
+ headers: {
46
+ ...init?.headers,
47
+ ...authHeaders,
48
+ },
49
+ };
50
+
51
+ // Call the original fetch or user's custom fetch
52
+ return (options.fetch ?? fetch)(url, fetchInit);
53
+ };
54
+
55
+ return createVertexMaasOriginal({
56
+ ...options,
57
+ fetch: customFetch,
58
+ headers: undefined, // Don't pass headers, we handle them in fetch
59
+ });
60
+ }
61
+
62
+ /**
63
+ * Default Google Vertex AI MaaS provider instance for Edge runtimes.
64
+ */
65
+ export const vertexMaas = createVertexMaas();
@@ -0,0 +1,9 @@
1
+ export {
2
+ createVertexMaas,
3
+ vertexMaas,
4
+ } from './google-vertex-maas-provider-edge';
5
+ export type {
6
+ GoogleVertexMaasProvider,
7
+ GoogleVertexMaasProviderSettings,
8
+ } from './google-vertex-maas-provider-edge';
9
+ export type { GoogleVertexMaasModelId } from '../google-vertex-maas-options';
@@ -0,0 +1,15 @@
1
+ // https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
2
+ export type GoogleVertexMaasModelId =
3
+ | 'deepseek-ai/deepseek-r1-0528-maas'
4
+ | 'deepseek-ai/deepseek-v3.1-maas'
5
+ | 'deepseek-ai/deepseek-v3.2-maas'
6
+ | 'openai/gpt-oss-120b-maas'
7
+ | 'openai/gpt-oss-20b-maas'
8
+ | 'meta/llama-4-maverick-17b-128e-instruct-maas'
9
+ | 'meta/llama-4-scout-17b-16e-instruct-maas'
10
+ | 'minimax/minimax-m2-maas'
11
+ | 'qwen/qwen3-coder-480b-a35b-instruct-maas'
12
+ | 'qwen/qwen3-next-80b-a3b-instruct-maas'
13
+ | 'qwen/qwen3-next-80b-a3b-thinking-maas'
14
+ | 'moonshotai/kimi-k2-thinking-maas'
15
+ | (string & {});
@@ -0,0 +1,64 @@
1
+ import { FetchFunction, resolve } from '@ai-sdk/provider-utils';
2
+ import { GoogleAuthOptions } from 'google-auth-library';
3
+ import { generateAuthToken } from '../google-vertex-auth-google-auth-library';
4
+ import {
5
+ createVertexMaas as createVertexMaasOriginal,
6
+ GoogleVertexMaasProvider,
7
+ GoogleVertexMaasProviderSettings as GoogleVertexMaasProviderSettingsOriginal,
8
+ } from './google-vertex-maas-provider';
9
+
10
+ export type { GoogleVertexMaasProvider };
11
+
12
+ export interface GoogleVertexMaasProviderSettings extends GoogleVertexMaasProviderSettingsOriginal {
13
+ /**
14
+ * Optional. The Authentication options provided by google-auth-library.
15
+ * Complete list of authentication options is documented in the
16
+ * GoogleAuthOptions interface:
17
+ * https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.
18
+ */
19
+ googleAuthOptions?: GoogleAuthOptions;
20
+ }
21
+
22
+ /**
23
+ * Create a Google Vertex AI MaaS (Model as a Service) provider instance for Node.js.
24
+ * Uses the OpenAI-compatible Chat Completions API for partner and open models.
25
+ * Automatically handles Google Cloud authentication.
26
+ *
27
+ * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
28
+ */
29
+ export function createVertexMaas(
30
+ options: GoogleVertexMaasProviderSettings = {},
31
+ ): GoogleVertexMaasProvider {
32
+ // Create a custom fetch wrapper that adds auth headers
33
+ const customFetch: FetchFunction = async (url, init) => {
34
+ const token = await generateAuthToken(options.googleAuthOptions);
35
+ const resolvedHeaders = await resolve(options.headers);
36
+ const authHeaders = {
37
+ ...resolvedHeaders,
38
+ Authorization: `Bearer ${token}`,
39
+ };
40
+
41
+ // Merge auth headers with existing headers from init
42
+ const fetchInit = {
43
+ ...init,
44
+ headers: {
45
+ ...init?.headers,
46
+ ...authHeaders,
47
+ },
48
+ };
49
+
50
+ // Call the original fetch or user's custom fetch
51
+ return (options.fetch ?? fetch)(url, fetchInit);
52
+ };
53
+
54
+ return createVertexMaasOriginal({
55
+ ...options,
56
+ fetch: customFetch,
57
+ headers: undefined, // Don't pass headers, we handle them in fetch
58
+ });
59
+ }
60
+
61
+ /**
62
+ * Default Google Vertex AI MaaS provider instance for Node.js.
63
+ */
64
+ export const vertexMaas = createVertexMaas();
@@ -0,0 +1,111 @@
1
+ import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
2
+ import type { OpenAICompatibleProvider } from '@ai-sdk/openai-compatible';
3
+ import {
4
+ FetchFunction,
5
+ loadOptionalSetting,
6
+ loadSetting,
7
+ Resolvable,
8
+ withoutTrailingSlash,
9
+ } from '@ai-sdk/provider-utils';
10
+ import type { GoogleVertexMaasModelId } from './google-vertex-maas-options';
11
+
12
+ export interface GoogleVertexMaasProvider extends OpenAICompatibleProvider<
13
+ GoogleVertexMaasModelId,
14
+ string,
15
+ string,
16
+ string
17
+ > {}
18
+
19
+ export interface GoogleVertexMaasProviderSettings {
20
+ /**
21
+ * Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.
22
+ */
23
+ project?: string;
24
+
25
+ /**
26
+ * Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.
27
+ * Use 'global' for the global endpoint.
28
+ */
29
+ location?: string;
30
+
31
+ /**
32
+ * Base URL for the API calls. If not provided, will be constructed from project and location.
33
+ */
34
+ baseURL?: string;
35
+
36
+ /**
37
+ * Headers to use for requests. Can be:
38
+ * - A headers object
39
+ * - A Promise that resolves to a headers object
40
+ * - A function that returns a headers object
41
+ * - A function that returns a Promise of a headers object
42
+ */
43
+ headers?: Resolvable<Record<string, string | undefined>>;
44
+
45
+ /**
46
+ * Custom fetch implementation. You can use it as a middleware to intercept requests,
47
+ * or to provide a custom fetch implementation for e.g. testing.
48
+ */
49
+ fetch?: FetchFunction;
50
+ }
51
+
52
+ /**
53
+ * Create a Google Vertex AI MaaS (Model as a Service) provider instance.
54
+ * Uses the OpenAI-compatible Chat Completions API for partner and open models.
55
+ *
56
+ * @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
57
+ */
58
+ export function createVertexMaas(
59
+ options: GoogleVertexMaasProviderSettings = {},
60
+ ): GoogleVertexMaasProvider {
61
+ // Lazy-load settings to support loading from environment variables at runtime
62
+ const loadLocation = () =>
63
+ loadOptionalSetting({
64
+ settingValue: options.location,
65
+ environmentVariableName: 'GOOGLE_VERTEX_LOCATION',
66
+ });
67
+
68
+ const loadProject = () =>
69
+ loadSetting({
70
+ settingValue: options.project,
71
+ settingName: 'project',
72
+ environmentVariableName: 'GOOGLE_VERTEX_PROJECT',
73
+ description: 'Google Vertex project',
74
+ });
75
+
76
+ // Construct base URL: https://aiplatform.googleapis.com/v1/projects/{project}/locations/{location}/endpoints/openapi
77
+ const constructBaseURL = () => {
78
+ const projectId = loadProject();
79
+ const location = loadLocation() ?? 'global';
80
+
81
+ return `https://aiplatform.googleapis.com/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;
82
+ };
83
+
84
+ const loadBaseURL = () =>
85
+ withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();
86
+
87
+ let cachedProvider: GoogleVertexMaasProvider | undefined;
88
+ const getProvider = () =>
89
+ (cachedProvider ??= createOpenAICompatible({
90
+ name: 'vertex.maas',
91
+ baseURL: loadBaseURL(),
92
+ fetch: options.fetch,
93
+ }));
94
+
95
+ const provider = (modelId: GoogleVertexMaasModelId) => getProvider()(modelId);
96
+
97
+ provider.specificationVersion = 'v4' as const;
98
+ provider.languageModel = (modelId: GoogleVertexMaasModelId) =>
99
+ getProvider().languageModel(modelId);
100
+ provider.chatModel = (modelId: GoogleVertexMaasModelId) =>
101
+ getProvider().chatModel(modelId);
102
+ provider.completionModel = (modelId: string) =>
103
+ getProvider().completionModel(modelId);
104
+ provider.embeddingModel = (modelId: string) =>
105
+ getProvider().embeddingModel(modelId);
106
+ provider.textEmbeddingModel = (modelId: string) =>
107
+ getProvider().textEmbeddingModel(modelId);
108
+ provider.imageModel = (modelId: string) => getProvider().imageModel(modelId);
109
+
110
+ return provider as GoogleVertexMaasProvider;
111
+ }
@@ -0,0 +1,9 @@
1
+ export {
2
+ createVertexMaas,
3
+ vertexMaas,
4
+ } from './google-vertex-maas-provider-node';
5
+ export type {
6
+ GoogleVertexMaasProvider,
7
+ GoogleVertexMaasProviderSettings,
8
+ } from './google-vertex-maas-provider-node';
9
+ export type { GoogleVertexMaasModelId } from './google-vertex-maas-options';