@ai-sdk/google-vertex 5.0.0-beta.10 → 5.0.0-beta.109
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 +937 -8
- package/README.md +65 -2
- package/dist/anthropic/edge/index.d.ts +18 -151
- package/dist/anthropic/edge/index.js +88 -70
- package/dist/anthropic/edge/index.js.map +1 -1
- package/dist/anthropic/index.d.ts +18 -151
- package/dist/anthropic/index.js +88 -81
- package/dist/anthropic/index.js.map +1 -1
- package/dist/edge/index.d.ts +58 -29
- package/dist/edge/index.js +581 -278
- package/dist/edge/index.js.map +1 -1
- package/dist/index.d.ts +70 -32
- package/dist/index.js +590 -296
- package/dist/index.js.map +1 -1
- package/dist/maas/edge/index.d.ts +76 -0
- package/dist/maas/edge/index.js +209 -0
- package/dist/maas/edge/index.js.map +1 -0
- package/dist/maas/index.d.ts +60 -0
- package/dist/maas/index.js +109 -0
- package/dist/maas/index.js.map +1 -0
- package/dist/xai/edge/index.d.ts +92 -0
- package/dist/xai/edge/index.js +259 -0
- package/dist/xai/edge/index.js.map +1 -0
- package/dist/xai/index.d.ts +76 -0
- package/dist/xai/index.js +159 -0
- package/dist/xai/index.js.map +1 -0
- package/docs/16-google-vertex.mdx +640 -102
- package/maas/edge.d.ts +1 -0
- package/maas/index.d.ts +1 -0
- package/package.json +49 -24
- package/src/anthropic/edge/google-vertex-anthropic-provider-edge.ts +17 -13
- package/src/anthropic/edge/index.ts +6 -2
- package/src/anthropic/{google-vertex-anthropic-messages-options.ts → google-vertex-anthropic-options.ts} +4 -1
- package/src/anthropic/google-vertex-anthropic-provider-node.ts +18 -13
- package/src/anthropic/google-vertex-anthropic-provider.ts +68 -19
- package/src/anthropic/index.ts +6 -2
- package/src/edge/google-vertex-provider-edge.ts +10 -12
- package/src/edge/index.ts +8 -1
- package/src/google-vertex-auth-google-auth-library.ts +13 -26
- package/src/google-vertex-config.ts +2 -2
- package/src/{google-vertex-embedding-options.ts → google-vertex-embedding-model-options.ts} +1 -0
- package/src/google-vertex-embedding-model.ts +35 -10
- package/src/google-vertex-image-model-options.ts +74 -0
- package/src/google-vertex-image-model.ts +106 -133
- package/src/google-vertex-options.ts +1 -1
- package/src/google-vertex-provider-base.ts +311 -0
- package/src/google-vertex-provider.ts +43 -233
- package/src/google-vertex-speech-model-options.ts +11 -0
- package/src/google-vertex-transcription-model-options.ts +46 -0
- package/src/google-vertex-transcription-model.ts +231 -0
- package/src/google-vertex-video-model-options.ts +49 -0
- package/src/google-vertex-video-model.ts +39 -75
- package/src/index.ts +20 -5
- package/src/maas/edge/google-vertex-maas-provider-edge.ts +64 -0
- package/src/maas/edge/index.ts +13 -0
- package/src/maas/google-vertex-maas-options.ts +15 -0
- package/src/maas/google-vertex-maas-provider-node.ts +65 -0
- package/src/maas/google-vertex-maas-provider.ts +122 -0
- package/src/maas/index.ts +13 -0
- package/src/xai/edge/google-vertex-xai-provider-edge.ts +61 -0
- package/src/xai/edge/index.ts +9 -0
- package/src/xai/google-vertex-xai-options.ts +7 -0
- package/src/xai/google-vertex-xai-provider-node.ts +62 -0
- package/src/xai/google-vertex-xai-provider.ts +212 -0
- package/src/xai/index.ts +9 -0
- package/xai/edge.d.ts +1 -0
- package/xai/index.d.ts +1 -0
- package/dist/anthropic/edge/index.d.mts +0 -231
- package/dist/anthropic/edge/index.mjs +0 -259
- package/dist/anthropic/edge/index.mjs.map +0 -1
- package/dist/anthropic/index.d.mts +0 -215
- package/dist/anthropic/index.mjs +0 -164
- package/dist/anthropic/index.mjs.map +0 -1
- package/dist/edge/index.d.mts +0 -160
- package/dist/edge/index.mjs +0 -1049
- package/dist/edge/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -219
- package/dist/index.mjs +0 -960
- package/dist/index.mjs.map +0 -1
- package/src/google-vertex-provider-node.ts +0 -49
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createOpenAICompatible,
|
|
3
|
+
type OpenAICompatibleProvider,
|
|
4
|
+
} from '@ai-sdk/openai-compatible';
|
|
5
|
+
import {
|
|
6
|
+
loadOptionalSetting,
|
|
7
|
+
loadSetting,
|
|
8
|
+
withoutTrailingSlash,
|
|
9
|
+
type FetchFunction,
|
|
10
|
+
type Resolvable,
|
|
11
|
+
} from '@ai-sdk/provider-utils';
|
|
12
|
+
import type { GoogleVertexMaasModelId } from './google-vertex-maas-options';
|
|
13
|
+
|
|
14
|
+
export interface GoogleVertexMaasProvider extends OpenAICompatibleProvider<
|
|
15
|
+
GoogleVertexMaasModelId,
|
|
16
|
+
string,
|
|
17
|
+
string,
|
|
18
|
+
string
|
|
19
|
+
> {}
|
|
20
|
+
|
|
21
|
+
export interface GoogleVertexMaasProviderSettings {
|
|
22
|
+
/**
|
|
23
|
+
* Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.
|
|
24
|
+
*/
|
|
25
|
+
project?: string;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.
|
|
29
|
+
* Use 'global' for the global endpoint.
|
|
30
|
+
*/
|
|
31
|
+
location?: string;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Base URL for the API calls. If not provided, will be constructed from project and location.
|
|
35
|
+
*/
|
|
36
|
+
baseURL?: string;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Headers to use for requests. Can be:
|
|
40
|
+
* - A headers object
|
|
41
|
+
* - A Promise that resolves to a headers object
|
|
42
|
+
* - A function that returns a headers object
|
|
43
|
+
* - A function that returns a Promise of a headers object
|
|
44
|
+
*/
|
|
45
|
+
headers?: Resolvable<Record<string, string | undefined>>;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Custom fetch implementation. You can use it as a middleware to intercept requests,
|
|
49
|
+
* or to provide a custom fetch implementation for e.g. testing.
|
|
50
|
+
*/
|
|
51
|
+
fetch?: FetchFunction;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Create a Google Vertex AI MaaS (Model as a Service) provider instance.
|
|
56
|
+
* Uses the OpenAI-compatible Chat Completions API for partner and open models.
|
|
57
|
+
*
|
|
58
|
+
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/maas/use-open-models
|
|
59
|
+
*/
|
|
60
|
+
export function createGoogleVertexMaas(
|
|
61
|
+
options: GoogleVertexMaasProviderSettings = {},
|
|
62
|
+
): GoogleVertexMaasProvider {
|
|
63
|
+
// Lazy-load settings to support loading from environment variables at runtime
|
|
64
|
+
const loadLocation = () =>
|
|
65
|
+
loadOptionalSetting({
|
|
66
|
+
settingValue: options.location,
|
|
67
|
+
environmentVariableName: 'GOOGLE_VERTEX_LOCATION',
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const loadProject = () =>
|
|
71
|
+
loadSetting({
|
|
72
|
+
settingValue: options.project,
|
|
73
|
+
settingName: 'project',
|
|
74
|
+
environmentVariableName: 'GOOGLE_VERTEX_PROJECT',
|
|
75
|
+
description: 'Google Vertex project',
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
const getHost = (location: string) => {
|
|
79
|
+
if (location === 'global') {
|
|
80
|
+
return 'aiplatform.googleapis.com';
|
|
81
|
+
} else if (location === 'eu' || location === 'us') {
|
|
82
|
+
return `aiplatform.${location}.rep.googleapis.com`;
|
|
83
|
+
} else {
|
|
84
|
+
return `${location}-aiplatform.googleapis.com`;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const constructBaseURL = () => {
|
|
89
|
+
const projectId = loadProject();
|
|
90
|
+
const location = loadLocation() ?? 'global';
|
|
91
|
+
|
|
92
|
+
return `https://${getHost(location)}/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const loadBaseURL = () =>
|
|
96
|
+
withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();
|
|
97
|
+
|
|
98
|
+
let cachedProvider: GoogleVertexMaasProvider | undefined;
|
|
99
|
+
const getProvider = () =>
|
|
100
|
+
(cachedProvider ??= createOpenAICompatible({
|
|
101
|
+
name: 'vertex.maas',
|
|
102
|
+
baseURL: loadBaseURL(),
|
|
103
|
+
fetch: options.fetch,
|
|
104
|
+
}));
|
|
105
|
+
|
|
106
|
+
const provider = (modelId: GoogleVertexMaasModelId) => getProvider()(modelId);
|
|
107
|
+
|
|
108
|
+
provider.specificationVersion = 'v4' as const;
|
|
109
|
+
provider.languageModel = (modelId: GoogleVertexMaasModelId) =>
|
|
110
|
+
getProvider().languageModel(modelId);
|
|
111
|
+
provider.chatModel = (modelId: GoogleVertexMaasModelId) =>
|
|
112
|
+
getProvider().chatModel(modelId);
|
|
113
|
+
provider.completionModel = (modelId: string) =>
|
|
114
|
+
getProvider().completionModel(modelId);
|
|
115
|
+
provider.embeddingModel = (modelId: string) =>
|
|
116
|
+
getProvider().embeddingModel(modelId);
|
|
117
|
+
provider.textEmbeddingModel = (modelId: string) =>
|
|
118
|
+
getProvider().textEmbeddingModel(modelId);
|
|
119
|
+
provider.imageModel = (modelId: string) => getProvider().imageModel(modelId);
|
|
120
|
+
|
|
121
|
+
return provider as GoogleVertexMaasProvider;
|
|
122
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export {
|
|
2
|
+
createGoogleVertexMaas,
|
|
3
|
+
/** @deprecated Use `createGoogleVertexMaas` instead. */
|
|
4
|
+
createGoogleVertexMaas as createVertexMaas,
|
|
5
|
+
googleVertexMaas,
|
|
6
|
+
/** @deprecated Use `googleVertexMaas` instead. */
|
|
7
|
+
googleVertexMaas as vertexMaas,
|
|
8
|
+
} from './google-vertex-maas-provider-node';
|
|
9
|
+
export type {
|
|
10
|
+
GoogleVertexMaasProvider,
|
|
11
|
+
GoogleVertexMaasProviderSettings,
|
|
12
|
+
} from './google-vertex-maas-provider-node';
|
|
13
|
+
export type { GoogleVertexMaasModelId } from './google-vertex-maas-options';
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';
|
|
2
|
+
import {
|
|
3
|
+
generateAuthToken,
|
|
4
|
+
type GoogleCredentials,
|
|
5
|
+
} from '../../edge/google-vertex-auth-edge';
|
|
6
|
+
import {
|
|
7
|
+
createGoogleVertexXai as createGoogleVertexXaiOriginal,
|
|
8
|
+
type GoogleVertexXaiProvider,
|
|
9
|
+
type GoogleVertexXaiProviderSettings as GoogleVertexXaiProviderSettingsOriginal,
|
|
10
|
+
} from '../google-vertex-xai-provider';
|
|
11
|
+
export type { GoogleVertexXaiProvider };
|
|
12
|
+
|
|
13
|
+
export interface GoogleVertexXaiProviderSettings extends GoogleVertexXaiProviderSettingsOriginal {
|
|
14
|
+
/**
|
|
15
|
+
* Optional. The Google credentials for the Google Cloud service account. If
|
|
16
|
+
* not provided, the Google Vertex provider will use environment variables to
|
|
17
|
+
* load the credentials.
|
|
18
|
+
*/
|
|
19
|
+
googleCredentials?: GoogleCredentials;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Create a Google Vertex AI xAI provider instance for Edge runtimes.
|
|
24
|
+
* Uses the OpenAI-compatible Chat Completions API for Grok partner models.
|
|
25
|
+
* Automatically handles Google Cloud authentication.
|
|
26
|
+
*
|
|
27
|
+
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
|
|
28
|
+
*/
|
|
29
|
+
export function createGoogleVertexXai(
|
|
30
|
+
options: GoogleVertexXaiProviderSettings = {},
|
|
31
|
+
): GoogleVertexXaiProvider {
|
|
32
|
+
const customFetch: FetchFunction = async (url, init) => {
|
|
33
|
+
const token = await generateAuthToken(options.googleCredentials);
|
|
34
|
+
const resolvedHeaders = await resolve(options.headers);
|
|
35
|
+
const authHeaders = {
|
|
36
|
+
...resolvedHeaders,
|
|
37
|
+
Authorization: `Bearer ${token}`,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const fetchInit = {
|
|
41
|
+
...init,
|
|
42
|
+
headers: {
|
|
43
|
+
...init?.headers,
|
|
44
|
+
...authHeaders,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
return (options.fetch ?? fetch)(url, fetchInit);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return createGoogleVertexXaiOriginal({
|
|
52
|
+
...options,
|
|
53
|
+
fetch: customFetch,
|
|
54
|
+
headers: undefined,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Default Google Vertex AI xAI provider instance for Edge runtimes.
|
|
60
|
+
*/
|
|
61
|
+
export const googleVertexXai = createGoogleVertexXai();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export {
|
|
2
|
+
createGoogleVertexXai,
|
|
3
|
+
googleVertexXai,
|
|
4
|
+
} from './google-vertex-xai-provider-edge';
|
|
5
|
+
export type {
|
|
6
|
+
GoogleVertexXaiProvider,
|
|
7
|
+
GoogleVertexXaiProviderSettings,
|
|
8
|
+
} from './google-vertex-xai-provider-edge';
|
|
9
|
+
export type { GoogleVertexXaiModelId } from '../google-vertex-xai-options';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
|
|
2
|
+
export type GoogleVertexXaiModelId =
|
|
3
|
+
| 'xai/grok-4.20-reasoning'
|
|
4
|
+
| 'xai/grok-4.20-non-reasoning'
|
|
5
|
+
| 'xai/grok-4.1-fast-reasoning'
|
|
6
|
+
| 'xai/grok-4.1-fast-non-reasoning'
|
|
7
|
+
| (string & {});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { resolve, type FetchFunction } from '@ai-sdk/provider-utils';
|
|
2
|
+
import type { GoogleAuthOptions } from 'google-auth-library';
|
|
3
|
+
import { createAuthTokenGenerator } from '../google-vertex-auth-google-auth-library';
|
|
4
|
+
import {
|
|
5
|
+
createGoogleVertexXai as createGoogleVertexXaiOriginal,
|
|
6
|
+
type GoogleVertexXaiProvider,
|
|
7
|
+
type GoogleVertexXaiProviderSettings as GoogleVertexXaiProviderSettingsOriginal,
|
|
8
|
+
} from './google-vertex-xai-provider';
|
|
9
|
+
export type { GoogleVertexXaiProvider };
|
|
10
|
+
|
|
11
|
+
export interface GoogleVertexXaiProviderSettings extends GoogleVertexXaiProviderSettingsOriginal {
|
|
12
|
+
/**
|
|
13
|
+
* Optional. The Authentication options provided by google-auth-library.
|
|
14
|
+
* Complete list of authentication options is documented in the
|
|
15
|
+
* GoogleAuthOptions interface:
|
|
16
|
+
* https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.
|
|
17
|
+
*/
|
|
18
|
+
googleAuthOptions?: GoogleAuthOptions;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Create a Google Vertex AI xAI provider instance for Node.js.
|
|
23
|
+
* Uses the OpenAI-compatible Chat Completions API for Grok partner models.
|
|
24
|
+
* Automatically handles Google Cloud authentication.
|
|
25
|
+
*
|
|
26
|
+
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
|
|
27
|
+
*/
|
|
28
|
+
export function createGoogleVertexXai(
|
|
29
|
+
options: GoogleVertexXaiProviderSettings = {},
|
|
30
|
+
): GoogleVertexXaiProvider {
|
|
31
|
+
const generateAuthToken = createAuthTokenGenerator(options.googleAuthOptions);
|
|
32
|
+
|
|
33
|
+
const customFetch: FetchFunction = async (url, init) => {
|
|
34
|
+
const token = await generateAuthToken();
|
|
35
|
+
const resolvedHeaders = await resolve(options.headers);
|
|
36
|
+
const authHeaders = {
|
|
37
|
+
...resolvedHeaders,
|
|
38
|
+
Authorization: `Bearer ${token}`,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const fetchInit = {
|
|
42
|
+
...init,
|
|
43
|
+
headers: {
|
|
44
|
+
...init?.headers,
|
|
45
|
+
...authHeaders,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
return (options.fetch ?? fetch)(url, fetchInit);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
return createGoogleVertexXaiOriginal({
|
|
53
|
+
...options,
|
|
54
|
+
fetch: customFetch,
|
|
55
|
+
headers: undefined,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Default Google Vertex AI xAI provider instance for Node.js.
|
|
61
|
+
*/
|
|
62
|
+
export const googleVertexXai = createGoogleVertexXai();
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import {
|
|
2
|
+
NoSuchModelError,
|
|
3
|
+
type LanguageModelV4,
|
|
4
|
+
type LanguageModelV4Usage,
|
|
5
|
+
type ProviderV4,
|
|
6
|
+
} from '@ai-sdk/provider';
|
|
7
|
+
import {
|
|
8
|
+
createOpenAICompatible,
|
|
9
|
+
type OpenAICompatibleProvider,
|
|
10
|
+
} from '@ai-sdk/openai-compatible';
|
|
11
|
+
import {
|
|
12
|
+
loadOptionalSetting,
|
|
13
|
+
loadSetting,
|
|
14
|
+
withoutTrailingSlash,
|
|
15
|
+
type FetchFunction,
|
|
16
|
+
type Resolvable,
|
|
17
|
+
} from '@ai-sdk/provider-utils';
|
|
18
|
+
import type { GoogleVertexXaiModelId } from './google-vertex-xai-options';
|
|
19
|
+
|
|
20
|
+
export interface GoogleVertexXaiProvider extends ProviderV4 {
|
|
21
|
+
/**
|
|
22
|
+
* Creates a model for text generation.
|
|
23
|
+
*/
|
|
24
|
+
(modelId: GoogleVertexXaiModelId): LanguageModelV4;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Creates a model for text generation.
|
|
28
|
+
*/
|
|
29
|
+
languageModel(modelId: GoogleVertexXaiModelId): LanguageModelV4;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Creates a chat model for text generation.
|
|
33
|
+
*/
|
|
34
|
+
chatModel(modelId: GoogleVertexXaiModelId): LanguageModelV4;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Use `embeddingModel` instead.
|
|
38
|
+
*/
|
|
39
|
+
textEmbeddingModel(modelId: string): never;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface GoogleVertexXaiProviderSettings {
|
|
43
|
+
/**
|
|
44
|
+
* Google Cloud project ID. Defaults to the value of the `GOOGLE_VERTEX_PROJECT` environment variable.
|
|
45
|
+
*/
|
|
46
|
+
project?: string;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Google Cloud location/region. Defaults to the value of the `GOOGLE_VERTEX_LOCATION` environment variable.
|
|
50
|
+
* Use 'global' for the global endpoint.
|
|
51
|
+
*/
|
|
52
|
+
location?: string;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Base URL for the API calls. If not provided, will be constructed from project and location.
|
|
56
|
+
*/
|
|
57
|
+
baseURL?: string;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Headers to use for requests. Can be:
|
|
61
|
+
* - A headers object
|
|
62
|
+
* - A Promise that resolves to a headers object
|
|
63
|
+
* - A function that returns a headers object
|
|
64
|
+
* - A function that returns a Promise of a headers object
|
|
65
|
+
*/
|
|
66
|
+
headers?: Resolvable<Record<string, string | undefined>>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Custom fetch implementation. You can use it as a middleware to intercept requests,
|
|
70
|
+
* or to provide a custom fetch implementation for e.g. testing.
|
|
71
|
+
*/
|
|
72
|
+
fetch?: FetchFunction;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
type GoogleVertexXaiUsage =
|
|
76
|
+
| {
|
|
77
|
+
prompt_tokens?: number | null;
|
|
78
|
+
completion_tokens?: number | null;
|
|
79
|
+
prompt_tokens_details?: {
|
|
80
|
+
cached_tokens?: number | null;
|
|
81
|
+
} | null;
|
|
82
|
+
completion_tokens_details?: {
|
|
83
|
+
reasoning_tokens?: number | null;
|
|
84
|
+
} | null;
|
|
85
|
+
}
|
|
86
|
+
| undefined
|
|
87
|
+
| null;
|
|
88
|
+
|
|
89
|
+
function convertGoogleVertexXaiUsage(
|
|
90
|
+
usage: GoogleVertexXaiUsage,
|
|
91
|
+
): LanguageModelV4Usage {
|
|
92
|
+
if (usage == null) {
|
|
93
|
+
return {
|
|
94
|
+
inputTokens: {
|
|
95
|
+
total: undefined,
|
|
96
|
+
noCache: undefined,
|
|
97
|
+
cacheRead: undefined,
|
|
98
|
+
cacheWrite: undefined,
|
|
99
|
+
},
|
|
100
|
+
outputTokens: {
|
|
101
|
+
total: undefined,
|
|
102
|
+
text: undefined,
|
|
103
|
+
reasoning: undefined,
|
|
104
|
+
},
|
|
105
|
+
raw: undefined,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const promptTokens = usage.prompt_tokens ?? 0;
|
|
110
|
+
const completionTokens = usage.completion_tokens ?? 0;
|
|
111
|
+
const cacheReadTokens = usage.prompt_tokens_details?.cached_tokens ?? 0;
|
|
112
|
+
const reasoningTokens =
|
|
113
|
+
usage.completion_tokens_details?.reasoning_tokens ?? 0;
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
inputTokens: {
|
|
117
|
+
total: promptTokens,
|
|
118
|
+
noCache: promptTokens - cacheReadTokens,
|
|
119
|
+
cacheRead: cacheReadTokens,
|
|
120
|
+
cacheWrite: undefined,
|
|
121
|
+
},
|
|
122
|
+
outputTokens: {
|
|
123
|
+
total: completionTokens + reasoningTokens,
|
|
124
|
+
text: completionTokens,
|
|
125
|
+
reasoning: reasoningTokens,
|
|
126
|
+
},
|
|
127
|
+
raw: usage,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function transformGoogleVertexXaiRequestBody(args: Record<string, any>) {
|
|
132
|
+
const { reasoning_effort: _reasoningEffort, ...rest } = args;
|
|
133
|
+
return rest;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Create a Google Vertex AI xAI provider instance.
|
|
138
|
+
* Uses the OpenAI-compatible Chat Completions API for Grok partner models.
|
|
139
|
+
*
|
|
140
|
+
* @see https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/grok
|
|
141
|
+
*/
|
|
142
|
+
export function createGoogleVertexXai(
|
|
143
|
+
options: GoogleVertexXaiProviderSettings = {},
|
|
144
|
+
): GoogleVertexXaiProvider {
|
|
145
|
+
const loadLocation = () =>
|
|
146
|
+
loadOptionalSetting({
|
|
147
|
+
settingValue: options.location,
|
|
148
|
+
environmentVariableName: 'GOOGLE_VERTEX_LOCATION',
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
const loadProject = () =>
|
|
152
|
+
loadSetting({
|
|
153
|
+
settingValue: options.project,
|
|
154
|
+
settingName: 'project',
|
|
155
|
+
environmentVariableName: 'GOOGLE_VERTEX_PROJECT',
|
|
156
|
+
description: 'Google Vertex project',
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
const constructBaseURL = () => {
|
|
160
|
+
const projectId = loadProject();
|
|
161
|
+
const location = loadLocation() ?? 'global';
|
|
162
|
+
|
|
163
|
+
return `https://aiplatform.googleapis.com/v1/projects/${projectId}/locations/${location}/endpoints/openapi`;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const loadBaseURL = () =>
|
|
167
|
+
withoutTrailingSlash(options.baseURL ?? '') || constructBaseURL();
|
|
168
|
+
|
|
169
|
+
let cachedProvider:
|
|
170
|
+
| OpenAICompatibleProvider<GoogleVertexXaiModelId, string, string, string>
|
|
171
|
+
| undefined;
|
|
172
|
+
const getProvider = () =>
|
|
173
|
+
(cachedProvider ??= createOpenAICompatible({
|
|
174
|
+
name: 'googleVertex.xai',
|
|
175
|
+
baseURL: loadBaseURL(),
|
|
176
|
+
fetch: options.fetch,
|
|
177
|
+
includeUsage: true,
|
|
178
|
+
supportsStructuredOutputs: true,
|
|
179
|
+
supportedUrls: () => ({
|
|
180
|
+
'image/*': [/^https?:\/\/.*$/],
|
|
181
|
+
}),
|
|
182
|
+
transformRequestBody: transformGoogleVertexXaiRequestBody,
|
|
183
|
+
convertUsage: convertGoogleVertexXaiUsage,
|
|
184
|
+
}));
|
|
185
|
+
|
|
186
|
+
const createChatModel = (modelId: GoogleVertexXaiModelId) =>
|
|
187
|
+
getProvider().languageModel(modelId);
|
|
188
|
+
|
|
189
|
+
const provider = function (modelId: GoogleVertexXaiModelId) {
|
|
190
|
+
if (new.target) {
|
|
191
|
+
throw new Error(
|
|
192
|
+
'The Google Vertex xAI model function cannot be called with the new keyword.',
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return createChatModel(modelId);
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
provider.specificationVersion = 'v4' as const;
|
|
200
|
+
provider.languageModel = createChatModel;
|
|
201
|
+
provider.chatModel = (modelId: GoogleVertexXaiModelId) =>
|
|
202
|
+
getProvider().chatModel(modelId);
|
|
203
|
+
provider.embeddingModel = (modelId: string): never => {
|
|
204
|
+
throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });
|
|
205
|
+
};
|
|
206
|
+
provider.textEmbeddingModel = provider.embeddingModel;
|
|
207
|
+
provider.imageModel = (modelId: string): never => {
|
|
208
|
+
throw new NoSuchModelError({ modelId, modelType: 'imageModel' });
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
return provider;
|
|
212
|
+
}
|
package/src/xai/index.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export {
|
|
2
|
+
createGoogleVertexXai,
|
|
3
|
+
googleVertexXai,
|
|
4
|
+
} from './google-vertex-xai-provider-node';
|
|
5
|
+
export type {
|
|
6
|
+
GoogleVertexXaiProvider,
|
|
7
|
+
GoogleVertexXaiProviderSettings,
|
|
8
|
+
} from './google-vertex-xai-provider-node';
|
|
9
|
+
export type { GoogleVertexXaiModelId } from './google-vertex-xai-options';
|
package/xai/edge.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../dist/xai/edge';
|
package/xai/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../dist/xai/index';
|