o
    ۷i                     @   s`   d dl mZ d dlZd dlmZmZmZmZ G dd deZ	G dd deZ
G dd	 d	eZdS )
    )LiteralN)	BaseModelFieldfield_validatormodel_validatorc                   @   sn  e Zd ZU ee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	Z	e
d
 ed< eddddZedB ed< dZe
d dB ed< edddZeed< edddZe
d 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ZedB ed!< edd"dZedB ed#< eded$ed%efd&d'Zed(d)d,d*d+ZdS )-OpenAICreateSpeechRequestinputNmodelzMVoice to use. For OpenAI: alloy, echo, etc. For Qwen3-TTS: Vivian, Ryan, etc.)defaultdescriptionvoicezGInstructions for voice style/emotion (maps to 'instruct' for Qwen3-TTS)instructionswav)r   pcmflacmp3aacopusresponse_format      ?g      ?g      @)r
   gelespeedaudiosser   stream_formatFzIf true, stream raw PCM audio chunks as they are decoded. Requires response_format='pcm'. Speed adjustment is not supported when streaming.streamz>TTS task type: CustomVoice, VoiceDesign, or Base (voice clone))CustomVoiceVoiceDesignBase	task_typez2Language code (e.g., 'Chinese', 'English', 'Auto')languagezIReference audio for voice cloning (Base task). URL, base64, or file path.	ref_audioz;Transcript of reference audio for voice cloning (Base task)ref_textzBUse speaker embedding only without in-context learning (Base task)x_vector_only_modezMaximum tokens to generatemax_new_tokensvreturnc                 C   s   |dkrt d|S )Nr   z?'sse' is not a supported stream_format yet. Please use 'audio'.)
ValueError)clsr'    r+   a/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm_omni/entrypoints/openai/protocol/audio.pyvalidate_stream_format;   s   z0OpenAICreateSpeechRequest.validate_stream_formatafter)modec                 C   sL   | j r$| jdkrtd| j d| jd u rd| _| S | jdkr$td| S )Nr   zMStreaming (stream=true) requires response_format='pcm'. Got response_format='z'.r   zYSpeed adjustment is not supported when streaming (stream=true). Set speed=1.0 or omit it.)r   r   r)   r   )selfr+   r+   r,   validate_streaming_constraintsB   s   


z8OpenAICreateSpeechRequest.validate_streaming_constraints)r(   r   )__name__
__module____qualname__str__annotations__r	   r   r   r   r   r   r   floatr   r   boolr!   r"   r#   r$   r%   r&   intr   classmethodr-   r   r1   r+   r+   r+   r,   r      sf   
 	r   c                   @   sj   e Zd ZU ejed< dZeed< dZe	ed< dZ
eed< dZed	 d
B ed< dZeed< G dd dZd
S )CreateAudioaudio_tensori]  sample_rater   r   r   r   r   r   Nr   Tbase64_encodec                   @   s   e Zd ZdZdS )zCreateAudio.ConfigTN)r2   r3   r4   arbitrary_types_allowedr+   r+   r+   r,   Config[   s    r@   )r2   r3   r4   npndarrayr6   r=   r9   r   r5   r   r7   r   r   r>   r8   r@   r+   r+   r+   r,   r;   S   s   
 
r;   c                   @   s"   e Zd ZU eeB ed< eed< dS )AudioResponse
audio_data
media_typeN)r2   r3   r4   bytesr5   r6   r+   r+   r+   r,   rC   _   s   
 rC   )typingr   numpyrA   pydanticr   r   r   r   r   r;   rC   r+   r+   r+   r,   <module>   s    L