Skip to content
Merged
6 changes: 6 additions & 0 deletions .changeset/serious-jars-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@ai-sdk/google-vertex': patch
'@ai-sdk/google': patch
---

fix(vertex): allow 'vertex' as a key for providerOptions
6 changes: 4 additions & 2 deletions examples/ai-core/src/generate-text/google-vertex-safety.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import 'dotenv/config';

async function main() {
const result = await generateText({
model: vertex('gemini-1.5-pro'),
model: vertex('gemini-2.5-flash'),
providerOptions: {
google: {
vertex: {
safetySettings: [
{
category: 'HARM_CATEGORY_UNSPECIFIED',
Expand All @@ -22,6 +22,8 @@ async function main() {
console.log();
console.log('Token usage:', result.usage);
console.log('Finish reason:', result.finishReason);
console.log();
console.log('Request body:', result.request?.body);
}

main().catch(console.error);
21 changes: 21 additions & 0 deletions packages/google-vertex/src/google-vertex-embedding-model.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,27 @@ describe('GoogleVertexEmbeddingModel', () => {
});
});

it('should accept vertex as provider options key', async () => {
prepareJsonResponse();

await model.doEmbed({
values: testValues,
providerOptions: { vertex: mockProviderOptions },
});

expect(await server.calls[0].requestBodyJson).toStrictEqual({
instances: testValues.map(value => ({
content: value,
task_type: mockProviderOptions.taskType,
title: mockProviderOptions.title,
})),
parameters: {
outputDimensionality: mockProviderOptions.outputDimensionality,
autoTruncate: mockProviderOptions.autoTruncate,
},
});
});

it('should pass the taskType setting in instances', async () => {
prepareJsonResponse();

Expand Down
16 changes: 12 additions & 4 deletions packages/google-vertex/src/google-vertex-embedding-model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,21 @@ export class GoogleVertexEmbeddingModel implements EmbeddingModelV3 {
}: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<
Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>
> {
// Parse provider options
const googleOptions =
(await parseProviderOptions({
let googleOptions = await parseProviderOptions({
provider: 'vertex',
providerOptions,
schema: googleVertexEmbeddingProviderOptions,
});

if (googleOptions == null) {
googleOptions = await parseProviderOptions({
provider: 'google',
providerOptions,
schema: googleVertexEmbeddingProviderOptions,
})) ?? {};
});
}

googleOptions = googleOptions ?? {};

if (values.length > this.maxEmbeddingsPerCall) {
throw new TooManyEmbeddingValuesForCallError({
Expand Down
Loading
Loading