
    .`i<                     :   d dl mZ d dlmZ d dlmZ d dlmZm	Z	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mZ d	d
lmZmZmZmZmZmZmZ d	dlm Z  d	dl!m"Z"m#Z#m$Z$m%Z% erd dl&m'Z'mZm(Z( d dl)m*Z*  ee+          Z, ede-d                   Z. ede$          Z/ ede$d          Z0 G d dee0                   Z1 G d dee/                   Z2 G d dee/                   Z3 ed           G d de	e/                               Z4 G d d           Z5d!S )"    )Mapping)	dataclass)Lock)TYPE_CHECKINGGenericLiteralProtocolTypeVarcast)BaseDummyOptions)ObservabilityConfig)init_logger)TokenizerLikecached_tokenizer_from_config   )BaseMultiModalProcessorCacheBaseMultiModalReceiverCacheMultiModalProcessorOnlyCacheMultiModalProcessorSenderCacheMultiModalReceiverCacheShmObjectStoreReceiverCacheShmObjectStoreSenderCache)MultiModalInputs)BaseDummyInputsBuilderBaseMultiModalProcessorBaseProcessingInfoInputProcessingContext)ModelConfigr   
VllmConfig)SupportsMultiModalNr    )bound_I_I_coT)r"   	covariantc                   "    e Zd ZdZdedefdZdS )ProcessingInfoFactory
    Constructs a
    [`BaseMultiModalProcessor`][vllm.multimodal.processing.BaseMultiModalProcessor]
    instance from the context.
    ctxreturnc                     d S N )selfr)   s     l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/multimodal/registry.py__call__zProcessingInfoFactory.__call__0   s	         N)__name__
__module____qualname____doc__r   r$   r0   r-   r1   r/   r'   r'   )   sD         # 
     r1   r'   c                   .    e Zd ZdZdedee         fdZdS )DummyInputsBuilderFactoryz
    Constructs a
    [`BaseDummyInputsBuilder`][vllm.multimodal.processing.BaseDummyInputsBuilder]
    instance from the context.
    infor*   c                     d S r,   r-   )r.   r8   s     r/   r0   z"DummyInputsBuilderFactory.__call__=   s      r1   N)r2   r3   r4   r5   r#   r   r0   r-   r1   r/   r7   r7   6   s9          DRC$:2$>CCCCCCr1   r7   c            
       N    e Zd ZdZdddedee         dedz  dee         fdZdS )	MultiModalProcessorFactoryr(   Ncacher8   dummy_inputsr=   r*   c                    d S r,   r-   )r.   r8   r>   r=   s       r/   r0   z#MultiModalProcessorFactory.__call__G   s	     '*cr1   )	r2   r3   r4   r5   r#   r   r   r   r0   r-   r1   r/   r;   r;   @   sv          6:* * ** -R0*
 ,d2* 
!	$* * * * * *r1   r;   )frozenc                   n    e Zd ZU ee         ed<   ee         ed<   ee         ed<   dddede	dz  fdZ
dS )	_ProcessorFactoriesr8   	processorr>   Nr<   r)   r=   c                    |                      |          }|                     |          }|                     |||          S )Nr<   r8   r>   rC   )r.   r)   r=   r8   dummy_inputs_builders        r/   build_processorz#_ProcessorFactories.build_processorV   s@     yy~~#0066~~d$8~FFFr1   )r2   r3   r4   r'   r#   __annotations__r;   r7   r   r   rG   r-   r1   r/   rB   rB   P   s         

####)"----+B//// 6:	G G G#G ,d2	G G G G G Gr1   rB   c                      e Zd ZdZdddeeef         dz  fdZdddefdZ	ddddddd	e
dz  d
eeef         dz  dedz  deeef         f
dZdddddd	e
dz  dedz  deeef         fdZdee         dee         dee         fdZd)dZ	 	 d*dddddedz  defdZ	 d+dddddddedz  defdZ	 d+ddddddddedz  d	e
dz  dee         f
dZ	 d+dddddddeeef         dz  d	e
dz  dedz  dedz  defdZdddefdZd d!ded"         fd#Z d d!de
dz  fd$Z!d d!de"dz  fd%Z#d d!de$dz  fd&Z%d d!d'e&de$dz  fd(Z'dS ),MultiModalRegistryzL
    A registry that dispatches data processing according to the model.
    model_configr   r*   Nc                 x    j         sdS fdj         j        D             }t          |          dk    r|ndS )z
        Extract multimodal dummy options from model config.

        Returns None if no configurable options are found, otherwise returns
        a mapping of modality names to their dummy options.
        Nc                 N    i | ]!}j                             |          x|"S r,   )multimodal_configget_dummy_options).0mrK   opts     r/   
<dictcomp>z:MultiModalRegistry._extract_mm_options.<locals>.<dictcomp>s   sA     
 
 
#5GGJJJW sWWWr1   r   )rN   limit_per_promptlen)r.   rK   
mm_optionsrR   s    ` @r/   _extract_mm_optionsz&MultiModalRegistry._extract_mm_optionsf   se     - 	4
 
 
 
 
!3D
 
 

 !__q00zzd:r1   c                    |j         sdS |                     |d          }|                                }|                                t	          fd|D                       rt
                              d           dS dS )z
        Checks if the model supports multimodal inputs.
        Returns True if the model is multimodal with any non-zero supported
        modalities, otherwise returns False, effectively running in
        text-only mode.
        FN	tokenizerc              3   J   K   | ]}                     |          d k    V  dS )r   N)get_limit_per_prompt)rP   modality	mm_configs     r/   	<genexpr>z@MultiModalRegistry.supports_multimodal_inputs.<locals>.<genexpr>   sJ       
 
 **8449
 
 
 
 
 
r1   zcAll limits of multimodal modalities supported by the model are set to 0, running in text-only mode.T)is_multimodal_model_create_processing_infoget_supported_mm_limitsget_multimodal_configalllogger	info_once)r.   rK   r8   supported_modalitiesr^   s       @r/   supports_multimodal_inputsz-MultiModalRegistry.supports_multimodal_inputs{   s     / 	5++LD+II#;;== 6688	  
 
 
 
0
 
 
 
 
 	 ;   5tr1   )r=   profiler_limitsobservability_configr=   ri   rj   c                   |j         si S |                     |||          }||j        }d |                                D             |j                            |j                  }| fd|                                D             S |                     ||          }d |d                                         D             S )	z
        Get the maximum number of tokens per data item from each modality based
        on underlying model configuration.
        r<   Nc                 &    i | ]\  }}|d k    |dS )r   r   r-   )rP   r]   limits      r/   rS   zJMultiModalRegistry.get_max_tokens_per_item_by_modality.<locals>.<dictcomp>   s+     
 
 
+He%RS))Ha)))r1   )seq_len	mm_countsc                 P    i | ]"\  }}                     |d           d k    ||#S )r   )get)rP   r]   
max_tokensro   s      r/   rS   zJMultiModalRegistry.get_max_tokens_per_item_by_modality.<locals>.<dictcomp>   sB       (Hj==1--11 *111r1   )ro   rC   c                 H    i | ]\  }}|t          d  |D                        S )c              3   $   K   | ]}|j         V  d S r,   )get_num_embeds)rP   items     r/   r_   zTMultiModalRegistry.get_max_tokens_per_item_by_modality.<locals>.<dictcomp>.<genexpr>   s%      GG$$-GGGGGGr1   )sum)rP   r]   placeholderss      r/   rS   zJMultiModalRegistry.get_max_tokens_per_item_by_modality.<locals>.<dictcomp>   sE     
 
 
&, cGG,GGGGG
 
 
r1   mm_placeholders)r`   create_processorallowed_mm_limitsitemsr8   get_mm_max_tokens_per_itemmax_model_lenget_dummy_mm_inputs)	r.   rK   r=   ri   rj   rC   max_tokens_per_item	mm_inputsro   s	           @r/   #get_max_tokens_per_item_by_modalityz6MultiModalRegistry.get_max_tokens_per_item_by_modality   s1    / 	I)).e * 
 
	 "'9O
 
/>/D/D/F/F
 
 
	 (nGG . H 
 
 *   ,?,E,E,G,G    ,, - 
 
	
 
*34E*F*L*L*N*N
 
 
 	
r1   )r=   rj   c                R    |j         si S |                     |||          }|j        S )z
        Get the maximum number of multi-modal input instances for each modality
        that are allowed per prompt for a model class.
        r<   )r`   rz   r{   )r.   rK   r=   rj   rC   s        r/   get_mm_limits_per_promptz+MultiModalRegistry.get_mm_limits_per_prompt   sA     / 	I)).e * 
 
	 **r1   rC   r8   r>   c                <     dt           dt           f fd}|S )a/  
        Register a multi-modal processor to a model class. The processor
        is constructed lazily, hence a factory method should be passed.

        When the model receives multi-modal data, the provided function is
        invoked to transform the data into a dictionary of model inputs.
        	model_clsr*   c                     d| j         v rt                              d|            t                    | _        | S )N_processor_factoryzfModel class %s already has a multi-modal processor registered to %s. It is overwritten by the new one.rE   )__dict__re   warningrB   r   )r   r>   r8   rC   r.   s    r/   wrapperz6MultiModalRegistry.register_processor.<locals>.wrapper   s]    #y'999J	   ,?)#, , ,I( r1   )r!   )r.   rC   r8   r>   r   s   ```` r/   register_processorz%MultiModalRegistry.register_processor   sH    	q 	Q 	 	 	 	 	 	 	 	 	" r1   r    c                 n    ddl m}  ||          \  }}t          |d          sJ t          d|          S )Nr   )get_model_architecturer   r    ) vllm.model_executor.model_loaderr   hasattrr   )r.   rK   r   r   _s        r/   _get_model_clsz!MultiModalRegistry._get_model_cls   sP    KKKKKK--l;;	1y"677777()444r1   zObservabilityConfig | NonerZ   c                 H    |t          |          }t          |||          S )N)rj   )r   r   )r.   rK   rj   rZ   s       r/   _create_processing_ctxz)MultiModalRegistry._create_processing_ctx  s6     4\BBI%):N
 
 
 	
r1   rY   c                    |                      |          }|j        }|                     |||          }|                    |          S r,   )r   r   r   r8   )r.   rK   rj   rZ   r   	factoriesr)   s          r/   ra   z*MultiModalRegistry._create_processing_info  sI     ''55	0	)),8LiXX~~c"""r1   )rZ   r=   c                    |j         st          |j         d          |                     |          }|j        }|                     |||          }|                    ||          S )zT
        Create a multi-modal processor for a specific model and tokenizer.
        z is not a multimodal modelr<   )r`   
ValueErrormodelr   r   r   rG   )r.   rK   rj   rZ   r=   r   r   r)   s           r/   rz   z#MultiModalRegistry.create_processor  sv     / 	P 2NNNOOO''55	0	)),8LiXX((E(:::r1   )r=   rj   rC   ro   c                   |j         }||                     |||          }||j        }|j                            |||                     |                    }|                    |j        |j        |j	        |j
                  }|d         }	t          |	          }
|
|k     r|	                    dg||
z
  z             |S )z
        Create dummy data for profiling the memory usage of a model.

        The model is identified by `model_config`.
        Nr<   )rn   ro   rV   )promptmm_datahf_processor_mm_kwargstokenization_kwargsprompt_token_idsr   )r~   rz   r{   r>   get_dummy_processor_inputsrW   applyr   r   r   r   rU   extend)r.   rK   ro   r=   rj   rC   rn   processor_inputsr   r   	total_lens              r/   r   z&MultiModalRegistry.get_dummy_mm_inputs2  s     ,--2% .  I !3I$1LL//== M 
 

 OO#*$,#3#J 0 D	 $ 
 
	 %%78())	w##QC7Y+>$?@@@r1   c                     |j         sdS |                     |          }|sdS t          |          dk    s
J d            t          t	          |                    }||         S )zY
        Get the maximum length of the encoder input for encoder-decoder models.
        r   r   zdEncoder-decoder models are expected to implement the multimodal interface with at most one modality.)is_encoder_decoderr   rU   nextiter)r.   rK   rr   first_modalitys       r/   get_encdec_max_encoder_lenz-MultiModalRegistry.get_encdec_max_encoder_len\  s}     . 	1==lKK
 	 1:!###O $##
 d:..//.))r1   vllm_configr   )Nprocessor_onlylrushmc                    |j         }|                     |          sd S |                                }|j        dk    rd S |j        }|j        dk    o|j        dk    p|j        }|sdS |                                }|j        S )Nr   r   r   )	rK   rh   rc   mm_processor_cache_gbparallel_config_api_process_countdata_parallel_sizedata_parallel_external_lbmm_processor_cache_type)r.   r   rK   r^   r   is_ipc_supporteds         r/   _get_cache_typez"MultiModalRegistry._get_cache_typep  s     #/..|<< 	4 !6688	*a//4 &5*=B 
.!3 98 	
   	$## 6688	00r1   c                     |                      |          }|dS |dk    rt          |j                  S |dk    rt          |j                  S |dk    rt	          |          S t          d|          )z4Return a `BaseMultiModalProcessorCache`, if enabled.Nr   r   r   Unknown cache type: )r   r   rK   r   r   r   r.   r   
cache_types      r/   processor_cache_from_configz.MultiModalRegistry.processor_cache_from_config  s    
 ))+66
4+++/0HIII5  1+2JKKK5  ,[999BJBBCCCr1   c                 \    |                      |          }|dS t          |j                  S )z4Return a `MultiModalProcessorOnlyCache`, if enabled.N)r   r   rK   r   s      r/    processor_only_cache_from_configz3MultiModalRegistry.processor_only_cache_from_config  s3    
 ))+66
4+K,DEEEr1   c                     |                      |          }|dv rdS |dk    rt          |j                  S t          d|          )z>Return a `BaseMultiModalReceiverCache` for the engine process.)Nr   r   Nr   r   )r   r   rK   r   r   s      r/   !engine_receiver_cache_from_configz4MultiModalRegistry.engine_receiver_cache_from_config  s[    
 ))+66
88845  *;+CDDDBJBBCCCr1   shared_worker_lockc                     |                      |          }|dv rdS |dk    rt          ||          S t          d|          )z>Return a `BaseMultiModalReceiverCache` for the worker process.)Nr   r   Nr   r   )r   r   r   )r.   r   r   r   s       r/   !worker_receiver_cache_from_configz4MultiModalRegistry.worker_receiver_cache_from_config  s[     ))+66
88845  .{<NOOOBJBBCCCr1   )rK   r   r*   r    )NNr,   )(r2   r3   r4   r5   r   strr   rW   boolrh   r   intr   r   r   r;   r#   r'   r7   r   r   r   r   r   r   ra   r   rz   r   r   r   r   r   r   r   r   r   r   LockTyper   r-   r1   r/   rJ   rJ   a   sf        ;#; 
&&	'$	.; ; ; ;*}     @ 6:48;?.
 .
 .
#.
 ,d2	.

 !c*T1.
 2D8.
 
c	.
 .
 .
 .
h 6:;?+ + +#+ ,d2	+
 2D8+ 
c	+ + + +& -b1  $B'	 
 03       D5 5 5 5 >B*.	
 
#
 ;
 !4'	

 
 
 
 
 
  >B
#
 +/
# 
# 
##
# ;
#
 !4'
# 

# 
# 
# 
# >B;
 +/59; ; ;#; ;;
 !4'; ,d2; 
!!3	4; ; ; ;0 /3(
 6:;?48( ( (#( 38$t+(
 ,d2( 2D8( +T1( 
( ( ( (T*} * * * * *(1!1 
5	61 1 1 14D!D 
&	,D D D D"	F!	F 
&	,	F 	F 	F 	FD!D 
%t	+D D D DD!D %D 
%t	+	D D D D D Dr1   rJ   N)6collections.abcr   dataclassesr   multiprocessing.synchronizer   r   typingr   r   r   r	   r
   r   vllm.config.multimodalr   vllm.config.observabilityr   vllm.loggerr   vllm.tokenizersr   r   r=   r   r   r   r   r   r   r   inputsr   
processingr   r   r   r   vllm.configr   r   %vllm.model_executor.models.interfacesr    r2   re   typer!   r#   r$   r'   r7   r;   rB   rJ   r-   r1   r/   <module>r      s   $ # # # # # ! ! ! ! ! ! 8 8 8 8 8 8 K K K K K K K K K K K K K K K K 3 3 3 3 3 3 9 9 9 9 9 9 # # # # # # G G G G G G G G                  % $ $ $ $ $             IHHHHHHHHHHHHHHHH	X		GCt01222WT+,,,1TBBB
 
 
 
 
HUO 
 
 
D D D D D D D D* * * * *" * * *  $G G G G G'"+ G G G ^D ^D ^D ^D ^D ^D ^D ^D ^D ^Dr1   