Skip to content

Commit ba2f76d

Browse files
committed
feat: add Veo 3.1 video model support
Add support for Google Vertex AI Veo 3.1 video models (veo-3.1-generate-preview and veo-3.1-fast-generate-preview) to the Echo router and Next.js video template. Changes: - SDK: Add Veo 3.1 model types and pricing entries for both Vertex AI and Gemini providers - Router: Include Veo 3.1 models in VEO3_MODELS constant for GCS URI handling in VertexAIProvider - Template: Add Veo 3.1 as model options in validation, types, and UI components with Veo 3.1 Fast as the new default - Client: Update test client to use Veo 3.1 Veo 3.0 models are retained for backward compatibility. Resolves #595
1 parent eacef7a commit ba2f76d

File tree

8 files changed

+50
-10
lines changed

8 files changed

+50
-10
lines changed

packages/app/server/src/clients/veo3-client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ async function makeRequest() {
1616
const prompt = `An anime-style racing scene. A cool looking guy is racing away from villians in a japanese sports car.`;
1717

1818
let operation = await ai.models.generateVideos({
19-
model: 'veo-3.0-fast-generate-001',
19+
model: 'veo-3.1-fast-generate-001',
2020
prompt: prompt,
2121
config: {
2222
durationSeconds: 4,

packages/app/server/src/providers/VertexAIProvider.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import { env } from '../env';
1919
// Constants
2020
export const PROXY_PASSTHROUGH_ONLY_MODEL = 'PROXY_PLACEHOLDER_VERTEX_AI';
2121
const VEO3_MODELS = [
22+
'veo-3.1-fast-generate-preview',
23+
'veo-3.1-generate-preview',
2224
'veo-3.0-fast-generate-preview',
2325
'veo-3.0-generate-preview',
2426
];

packages/sdk/ts/src/supported-models/video/gemini.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,23 @@ import { SupportedVideoModel } from 'supported-models/types';
22

33
export type GeminiVideoModel =
44
| 'veo-3.0-generate-001'
5-
| 'veo-3.0-fast-generate-001';
5+
| 'veo-3.0-fast-generate-001'
6+
| 'veo-3.1-generate-001'
7+
| 'veo-3.1-fast-generate-001';
68
// https://ai.google.dev/gemini-api/docs/pricing
79
export const GeminiVideoModels: SupportedVideoModel[] = [
10+
{
11+
model_id: 'veo-3.1-generate-001',
12+
cost_per_second_with_audio: 0.4,
13+
cost_per_second_without_audio: 0.2,
14+
provider: 'Gemini',
15+
},
16+
{
17+
model_id: 'veo-3.1-fast-generate-001',
18+
cost_per_second_with_audio: 0.15,
19+
cost_per_second_without_audio: 0.1,
20+
provider: 'Gemini',
21+
},
822
{
923
model_id: 'veo-3.0-generate-001',
1024
cost_per_second_with_audio: 0.4,

packages/sdk/ts/src/supported-models/video/vertex-ai.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,39 @@ import type { SupportedVideoModel } from '../types';
22

33
export type VertexAIVideoModel =
44
| 'veo-3.0-fast-generate-preview'
5-
| 'veo-3.0-generate-preview';
5+
| 'veo-3.0-generate-preview'
6+
| 'veo-3.1-fast-generate-preview'
7+
| 'veo-3.1-generate-preview';
68
/**
79
* Vertex AI video models with official pricing information
810
* Based on: https://cloud.google.com/vertex-ai/generative-ai/pricing
911
*
10-
* Veo 3: $0.40/second with audio, $0.20/second video only
11-
* Veo 3 Fast: $0.15/second with audio, $0.10/second video only
12+
* Veo 3.x: $0.40/second with audio, $0.20/second video only
13+
* Veo 3.x Fast: $0.15/second with audio, $0.10/second video only
1214
*/
1315
export const VertexAIVideoModels: SupportedVideoModel[] = [
16+
{
17+
model_id: 'veo-3.1-fast-generate-preview',
18+
cost_per_second_with_audio: 0.15,
19+
cost_per_second_without_audio: 0.1,
20+
provider: 'VertexAI',
21+
},
22+
{
23+
model_id: 'veo-3.1-generate-preview',
24+
cost_per_second_with_audio: 0.4,
25+
cost_per_second_without_audio: 0.2,
26+
provider: 'VertexAI',
27+
},
1428
{
1529
model_id: 'veo-3.0-fast-generate-preview',
1630
cost_per_second_with_audio: 0.15,
17-
cost_per_second_without_audio: 0.1, // Fixed: was 0.1, now 0.10 for clarity
31+
cost_per_second_without_audio: 0.1,
1832
provider: 'VertexAI',
1933
},
2034
{
2135
model_id: 'veo-3.0-generate-preview',
22-
cost_per_second_with_audio: 0.4, // Fixed: was 0.4, now 0.40 for clarity
23-
cost_per_second_without_audio: 0.2, // Fixed: was 0.2, now 0.20 for clarity
36+
cost_per_second_with_audio: 0.4,
37+
cost_per_second_without_audio: 0.2,
2438
provider: 'VertexAI',
2539
},
2640
];

templates/next-video-template/src/app/api/generate-video/validation.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ export function validateGenerateVideoRequest(body: unknown): ValidationResult {
3535
}
3636

3737
const validModels: VideoModelOption[] = [
38+
'veo-3.1-fast-generate-preview',
39+
'veo-3.1-generate-preview',
3840
'veo-3.0-fast-generate-preview',
3941
'veo-3.0-generate-preview',
4042
];

templates/next-video-template/src/app/api/generate-video/vertex.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ import {
1414
*/
1515
export async function handleGeminiGenerate(
1616
prompt: string,
17-
model: 'veo-3.0-fast-generate-preview' | 'veo-3.0-generate-preview',
17+
model:
18+
| 'veo-3.1-fast-generate-preview'
19+
| 'veo-3.1-generate-preview'
20+
| 'veo-3.0-fast-generate-preview'
21+
| 'veo-3.0-generate-preview',
1822
durationSeconds: number = 4,
1923
generateAudio: boolean = false,
2024
image?: string, // Base64 encoded image or data URL (first frame)

templates/next-video-template/src/components/video-generator.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ import { FileInputManager } from './FileInputManager';
4242
import { VideoHistory } from './video-history';
4343

4444
const models: VideoModelConfig[] = [
45+
{ id: 'veo-3.1-fast-generate-preview', name: 'Veo 3.1 Fast' },
46+
{ id: 'veo-3.1-generate-preview', name: 'Veo 3.1' },
4547
{ id: 'veo-3.0-fast-generate-preview', name: 'Veo 3 Fast' },
4648
{ id: 'veo-3.0-generate-preview', name: 'Veo 3' },
4749
];
@@ -57,7 +59,7 @@ const models: VideoModelConfig[] = [
5759
*/
5860
export default function VideoGenerator() {
5961
const [model, setModel] = useState<VideoModelOption>(
60-
'veo-3.0-fast-generate-preview'
62+
'veo-3.1-fast-generate-preview'
6163
);
6264
const [durationSeconds, setDurationSeconds] = useState<4 | 6 | 8>(4);
6365
const [generateAudio, setGenerateAudio] = useState<boolean>(false);

templates/next-video-template/src/lib/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export type ModelOption = 'openai' | 'gemini';
1414
* Available AI models for video generation
1515
*/
1616
export type VideoModelOption =
17+
| 'veo-3.1-fast-generate-preview'
18+
| 'veo-3.1-generate-preview'
1719
| 'veo-3.0-fast-generate-preview'
1820
| 'veo-3.0-generate-preview';
1921

0 commit comments

Comments
 (0)