@ai-sdk/google-vertex 2.2.4 → 2.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/anthropic/dist/index.d.mts +1 -1
- package/anthropic/dist/index.d.ts +1 -1
- package/anthropic/dist/index.js +6 -3
- package/anthropic/dist/index.js.map +1 -1
- package/anthropic/dist/index.mjs +6 -3
- package/anthropic/dist/index.mjs.map +1 -1
- package/anthropic/edge/dist/index.js +6 -3
- package/anthropic/edge/dist/index.js.map +1 -1
- package/anthropic/edge/dist/index.mjs +6 -3
- package/anthropic/edge/dist/index.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -3
- package/dist/index.mjs.map +1 -1
- package/edge/dist/index.d.mts +18 -18
- package/edge/dist/index.d.ts +18 -18
- package/edge/dist/index.js +123 -120
- package/edge/dist/index.js.map +1 -1
- package/edge/dist/index.mjs +110 -107
- package/edge/dist/index.mjs.map +1 -1
- package/package.json +6 -5
package/dist/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../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","../src/google-vertex-provider-node.ts"],"sourcesContent":["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","import { generateAuthToken } from './google-vertex-auth-google-auth-library';\nimport {\n createVertex as createVertexOriginal,\n GoogleVertexProvider,\n GoogleVertexProviderSettings as GoogleVertexProviderSettingsOriginal,\n} from './google-vertex-provider';\nimport { GoogleAuthOptions } from 'google-auth-library';\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:\n options.headers ??\n (async () => ({\n Authorization: `Bearer ${await generateAuthToken(\n options.googleAuthOptions,\n )}`,\n })),\n });\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n"],"mappings":"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","names":["z","z","combineHeaders","createJsonResponseHandler","postJsonToApi","resolve","z","postJsonToApi","combineHeaders","resolve","createJsonResponseHandler","z","createVertex"]}
|
1
|
+
{"version":3,"sources":["../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":["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":["resolve","z","z","combineHeaders","createJsonResponseHandler","postJsonToApi","resolve","z","postJsonToApi","combineHeaders","resolve","createJsonResponseHandler","z","createVertex","resolve"]}
|
package/edge/dist/index.d.mts
CHANGED
@@ -2,24 +2,6 @@ import { ProviderV1, LanguageModelV1, ImageModelV1 } from '@ai-sdk/provider';
|
|
2
2
|
import { Resolvable, FetchFunction } from '@ai-sdk/provider-utils';
|
3
3
|
import { InternalGoogleGenerativeAISettings } from '@ai-sdk/google/internal';
|
4
4
|
|
5
|
-
interface GoogleCredentials {
|
6
|
-
/**
|
7
|
-
* The client email for the Google Cloud service account. Defaults to the
|
8
|
-
* value of the `GOOGLE_CLIENT_EMAIL` environment variable.
|
9
|
-
*/
|
10
|
-
clientEmail: string;
|
11
|
-
/**
|
12
|
-
* The private key for the Google Cloud service account. Defaults to the
|
13
|
-
* value of the `GOOGLE_PRIVATE_KEY` environment variable.
|
14
|
-
*/
|
15
|
-
privateKey: string;
|
16
|
-
/**
|
17
|
-
* Optional. The private key ID for the Google Cloud service account. Defaults
|
18
|
-
* to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.
|
19
|
-
*/
|
20
|
-
privateKeyId?: string;
|
21
|
-
}
|
22
|
-
|
23
5
|
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 & {});
|
24
6
|
interface GoogleVertexSettings extends InternalGoogleGenerativeAISettings {
|
25
7
|
}
|
@@ -76,6 +58,24 @@ interface GoogleVertexProviderSettings$1 {
|
|
76
58
|
baseURL?: string;
|
77
59
|
}
|
78
60
|
|
61
|
+
interface GoogleCredentials {
|
62
|
+
/**
|
63
|
+
* The client email for the Google Cloud service account. Defaults to the
|
64
|
+
* value of the `GOOGLE_CLIENT_EMAIL` environment variable.
|
65
|
+
*/
|
66
|
+
clientEmail: string;
|
67
|
+
/**
|
68
|
+
* The private key for the Google Cloud service account. Defaults to the
|
69
|
+
* value of the `GOOGLE_PRIVATE_KEY` environment variable.
|
70
|
+
*/
|
71
|
+
privateKey: string;
|
72
|
+
/**
|
73
|
+
* Optional. The private key ID for the Google Cloud service account. Defaults
|
74
|
+
* to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.
|
75
|
+
*/
|
76
|
+
privateKeyId?: string;
|
77
|
+
}
|
78
|
+
|
79
79
|
interface GoogleVertexProviderSettings extends GoogleVertexProviderSettings$1 {
|
80
80
|
/**
|
81
81
|
* Optional. The Google credentials for the Google Cloud service account. If
|
package/edge/dist/index.d.ts
CHANGED
@@ -2,24 +2,6 @@ import { ProviderV1, LanguageModelV1, ImageModelV1 } from '@ai-sdk/provider';
|
|
2
2
|
import { Resolvable, FetchFunction } from '@ai-sdk/provider-utils';
|
3
3
|
import { InternalGoogleGenerativeAISettings } from '@ai-sdk/google/internal';
|
4
4
|
|
5
|
-
interface GoogleCredentials {
|
6
|
-
/**
|
7
|
-
* The client email for the Google Cloud service account. Defaults to the
|
8
|
-
* value of the `GOOGLE_CLIENT_EMAIL` environment variable.
|
9
|
-
*/
|
10
|
-
clientEmail: string;
|
11
|
-
/**
|
12
|
-
* The private key for the Google Cloud service account. Defaults to the
|
13
|
-
* value of the `GOOGLE_PRIVATE_KEY` environment variable.
|
14
|
-
*/
|
15
|
-
privateKey: string;
|
16
|
-
/**
|
17
|
-
* Optional. The private key ID for the Google Cloud service account. Defaults
|
18
|
-
* to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.
|
19
|
-
*/
|
20
|
-
privateKeyId?: string;
|
21
|
-
}
|
22
|
-
|
23
5
|
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 & {});
|
24
6
|
interface GoogleVertexSettings extends InternalGoogleGenerativeAISettings {
|
25
7
|
}
|
@@ -76,6 +58,24 @@ interface GoogleVertexProviderSettings$1 {
|
|
76
58
|
baseURL?: string;
|
77
59
|
}
|
78
60
|
|
61
|
+
interface GoogleCredentials {
|
62
|
+
/**
|
63
|
+
* The client email for the Google Cloud service account. Defaults to the
|
64
|
+
* value of the `GOOGLE_CLIENT_EMAIL` environment variable.
|
65
|
+
*/
|
66
|
+
clientEmail: string;
|
67
|
+
/**
|
68
|
+
* The private key for the Google Cloud service account. Defaults to the
|
69
|
+
* value of the `GOOGLE_PRIVATE_KEY` environment variable.
|
70
|
+
*/
|
71
|
+
privateKey: string;
|
72
|
+
/**
|
73
|
+
* Optional. The private key ID for the Google Cloud service account. Defaults
|
74
|
+
* to the value of the `GOOGLE_PRIVATE_KEY_ID` environment variable.
|
75
|
+
*/
|
76
|
+
privateKeyId?: string;
|
77
|
+
}
|
78
|
+
|
79
79
|
interface GoogleVertexProviderSettings extends GoogleVertexProviderSettings$1 {
|
80
80
|
/**
|
81
81
|
* Optional. The Google credentials for the Google Cloud service account. If
|
package/edge/dist/index.js
CHANGED
@@ -25,118 +25,19 @@ __export(edge_exports, {
|
|
25
25
|
});
|
26
26
|
module.exports = __toCommonJS(edge_exports);
|
27
27
|
|
28
|
-
// src/edge/google-vertex-
|
29
|
-
var
|
30
|
-
var loadCredentials = async () => {
|
31
|
-
try {
|
32
|
-
return {
|
33
|
-
clientEmail: (0, import_provider_utils.loadSetting)({
|
34
|
-
settingValue: void 0,
|
35
|
-
settingName: "clientEmail",
|
36
|
-
environmentVariableName: "GOOGLE_CLIENT_EMAIL",
|
37
|
-
description: "Google client email"
|
38
|
-
}),
|
39
|
-
privateKey: (0, import_provider_utils.loadSetting)({
|
40
|
-
settingValue: void 0,
|
41
|
-
settingName: "privateKey",
|
42
|
-
environmentVariableName: "GOOGLE_PRIVATE_KEY",
|
43
|
-
description: "Google private key"
|
44
|
-
}),
|
45
|
-
privateKeyId: (0, import_provider_utils.loadOptionalSetting)({
|
46
|
-
settingValue: void 0,
|
47
|
-
environmentVariableName: "GOOGLE_PRIVATE_KEY_ID"
|
48
|
-
})
|
49
|
-
};
|
50
|
-
} catch (error) {
|
51
|
-
throw new Error(`Failed to load Google credentials: ${error.message}`);
|
52
|
-
}
|
53
|
-
};
|
54
|
-
var base64url = (str) => {
|
55
|
-
return btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
56
|
-
};
|
57
|
-
var importPrivateKey = async (pemKey) => {
|
58
|
-
const pemHeader = "-----BEGIN PRIVATE KEY-----";
|
59
|
-
const pemFooter = "-----END PRIVATE KEY-----";
|
60
|
-
const pemContents = pemKey.replace(pemHeader, "").replace(pemFooter, "").replace(/\s/g, "");
|
61
|
-
const binaryString = atob(pemContents);
|
62
|
-
const binaryData = new Uint8Array(binaryString.length);
|
63
|
-
for (let i = 0; i < binaryString.length; i++) {
|
64
|
-
binaryData[i] = binaryString.charCodeAt(i);
|
65
|
-
}
|
66
|
-
return await crypto.subtle.importKey(
|
67
|
-
"pkcs8",
|
68
|
-
binaryData,
|
69
|
-
{ name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" },
|
70
|
-
true,
|
71
|
-
["sign"]
|
72
|
-
);
|
73
|
-
};
|
74
|
-
var buildJwt = async (credentials) => {
|
75
|
-
const now = Math.floor(Date.now() / 1e3);
|
76
|
-
const header = {
|
77
|
-
alg: "RS256",
|
78
|
-
typ: "JWT"
|
79
|
-
};
|
80
|
-
if (credentials.privateKeyId) {
|
81
|
-
header.kid = credentials.privateKeyId;
|
82
|
-
}
|
83
|
-
const payload = {
|
84
|
-
iss: credentials.clientEmail,
|
85
|
-
scope: "https://www.googleapis.com/auth/cloud-platform",
|
86
|
-
aud: "https://oauth2.googleapis.com/token",
|
87
|
-
exp: now + 3600,
|
88
|
-
iat: now
|
89
|
-
};
|
90
|
-
const privateKey = await importPrivateKey(credentials.privateKey);
|
91
|
-
const signingInput = `${base64url(JSON.stringify(header))}.${base64url(
|
92
|
-
JSON.stringify(payload)
|
93
|
-
)}`;
|
94
|
-
const encoder = new TextEncoder();
|
95
|
-
const data = encoder.encode(signingInput);
|
96
|
-
const signature = await crypto.subtle.sign(
|
97
|
-
"RSASSA-PKCS1-v1_5",
|
98
|
-
privateKey,
|
99
|
-
data
|
100
|
-
);
|
101
|
-
const signatureBase64 = base64url(
|
102
|
-
String.fromCharCode(...new Uint8Array(signature))
|
103
|
-
);
|
104
|
-
return `${base64url(JSON.stringify(header))}.${base64url(
|
105
|
-
JSON.stringify(payload)
|
106
|
-
)}.${signatureBase64}`;
|
107
|
-
};
|
108
|
-
async function generateAuthToken(credentials) {
|
109
|
-
try {
|
110
|
-
const creds = credentials || await loadCredentials();
|
111
|
-
const jwt = await buildJwt(creds);
|
112
|
-
const response = await fetch("https://oauth2.googleapis.com/token", {
|
113
|
-
method: "POST",
|
114
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
115
|
-
body: new URLSearchParams({
|
116
|
-
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
|
117
|
-
assertion: jwt
|
118
|
-
})
|
119
|
-
});
|
120
|
-
if (!response.ok) {
|
121
|
-
throw new Error(`Token request failed: ${response.statusText}`);
|
122
|
-
}
|
123
|
-
const data = await response.json();
|
124
|
-
return data.access_token;
|
125
|
-
} catch (error) {
|
126
|
-
throw error;
|
127
|
-
}
|
128
|
-
}
|
28
|
+
// src/edge/google-vertex-provider-edge.ts
|
29
|
+
var import_provider_utils6 = require("@ai-sdk/provider-utils");
|
129
30
|
|
130
31
|
// src/google-vertex-provider.ts
|
131
|
-
var
|
32
|
+
var import_provider_utils4 = require("@ai-sdk/provider-utils");
|
132
33
|
|
133
34
|
// src/google-vertex-embedding-model.ts
|
134
35
|
var import_provider = require("@ai-sdk/provider");
|
135
|
-
var
|
36
|
+
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
136
37
|
var import_zod2 = require("zod");
|
137
38
|
|
138
39
|
// src/google-vertex-error.ts
|
139
|
-
var
|
40
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
140
41
|
var import_zod = require("zod");
|
141
42
|
var googleVertexErrorDataSchema = import_zod.z.object({
|
142
43
|
error: import_zod.z.object({
|
@@ -145,7 +46,7 @@ var googleVertexErrorDataSchema = import_zod.z.object({
|
|
145
46
|
status: import_zod.z.string()
|
146
47
|
})
|
147
48
|
});
|
148
|
-
var googleVertexFailedResponseHandler = (0,
|
49
|
+
var googleVertexFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)(
|
149
50
|
{
|
150
51
|
errorSchema: googleVertexErrorDataSchema,
|
151
52
|
errorToMessage: (data) => data.error.message
|
@@ -182,12 +83,12 @@ var GoogleVertexEmbeddingModel = class {
|
|
182
83
|
values
|
183
84
|
});
|
184
85
|
}
|
185
|
-
const mergedHeaders = (0,
|
186
|
-
await (0,
|
86
|
+
const mergedHeaders = (0, import_provider_utils2.combineHeaders)(
|
87
|
+
await (0, import_provider_utils2.resolve)(this.config.headers),
|
187
88
|
headers
|
188
89
|
);
|
189
90
|
const url = `${this.config.baseURL}/models/${this.modelId}:predict`;
|
190
|
-
const { responseHeaders, value: response } = await (0,
|
91
|
+
const { responseHeaders, value: response } = await (0, import_provider_utils2.postJsonToApi)({
|
191
92
|
url,
|
192
93
|
headers: mergedHeaders,
|
193
94
|
body: {
|
@@ -197,7 +98,7 @@ var GoogleVertexEmbeddingModel = class {
|
|
197
98
|
}
|
198
99
|
},
|
199
100
|
failedResponseHandler: googleVertexFailedResponseHandler,
|
200
|
-
successfulResponseHandler: (0,
|
101
|
+
successfulResponseHandler: (0, import_provider_utils2.createJsonResponseHandler)(
|
201
102
|
googleVertexTextEmbeddingResponseSchema
|
202
103
|
),
|
203
104
|
abortSignal,
|
@@ -234,7 +135,7 @@ var googleVertexTextEmbeddingResponseSchema = import_zod2.z.object({
|
|
234
135
|
var import_internal = require("@ai-sdk/google/internal");
|
235
136
|
|
236
137
|
// src/google-vertex-image-model.ts
|
237
|
-
var
|
138
|
+
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
238
139
|
var import_zod3 = require("zod");
|
239
140
|
var GoogleVertexImageModel = class {
|
240
141
|
constructor(modelId, settings, config) {
|
@@ -279,12 +180,12 @@ var GoogleVertexImageModel = class {
|
|
279
180
|
}
|
280
181
|
};
|
281
182
|
const currentDate = (_d = (_c = (_b = this.config._internal) == null ? void 0 : _b.currentDate) == null ? void 0 : _c.call(_b)) != null ? _d : /* @__PURE__ */ new Date();
|
282
|
-
const { value: response, responseHeaders } = await (0,
|
183
|
+
const { value: response, responseHeaders } = await (0, import_provider_utils3.postJsonToApi)({
|
283
184
|
url: `${this.config.baseURL}/models/${this.modelId}:predict`,
|
284
|
-
headers: (0,
|
185
|
+
headers: (0, import_provider_utils3.combineHeaders)(await (0, import_provider_utils3.resolve)(this.config.headers), headers),
|
285
186
|
body,
|
286
187
|
failedResponseHandler: googleVertexFailedResponseHandler,
|
287
|
-
successfulResponseHandler: (0,
|
188
|
+
successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(
|
288
189
|
vertexImageResponseSchema
|
289
190
|
),
|
290
191
|
abortSignal,
|
@@ -314,13 +215,13 @@ function isSupportedFileUrl(url) {
|
|
314
215
|
|
315
216
|
// src/google-vertex-provider.ts
|
316
217
|
function createVertex(options = {}) {
|
317
|
-
const loadVertexProject = () => (0,
|
218
|
+
const loadVertexProject = () => (0, import_provider_utils4.loadSetting)({
|
318
219
|
settingValue: options.project,
|
319
220
|
settingName: "project",
|
320
221
|
environmentVariableName: "GOOGLE_VERTEX_PROJECT",
|
321
222
|
description: "Google Vertex project"
|
322
223
|
});
|
323
|
-
const loadVertexLocation = () => (0,
|
224
|
+
const loadVertexLocation = () => (0, import_provider_utils4.loadSetting)({
|
324
225
|
settingValue: options.location,
|
325
226
|
settingName: "location",
|
326
227
|
environmentVariableName: "GOOGLE_VERTEX_LOCATION",
|
@@ -330,7 +231,7 @@ function createVertex(options = {}) {
|
|
330
231
|
var _a;
|
331
232
|
const region = loadVertexLocation();
|
332
233
|
const project = loadVertexProject();
|
333
|
-
return (_a = (0,
|
234
|
+
return (_a = (0, import_provider_utils4.withoutTrailingSlash)(options.baseURL)) != null ? _a : `https://${region}-aiplatform.googleapis.com/v1/projects/${project}/locations/${region}/publishers/google`;
|
334
235
|
};
|
335
236
|
const createConfig = (name) => {
|
336
237
|
var _a;
|
@@ -345,7 +246,7 @@ function createVertex(options = {}) {
|
|
345
246
|
var _a;
|
346
247
|
return new import_internal.GoogleGenerativeAILanguageModel(modelId, settings, {
|
347
248
|
...createConfig("chat"),
|
348
|
-
generateId: (_a = options.generateId) != null ? _a :
|
249
|
+
generateId: (_a = options.generateId) != null ? _a : import_provider_utils4.generateId,
|
349
250
|
isSupportedUrl: isSupportedFileUrl
|
350
251
|
});
|
351
252
|
};
|
@@ -370,15 +271,117 @@ function createVertex(options = {}) {
|
|
370
271
|
return provider;
|
371
272
|
}
|
372
273
|
|
274
|
+
// src/edge/google-vertex-auth-edge.ts
|
275
|
+
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
276
|
+
var loadCredentials = async () => {
|
277
|
+
try {
|
278
|
+
return {
|
279
|
+
clientEmail: (0, import_provider_utils5.loadSetting)({
|
280
|
+
settingValue: void 0,
|
281
|
+
settingName: "clientEmail",
|
282
|
+
environmentVariableName: "GOOGLE_CLIENT_EMAIL",
|
283
|
+
description: "Google client email"
|
284
|
+
}),
|
285
|
+
privateKey: (0, import_provider_utils5.loadSetting)({
|
286
|
+
settingValue: void 0,
|
287
|
+
settingName: "privateKey",
|
288
|
+
environmentVariableName: "GOOGLE_PRIVATE_KEY",
|
289
|
+
description: "Google private key"
|
290
|
+
}),
|
291
|
+
privateKeyId: (0, import_provider_utils5.loadOptionalSetting)({
|
292
|
+
settingValue: void 0,
|
293
|
+
environmentVariableName: "GOOGLE_PRIVATE_KEY_ID"
|
294
|
+
})
|
295
|
+
};
|
296
|
+
} catch (error) {
|
297
|
+
throw new Error(`Failed to load Google credentials: ${error.message}`);
|
298
|
+
}
|
299
|
+
};
|
300
|
+
var base64url = (str) => {
|
301
|
+
return btoa(str).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
302
|
+
};
|
303
|
+
var importPrivateKey = async (pemKey) => {
|
304
|
+
const pemHeader = "-----BEGIN PRIVATE KEY-----";
|
305
|
+
const pemFooter = "-----END PRIVATE KEY-----";
|
306
|
+
const pemContents = pemKey.replace(pemHeader, "").replace(pemFooter, "").replace(/\s/g, "");
|
307
|
+
const binaryString = atob(pemContents);
|
308
|
+
const binaryData = new Uint8Array(binaryString.length);
|
309
|
+
for (let i = 0; i < binaryString.length; i++) {
|
310
|
+
binaryData[i] = binaryString.charCodeAt(i);
|
311
|
+
}
|
312
|
+
return await crypto.subtle.importKey(
|
313
|
+
"pkcs8",
|
314
|
+
binaryData,
|
315
|
+
{ name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" },
|
316
|
+
true,
|
317
|
+
["sign"]
|
318
|
+
);
|
319
|
+
};
|
320
|
+
var buildJwt = async (credentials) => {
|
321
|
+
const now = Math.floor(Date.now() / 1e3);
|
322
|
+
const header = {
|
323
|
+
alg: "RS256",
|
324
|
+
typ: "JWT"
|
325
|
+
};
|
326
|
+
if (credentials.privateKeyId) {
|
327
|
+
header.kid = credentials.privateKeyId;
|
328
|
+
}
|
329
|
+
const payload = {
|
330
|
+
iss: credentials.clientEmail,
|
331
|
+
scope: "https://www.googleapis.com/auth/cloud-platform",
|
332
|
+
aud: "https://oauth2.googleapis.com/token",
|
333
|
+
exp: now + 3600,
|
334
|
+
iat: now
|
335
|
+
};
|
336
|
+
const privateKey = await importPrivateKey(credentials.privateKey);
|
337
|
+
const signingInput = `${base64url(JSON.stringify(header))}.${base64url(
|
338
|
+
JSON.stringify(payload)
|
339
|
+
)}`;
|
340
|
+
const encoder = new TextEncoder();
|
341
|
+
const data = encoder.encode(signingInput);
|
342
|
+
const signature = await crypto.subtle.sign(
|
343
|
+
"RSASSA-PKCS1-v1_5",
|
344
|
+
privateKey,
|
345
|
+
data
|
346
|
+
);
|
347
|
+
const signatureBase64 = base64url(
|
348
|
+
String.fromCharCode(...new Uint8Array(signature))
|
349
|
+
);
|
350
|
+
return `${base64url(JSON.stringify(header))}.${base64url(
|
351
|
+
JSON.stringify(payload)
|
352
|
+
)}.${signatureBase64}`;
|
353
|
+
};
|
354
|
+
async function generateAuthToken(credentials) {
|
355
|
+
try {
|
356
|
+
const creds = credentials || await loadCredentials();
|
357
|
+
const jwt = await buildJwt(creds);
|
358
|
+
const response = await fetch("https://oauth2.googleapis.com/token", {
|
359
|
+
method: "POST",
|
360
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
361
|
+
body: new URLSearchParams({
|
362
|
+
grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
|
363
|
+
assertion: jwt
|
364
|
+
})
|
365
|
+
});
|
366
|
+
if (!response.ok) {
|
367
|
+
throw new Error(`Token request failed: ${response.statusText}`);
|
368
|
+
}
|
369
|
+
const data = await response.json();
|
370
|
+
return data.access_token;
|
371
|
+
} catch (error) {
|
372
|
+
throw error;
|
373
|
+
}
|
374
|
+
}
|
375
|
+
|
373
376
|
// src/edge/google-vertex-provider-edge.ts
|
374
377
|
function createVertex2(options = {}) {
|
375
|
-
var _a;
|
376
378
|
return createVertex({
|
377
379
|
...options,
|
378
|
-
headers:
|
380
|
+
headers: async () => ({
|
379
381
|
Authorization: `Bearer ${await generateAuthToken(
|
380
382
|
options.googleCredentials
|
381
|
-
)}
|
383
|
+
)}`,
|
384
|
+
...await (0, import_provider_utils6.resolve)(options.headers)
|
382
385
|
})
|
383
386
|
});
|
384
387
|
}
|