o
    -i'                     @   s  U d dl mZ d dl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d Zed ZeeB eB eB Zeed< eeG dd dZdS )    )Mapping)AnyLiteral	TypeAlias)
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   S/home/ubuntu/veenaModal/venv/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#   )weightsdata)shmlruDummyOptionsc                	   @   s  e Zd ZU dZeedZeeef 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eef 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de&dB fd+d,Z'd-e(eef deeef fd.d/Z)d0d1 Z*dS )2MultiModalConfigz+Controls the behavior of multimodal models.)default_factorylimit_per_promptF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      ?)r1   r   ltvideo_pruning_ratebefore)modevaluereturnc                 C   s   |  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   videoimageaudior   )items
isinstancer   r   r"   r#   r   )clsr?   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.)rE   strupper
ValueErrorr   )rF   r?   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'.)r3   r5   r*   rM   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)r8   namer7   r   rK   encode	hexdigest)rQ   factorshash_strr   r   r   compute_hash   s   
zMultiModalConfig.compute_hashmodalityc                 C   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).
        Nr   )r,   getr   )rQ   rZ   
limit_datar   r   r   get_limit_per_prompt   s   z%MultiModalConfig.get_limit_per_promptc                 C   s   | j |S )z
        Get the configurable dummy data options for a modality.
        Returns None if no options are configured for this modality.
        )r,   r[   )rQ   rZ   r   r   r   get_dummy_options   s   z"MultiModalConfig.get_dummy_options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.
        )r/   dict)rQ   r_   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   )r<   rP   r   r   r   is_multimodal_pruning_enabled   s   z.MultiModalConfig.is_multimodal_pruning_enabled)+r   r   r   r   r   r`   r,   rK   r)   r   r-   boolr.   r   r/   objectr2   floatr3   MMCacheTyper5   r   r6   r7   MMEncoderTPModer8   r   r9   r:   r<   r   classmethodrI   rN   r	   rR   rY   r]   r   r^   r   rb   rc   r   r   r   r   r*   5   sj   
 "







r*   N)collections.abcr   typingr   r   r   pydanticr   r   r   r	   pydantic.dataclassesr
   vllm.config.utilsr   vllm.utils.hashingr   #vllm.v1.attention.backends.registryr   r   r   r"   r#   rh   rg   r)   r   r*   r   r   r   r   <module>   s,   
