@ai-sdk/google-vertex 3.0.0-canary.0 → 3.0.0-canary.10

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/dist/index.d.ts CHANGED
@@ -1,12 +1,9 @@
1
+ import { z } from 'zod';
1
2
  import { GoogleAuthOptions } from 'google-auth-library';
2
- import { ProviderV1, LanguageModelV1, ImageModelV1 } from '@ai-sdk/provider';
3
+ import { ProviderV2, LanguageModelV2, ImageModelV1 } from '@ai-sdk/provider';
3
4
  import { Resolvable, FetchFunction } from '@ai-sdk/provider-utils';
4
5
  import { InternalGoogleGenerativeAISettings } from '@ai-sdk/google/internal';
5
6
 
6
- type GoogleVertexModelId = 'gemini-2.0-flash-001' | 'gemini-1.5-flash' | 'gemini-1.5-flash-001' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-001' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro-001' | 'gemini-1.0-pro-vision-001' | 'gemini-1.0-pro' | 'gemini-1.0-pro-001' | 'gemini-1.0-pro-002' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash-exp' | (string & {});
7
- interface GoogleVertexSettings extends InternalGoogleGenerativeAISettings {
8
- }
9
-
10
7
  type GoogleVertexImageModelId = 'imagen-3.0-generate-001' | 'imagen-3.0-fast-generate-001' | (string & {});
11
8
  interface GoogleVertexImageSettings {
12
9
  /**
@@ -15,12 +12,37 @@ interface GoogleVertexImageSettings {
15
12
  maxImagesPerCall?: number;
16
13
  }
17
14
 
18
- interface GoogleVertexProvider extends ProviderV1 {
15
+ declare const vertexImageProviderOptionsSchema: z.ZodObject<{
16
+ negativePrompt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
17
+ personGeneration: z.ZodOptional<z.ZodNullable<z.ZodEnum<["dont_allow", "allow_adult", "allow_all"]>>>;
18
+ safetySetting: z.ZodOptional<z.ZodNullable<z.ZodEnum<["block_low_and_above", "block_medium_and_above", "block_only_high", "block_none"]>>>;
19
+ addWatermark: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
20
+ storageUri: z.ZodOptional<z.ZodNullable<z.ZodString>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ negativePrompt?: string | null | undefined;
23
+ personGeneration?: "dont_allow" | "allow_adult" | "allow_all" | null | undefined;
24
+ safetySetting?: "block_low_and_above" | "block_medium_and_above" | "block_only_high" | "block_none" | null | undefined;
25
+ addWatermark?: boolean | null | undefined;
26
+ storageUri?: string | null | undefined;
27
+ }, {
28
+ negativePrompt?: string | null | undefined;
29
+ personGeneration?: "dont_allow" | "allow_adult" | "allow_all" | null | undefined;
30
+ safetySetting?: "block_low_and_above" | "block_medium_and_above" | "block_only_high" | "block_none" | null | undefined;
31
+ addWatermark?: boolean | null | undefined;
32
+ storageUri?: string | null | undefined;
33
+ }>;
34
+ type GoogleVertexImageProviderOptions = z.infer<typeof vertexImageProviderOptionsSchema>;
35
+
36
+ type GoogleVertexModelId = 'gemini-2.0-flash-001' | 'gemini-1.5-flash' | 'gemini-1.5-flash-001' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro' | 'gemini-1.5-pro-001' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro-001' | 'gemini-1.0-pro-vision-001' | 'gemini-1.0-pro' | 'gemini-1.0-pro-001' | 'gemini-1.0-pro-002' | 'gemini-2.0-flash-lite-preview-02-05' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash-exp' | (string & {});
37
+ interface GoogleVertexSettings extends InternalGoogleGenerativeAISettings {
38
+ }
39
+
40
+ interface GoogleVertexProvider extends ProviderV2 {
19
41
  /**
20
42
  Creates a model for text generation.
21
43
  */
22
- (modelId: GoogleVertexModelId, settings?: GoogleVertexSettings): LanguageModelV1;
23
- languageModel: (modelId: GoogleVertexModelId, settings?: GoogleVertexSettings) => LanguageModelV1;
44
+ (modelId: GoogleVertexModelId, settings?: GoogleVertexSettings): LanguageModelV2;
45
+ languageModel: (modelId: GoogleVertexModelId, settings?: GoogleVertexSettings) => LanguageModelV2;
24
46
  /**
25
47
  * Creates a model for image generation.
26
48
  */
@@ -75,4 +97,4 @@ Default Google Vertex AI provider instance.
75
97
  */
76
98
  declare const vertex: GoogleVertexProvider;
77
99
 
78
- export { type GoogleVertexProvider, type GoogleVertexProviderSettings, createVertex, vertex };
100
+ export { type GoogleVertexImageProviderOptions, type GoogleVertexProvider, type GoogleVertexProviderSettings, createVertex, vertex };
package/dist/index.js CHANGED
@@ -50,12 +50,13 @@ async function generateAuthToken(options) {
50
50
  }
51
51
 
52
52
  // src/google-vertex-provider.ts
53
+ var import_internal = require("@ai-sdk/google/internal");
53
54
  var import_provider_utils4 = require("@ai-sdk/provider-utils");
54
55
 
55
56
  // src/google-vertex-embedding-model.ts
56
57
  var import_provider = require("@ai-sdk/provider");
57
58
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
58
- var import_zod2 = require("zod");
59
+ var import_zod3 = require("zod");
59
60
 
60
61
  // src/google-vertex-error.ts
61
62
  var import_provider_utils = require("@ai-sdk/provider-utils");
@@ -74,12 +75,21 @@ var googleVertexFailedResponseHandler = (0, import_provider_utils.createJsonErro
74
75
  }
75
76
  );
76
77
 
78
+ // src/google-vertex-embedding-options.ts
79
+ var import_zod2 = require("zod");
80
+ var googleVertexEmbeddingProviderOptions = import_zod2.z.object({
81
+ /**
82
+ * Optional. Optional reduced dimension for the output embedding.
83
+ * If set, excessive values in the output embedding are truncated from the end.
84
+ */
85
+ outputDimensionality: import_zod2.z.number().optional()
86
+ });
87
+
77
88
  // src/google-vertex-embedding-model.ts
78
89
  var GoogleVertexEmbeddingModel = class {
79
- constructor(modelId, settings, config) {
80
- this.specificationVersion = "v1";
90
+ constructor(modelId, config) {
91
+ this.specificationVersion = "v2";
81
92
  this.modelId = modelId;
82
- this.settings = settings;
83
93
  this.config = config;
84
94
  }
85
95
  get provider() {
@@ -94,8 +104,15 @@ var GoogleVertexEmbeddingModel = class {
94
104
  async doEmbed({
95
105
  values,
96
106
  headers,
97
- abortSignal
107
+ abortSignal,
108
+ providerOptions
98
109
  }) {
110
+ var _a;
111
+ const googleOptions = (_a = (0, import_provider_utils2.parseProviderOptions)({
112
+ provider: "google",
113
+ providerOptions,
114
+ schema: googleVertexEmbeddingProviderOptions
115
+ })) != null ? _a : {};
99
116
  if (values.length > this.maxEmbeddingsPerCall) {
100
117
  throw new import_provider.TooManyEmbeddingValuesForCallError({
101
118
  provider: this.provider,
@@ -109,13 +126,17 @@ var GoogleVertexEmbeddingModel = class {
109
126
  headers
110
127
  );
111
128
  const url = `${this.config.baseURL}/models/${this.modelId}:predict`;
112
- const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({
129
+ const {
130
+ responseHeaders,
131
+ value: response,
132
+ rawValue
133
+ } = await (0, import_provider_utils2.postJsonToApi)({
113
134
  url,
114
135
  headers: mergedHeaders,
115
136
  body: {
116
137
  instances: values.map((value) => ({ content: value })),
117
138
  parameters: {
118
- outputDimensionality: this.settings.outputDimensionality
139
+ outputDimensionality: googleOptions.outputDimensionality
119
140
  }
120
141
  },
121
142
  failedResponseHandler: googleVertexFailedResponseHandler,
@@ -135,29 +156,26 @@ var GoogleVertexEmbeddingModel = class {
135
156
  0
136
157
  )
137
158
  },
138
- rawResponse: { headers: responseHeaders }
159
+ response: { headers: responseHeaders, body: rawValue }
139
160
  };
140
161
  }
141
162
  };
142
- var googleVertexTextEmbeddingResponseSchema = import_zod2.z.object({
143
- predictions: import_zod2.z.array(
144
- import_zod2.z.object({
145
- embeddings: import_zod2.z.object({
146
- values: import_zod2.z.array(import_zod2.z.number()),
147
- statistics: import_zod2.z.object({
148
- token_count: import_zod2.z.number()
163
+ var googleVertexTextEmbeddingResponseSchema = import_zod3.z.object({
164
+ predictions: import_zod3.z.array(
165
+ import_zod3.z.object({
166
+ embeddings: import_zod3.z.object({
167
+ values: import_zod3.z.array(import_zod3.z.number()),
168
+ statistics: import_zod3.z.object({
169
+ token_count: import_zod3.z.number()
149
170
  })
150
171
  })
151
172
  })
152
173
  )
153
174
  });
154
175
 
155
- // src/google-vertex-provider.ts
156
- var import_internal = require("@ai-sdk/google/internal");
157
-
158
176
  // src/google-vertex-image-model.ts
159
177
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
160
- var import_zod3 = require("zod");
178
+ var import_zod4 = require("zod");
161
179
  var GoogleVertexImageModel = class {
162
180
  constructor(modelId, settings, config) {
163
181
  this.modelId = modelId;
@@ -182,7 +200,7 @@ var GoogleVertexImageModel = class {
182
200
  headers,
183
201
  abortSignal
184
202
  }) {
185
- var _a, _b, _c, _d, _e, _f;
203
+ var _a, _b, _c, _d, _e;
186
204
  const warnings = [];
187
205
  if (size != null) {
188
206
  warnings.push({
@@ -191,16 +209,21 @@ var GoogleVertexImageModel = class {
191
209
  details: "This model does not support the `size` option. Use `aspectRatio` instead."
192
210
  });
193
211
  }
212
+ const vertexImageOptions = (0, import_provider_utils3.parseProviderOptions)({
213
+ provider: "vertex",
214
+ providerOptions,
215
+ schema: vertexImageProviderOptionsSchema
216
+ });
194
217
  const body = {
195
218
  instances: [{ prompt }],
196
219
  parameters: {
197
220
  sampleCount: n,
198
221
  ...aspectRatio != null ? { aspectRatio } : {},
199
222
  ...seed != null ? { seed } : {},
200
- ...(_a = providerOptions.vertex) != null ? _a : {}
223
+ ...vertexImageOptions != null ? vertexImageOptions : {}
201
224
  }
202
225
  };
203
- const currentDate = (_d = (_c = (_b = this.config._internal) == null ? void 0 : _b.currentDate) == null ? void 0 : _c.call(_b)) != null ? _d : /* @__PURE__ */ new Date();
226
+ const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
204
227
  const { value: response, responseHeaders } = await (0, import_provider_utils3.postJsonToApi)({
205
228
  url: `${this.config.baseURL}/models/${this.modelId}:predict`,
206
229
  headers: (0, import_provider_utils3.combineHeaders)(await (0, import_provider_utils3.resolve)(this.config.headers), headers),
@@ -213,9 +236,9 @@ var GoogleVertexImageModel = class {
213
236
  fetch: this.config.fetch
214
237
  });
215
238
  return {
216
- images: (_f = (_e = response.predictions) == null ? void 0 : _e.map(
239
+ images: (_e = (_d = response.predictions) == null ? void 0 : _d.map(
217
240
  (p) => p.bytesBase64Encoded
218
- )) != null ? _f : [],
241
+ )) != null ? _e : [],
219
242
  warnings,
220
243
  response: {
221
244
  timestamp: currentDate,
@@ -225,14 +248,21 @@ var GoogleVertexImageModel = class {
225
248
  };
226
249
  }
227
250
  };
228
- var vertexImageResponseSchema = import_zod3.z.object({
229
- predictions: import_zod3.z.array(import_zod3.z.object({ bytesBase64Encoded: import_zod3.z.string() })).nullish()
251
+ var vertexImageResponseSchema = import_zod4.z.object({
252
+ predictions: import_zod4.z.array(import_zod4.z.object({ bytesBase64Encoded: import_zod4.z.string() })).nullish()
253
+ });
254
+ var vertexImageProviderOptionsSchema = import_zod4.z.object({
255
+ negativePrompt: import_zod4.z.string().nullish(),
256
+ personGeneration: import_zod4.z.enum(["dont_allow", "allow_adult", "allow_all"]).nullish(),
257
+ safetySetting: import_zod4.z.enum([
258
+ "block_low_and_above",
259
+ "block_medium_and_above",
260
+ "block_only_high",
261
+ "block_none"
262
+ ]).nullish(),
263
+ addWatermark: import_zod4.z.boolean().nullish(),
264
+ storageUri: import_zod4.z.string().nullish()
230
265
  });
231
-
232
- // src/google-vertex-supported-file-url.ts
233
- function isSupportedFileUrl(url) {
234
- return ["http:", "https:", "gs:"].includes(url.protocol);
235
- }
236
266
 
237
267
  // src/google-vertex-provider.ts
238
268
  function createVertex(options = {}) {
@@ -268,14 +298,17 @@ function createVertex(options = {}) {
268
298
  return new import_internal.GoogleGenerativeAILanguageModel(modelId, settings, {
269
299
  ...createConfig("chat"),
270
300
  generateId: (_a = options.generateId) != null ? _a : import_provider_utils4.generateId,
271
- isSupportedUrl: isSupportedFileUrl
301
+ getSupportedUrls: async () => ({
302
+ "*": [
303
+ // HTTP URLs:
304
+ /^https?:\/\/.*$/,
305
+ // Google Cloud Storage URLs:
306
+ /^gs:\/\/.*$/
307
+ ]
308
+ })
272
309
  });
273
310
  };
274
- const createEmbeddingModel = (modelId, settings = {}) => new GoogleVertexEmbeddingModel(
275
- modelId,
276
- settings,
277
- createConfig("embedding")
278
- );
311
+ const createEmbeddingModel = (modelId) => new GoogleVertexEmbeddingModel(modelId, createConfig("embedding"));
279
312
  const createImageModel = (modelId, settings = {}) => new GoogleVertexImageModel(modelId, settings, createConfig("image"));
280
313
  const provider = function(modelId, settings) {
281
314
  if (new.target) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/google-vertex-provider-node.ts","../src/google-vertex-auth-google-auth-library.ts","../src/google-vertex-provider.ts","../src/google-vertex-embedding-model.ts","../src/google-vertex-error.ts","../src/google-vertex-image-model.ts","../src/google-vertex-supported-file-url.ts"],"sourcesContent":["export { createVertex, vertex } from './google-vertex-provider-node';\nexport type {\n GoogleVertexProvider,\n GoogleVertexProviderSettings,\n} from './google-vertex-provider-node';\n","import { resolve } from '@ai-sdk/provider-utils';\nimport { GoogleAuthOptions } from 'google-auth-library';\nimport { generateAuthToken } from './google-vertex-auth-google-auth-library';\nimport {\n createVertex as createVertexOriginal,\n GoogleVertexProvider,\n GoogleVertexProviderSettings as GoogleVertexProviderSettingsOriginal,\n} from './google-vertex-provider';\n\nexport interface GoogleVertexProviderSettings\n extends GoogleVertexProviderSettingsOriginal {\n /**\n Optional. The Authentication options provided by google-auth-library.\nComplete list of authentication options is documented in the\nGoogleAuthOptions interface:\nhttps://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.\n */\n googleAuthOptions?: GoogleAuthOptions;\n}\n\nexport type { GoogleVertexProvider };\n\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n return createVertexOriginal({\n ...options,\n headers: async () => ({\n Authorization: `Bearer ${await generateAuthToken(\n options.googleAuthOptions,\n )}`,\n ...(await resolve(options.headers)),\n }),\n });\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n","import { GoogleAuth, GoogleAuthOptions } from 'google-auth-library';\n\nlet authInstance: GoogleAuth | null = null;\nlet authOptions: GoogleAuthOptions | null = null;\n\nfunction getAuth(options: GoogleAuthOptions) {\n if (!authInstance || options !== authOptions) {\n authInstance = new GoogleAuth({\n scopes: ['https://www.googleapis.com/auth/cloud-platform'],\n ...options,\n });\n authOptions = options;\n }\n return authInstance;\n}\n\nexport async function generateAuthToken(options?: GoogleAuthOptions) {\n const auth = getAuth(options || {});\n const client = await auth.getClient();\n const token = await client.getAccessToken();\n return token?.token || null;\n}\n\n// For testing purposes only\nexport function _resetAuthInstance() {\n authInstance = null;\n}\n","import { LanguageModelV1, ProviderV1, ImageModelV1 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadSetting,\n Resolvable,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\nimport {\n GoogleVertexEmbeddingModelId,\n GoogleVertexEmbeddingSettings,\n} from './google-vertex-embedding-settings';\nimport { GoogleVertexEmbeddingModel } from './google-vertex-embedding-model';\nimport { GoogleGenerativeAILanguageModel } from '@ai-sdk/google/internal';\nimport { GoogleVertexImageModel } from './google-vertex-image-model';\nimport {\n GoogleVertexImageModelId,\n GoogleVertexImageSettings,\n} from './google-vertex-image-settings';\nimport { GoogleVertexConfig } from './google-vertex-config';\nimport { isSupportedFileUrl } from './google-vertex-supported-file-url';\n\nexport interface GoogleVertexProvider extends ProviderV1 {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): LanguageModelV1;\n\n languageModel: (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) => LanguageModelV1;\n\n /**\n * Creates a model for image generation.\n */\n image(\n modelId: GoogleVertexImageModelId,\n settings?: GoogleVertexImageSettings,\n ): ImageModelV1;\n\n /**\nCreates a model for image generation.\n */\n imageModel(\n modelId: GoogleVertexImageModelId,\n settings?: GoogleVertexImageSettings,\n ): ImageModelV1;\n}\n\nexport interface GoogleVertexProviderSettings {\n /**\nYour Google Vertex location. Defaults to the environment variable `GOOGLE_VERTEX_LOCATION`.\n */\n location?: string;\n\n /**\nYour Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.\n */\n project?: 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 /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n // for testing\n generateId?: () => string;\n\n /**\nBase URL for the Google Vertex API calls.\n */\n baseURL?: string;\n}\n\n/**\nCreate a Google Vertex AI provider instance.\n */\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n const loadVertexProject = () =>\n loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n });\n\n const loadVertexLocation = () =>\n loadSetting({\n settingValue: options.location,\n settingName: 'location',\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n description: 'Google Vertex location',\n });\n\n const loadBaseURL = () => {\n const region = loadVertexLocation();\n const project = loadVertexProject();\n return (\n withoutTrailingSlash(options.baseURL) ??\n `https://${region}-aiplatform.googleapis.com/v1/projects/${project}/locations/${region}/publishers/google`\n );\n };\n\n const createConfig = (name: string): GoogleVertexConfig => {\n return {\n provider: `google.vertex.${name}`,\n headers: options.headers ?? {},\n fetch: options.fetch,\n baseURL: loadBaseURL(),\n };\n };\n\n const createChatModel = (\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings = {},\n ) => {\n return new GoogleGenerativeAILanguageModel(modelId, settings, {\n ...createConfig('chat'),\n generateId: options.generateId ?? generateId,\n isSupportedUrl: isSupportedFileUrl,\n });\n };\n\n const createEmbeddingModel = (\n modelId: GoogleVertexEmbeddingModelId,\n settings: GoogleVertexEmbeddingSettings = {},\n ) =>\n new GoogleVertexEmbeddingModel(\n modelId,\n settings,\n createConfig('embedding'),\n );\n\n const createImageModel = (\n modelId: GoogleVertexImageModelId,\n settings: GoogleVertexImageSettings = {},\n ) => new GoogleVertexImageModel(modelId, settings, createConfig('image'));\n\n const provider = function (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Google Vertex AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n\n return provider;\n}\n","import {\n EmbeddingModelV1,\n TooManyEmbeddingValuesForCallError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { googleVertexFailedResponseHandler } from './google-vertex-error';\nimport {\n GoogleVertexEmbeddingModelId,\n GoogleVertexEmbeddingSettings,\n} from './google-vertex-embedding-settings';\nimport { GoogleVertexConfig } from './google-vertex-config';\n\nexport class GoogleVertexEmbeddingModel implements EmbeddingModelV1<string> {\n readonly specificationVersion = 'v1';\n readonly modelId: GoogleVertexEmbeddingModelId;\n\n private readonly config: GoogleVertexConfig;\n private readonly settings: GoogleVertexEmbeddingSettings;\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxEmbeddingsPerCall(): number {\n return 2048;\n }\n\n get supportsParallelCalls(): boolean {\n return true;\n }\n\n constructor(\n modelId: GoogleVertexEmbeddingModelId,\n settings: GoogleVertexEmbeddingSettings,\n config: GoogleVertexConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n }: Parameters<EmbeddingModelV1<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV1<string>['doEmbed']>>\n > {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const mergedHeaders = combineHeaders(\n await resolve(this.config.headers),\n headers,\n );\n\n const url = `${this.config.baseURL}/models/${this.modelId}:predict`;\n const { responseHeaders, value: response } = await postJsonToApi({\n url,\n headers: mergedHeaders,\n body: {\n instances: values.map(value => ({ content: value })),\n parameters: {\n outputDimensionality: this.settings.outputDimensionality,\n },\n },\n failedResponseHandler: googleVertexFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleVertexTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n embeddings: response.predictions.map(\n prediction => prediction.embeddings.values,\n ),\n usage: {\n tokens: response.predictions.reduce(\n (tokenCount, prediction) =>\n tokenCount + prediction.embeddings.statistics.token_count,\n 0,\n ),\n },\n rawResponse: { headers: responseHeaders },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst googleVertexTextEmbeddingResponseSchema = z.object({\n predictions: z.array(\n z.object({\n embeddings: z.object({\n values: z.array(z.number()),\n statistics: z.object({\n token_count: z.number(),\n }),\n }),\n }),\n ),\n});\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst googleVertexErrorDataSchema = z.object({\n error: z.object({\n code: z.number().nullable(),\n message: z.string(),\n status: z.string(),\n }),\n});\n\nexport type GoogleVertexErrorData = z.infer<typeof googleVertexErrorDataSchema>;\n\nexport const googleVertexFailedResponseHandler = createJsonErrorResponseHandler(\n {\n errorSchema: googleVertexErrorDataSchema,\n errorToMessage: data => data.error.message,\n },\n);\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n Resolvable,\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { googleVertexFailedResponseHandler } from './google-vertex-error';\nimport {\n GoogleVertexImageModelId,\n GoogleVertexImageSettings,\n} from './google-vertex-image-settings';\n\ninterface GoogleVertexImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: typeof fetch;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/image/generate-images\nexport class GoogleVertexImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n // https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api#parameter_list\n return this.settings.maxImagesPerCall ?? 4;\n }\n\n constructor(\n readonly modelId: GoogleVertexImageModelId,\n readonly settings: GoogleVertexImageSettings,\n private config: GoogleVertexImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\n if (size != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n const body = {\n instances: [{ prompt }],\n parameters: {\n sampleCount: n,\n ...(aspectRatio != null ? { aspectRatio } : {}),\n ...(seed != null ? { seed } : {}),\n ...(providerOptions.vertex ?? {}),\n },\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:predict`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body,\n failedResponseHandler: googleVertexFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n vertexImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images:\n response.predictions?.map(\n (p: { bytesBase64Encoded: string }) => p.bytesBase64Encoded,\n ) ?? [],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst vertexImageResponseSchema = z.object({\n predictions: z.array(z.object({ bytesBase64Encoded: z.string() })).nullish(),\n});\n","// https://firebase.google.com/docs/vertex-ai/input-file-requirements\n// The definition of supported file URLs reduces to a simple protocol check as\n// any publicly accessible file can be used as input.\nexport function isSupportedFileUrl(url: URL) {\n return ['http:', 'https:', 'gs:'].includes(url.protocol);\n}\n"],"mappings":"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","names":["createVertex","import_provider_utils","import_provider_utils","import_provider_utils","import_zod","import_provider_utils","import_zod","createVertex"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/google-vertex-provider-node.ts","../src/google-vertex-auth-google-auth-library.ts","../src/google-vertex-provider.ts","../src/google-vertex-embedding-model.ts","../src/google-vertex-error.ts","../src/google-vertex-embedding-options.ts","../src/google-vertex-image-model.ts"],"sourcesContent":["export type { GoogleVertexImageProviderOptions } from './google-vertex-image-model';\nexport { createVertex, vertex } from './google-vertex-provider-node';\nexport type {\n GoogleVertexProvider,\n GoogleVertexProviderSettings,\n} from './google-vertex-provider-node';\n","import { resolve } from '@ai-sdk/provider-utils';\nimport { GoogleAuthOptions } from 'google-auth-library';\nimport { generateAuthToken } from './google-vertex-auth-google-auth-library';\nimport {\n createVertex as createVertexOriginal,\n GoogleVertexProvider,\n GoogleVertexProviderSettings as GoogleVertexProviderSettingsOriginal,\n} from './google-vertex-provider';\n\nexport interface GoogleVertexProviderSettings\n extends GoogleVertexProviderSettingsOriginal {\n /**\n Optional. The Authentication options provided by google-auth-library.\nComplete list of authentication options is documented in the\nGoogleAuthOptions interface:\nhttps://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.\n */\n googleAuthOptions?: GoogleAuthOptions;\n}\n\nexport type { GoogleVertexProvider };\n\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n return createVertexOriginal({\n ...options,\n headers: async () => ({\n Authorization: `Bearer ${await generateAuthToken(\n options.googleAuthOptions,\n )}`,\n ...(await resolve(options.headers)),\n }),\n });\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n","import { GoogleAuth, GoogleAuthOptions } from 'google-auth-library';\n\nlet authInstance: GoogleAuth | null = null;\nlet authOptions: GoogleAuthOptions | null = null;\n\nfunction getAuth(options: GoogleAuthOptions) {\n if (!authInstance || options !== authOptions) {\n authInstance = new GoogleAuth({\n scopes: ['https://www.googleapis.com/auth/cloud-platform'],\n ...options,\n });\n authOptions = options;\n }\n return authInstance;\n}\n\nexport async function generateAuthToken(options?: GoogleAuthOptions) {\n const auth = getAuth(options || {});\n const client = await auth.getClient();\n const token = await client.getAccessToken();\n return token?.token || null;\n}\n\n// For testing purposes only\nexport function _resetAuthInstance() {\n authInstance = null;\n}\n","import { GoogleGenerativeAILanguageModel } from '@ai-sdk/google/internal';\nimport { ImageModelV1, LanguageModelV2, ProviderV2 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n generateId,\n loadSetting,\n Resolvable,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { GoogleVertexConfig } from './google-vertex-config';\nimport { GoogleVertexEmbeddingModel } from './google-vertex-embedding-model';\nimport { GoogleVertexEmbeddingModelId } from './google-vertex-embedding-options';\nimport { GoogleVertexImageModel } from './google-vertex-image-model';\nimport {\n GoogleVertexImageModelId,\n GoogleVertexImageSettings,\n} from './google-vertex-image-settings';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\n\nexport interface GoogleVertexProvider extends ProviderV2 {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): LanguageModelV2;\n\n languageModel: (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) => LanguageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n image(\n modelId: GoogleVertexImageModelId,\n settings?: GoogleVertexImageSettings,\n ): ImageModelV1;\n\n /**\nCreates a model for image generation.\n */\n imageModel(\n modelId: GoogleVertexImageModelId,\n settings?: GoogleVertexImageSettings,\n ): ImageModelV1;\n}\n\nexport interface GoogleVertexProviderSettings {\n /**\nYour Google Vertex location. Defaults to the environment variable `GOOGLE_VERTEX_LOCATION`.\n */\n location?: string;\n\n /**\nYour Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.\n */\n project?: 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 /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n // for testing\n generateId?: () => string;\n\n /**\nBase URL for the Google Vertex API calls.\n */\n baseURL?: string;\n}\n\n/**\nCreate a Google Vertex AI provider instance.\n */\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n const loadVertexProject = () =>\n loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n });\n\n const loadVertexLocation = () =>\n loadSetting({\n settingValue: options.location,\n settingName: 'location',\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n description: 'Google Vertex location',\n });\n\n const loadBaseURL = () => {\n const region = loadVertexLocation();\n const project = loadVertexProject();\n return (\n withoutTrailingSlash(options.baseURL) ??\n `https://${region}-aiplatform.googleapis.com/v1/projects/${project}/locations/${region}/publishers/google`\n );\n };\n\n const createConfig = (name: string): GoogleVertexConfig => {\n return {\n provider: `google.vertex.${name}`,\n headers: options.headers ?? {},\n fetch: options.fetch,\n baseURL: loadBaseURL(),\n };\n };\n\n const createChatModel = (\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings = {},\n ) => {\n return new GoogleGenerativeAILanguageModel(modelId, settings, {\n ...createConfig('chat'),\n generateId: options.generateId ?? generateId,\n getSupportedUrls: async () => ({\n '*': [\n // HTTP URLs:\n /^https?:\\/\\/.*$/,\n // Google Cloud Storage URLs:\n /^gs:\\/\\/.*$/,\n ],\n }),\n });\n };\n\n const createEmbeddingModel = (modelId: GoogleVertexEmbeddingModelId) =>\n new GoogleVertexEmbeddingModel(modelId, createConfig('embedding'));\n\n const createImageModel = (\n modelId: GoogleVertexImageModelId,\n settings: GoogleVertexImageSettings = {},\n ) => new GoogleVertexImageModel(modelId, settings, createConfig('image'));\n\n const provider = function (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Google Vertex AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n\n return provider;\n}\n","import {\n EmbeddingModelV2,\n TooManyEmbeddingValuesForCallError,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonResponseHandler,\n postJsonToApi,\n resolve,\n Resolvable,\n parseProviderOptions,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { googleVertexFailedResponseHandler } from './google-vertex-error';\nimport {\n GoogleVertexEmbeddingModelId,\n googleVertexEmbeddingProviderOptions,\n} from './google-vertex-embedding-options';\nimport { GoogleVertexConfig } from './google-vertex-config';\n\nexport class GoogleVertexEmbeddingModel implements EmbeddingModelV2<string> {\n readonly specificationVersion = 'v2';\n readonly modelId: GoogleVertexEmbeddingModelId;\n\n private readonly config: GoogleVertexConfig;\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxEmbeddingsPerCall(): number {\n return 2048;\n }\n\n get supportsParallelCalls(): boolean {\n return true;\n }\n\n constructor(\n modelId: GoogleVertexEmbeddingModelId,\n config: GoogleVertexConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n }\n\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions,\n }: Parameters<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n Awaited<ReturnType<EmbeddingModelV2<string>['doEmbed']>>\n > {\n // Parse provider options\n const googleOptions =\n parseProviderOptions({\n provider: 'google',\n providerOptions,\n schema: googleVertexEmbeddingProviderOptions,\n }) ?? {};\n\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values,\n });\n }\n\n const mergedHeaders = combineHeaders(\n await resolve(this.config.headers),\n headers,\n );\n\n const url = `${this.config.baseURL}/models/${this.modelId}:predict`;\n const {\n responseHeaders,\n value: response,\n rawValue,\n } = await postJsonToApi({\n url,\n headers: mergedHeaders,\n body: {\n instances: values.map(value => ({ content: value })),\n parameters: {\n outputDimensionality: googleOptions.outputDimensionality,\n },\n },\n failedResponseHandler: googleVertexFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n googleVertexTextEmbeddingResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n embeddings: response.predictions.map(\n prediction => prediction.embeddings.values,\n ),\n usage: {\n tokens: response.predictions.reduce(\n (tokenCount, prediction) =>\n tokenCount + prediction.embeddings.statistics.token_count,\n 0,\n ),\n },\n response: { headers: responseHeaders, body: rawValue },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst googleVertexTextEmbeddingResponseSchema = z.object({\n predictions: z.array(\n z.object({\n embeddings: z.object({\n values: z.array(z.number()),\n statistics: z.object({\n token_count: z.number(),\n }),\n }),\n }),\n ),\n});\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst googleVertexErrorDataSchema = z.object({\n error: z.object({\n code: z.number().nullable(),\n message: z.string(),\n status: z.string(),\n }),\n});\n\nexport type GoogleVertexErrorData = z.infer<typeof googleVertexErrorDataSchema>;\n\nexport const googleVertexFailedResponseHandler = createJsonErrorResponseHandler(\n {\n errorSchema: googleVertexErrorDataSchema,\n errorToMessage: data => data.error.message,\n },\n);\n","import { z } from 'zod';\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api\nexport type GoogleVertexEmbeddingModelId =\n | 'textembedding-gecko'\n | 'textembedding-gecko@001'\n | 'textembedding-gecko@003'\n | 'textembedding-gecko-multilingual'\n | 'textembedding-gecko-multilingual@001'\n | 'text-multilingual-embedding-002'\n | 'text-embedding-004'\n | 'text-embedding-005'\n | (string & {});\n\nexport const googleVertexEmbeddingProviderOptions = z.object({\n /**\n * Optional. Optional reduced dimension for the output embedding.\n * If set, excessive values in the output embedding are truncated from the end.\n */\n outputDimensionality: z.number().optional(),\n});\n\nexport type GoogleVertexEmbeddingProviderOptions = z.infer<\n typeof googleVertexEmbeddingProviderOptions\n>;\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n Resolvable,\n combineHeaders,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { googleVertexFailedResponseHandler } from './google-vertex-error';\nimport {\n GoogleVertexImageModelId,\n GoogleVertexImageSettings,\n} from './google-vertex-image-settings';\n\ninterface GoogleVertexImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: typeof fetch;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\n// https://cloud.google.com/vertex-ai/generative-ai/docs/image/generate-images\nexport class GoogleVertexImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n // https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api#parameter_list\n return this.settings.maxImagesPerCall ?? 4;\n }\n\n constructor(\n readonly modelId: GoogleVertexImageModelId,\n readonly settings: GoogleVertexImageSettings,\n private config: GoogleVertexImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\n if (size != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n const vertexImageOptions = parseProviderOptions({\n provider: 'vertex',\n providerOptions,\n schema: vertexImageProviderOptionsSchema,\n });\n\n const body = {\n instances: [{ prompt }],\n parameters: {\n sampleCount: n,\n ...(aspectRatio != null ? { aspectRatio } : {}),\n ...(seed != null ? { seed } : {}),\n ...(vertexImageOptions ?? {}),\n },\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/models/${this.modelId}:predict`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body,\n failedResponseHandler: googleVertexFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n vertexImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images:\n response.predictions?.map(\n (p: { bytesBase64Encoded: string }) => p.bytesBase64Encoded,\n ) ?? [],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst vertexImageResponseSchema = z.object({\n predictions: z.array(z.object({ bytesBase64Encoded: z.string() })).nullish(),\n});\n\nconst vertexImageProviderOptionsSchema = z.object({\n negativePrompt: z.string().nullish(),\n personGeneration: z\n .enum(['dont_allow', 'allow_adult', 'allow_all'])\n .nullish(),\n safetySetting: z\n .enum([\n 'block_low_and_above',\n 'block_medium_and_above',\n 'block_only_high',\n 'block_none',\n ])\n .nullish(),\n addWatermark: z.boolean().nullish(),\n storageUri: z.string().nullish(),\n});\nexport type GoogleVertexImageProviderOptions = z.infer<\n typeof vertexImageProviderOptionsSchema\n>;\n"],"mappings":"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","names":["createVertex","import_provider_utils","import_provider_utils","import_provider_utils","import_zod","import_zod","import_provider_utils","import_zod","createVertex"]}
package/dist/index.mjs CHANGED
@@ -23,6 +23,7 @@ async function generateAuthToken(options) {
23
23
  }
24
24
 
25
25
  // src/google-vertex-provider.ts
26
+ import { GoogleGenerativeAILanguageModel } from "@ai-sdk/google/internal";
26
27
  import {
27
28
  generateId,
28
29
  loadSetting,
@@ -37,9 +38,10 @@ import {
37
38
  combineHeaders,
38
39
  createJsonResponseHandler,
39
40
  postJsonToApi,
40
- resolve
41
+ resolve,
42
+ parseProviderOptions
41
43
  } from "@ai-sdk/provider-utils";
42
- import { z as z2 } from "zod";
44
+ import { z as z3 } from "zod";
43
45
 
44
46
  // src/google-vertex-error.ts
45
47
  import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
@@ -58,12 +60,21 @@ var googleVertexFailedResponseHandler = createJsonErrorResponseHandler(
58
60
  }
59
61
  );
60
62
 
63
+ // src/google-vertex-embedding-options.ts
64
+ import { z as z2 } from "zod";
65
+ var googleVertexEmbeddingProviderOptions = z2.object({
66
+ /**
67
+ * Optional. Optional reduced dimension for the output embedding.
68
+ * If set, excessive values in the output embedding are truncated from the end.
69
+ */
70
+ outputDimensionality: z2.number().optional()
71
+ });
72
+
61
73
  // src/google-vertex-embedding-model.ts
62
74
  var GoogleVertexEmbeddingModel = class {
63
- constructor(modelId, settings, config) {
64
- this.specificationVersion = "v1";
75
+ constructor(modelId, config) {
76
+ this.specificationVersion = "v2";
65
77
  this.modelId = modelId;
66
- this.settings = settings;
67
78
  this.config = config;
68
79
  }
69
80
  get provider() {
@@ -78,8 +89,15 @@ var GoogleVertexEmbeddingModel = class {
78
89
  async doEmbed({
79
90
  values,
80
91
  headers,
81
- abortSignal
92
+ abortSignal,
93
+ providerOptions
82
94
  }) {
95
+ var _a;
96
+ const googleOptions = (_a = parseProviderOptions({
97
+ provider: "google",
98
+ providerOptions,
99
+ schema: googleVertexEmbeddingProviderOptions
100
+ })) != null ? _a : {};
83
101
  if (values.length > this.maxEmbeddingsPerCall) {
84
102
  throw new TooManyEmbeddingValuesForCallError({
85
103
  provider: this.provider,
@@ -93,13 +111,17 @@ var GoogleVertexEmbeddingModel = class {
93
111
  headers
94
112
  );
95
113
  const url = `${this.config.baseURL}/models/${this.modelId}:predict`;
96
- const { responseHeaders, value: response } = await postJsonToApi({
114
+ const {
115
+ responseHeaders,
116
+ value: response,
117
+ rawValue
118
+ } = await postJsonToApi({
97
119
  url,
98
120
  headers: mergedHeaders,
99
121
  body: {
100
122
  instances: values.map((value) => ({ content: value })),
101
123
  parameters: {
102
- outputDimensionality: this.settings.outputDimensionality
124
+ outputDimensionality: googleOptions.outputDimensionality
103
125
  }
104
126
  },
105
127
  failedResponseHandler: googleVertexFailedResponseHandler,
@@ -119,34 +141,32 @@ var GoogleVertexEmbeddingModel = class {
119
141
  0
120
142
  )
121
143
  },
122
- rawResponse: { headers: responseHeaders }
144
+ response: { headers: responseHeaders, body: rawValue }
123
145
  };
124
146
  }
125
147
  };
126
- var googleVertexTextEmbeddingResponseSchema = z2.object({
127
- predictions: z2.array(
128
- z2.object({
129
- embeddings: z2.object({
130
- values: z2.array(z2.number()),
131
- statistics: z2.object({
132
- token_count: z2.number()
148
+ var googleVertexTextEmbeddingResponseSchema = z3.object({
149
+ predictions: z3.array(
150
+ z3.object({
151
+ embeddings: z3.object({
152
+ values: z3.array(z3.number()),
153
+ statistics: z3.object({
154
+ token_count: z3.number()
133
155
  })
134
156
  })
135
157
  })
136
158
  )
137
159
  });
138
160
 
139
- // src/google-vertex-provider.ts
140
- import { GoogleGenerativeAILanguageModel } from "@ai-sdk/google/internal";
141
-
142
161
  // src/google-vertex-image-model.ts
143
162
  import {
144
163
  combineHeaders as combineHeaders2,
145
164
  createJsonResponseHandler as createJsonResponseHandler2,
165
+ parseProviderOptions as parseProviderOptions2,
146
166
  postJsonToApi as postJsonToApi2,
147
167
  resolve as resolve2
148
168
  } from "@ai-sdk/provider-utils";
149
- import { z as z3 } from "zod";
169
+ import { z as z4 } from "zod";
150
170
  var GoogleVertexImageModel = class {
151
171
  constructor(modelId, settings, config) {
152
172
  this.modelId = modelId;
@@ -171,7 +191,7 @@ var GoogleVertexImageModel = class {
171
191
  headers,
172
192
  abortSignal
173
193
  }) {
174
- var _a, _b, _c, _d, _e, _f;
194
+ var _a, _b, _c, _d, _e;
175
195
  const warnings = [];
176
196
  if (size != null) {
177
197
  warnings.push({
@@ -180,16 +200,21 @@ var GoogleVertexImageModel = class {
180
200
  details: "This model does not support the `size` option. Use `aspectRatio` instead."
181
201
  });
182
202
  }
203
+ const vertexImageOptions = parseProviderOptions2({
204
+ provider: "vertex",
205
+ providerOptions,
206
+ schema: vertexImageProviderOptionsSchema
207
+ });
183
208
  const body = {
184
209
  instances: [{ prompt }],
185
210
  parameters: {
186
211
  sampleCount: n,
187
212
  ...aspectRatio != null ? { aspectRatio } : {},
188
213
  ...seed != null ? { seed } : {},
189
- ...(_a = providerOptions.vertex) != null ? _a : {}
214
+ ...vertexImageOptions != null ? vertexImageOptions : {}
190
215
  }
191
216
  };
192
- const currentDate = (_d = (_c = (_b = this.config._internal) == null ? void 0 : _b.currentDate) == null ? void 0 : _c.call(_b)) != null ? _d : /* @__PURE__ */ new Date();
217
+ const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
193
218
  const { value: response, responseHeaders } = await postJsonToApi2({
194
219
  url: `${this.config.baseURL}/models/${this.modelId}:predict`,
195
220
  headers: combineHeaders2(await resolve2(this.config.headers), headers),
@@ -202,9 +227,9 @@ var GoogleVertexImageModel = class {
202
227
  fetch: this.config.fetch
203
228
  });
204
229
  return {
205
- images: (_f = (_e = response.predictions) == null ? void 0 : _e.map(
230
+ images: (_e = (_d = response.predictions) == null ? void 0 : _d.map(
206
231
  (p) => p.bytesBase64Encoded
207
- )) != null ? _f : [],
232
+ )) != null ? _e : [],
208
233
  warnings,
209
234
  response: {
210
235
  timestamp: currentDate,
@@ -214,14 +239,21 @@ var GoogleVertexImageModel = class {
214
239
  };
215
240
  }
216
241
  };
217
- var vertexImageResponseSchema = z3.object({
218
- predictions: z3.array(z3.object({ bytesBase64Encoded: z3.string() })).nullish()
242
+ var vertexImageResponseSchema = z4.object({
243
+ predictions: z4.array(z4.object({ bytesBase64Encoded: z4.string() })).nullish()
244
+ });
245
+ var vertexImageProviderOptionsSchema = z4.object({
246
+ negativePrompt: z4.string().nullish(),
247
+ personGeneration: z4.enum(["dont_allow", "allow_adult", "allow_all"]).nullish(),
248
+ safetySetting: z4.enum([
249
+ "block_low_and_above",
250
+ "block_medium_and_above",
251
+ "block_only_high",
252
+ "block_none"
253
+ ]).nullish(),
254
+ addWatermark: z4.boolean().nullish(),
255
+ storageUri: z4.string().nullish()
219
256
  });
220
-
221
- // src/google-vertex-supported-file-url.ts
222
- function isSupportedFileUrl(url) {
223
- return ["http:", "https:", "gs:"].includes(url.protocol);
224
- }
225
257
 
226
258
  // src/google-vertex-provider.ts
227
259
  function createVertex(options = {}) {
@@ -257,14 +289,17 @@ function createVertex(options = {}) {
257
289
  return new GoogleGenerativeAILanguageModel(modelId, settings, {
258
290
  ...createConfig("chat"),
259
291
  generateId: (_a = options.generateId) != null ? _a : generateId,
260
- isSupportedUrl: isSupportedFileUrl
292
+ getSupportedUrls: async () => ({
293
+ "*": [
294
+ // HTTP URLs:
295
+ /^https?:\/\/.*$/,
296
+ // Google Cloud Storage URLs:
297
+ /^gs:\/\/.*$/
298
+ ]
299
+ })
261
300
  });
262
301
  };
263
- const createEmbeddingModel = (modelId, settings = {}) => new GoogleVertexEmbeddingModel(
264
- modelId,
265
- settings,
266
- createConfig("embedding")
267
- );
302
+ const createEmbeddingModel = (modelId) => new GoogleVertexEmbeddingModel(modelId, createConfig("embedding"));
268
303
  const createImageModel = (modelId, settings = {}) => new GoogleVertexImageModel(modelId, settings, createConfig("image"));
269
304
  const provider = function(modelId, settings) {
270
305
  if (new.target) {