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