o
    ۷i                     @   s   d Z ddlmZ ddlmZ ddlmZmZmZ G dd de	eZ
G dd deZG d	d
 d
eZG dd deZG dd deZdS )z
OpenAI-compatible protocol definitions for video generation.

This module provides Pydantic models for a video generation endpoint that
mirrors the OpenAI Images API shape, with vllm-omni extensions for diffusion
video models (e.g., Wan2.2).
    )Enum)Any)	BaseModelFieldfield_validatorc                   @   s   e Zd ZdZdZdZdS )VideoResponseFormatzVideo response format.b64_jsonurlN)__name__
__module____qualname____doc__B64_JSONURL r   r   b/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm_omni/entrypoints/openai/protocol/videos.pyr      s    r   c                   @   sz   e Zd ZU dZeddddZedB ed< eddddZedB ed< eddd	dZ	edB ed
< eddddZ
edB ed< dS )VideoParamsz-Optional block for video-specific parameters.N   Video width in pixelsdefaultgedescriptionwidthVideo height in pixelsheightzNumber of frames
num_frames"Frames per second for output videofps)r
   r   r   r   r   r   int__annotations__r   r   r   r   r   r   r   r      s   
 r   c                   @   s  e Zd ZU dZedddZeed< edddZedB ed	< ed
d
dddZ	e
ed< edddZe
eB dB ed< edddZedB ed< eejddZeed< edddZedB ed< edddZedB ed< edddZedB ed< edddZedB ed< edd
ddZe
dB ed < edd
d!dZe
dB ed"< edd
d#dZe
dB ed$< edd
d%dZe
dB ed&< edd'dZedB ed(< edd
d)d*dZe
dB ed+< edd,d-d.dZedB ed/< edd,d-d0dZedB ed1< edd,d2d3dZedB ed4< edd5dZ edB ed6< edd,d-d7dZ!edB ed8< edd9dZ"e
dB ed:< edd;dZ#e$ee%f dB ed<< e&de'd=d> Z(e&de'd?d@ Z)e&de'dAdB Z*dS )CVideoGenerationRequestzz
    OpenAI-style video generation request.

    Follows the OpenAI Images API conventions with extensions for video.
    .z(Text description of the desired video(s)r   promptNzBModel to use (optional, uses server's configured model if omitted)r   r   modelr      zNumber of videos to generate)r   r   ler   nz<Clip duration in seconds (OpenAI-compatible, e.g., 4, 8, 12)secondsz:Video dimensions in WIDTHxHEIGHT format (e.g., '1280x720')sizezFormat of the returned videoresponse_formatzUser identifier for trackinguserFz-Whether to stream outputs (not yet supported)streamz"Optional video-specific parametersvideo_paramszGImage input for I2V; provided via multipart form-data as a file upload.input_referencer   r   r   r   r   zNumber of frames to generater   r   r   z*Text describing what to avoid in the videonegative_prompt   zINumber of diffusion sampling steps (uses model defaults if not specified)num_inference_stepsg        g      4@zEClassifier-free guidance scale (uses model defaults if not specified)guidance_scalez.High-noise CFG scale for video models (Wan2.2)guidance_scale_2g      ?z.Boundary split ratio for low/high DiT (Wan2.2)boundary_ratioz.Scheduler flow_shift for video models (Wan2.2)
flow_shiftzJTrue CFG scale (model-specific parameter, may be ignored if not supported)true_cfg_scalezRandom seed for reproducibilityseedzOptional LoRA adapter for this request. Expected shape: {name/path/scale/int_id}. Field names are flexible (e.g. name|lora_name|adapter, path|lora_path|local_path, scale|lora_scale, int_id|lora_int_id).lorac                 C   s*   |d u rd S t |trd|vrtd|S )Nxz8size must be in format 'WIDTHxHEIGHT' (e.g., '1280x720'))
isinstancestr
ValueErrorclsvr   r   r   validate_size~   s
   z$VideoGenerationRequest.validate_sizec                 C   s$   |d ur|t jkrtd| |S )Nz3Only 'b64_json' response format is supported, got: )r   r   r=   r>   r   r   r   validate_response_format   s   z/VideoGenerationRequest.validate_response_formatc                 C   sD   |d u rd S t |tr| stdt|S t |tr|S td)Nz,seconds must be an integer or numeric string)r;   r<   isdigitr=   r   r>   r   r   r   validate_seconds   s   

z'VideoGenerationRequest.validate_seconds)+r
   r   r   r   r   r#   r<   r    r%   r(   r   r)   r*   r   r   r+   r,   r-   boolr.   r   r/   r   r   r   r   r0   r2   r3   floatr4   r5   r6   r7   r8   r9   dictr   r   classmethodrA   rB   rD   r   r   r   r   r!   !   s   
 
r!   c                   @   sZ   e Zd ZU dZedddZedB ed< edddZedB ed< edddZ	edB ed	< dS )
	VideoDatazSingle generated video data.NzBase64-encoded MP4 videor$   r   zVideo URL (not implemented)r	   z2Revised prompt (OpenAI compatibility, always null)revised_prompt)
r
   r   r   r   r   r   r<   r    r	   rJ   r   r   r   r   rI      s
   
 rI   c                   @   s>   e Zd ZU dZedddZeed< edddZe	e
 ed< dS )	VideoGenerationResponsez'OpenAI-style video generation response..z/Unix timestamp of when the generation completedr"   createdzArray of generated videosdataN)r
   r   r   r   r   rL   r   r    rM   listrI   r   r   r   r   rK      s   
 rK   N)r   enumr   typingr   pydanticr   r   r   r<   r   r   r!   rI   rK   r   r   r   r   <module>   s   	{