66from enum import Enum
77from typing import Annotated , Any , Literal
88
9- from pydantic import BaseModel , ConfigDict , Field , StringConstraints
9+ from pydantic import BaseModel , ConfigDict , Field , StringConstraints , field_validator
1010
1111
1212class ImageResponseData (BaseModel ):
@@ -82,7 +82,7 @@ class FileImageReference(BaseModel):
8282
8383class UrlImageReference (BaseModel ):
8484 model_config = ConfigDict (extra = "forbid" )
85- image_url : str
85+ image_url : str = Field ( min_length = 1 )
8686
8787
8888ImageReference = UrlImageReference | FileImageReference
@@ -95,15 +95,15 @@ class FileVideoReference(BaseModel):
9595
9696class UrlVideoReference (BaseModel ):
9797 model_config = ConfigDict (extra = "forbid" )
98- video_url : str
98+ video_url : str = Field ( min_length = 1 )
9999
100100
101101VideoReference = UrlVideoReference | FileVideoReference
102102
103103
104104class UrlAudioReference (BaseModel ):
105105 model_config = ConfigDict (extra = "forbid" )
106- audio_url : str
106+ audio_url : str = Field ( min_length = 1 )
107107
108108
109109AudioReference = UrlAudioReference
@@ -117,11 +117,11 @@ class VideoGenerationRequest(BaseModel):
117117 predate vLLM-Omni's typed reference objects.
118118 """
119119
120- model_config = ConfigDict (extra = "allow " )
120+ model_config = ConfigDict (extra = "forbid " )
121121
122- prompt : str
122+ prompt : str = Field ( min_length = 1 )
123123 model : str | None = None
124- seconds : int | SecondStr | None = None
124+ seconds : Annotated [ int , Field ( ge = 1 , le = _INT64_MAX )] | SecondStr | None = None
125125 size : SizeStr | None = None
126126 image_reference : ImageReference | list [ImageReference ] | None = None
127127 video_reference : VideoReference | list [VideoReference ] | None = None
@@ -145,7 +145,7 @@ class VideoGenerationRequest(BaseModel):
145145 # SGLang spelling retained as an alias-like input field.
146146 n : int | None = Field (default = None , ge = 1 , le = 10 )
147147 start_time_seconds : float | None = Field (default = None , ge = 0.0 )
148- quality : str | None = None
148+ quality : Literal [ "auto" , "default" , "standard" , "hd" ] | None = None
149149 negative_prompt : str | None = None
150150 num_inference_steps : int | None = Field (default = None , ge = 1 , le = 200 )
151151 guidance_scale : float | None = Field (default = None , ge = 0.0 , le = 20.0 )
@@ -166,7 +166,13 @@ class VideoGenerationRequest(BaseModel):
166166
167167 lora : dict [str , Any ] | None = None
168168 extra_params : dict [str , Any ] | None = None
169- output_path : str | None = None
169+
170+ @field_validator ("prompt" )
171+ @classmethod
172+ def validate_prompt (cls , value : str ) -> str :
173+ if not value .strip ():
174+ raise ValueError ("prompt must not be empty" )
175+ return value
170176
171177 def resolve_video_params (self ) -> VideoParams :
172178 """Resolve top-level, nested, and ``size`` dimensions like vLLM-Omni."""
0 commit comments