o
    :/i*                     @   s8  U d dl mZ d dlmZmZmZmZmZ d dlm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ eG dd	 d	Zee	d
ddG dd deZee	d
ddG dd deZee	d
ddG dd deZeG dd deddZed Zed Zeeef Zeed< 	 eG dd dZ dS )    )Mapping)AnyLiteral	TypeAlias	TypedDictfinal)
ConfigDictFieldfield_validatormodel_validator)	dataclass)config)	safe_hash)AttentionBackendEnumc                   @   s&   e Zd ZU dZedddZeed< dS )BaseDummyOptionsz8Base options for generating dummy data during profiling.  r   )gecountN)__name__
__module____qualname____doc__r	   r   int__annotations__ r   r   c/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/vllm/config/multimodal.pyr      s   
 r   forbid)extrac                   @   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 )VideoDummyOptionsz9Options for generating dummy video data during profiling.Nr   gt
num_frameswidthheight)
r   r   r   r   r	   r!   r   r   r"   r#   r   r   r   r   r      s
   
 r   c                   @   sB   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< dS )ImageDummyOptionsz9Options for generating dummy image data during profiling.Nr   r   r"   r#   )	r   r   r   r   r	   r"   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dB ed< dS )AudioDummyOptionsz9Options for generating dummy audio data during profiling.Nr   r   length)r   r   r   r   r	   r&   r   r   r   r   r   r   r%   '   s   
 r%   c                   @   s.   e Zd ZU dZeed< 	 eed< 	 eed< dS )MultiModalDummyOptionsBuiltinsz7Type annotations for modality types predefined by vLLM.imagevideoaudioN)r   r   r   r   r$   r   r   r%   r   r   r   r   r'   .   s   
 r'   F)total)weightsdata)shmlruMMDummyOptionsc                	   @   s  e Zd ZU dZdZeed< 	 eedZ	e
ed< 	 dZeed< 	 eedZeeeeef f ed< 	 dZeeef dB ed	< 	 ed
ddZeed< 	 dZeed< 	 ed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ed< 	 dZeed< 	 eddddZedB ed< 	 eddde deeeeeef B f de
fd d!Z!eddde deeB dB dedB fd"d#Z"e#d$dd%d& Z$defd'd(Z%d)edefd*d+Z&d,e'eef deeef fd-d.Z(d/d0 Z)dS )1MultiModalConfigz+Controls the behavior of multimodal models.Flanguage_model_only)default_factorylimit_per_promptenable_mm_embedsmedia_io_kwargsNmm_processor_kwargs   r   )defaultr   mm_processor_cache_gbr/   mm_processor_cache_type   mm_shm_cache_max_object_size_mbmm_encoder_onlyr,   mm_encoder_tp_modemm_encoder_attn_backendinterleave_mm_stringsskip_mm_profilingg        g      ?)r9   r   ltvideo_pruning_ratebefore)modevaluereturnc                 C   s   i }|  D ]@\}}t|trd|i}|dkr!tdi |||< q|dkr/tdi |||< q|dkr=tdi |||< qtdi |||< q|S )Nr   r)   r(   r*   r   )items
isinstancer   r   r$   r%   r   )clsrG   outkvr   r   r   _validate_limit_per_prompt   s   
z+MultiModalConfig._validate_limit_per_promptc                 C   sR   t |tr| dkrtd|d u st |tr|S t |ts#J dt|  S )NXFORMERSzwAttention backend 'XFORMERS' has been removed (See PR #29262 for details). Please select a supported attention backend.zDmm_encoder_attn_backend must be a string or an AttentionBackendEnum.)rJ   strupper
ValueErrorr   )rK   rG   r   r   r   !_validate_mm_encoder_attn_backend   s   z2MultiModalConfig._validate_mm_encoder_attn_backendafterc                 C   s"   | j dkr| jtjkrtd| S )Nr.   z]'mm_shm_cache_max_object_size_mb' should only be set when 'mm_processor_cache_type' is 'shm'.)r;   r=   r1   rS   selfr   r   r   _validate_multimodal_config   s   
z,MultiModalConfig._validate_multimodal_configc                 C   s8   | j dur	| j jnd| jg}tt| dd }|S )a  
        WARNING: Whenever a new field is added to this config,
        ensure that it is included in the factors list if
        it affects the computation graph.

        Provide a hash that uniquely identifies all the configs
        that affect the structure of the computation
        graph from input ids/embeddings to the final hidden states,
        excluding anything before input ids/embeddings and after
        the final hidden states.
        NF)usedforsecurity)r@   namer?   r   rQ   encode	hexdigest)rW   factorshash_strr   r   r   compute_hash   s   
zMultiModalConfig.compute_hashmodalityc                 C   s(   | j rdS | j|}|du rdS |jS )z
        Get the maximum number of input items allowed per prompt
        for the given modality (backward compatible).
        r   Nr   )r2   r4   getr   )rW   r`   
limit_datar   r   r   get_limit_per_prompt   s   z%MultiModalConfig.get_limit_per_promptinference_kwargsc                 C   s   | j pi }|t|B S )z
        Get the keyword arguments to pass to the multi-modal processor
        according to the extra arguments passed during inference.
        )r7   dict)rW   rd   kwargsr   r   r   merge_mm_processor_kwargs  s   
z*MultiModalConfig.merge_mm_processor_kwargsc                 C   s   | j d uo	| j dkS )Nr   )rD   rV   r   r   r   is_multimodal_pruning_enabled  s   z.MultiModalConfig.is_multimodal_pruning_enabled)*r   r   r   r   r2   boolr   r	   re   r4   r0   r5   r6   rQ   r   r7   objectr:   floatr;   MMCacheTyper=   r   r>   r?   MMEncoderTPModer@   r   rA   rB   rD   r
   classmethodrO   rT   r   rX   r_   rc   r   rg   rh   r   r   r   r   r1   G   sl   
 "






r1   N)!collections.abcr   typingr   r   r   r   r   pydanticr   r	   r
   r   pydantic.dataclassesr   vllm.config.utilsr   vllm.utils.hashingr   #vllm.v1.attention.backends.registryr   r   r   r$   r%   r'   rm   rl   re   rQ   r0   r   r1   r   r   r   r   <module>   s.   