From d898ae29bf2c3a50d41069e8b386672120bcdb66 Mon Sep 17 00:00:00 2001 From: smakosh Date: Sat, 25 Apr 2026 19:49:57 +0200 Subject: [PATCH 1/2] fix(video): use GA Veo 3.1 model IDs on Vertex AI Google deprecated the `-preview` Veo 3.1 model IDs on 2026-04-02. Update the upstream model names sent to Vertex AI to the GA `-001` IDs so video generation works again. Public-facing model IDs are kept unchanged for API backwards compatibility. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/gateway/src/videos/videos.ts | 2 +- apps/playground/src/lib/video-gen.ts | 2 +- packages/models/src/models/google.ts | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/gateway/src/videos/videos.ts b/apps/gateway/src/videos/videos.ts index 8cefd72e0d..0d6d2558f1 100644 --- a/apps/gateway/src/videos/videos.ts +++ b/apps/gateway/src/videos/videos.ts @@ -776,7 +776,7 @@ function getVideoProviderConstraintReasons( } if (isGoogleVertexVideoProvider(provider.providerId)) { - if (provider.modelName !== "veo-3.1-generate-preview") { + if (provider.modelName !== "veo-3.1-generate-001") { reasons.push( `reference images are currently only supported on ${provider.providerId}/veo-3.1-generate-preview`, ); diff --git a/apps/playground/src/lib/video-gen.ts b/apps/playground/src/lib/video-gen.ts index a882f2b001..cea409b0eb 100644 --- a/apps/playground/src/lib/video-gen.ts +++ b/apps/playground/src/lib/video-gen.ts @@ -178,7 +178,7 @@ function mappingSupportsVideoRequest( if (inputMode === "reference") { if (mapping.providerId === "google-vertex") { - if (mapping.modelName !== "veo-3.1-generate-preview") { + if (mapping.modelName !== "veo-3.1-generate-001") { return false; } } else if (mapping.providerId === "avalanche") { diff --git a/packages/models/src/models/google.ts b/packages/models/src/models/google.ts index 5bb5fa67ea..1810d07b28 100644 --- a/packages/models/src/models/google.ts +++ b/packages/models/src/models/google.ts @@ -780,7 +780,7 @@ export const googleModels = [ { id: "veo-3.1-generate-preview", name: "Veo 3.1", - description: "Google Veo 3.1 preview video generation with audio.", + description: "Google Veo 3.1 video generation with audio.", family: "google", output: ["video"], maxVideoDurationSeconds: 10, @@ -789,7 +789,7 @@ export const googleModels = [ providers: [ { providerId: "google-vertex", - modelName: "veo-3.1-generate-preview", + modelName: "veo-3.1-generate-001", inputPrice: undefined, outputPrice: undefined, requestPrice: undefined, @@ -853,7 +853,7 @@ export const googleModels = [ { id: "veo-3.1-fast-generate-preview", name: "Veo 3.1 Fast", - description: "Google Veo 3.1 Fast preview video generation with audio.", + description: "Google Veo 3.1 Fast video generation with audio.", family: "google", output: ["video"], maxVideoDurationSeconds: 10, @@ -862,7 +862,7 @@ export const googleModels = [ providers: [ { providerId: "google-vertex", - modelName: "veo-3.1-fast-generate-preview", + modelName: "veo-3.1-fast-generate-001", inputPrice: undefined, outputPrice: undefined, requestPrice: undefined, From 94763e9e7f4faa142f97d0a9c09db25f8fafda2a Mon Sep 17 00:00:00 2001 From: smakosh Date: Sat, 25 Apr 2026 20:09:10 +0200 Subject: [PATCH 2/2] test(video): update usedModel expectations to GA Veo 3.1 IDs `videoJob.usedModel` and `log.usedModelMapping` record the upstream provider model name, which is now `veo-3.1-generate-001` after the GA rename. Log filters that use `provider/publicId` format are unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/gateway/src/videos/videos.spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/gateway/src/videos/videos.spec.ts b/apps/gateway/src/videos/videos.spec.ts index 40abe05567..13aec43b40 100644 --- a/apps/gateway/src/videos/videos.spec.ts +++ b/apps/gateway/src/videos/videos.spec.ts @@ -473,7 +473,7 @@ describe("videos", () => { }); expect(videoJob).toBeTruthy(); expect(videoJob?.usedProvider).toBe("google-vertex"); - expect(videoJob?.usedModel).toBe("veo-3.1-generate-preview"); + expect(videoJob?.usedModel).toBe("veo-3.1-generate-001"); expect(videoJob?.upstreamId).toContain("projects/runtime-project/"); expect( ( @@ -513,7 +513,7 @@ describe("videos", () => { `mock-video-${videoJob!.upstreamId}`, ); - expect(logs[0].usedModelMapping).toBe("veo-3.1-generate-preview"); + expect(logs[0].usedModelMapping).toBe("veo-3.1-generate-001"); expect(logs[0].content).toBe( `http://localhost:4001/v1/videos/logs/${logs[0].id}/content`, ); @@ -820,7 +820,7 @@ describe("videos", () => { where: { id: { eq: created.id } }, }); expect(videoJob?.usedProvider).toBe("google-vertex"); - expect(videoJob?.usedModel).toBe("veo-3.1-generate-preview"); + expect(videoJob?.usedModel).toBe("veo-3.1-generate-001"); const mockVideo = getMockVideo(videoJob!.upstreamId); expect(mockVideo?.referenceImages).toEqual([