@ai-sdk/google-vertex 2.2.24 → 3.0.0-alpha.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +329 -68
  2. package/README.md +1 -1
  3. package/anthropic/edge.d.ts +1 -0
  4. package/anthropic/index.d.ts +1 -0
  5. package/{anthropic/edge/dist → dist/anthropic/edge}/index.d.mts +5 -7
  6. package/{anthropic/edge/dist → dist/anthropic/edge}/index.d.ts +5 -7
  7. package/{anthropic/edge/dist → dist/anthropic/edge}/index.js +22 -22
  8. package/dist/anthropic/edge/index.js.map +1 -0
  9. package/{anthropic/edge/dist → dist/anthropic/edge}/index.mjs +22 -22
  10. package/dist/anthropic/edge/index.mjs.map +1 -0
  11. package/{anthropic/dist → dist/anthropic}/index.d.mts +5 -7
  12. package/{anthropic/dist → dist/anthropic}/index.d.ts +5 -7
  13. package/{anthropic/dist → dist/anthropic}/index.js +22 -22
  14. package/dist/anthropic/index.js.map +1 -0
  15. package/{anthropic/dist → dist/anthropic}/index.mjs +22 -22
  16. package/dist/anthropic/index.mjs.map +1 -0
  17. package/{edge/dist → dist/edge}/index.d.mts +8 -17
  18. package/{edge/dist → dist/edge}/index.d.ts +8 -17
  19. package/{edge/dist → dist/edge}/index.js +87 -59
  20. package/dist/edge/index.js.map +1 -0
  21. package/{edge/dist → dist/edge}/index.mjs +90 -61
  22. package/dist/edge/index.mjs.map +1 -0
  23. package/dist/index.d.mts +6 -15
  24. package/dist/index.d.ts +6 -15
  25. package/dist/index.js +87 -59
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +90 -61
  28. package/dist/index.mjs.map +1 -1
  29. package/edge.d.ts +1 -0
  30. package/package.json +29 -28
  31. package/anthropic/dist/index.js.map +0 -1
  32. package/anthropic/dist/index.mjs.map +0 -1
  33. package/anthropic/edge/dist/index.js.map +0 -1
  34. package/anthropic/edge/dist/index.mjs.map +0 -1
  35. package/edge/dist/index.js.map +0 -1
  36. package/edge/dist/index.mjs.map +0 -1
@@ -29,12 +29,13 @@ module.exports = __toCommonJS(edge_exports);
29
29
  var import_provider_utils6 = require("@ai-sdk/provider-utils");
30
30
 
31
31
  // src/google-vertex-provider.ts
32
+ var import_internal = require("@ai-sdk/google/internal");
32
33
  var import_provider_utils4 = require("@ai-sdk/provider-utils");
33
34
 
34
35
  // src/google-vertex-embedding-model.ts
35
36
  var import_provider = require("@ai-sdk/provider");
36
37
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
37
- var import_zod2 = require("zod");
38
+ var import_zod3 = require("zod");
38
39
 
39
40
  // src/google-vertex-error.ts
40
41
  var import_provider_utils = require("@ai-sdk/provider-utils");
@@ -53,28 +54,40 @@ var googleVertexFailedResponseHandler = (0, import_provider_utils.createJsonErro
53
54
  }
54
55
  );
55
56
 
57
+ // src/google-vertex-embedding-options.ts
58
+ var import_zod2 = require("zod");
59
+ var googleVertexEmbeddingProviderOptions = import_zod2.z.object({
60
+ /**
61
+ * Optional. Optional reduced dimension for the output embedding.
62
+ * If set, excessive values in the output embedding are truncated from the end.
63
+ */
64
+ outputDimensionality: import_zod2.z.number().optional()
65
+ });
66
+
56
67
  // src/google-vertex-embedding-model.ts
57
68
  var GoogleVertexEmbeddingModel = class {
58
- constructor(modelId, settings, config) {
59
- this.specificationVersion = "v1";
69
+ constructor(modelId, config) {
70
+ this.specificationVersion = "v2";
71
+ this.maxEmbeddingsPerCall = 2048;
72
+ this.supportsParallelCalls = true;
60
73
  this.modelId = modelId;
61
- this.settings = settings;
62
74
  this.config = config;
63
75
  }
64
76
  get provider() {
65
77
  return this.config.provider;
66
78
  }
67
- get maxEmbeddingsPerCall() {
68
- return 2048;
69
- }
70
- get supportsParallelCalls() {
71
- return true;
72
- }
73
79
  async doEmbed({
74
80
  values,
75
81
  headers,
76
- abortSignal
82
+ abortSignal,
83
+ providerOptions
77
84
  }) {
85
+ var _a;
86
+ const googleOptions = (_a = await (0, import_provider_utils2.parseProviderOptions)({
87
+ provider: "google",
88
+ providerOptions,
89
+ schema: googleVertexEmbeddingProviderOptions
90
+ })) != null ? _a : {};
78
91
  if (values.length > this.maxEmbeddingsPerCall) {
79
92
  throw new import_provider.TooManyEmbeddingValuesForCallError({
80
93
  provider: this.provider,
@@ -88,13 +101,17 @@ var GoogleVertexEmbeddingModel = class {
88
101
  headers
89
102
  );
90
103
  const url = `${this.config.baseURL}/models/${this.modelId}:predict`;
91
- const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({
104
+ const {
105
+ responseHeaders,
106
+ value: response,
107
+ rawValue
108
+ } = await (0, import_provider_utils2.postJsonToApi)({
92
109
  url,
93
110
  headers: mergedHeaders,
94
111
  body: {
95
112
  instances: values.map((value) => ({ content: value })),
96
113
  parameters: {
97
- outputDimensionality: this.settings.outputDimensionality
114
+ outputDimensionality: googleOptions.outputDimensionality
98
115
  }
99
116
  },
100
117
  failedResponseHandler: googleVertexFailedResponseHandler,
@@ -114,43 +131,37 @@ var GoogleVertexEmbeddingModel = class {
114
131
  0
115
132
  )
116
133
  },
117
- rawResponse: { headers: responseHeaders }
134
+ response: { headers: responseHeaders, body: rawValue }
118
135
  };
119
136
  }
120
137
  };
121
- var googleVertexTextEmbeddingResponseSchema = import_zod2.z.object({
122
- predictions: import_zod2.z.array(
123
- import_zod2.z.object({
124
- embeddings: import_zod2.z.object({
125
- values: import_zod2.z.array(import_zod2.z.number()),
126
- statistics: import_zod2.z.object({
127
- token_count: import_zod2.z.number()
138
+ var googleVertexTextEmbeddingResponseSchema = import_zod3.z.object({
139
+ predictions: import_zod3.z.array(
140
+ import_zod3.z.object({
141
+ embeddings: import_zod3.z.object({
142
+ values: import_zod3.z.array(import_zod3.z.number()),
143
+ statistics: import_zod3.z.object({
144
+ token_count: import_zod3.z.number()
128
145
  })
129
146
  })
130
147
  })
131
148
  )
132
149
  });
133
150
 
134
- // src/google-vertex-provider.ts
135
- var import_internal = require("@ai-sdk/google/internal");
136
-
137
151
  // src/google-vertex-image-model.ts
138
152
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
139
- var import_zod3 = require("zod");
153
+ var import_zod4 = require("zod");
140
154
  var GoogleVertexImageModel = class {
141
- constructor(modelId, settings, config) {
155
+ constructor(modelId, config) {
142
156
  this.modelId = modelId;
143
- this.settings = settings;
144
157
  this.config = config;
145
- this.specificationVersion = "v1";
158
+ this.specificationVersion = "v2";
159
+ // https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api#parameter_list
160
+ this.maxImagesPerCall = 4;
146
161
  }
147
162
  get provider() {
148
163
  return this.config.provider;
149
164
  }
150
- get maxImagesPerCall() {
151
- var _a;
152
- return (_a = this.settings.maxImagesPerCall) != null ? _a : 4;
153
- }
154
165
  async doGenerate({
155
166
  prompt,
156
167
  n,
@@ -161,7 +172,7 @@ var GoogleVertexImageModel = class {
161
172
  headers,
162
173
  abortSignal
163
174
  }) {
164
- var _a, _b, _c, _d, _e;
175
+ var _a, _b, _c, _d, _e, _f, _g;
165
176
  const warnings = [];
166
177
  if (size != null) {
167
178
  warnings.push({
@@ -170,7 +181,7 @@ var GoogleVertexImageModel = class {
170
181
  details: "This model does not support the `size` option. Use `aspectRatio` instead."
171
182
  });
172
183
  }
173
- const vertexImageOptions = (0, import_provider_utils3.parseProviderOptions)({
184
+ const vertexImageOptions = await (0, import_provider_utils3.parseProviderOptions)({
174
185
  provider: "vertex",
175
186
  providerOptions,
176
187
  schema: vertexImageProviderOptionsSchema
@@ -198,38 +209,52 @@ var GoogleVertexImageModel = class {
198
209
  });
199
210
  return {
200
211
  images: (_e = (_d = response.predictions) == null ? void 0 : _d.map(
201
- (p) => p.bytesBase64Encoded
212
+ ({ bytesBase64Encoded }) => bytesBase64Encoded
202
213
  )) != null ? _e : [],
203
214
  warnings,
204
215
  response: {
205
216
  timestamp: currentDate,
206
217
  modelId: this.modelId,
207
218
  headers: responseHeaders
219
+ },
220
+ providerMetadata: {
221
+ vertex: {
222
+ images: (_g = (_f = response.predictions) == null ? void 0 : _f.map((prediction) => {
223
+ const {
224
+ // normalize revised prompt property
225
+ prompt: revisedPrompt
226
+ } = prediction;
227
+ return {
228
+ revisedPrompt
229
+ };
230
+ })) != null ? _g : []
231
+ }
208
232
  }
209
233
  };
210
234
  }
211
235
  };
212
- var vertexImageResponseSchema = import_zod3.z.object({
213
- predictions: import_zod3.z.array(import_zod3.z.object({ bytesBase64Encoded: import_zod3.z.string() })).nullish()
236
+ var vertexImageResponseSchema = import_zod4.z.object({
237
+ predictions: import_zod4.z.array(
238
+ import_zod4.z.object({
239
+ bytesBase64Encoded: import_zod4.z.string(),
240
+ mimeType: import_zod4.z.string(),
241
+ prompt: import_zod4.z.string()
242
+ })
243
+ ).nullish()
214
244
  });
215
- var vertexImageProviderOptionsSchema = import_zod3.z.object({
216
- negativePrompt: import_zod3.z.string().nullish(),
217
- personGeneration: import_zod3.z.enum(["dont_allow", "allow_adult", "allow_all"]).nullish(),
218
- safetySetting: import_zod3.z.enum([
245
+ var vertexImageProviderOptionsSchema = import_zod4.z.object({
246
+ negativePrompt: import_zod4.z.string().nullish(),
247
+ personGeneration: import_zod4.z.enum(["dont_allow", "allow_adult", "allow_all"]).nullish(),
248
+ safetySetting: import_zod4.z.enum([
219
249
  "block_low_and_above",
220
250
  "block_medium_and_above",
221
251
  "block_only_high",
222
252
  "block_none"
223
253
  ]).nullish(),
224
- addWatermark: import_zod3.z.boolean().nullish(),
225
- storageUri: import_zod3.z.string().nullish()
254
+ addWatermark: import_zod4.z.boolean().nullish(),
255
+ storageUri: import_zod4.z.string().nullish()
226
256
  });
227
257
 
228
- // src/google-vertex-supported-file-url.ts
229
- function isSupportedFileUrl(url) {
230
- return ["http:", "https:", "gs:"].includes(url.protocol);
231
- }
232
-
233
258
  // src/google-vertex-provider.ts
234
259
  function createVertex(options = {}) {
235
260
  const loadVertexProject = () => (0, import_provider_utils4.loadSetting)({
@@ -259,27 +284,30 @@ function createVertex(options = {}) {
259
284
  baseURL: loadBaseURL()
260
285
  };
261
286
  };
262
- const createChatModel = (modelId, settings = {}) => {
287
+ const createChatModel = (modelId) => {
263
288
  var _a;
264
- return new import_internal.GoogleGenerativeAILanguageModel(modelId, settings, {
289
+ return new import_internal.GoogleGenerativeAILanguageModel(modelId, {
265
290
  ...createConfig("chat"),
266
291
  generateId: (_a = options.generateId) != null ? _a : import_provider_utils4.generateId,
267
- isSupportedUrl: isSupportedFileUrl
292
+ supportedUrls: () => ({
293
+ "*": [
294
+ // HTTP URLs:
295
+ /^https?:\/\/.*$/,
296
+ // Google Cloud Storage URLs:
297
+ /^gs:\/\/.*$/
298
+ ]
299
+ })
268
300
  });
269
301
  };
270
- const createEmbeddingModel = (modelId, settings = {}) => new GoogleVertexEmbeddingModel(
271
- modelId,
272
- settings,
273
- createConfig("embedding")
274
- );
275
- const createImageModel = (modelId, settings = {}) => new GoogleVertexImageModel(modelId, settings, createConfig("image"));
276
- const provider = function(modelId, settings) {
302
+ const createEmbeddingModel = (modelId) => new GoogleVertexEmbeddingModel(modelId, createConfig("embedding"));
303
+ const createImageModel = (modelId) => new GoogleVertexImageModel(modelId, createConfig("image"));
304
+ const provider = function(modelId) {
277
305
  if (new.target) {
278
306
  throw new Error(
279
307
  "The Google Vertex AI model function cannot be called with the new keyword."
280
308
  );
281
309
  }
282
- return createChatModel(modelId, settings);
310
+ return createChatModel(modelId);
283
311
  };
284
312
  provider.languageModel = createChatModel;
285
313
  provider.textEmbeddingModel = createEmbeddingModel;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/edge/index.ts","../../src/edge/google-vertex-provider-edge.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","../../src/edge/google-vertex-auth-edge.ts"],"sourcesContent":["export { createVertex, vertex } from './google-vertex-provider-edge';\nexport type {\n GoogleVertexProviderSettings,\n GoogleVertexProvider,\n} from './google-vertex-provider-edge';\n","import { resolve } from '@ai-sdk/provider-utils';\nimport {\n createVertex as createVertexOriginal,\n GoogleVertexProvider,\n GoogleVertexProviderSettings as GoogleVertexProviderSettingsOriginal,\n} from '../google-vertex-provider';\nimport {\n generateAuthToken,\n GoogleCredentials,\n} from './google-vertex-auth-edge';\n\nexport type { GoogleVertexProvider };\n\nexport interface GoogleVertexProviderSettings\n extends GoogleVertexProviderSettingsOriginal {\n /**\n * Optional. The Google credentials for the Google Cloud service account. If\n * not provided, the Google Vertex provider will use environment variables to\n * load the credentials.\n */\n googleCredentials?: GoogleCredentials;\n}\n\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n return createVertexOriginal({\n ...options,\n headers: async () => ({\n Authorization: `Bearer ${await generateAuthToken(\n options.googleCredentials,\n )}`,\n ...(await resolve(options.headers)),\n }),\n });\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n","import { GoogleGenerativeAILanguageModel } from '@ai-sdk/google/internal';\nimport { ImageModelV2, 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 { GoogleVertexImageModelId } from './google-vertex-image-settings';\nimport { GoogleVertexModelId } from './google-vertex-options';\n\nexport interface GoogleVertexProvider extends ProviderV2 {\n /**\nCreates a model for text generation.\n */\n (modelId: GoogleVertexModelId): LanguageModelV2;\n\n languageModel: (modelId: GoogleVertexModelId) => LanguageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: GoogleVertexImageModelId): ImageModelV2;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: GoogleVertexImageModelId): ImageModelV2;\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 = (modelId: GoogleVertexModelId) => {\n return new GoogleGenerativeAILanguageModel(modelId, {\n ...createConfig('chat'),\n generateId: options.generateId ?? generateId,\n supportedUrls: () => ({\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 = (modelId: GoogleVertexImageModelId) =>\n new GoogleVertexImageModel(modelId, createConfig('image'));\n\n const provider = function (modelId: GoogleVertexModelId) {\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);\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 readonly maxEmbeddingsPerCall = 2048;\n readonly supportsParallelCalls = true;\n\n private readonly config: GoogleVertexConfig;\n\n get provider(): string {\n return this.config.provider;\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 (await 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 { ImageModelV2, ImageModelV2CallWarning } 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 { GoogleVertexImageModelId } 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 ImageModelV2 {\n readonly specificationVersion = 'v2';\n // https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api#parameter_list\n readonly maxImagesPerCall = 4;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: GoogleVertexImageModelId,\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<ImageModelV2['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV2['doGenerate']>>\n > {\n const warnings: Array<ImageModelV2CallWarning> = [];\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 = await 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 ({ bytesBase64Encoded }) => bytesBase64Encoded,\n ) ?? [],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n providerMetadata: {\n vertex: {\n images:\n response.predictions?.map(prediction => {\n const {\n // normalize revised prompt property\n prompt: revisedPrompt,\n } = prediction;\n\n return {\n revisedPrompt,\n };\n }) ?? [],\n },\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\n .array(\n z.object({\n bytesBase64Encoded: z.string(),\n mimeType: z.string(),\n prompt: z.string(),\n }),\n )\n .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","import { loadOptionalSetting, loadSetting } from '@ai-sdk/provider-utils';\n\nexport interface GoogleCredentials {\n /**\n * The client email for the Google Cloud service account. Defaults to the\n * value of the `GOOGLE_CLIENT_EMAIL` environment variable.\n */\n clientEmail: string;\n\n /**\n * The private key for the Google Cloud service account. Defaults to the\n * value of the `GOOGLE_PRIVATE_KEY` environment variable.\n */\n privateKey: string;\n\n /**\n * Optional. The private key ID for the Google Cloud service account. Defaults\n * to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.\n */\n privateKeyId?: string;\n}\n\nconst loadCredentials = async (): Promise<GoogleCredentials> => {\n try {\n return {\n clientEmail: loadSetting({\n settingValue: undefined,\n settingName: 'clientEmail',\n environmentVariableName: 'GOOGLE_CLIENT_EMAIL',\n description: 'Google client email',\n }),\n privateKey: loadSetting({\n settingValue: undefined,\n settingName: 'privateKey',\n environmentVariableName: 'GOOGLE_PRIVATE_KEY',\n description: 'Google private key',\n }),\n privateKeyId: loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'GOOGLE_PRIVATE_KEY_ID',\n }),\n };\n } catch (error: any) {\n throw new Error(`Failed to load Google credentials: ${error.message}`);\n }\n};\n\n// Convert a string to base64url\nconst base64url = (str: string) => {\n return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n};\nconst importPrivateKey = async (pemKey: string) => {\n const pemHeader = '-----BEGIN PRIVATE KEY-----';\n const pemFooter = '-----END PRIVATE KEY-----';\n\n // Remove header, footer, and any whitespace/newlines\n const pemContents = pemKey\n .replace(pemHeader, '')\n .replace(pemFooter, '')\n .replace(/\\s/g, '');\n\n // Decode base64 to binary\n const binaryString = atob(pemContents);\n\n // Convert binary string to Uint8Array\n const binaryData = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n binaryData[i] = binaryString.charCodeAt(i);\n }\n\n return await crypto.subtle.importKey(\n 'pkcs8',\n binaryData,\n { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },\n true,\n ['sign'],\n );\n};\n\nconst buildJwt = async (credentials: GoogleCredentials) => {\n const now = Math.floor(Date.now() / 1000);\n\n // Only include kid in header if privateKeyId is provided\n const header: { alg: string; typ: string; kid?: string } = {\n alg: 'RS256',\n typ: 'JWT',\n };\n\n if (credentials.privateKeyId) {\n header.kid = credentials.privateKeyId;\n }\n\n const payload = {\n iss: credentials.clientEmail,\n scope: 'https://www.googleapis.com/auth/cloud-platform',\n aud: 'https://oauth2.googleapis.com/token',\n exp: now + 3600,\n iat: now,\n };\n\n const privateKey = await importPrivateKey(credentials.privateKey);\n\n const signingInput = `${base64url(JSON.stringify(header))}.${base64url(\n JSON.stringify(payload),\n )}`;\n const encoder = new TextEncoder();\n const data = encoder.encode(signingInput);\n\n const signature = await crypto.subtle.sign(\n 'RSASSA-PKCS1-v1_5',\n privateKey,\n data,\n );\n\n const signatureBase64 = base64url(\n String.fromCharCode(...new Uint8Array(signature)),\n );\n\n return `${base64url(JSON.stringify(header))}.${base64url(\n JSON.stringify(payload),\n )}.${signatureBase64}`;\n};\n\n/**\n * Generate an authentication token for Google Vertex AI in a manner compatible\n * with the Edge runtime.\n */\nexport async function generateAuthToken(credentials?: GoogleCredentials) {\n try {\n const creds = credentials || (await loadCredentials());\n const jwt = await buildJwt(creds);\n\n const response = await fetch('https://oauth2.googleapis.com/token', {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n assertion: jwt,\n }),\n });\n\n if (!response.ok) {\n throw new Error(`Token request failed: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.access_token;\n } catch (error) {\n throw error;\n }\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","import_provider_utils","createVertex"]}
@@ -2,6 +2,7 @@
2
2
  import { resolve as resolve3 } from "@ai-sdk/provider-utils";
3
3
 
4
4
  // src/google-vertex-provider.ts
5
+ import { GoogleGenerativeAILanguageModel } from "@ai-sdk/google/internal";
5
6
  import {
6
7
  generateId,
7
8
  loadSetting,
@@ -16,9 +17,10 @@ import {
16
17
  combineHeaders,
17
18
  createJsonResponseHandler,
18
19
  postJsonToApi,
19
- resolve
20
+ resolve,
21
+ parseProviderOptions
20
22
  } from "@ai-sdk/provider-utils";
21
- import { z as z2 } from "zod";
23
+ import { z as z3 } from "zod";
22
24
 
23
25
  // src/google-vertex-error.ts
24
26
  import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
@@ -37,28 +39,40 @@ var googleVertexFailedResponseHandler = createJsonErrorResponseHandler(
37
39
  }
38
40
  );
39
41
 
42
+ // src/google-vertex-embedding-options.ts
43
+ import { z as z2 } from "zod";
44
+ var googleVertexEmbeddingProviderOptions = z2.object({
45
+ /**
46
+ * Optional. Optional reduced dimension for the output embedding.
47
+ * If set, excessive values in the output embedding are truncated from the end.
48
+ */
49
+ outputDimensionality: z2.number().optional()
50
+ });
51
+
40
52
  // src/google-vertex-embedding-model.ts
41
53
  var GoogleVertexEmbeddingModel = class {
42
- constructor(modelId, settings, config) {
43
- this.specificationVersion = "v1";
54
+ constructor(modelId, config) {
55
+ this.specificationVersion = "v2";
56
+ this.maxEmbeddingsPerCall = 2048;
57
+ this.supportsParallelCalls = true;
44
58
  this.modelId = modelId;
45
- this.settings = settings;
46
59
  this.config = config;
47
60
  }
48
61
  get provider() {
49
62
  return this.config.provider;
50
63
  }
51
- get maxEmbeddingsPerCall() {
52
- return 2048;
53
- }
54
- get supportsParallelCalls() {
55
- return true;
56
- }
57
64
  async doEmbed({
58
65
  values,
59
66
  headers,
60
- abortSignal
67
+ abortSignal,
68
+ providerOptions
61
69
  }) {
70
+ var _a;
71
+ const googleOptions = (_a = await parseProviderOptions({
72
+ provider: "google",
73
+ providerOptions,
74
+ schema: googleVertexEmbeddingProviderOptions
75
+ })) != null ? _a : {};
62
76
  if (values.length > this.maxEmbeddingsPerCall) {
63
77
  throw new TooManyEmbeddingValuesForCallError({
64
78
  provider: this.provider,
@@ -72,13 +86,17 @@ var GoogleVertexEmbeddingModel = class {
72
86
  headers
73
87
  );
74
88
  const url = `${this.config.baseURL}/models/${this.modelId}:predict`;
75
- const { responseHeaders, value: response } = await postJsonToApi({
89
+ const {
90
+ responseHeaders,
91
+ value: response,
92
+ rawValue
93
+ } = await postJsonToApi({
76
94
  url,
77
95
  headers: mergedHeaders,
78
96
  body: {
79
97
  instances: values.map((value) => ({ content: value })),
80
98
  parameters: {
81
- outputDimensionality: this.settings.outputDimensionality
99
+ outputDimensionality: googleOptions.outputDimensionality
82
100
  }
83
101
  },
84
102
  failedResponseHandler: googleVertexFailedResponseHandler,
@@ -98,49 +116,43 @@ var GoogleVertexEmbeddingModel = class {
98
116
  0
99
117
  )
100
118
  },
101
- rawResponse: { headers: responseHeaders }
119
+ response: { headers: responseHeaders, body: rawValue }
102
120
  };
103
121
  }
104
122
  };
105
- var googleVertexTextEmbeddingResponseSchema = z2.object({
106
- predictions: z2.array(
107
- z2.object({
108
- embeddings: z2.object({
109
- values: z2.array(z2.number()),
110
- statistics: z2.object({
111
- token_count: z2.number()
123
+ var googleVertexTextEmbeddingResponseSchema = z3.object({
124
+ predictions: z3.array(
125
+ z3.object({
126
+ embeddings: z3.object({
127
+ values: z3.array(z3.number()),
128
+ statistics: z3.object({
129
+ token_count: z3.number()
112
130
  })
113
131
  })
114
132
  })
115
133
  )
116
134
  });
117
135
 
118
- // src/google-vertex-provider.ts
119
- import { GoogleGenerativeAILanguageModel } from "@ai-sdk/google/internal";
120
-
121
136
  // src/google-vertex-image-model.ts
122
137
  import {
123
138
  combineHeaders as combineHeaders2,
124
139
  createJsonResponseHandler as createJsonResponseHandler2,
125
- parseProviderOptions,
140
+ parseProviderOptions as parseProviderOptions2,
126
141
  postJsonToApi as postJsonToApi2,
127
142
  resolve as resolve2
128
143
  } from "@ai-sdk/provider-utils";
129
- import { z as z3 } from "zod";
144
+ import { z as z4 } from "zod";
130
145
  var GoogleVertexImageModel = class {
131
- constructor(modelId, settings, config) {
146
+ constructor(modelId, config) {
132
147
  this.modelId = modelId;
133
- this.settings = settings;
134
148
  this.config = config;
135
- this.specificationVersion = "v1";
149
+ this.specificationVersion = "v2";
150
+ // https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api#parameter_list
151
+ this.maxImagesPerCall = 4;
136
152
  }
137
153
  get provider() {
138
154
  return this.config.provider;
139
155
  }
140
- get maxImagesPerCall() {
141
- var _a;
142
- return (_a = this.settings.maxImagesPerCall) != null ? _a : 4;
143
- }
144
156
  async doGenerate({
145
157
  prompt,
146
158
  n,
@@ -151,7 +163,7 @@ var GoogleVertexImageModel = class {
151
163
  headers,
152
164
  abortSignal
153
165
  }) {
154
- var _a, _b, _c, _d, _e;
166
+ var _a, _b, _c, _d, _e, _f, _g;
155
167
  const warnings = [];
156
168
  if (size != null) {
157
169
  warnings.push({
@@ -160,7 +172,7 @@ var GoogleVertexImageModel = class {
160
172
  details: "This model does not support the `size` option. Use `aspectRatio` instead."
161
173
  });
162
174
  }
163
- const vertexImageOptions = parseProviderOptions({
175
+ const vertexImageOptions = await parseProviderOptions2({
164
176
  provider: "vertex",
165
177
  providerOptions,
166
178
  schema: vertexImageProviderOptionsSchema
@@ -188,38 +200,52 @@ var GoogleVertexImageModel = class {
188
200
  });
189
201
  return {
190
202
  images: (_e = (_d = response.predictions) == null ? void 0 : _d.map(
191
- (p) => p.bytesBase64Encoded
203
+ ({ bytesBase64Encoded }) => bytesBase64Encoded
192
204
  )) != null ? _e : [],
193
205
  warnings,
194
206
  response: {
195
207
  timestamp: currentDate,
196
208
  modelId: this.modelId,
197
209
  headers: responseHeaders
210
+ },
211
+ providerMetadata: {
212
+ vertex: {
213
+ images: (_g = (_f = response.predictions) == null ? void 0 : _f.map((prediction) => {
214
+ const {
215
+ // normalize revised prompt property
216
+ prompt: revisedPrompt
217
+ } = prediction;
218
+ return {
219
+ revisedPrompt
220
+ };
221
+ })) != null ? _g : []
222
+ }
198
223
  }
199
224
  };
200
225
  }
201
226
  };
202
- var vertexImageResponseSchema = z3.object({
203
- predictions: z3.array(z3.object({ bytesBase64Encoded: z3.string() })).nullish()
227
+ var vertexImageResponseSchema = z4.object({
228
+ predictions: z4.array(
229
+ z4.object({
230
+ bytesBase64Encoded: z4.string(),
231
+ mimeType: z4.string(),
232
+ prompt: z4.string()
233
+ })
234
+ ).nullish()
204
235
  });
205
- var vertexImageProviderOptionsSchema = z3.object({
206
- negativePrompt: z3.string().nullish(),
207
- personGeneration: z3.enum(["dont_allow", "allow_adult", "allow_all"]).nullish(),
208
- safetySetting: z3.enum([
236
+ var vertexImageProviderOptionsSchema = z4.object({
237
+ negativePrompt: z4.string().nullish(),
238
+ personGeneration: z4.enum(["dont_allow", "allow_adult", "allow_all"]).nullish(),
239
+ safetySetting: z4.enum([
209
240
  "block_low_and_above",
210
241
  "block_medium_and_above",
211
242
  "block_only_high",
212
243
  "block_none"
213
244
  ]).nullish(),
214
- addWatermark: z3.boolean().nullish(),
215
- storageUri: z3.string().nullish()
245
+ addWatermark: z4.boolean().nullish(),
246
+ storageUri: z4.string().nullish()
216
247
  });
217
248
 
218
- // src/google-vertex-supported-file-url.ts
219
- function isSupportedFileUrl(url) {
220
- return ["http:", "https:", "gs:"].includes(url.protocol);
221
- }
222
-
223
249
  // src/google-vertex-provider.ts
224
250
  function createVertex(options = {}) {
225
251
  const loadVertexProject = () => loadSetting({
@@ -249,27 +275,30 @@ function createVertex(options = {}) {
249
275
  baseURL: loadBaseURL()
250
276
  };
251
277
  };
252
- const createChatModel = (modelId, settings = {}) => {
278
+ const createChatModel = (modelId) => {
253
279
  var _a;
254
- return new GoogleGenerativeAILanguageModel(modelId, settings, {
280
+ return new GoogleGenerativeAILanguageModel(modelId, {
255
281
  ...createConfig("chat"),
256
282
  generateId: (_a = options.generateId) != null ? _a : generateId,
257
- isSupportedUrl: isSupportedFileUrl
283
+ supportedUrls: () => ({
284
+ "*": [
285
+ // HTTP URLs:
286
+ /^https?:\/\/.*$/,
287
+ // Google Cloud Storage URLs:
288
+ /^gs:\/\/.*$/
289
+ ]
290
+ })
258
291
  });
259
292
  };
260
- const createEmbeddingModel = (modelId, settings = {}) => new GoogleVertexEmbeddingModel(
261
- modelId,
262
- settings,
263
- createConfig("embedding")
264
- );
265
- const createImageModel = (modelId, settings = {}) => new GoogleVertexImageModel(modelId, settings, createConfig("image"));
266
- const provider = function(modelId, settings) {
293
+ const createEmbeddingModel = (modelId) => new GoogleVertexEmbeddingModel(modelId, createConfig("embedding"));
294
+ const createImageModel = (modelId) => new GoogleVertexImageModel(modelId, createConfig("image"));
295
+ const provider = function(modelId) {
267
296
  if (new.target) {
268
297
  throw new Error(
269
298
  "The Google Vertex AI model function cannot be called with the new keyword."
270
299
  );
271
300
  }
272
- return createChatModel(modelId, settings);
301
+ return createChatModel(modelId);
273
302
  };
274
303
  provider.languageModel = createChatModel;
275
304
  provider.textEmbeddingModel = createEmbeddingModel;