o
    ۷i                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lm  mZ eeZeedddG dd deZd
S )    )field)Any)
ConfigDict)ModelConfig)MMCacheTypeMMEncoderTPMode)config)init_logger)get_hf_text_config)AttentionBackendEnumNT)arbitrary_types_allowedc                       s  e Zd ZU dZdZeed< dZeed< dZ	e
ed< dZe
ed	< d
Ze
d
B ed< d
Ze
d
B ed< d
Ze
d
B ed< d
Ze
d
B ed< edd dZee
ef ed< d
Zed
B ed< d
Zed
B ed< edd Zedee
 fddZe fddZdd Zdee
eee
ef B f d
B ded
B d ee
ee
ef f d
B d!ee
ef d
B d"ed
B d#ed
B d$ed
B d%ed
B d&ed
B d'ee
B d
B d(ed
B d)ed
B d*ed
B dd
f fd+d,Z   Z!S )-OmniModelConfiga  Configuration for Omni models, extending the base ModelConfig.

    This configuration class extends the base vLLM ModelConfig with
    omni-specific fields for multi-stage pipeline processing.

    Attributes:
        stage_id: Identifier for the stage in a multi-stage pipeline (default: 0)
        async_chunk: If set to True, perform async chunk
        model_stage: Stage type identifier, e.g., "thinker" or "talker"
            (default: "thinker")
        model_arch: Model architecture name
            (default: "Qwen2_5OmniForConditionalGeneration")
        worker_type: Model Type, e.g., "ar" or "generation"
        engine_output_type: Optional output type specification for the engine.
            Used to route outputs to appropriate processors (e.g., "image",
            "audio", "latents"). If None, output type is inferred.
        stage_connector_config: Stage connector configuration dictionary.
            Contains "name" (connector name), "extra" (extra connector config).

    Example:
        >>> config = OmniModelConfig(
        ...     stage_id=0,
        ...     model_stage="thinker",
        ...     model_arch="Qwen2_5OmniForConditionalGeneration"
        ... )
    r   stage_idFasync_chunkthinkermodel_stage#Qwen2_5OmniForConditionalGeneration
model_archNworker_typeengine_output_typehf_config_name$custom_process_next_stage_input_funcc                   C   s
   di dS )NSharedMemoryConnector)nameextra r   r   r   L/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm_omni/config/model.py<lambda>7   s   zOmniModelConfig.<lambda>)default_factorystage_connector_configomni_kv_configcodec_frame_rate_hzc                 C   s   t jS N)	me_modelsOmniModelRegistryselfr   r   r   registry?   s   zOmniModelConfig.registryreturnc                 C   s   | j gS r"   )r   r%   r   r   r   architecturesC   s   zOmniModelConfig.architecturesc                    s:   | j d urt| j| j d }t|dd }|d ur|S t jS )Nembedding_size)r   getattr	hf_configsuperr*   )r&   stage_configoverride	__class__r   r   r*   G   s   
zOmniModelConfig.embedding_sizec                 C   s^   | j d u r
t| jS zt| j| j }| W S  ty.   td| j  d t| j Y S w )NzConfig attribute 'zD' not found in hf_config, falling back to default get_hf_text_config)r   r
   r,   r+   get_text_configAttributeErrorloggerwarning)r&   r.   r   r   r   draw_hf_text_configP   s   


z#OmniModelConfig.draw_hf_text_configlimit_mm_per_promptenable_mm_embedsmedia_io_kwargsmm_processor_kwargsmm_processor_cache_gbmm_processor_cache_typemm_shm_cache_max_object_size_mbmm_encoder_onlymm_encoder_tp_modemm_encoder_attn_backendinterleave_mm_stringsskip_mm_profilingvideo_pruning_ratec                    s   t  j|||||||||	|
|||d | jd u rV| jdkrVt| jdd }t|tr/|d}nt|dd }|d urVzt	|}W n t
yJ   d }Y nw |d urV|dkrV|| _|  }|| jurz|| _t| jdd | _| | j| _| jr|d | j_d S d S d S )N)r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   ,Qwen3TTSTalkerForConditionalGenerationARVLLMtalker_configposition_id_per_secondsr   attention_chunk_size)r-   __post_init__r!   r   r+   r,   
isinstancedictgetfloat	Exceptionr6   hf_text_configrG   get_and_verify_max_lenoriginal_max_model_lenmax_model_lendisable_sliding_windowsliding_window)r&   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   
talker_cfgpos_per_secfpsnew_hf_text_configr0   r   r   rH   b   sJ   

zOmniModelConfig.__post_init__)"__name__
__module____qualname____doc__r   int__annotations__r   boolr   strr   r   r   r   r   r   r   rJ   r   r    r!   rL   propertyr'   listr)   r*   r6   r   r   r   rH   __classcell__r   r   r0   r   r      sf   
 
	

r   )dataclassesr   typingr   pydanticr   vllm.configr   vllm.config.multimodalr   r   vllm.config.utilsr   vllm.loggerr	   vllm.transformers_utils.configr
   #vllm.v1.attention.backends.registryr   vllm_omni.model_executor.modelsmodel_executormodelsr#   rX   r4   r   r   r   r   r   <module>   s    