
    .`iZ                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZ d dlZd dlZd dlmZ d dlmZ d dlmZ e	r/d dlmZ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% ne&Z# ee'          Z(de)fdZ* G d dej+                  Z, G d dej+                  Z- G d de          Z. G d d          Z/ G d de/          Z0dS )    N)	timedelta)TYPE_CHECKINGAny
NamedTupleOptional)
deprecated)init_logger)AttentionBackendEnum)PrefixStoreProcessGroup)
VllmConfig)ProcessorInputs
PromptType)PoolingParams)SamplingParams)FlexibleArgumentParser)AttentionSelectorConfigreturnc                  v    dd                     t          j                                                              v S )N	microsoft )joinplatformunamelower     l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/platforms/interface.pyin_wslr   "   s-    #((8>#3#344::<<<<r   c                       e Zd Z ej                    Z ej                    Z ej                    Z ej                    Z ej                    Z	 ej                    Z
 ej                    ZdS )PlatformEnumN)__name__
__module____qualname__enumautoCUDAROCMTPUXPUCPUOOTUNSPECIFIEDr   r   r   r!   r!   '   si        49;;D49;;D
$)++C
$)++C
$)++C
$)++C$)++KKKr   r!   c                       e Zd Z ej                    Z ej                    Z ej                    Z ej                    Z ej                    Z	 ej                    Z
 ej                    ZdS )CpuArchEnumN)r"   r#   r$   r%   r&   X86ARMPOWERPCS390XRISCVOTHERUNKNOWNr   r   r   r/   r/   1   si        
$)++C
$)++CdikkGDIKKEDIKKEDIKKEdikkGGGr   r/   c                       e Zd ZU eed<   eed<   dedefdZdedefdZdedefdZ	dedefdZ
dedefd	Zdefd
ZdefdZdS )DeviceCapabilitymajorminorotherr   c                 v    t          |t                    st          S | j        | j        f|j        |j        fk     S N
isinstancer8   NotImplementedr9   r:   selfr;   s     r   __lt__zDeviceCapability.__lt__?   8    %!122 	"!!
DJ'5;*DDDr   c                 v    t          |t                    st          S | j        | j        f|j        |j        fk    S r=   r>   rA   s     r   __le__zDeviceCapability.__le__D   8    %!122 	"!!
DJ'EK+EEEr   c                 v    t          |t                    st          S | j        | j        f|j        |j        fk    S r=   r>   rA   s     r   __eq__zDeviceCapability.__eq__I   rG   r   c                 v    t          |t                    st          S | j        | j        f|j        |j        fk    S r=   r>   rA   s     r   __ge__zDeviceCapability.__ge__N   rG   r   c                 v    t          |t                    st          S | j        | j        f|j        |j        fk    S r=   r>   rA   s     r   __gt__zDeviceCapability.__gt__S   rD   r   c                 $    | j          d| j         S )N.)r9   r:   rB   s    r   as_version_strzDeviceCapability.as_version_strX   s    *++tz+++r   c                 R    d| j         cxk    rdk     sn J | j        dz  | j         z   S )z
        Express device capability as an integer `<major><minor>`.

        It is assumed that the minor version is always a single digit.
        r   
   )r:   r9   rP   s    r   to_intzDeviceCapability.to_int[   s>     DJ##########zB++r   N)r"   r#   r$   int__annotations__r   boolrC   rF   rI   rK   rM   strrQ   rT   r   r   r   r8   r8   ;   s&        JJJJJJEC ED E E E E
FC FD F F F F
FC FD F F F F
FC FD F F F F
EC ED E E E E
, , , , ,, , , , , , ,r   r8   c                   t   e Zd ZU eed<   eed<   eed<   dZeed<   dZeed<   dZeed	<   d
Z	eed<   dZ
eed<   g Zee         ed<   g Zee         ed<   dZedz  ed<   edefd            Zedeej                 fd            ZdefdZdefdZdefdZdefdZdefdZdefdZdefdZdedefdZdefdZdefdZ e!defd            Z"e!defd             Z#e!d!efd"            Z$e!drd#            Z%e!d$d%d&d'defd(            Z&e!ded%         fd)            Z'e!	 dsd*ed+ej        d,e(d%         dd%fd-            Z)e!	 dtd!ede*dz  fd/            Z+e!	 dtd0e,eef         ez  d!edefd1            Z-e!	 dtd0e,eef         ez  d!edefd2            Z.e!	 dtd0ed!edefd3            Z/e!dtd!edefd4            Z0e!dtd!edefd5            Z1e!dtd!edefd6            Z2e!d7             Z3e! e4d8          dsd9edz  ddfd:                        Z5e!d;ej6        ddfd<            Z7e!	 dsd=e8dz  ddfd>            Z9e!dudA            Z:e!dBeddfdC            Z;e!dDeddfdE            Z<e!de=fdF            Z>e!defdG            Z?e!	 dsd;ej@        jA        dz  deBfdH            ZCe!defdI            ZDe!d+ej        de,eBeBf         fdJ            ZEe!defdK            ZFe!defdL            ZGe!defdM            ZHe!defdN            ZIe!defdO            ZJe!defdP            ZKe!dej        fdQ            ZLe!defdR            ZMe!defdS            ZNe!defdT            ZOe!	 	 	 	 	 	 	 	 dvd[            ZPd\efd]ZQdefd^ZRe!defd_            ZSe!d,ed`dadbedceddeTddefdf            ZUe!d+ej        fdg            ZVe!defdh            ZWe!defdi            ZXe!defdj            ZYe!dk             ZZe!de[ee,edlf         f         fdm            Z\e!dedz  fdn            Z]e!doedefdp            Z^e!de[eef         fdq            Z_dS )wPlatform_enumdevice_namedevice_typer+   dispatch_key ray_device_key'VLLM_DEVICE_CONTROL_ENV_VAR_PLACEHOLDERdevice_control_env_varinductorsimple_compile_backenddist_backendsupported_quantizationadditional_env_varsN_global_graph_poolr   c                     dS )z3Inductor config key for the PassManager custom passpost_grad_custom_post_passr   rP   s    r   pass_keyzPlatform.pass_key   s
     ,+r   c                 H    t           j        t           j        t           j        gS )z6Returns the supported dtypes for the current platform.)torchbfloat16float16float32rP   s    r   supported_dtypeszPlatform.supported_dtypes   s     u}==r   c                 ,    | j         t          j        k    S r=   )r[   r!   r'   rP   s    r   is_cudazPlatform.is_cuda       z\...r   c                 ,    | j         t          j        k    S r=   )r[   r!   r(   rP   s    r   is_rocmzPlatform.is_rocm   rt   r   c                 ,    | j         t          j        k    S r=   )r[   r!   r)   rP   s    r   is_tpuzPlatform.is_tpu       z\---r   c                 ,    | j         t          j        k    S r=   )r[   r!   r*   rP   s    r   is_xpuzPlatform.is_xpu   ry   r   c                 ,    | j         t          j        k    S r=   )r[   r!   r+   rP   s    r   is_cpuzPlatform.is_cpu   ry   r   c                 ,    | j         t          j        k    S r=   )r[   r!   r,   rP   s    r   is_out_of_treezPlatform.is_out_of_tree   ry   r   c                 ,    | j         t          j        k    S r=   )r[   r!   r-   rP   s    r   is_unspecifiedzPlatform.is_unspecified   s    z\555r   
prompt_lenc                     t           j        S r=   )sysmaxsize)rB   r   s     r   get_max_output_tokenszPlatform.get_max_output_tokens   s
    {r   c                 @    | j         t          j        t          j        fv S )z1Stateless version of [torch.cuda.is_available][].r[   r!   r'   r(   rP   s    r   is_cuda_alikezPlatform.is_cuda_alike   s    zl/1BCCCr   c                 @    | j         t          j        t          j        fv S r=   r   rP   s    r   is_sleep_mode_availablez Platform.is_sleep_mode_available   s    
 zl/1BCCCr   c                     dS )z
        Get the pass manager class for this platform.
        It will be registered as a custom pass under the current_platform.pass_key.
        z1vllm.compilation.pass_manager.PostGradPassManagerr   clss    r   get_pass_manager_clszPlatform.get_pass_manager_cls   s     CBr   c                     | j         S )zF
        Get the custom compile backend for current platform.
        )rd   r   s    r   get_compile_backendzPlatform.get_compile_backend   s    
 ))r   	device_idc                     | j         t          j        v r\t          j        | j                  dk    rAt          j        | j                                      d          }||         }t	          |          S |S )Nr_   ,)rb   osenvironsplitrU   )r   r   
device_idsphysical_device_ids       r   device_id_to_physical_device_idz(Platform.device_id_to_physical_device_id   sf     &"*44
356"<<C$>?EEcJJJ!+I!6)***r   c                     	 ddl }n2# t          $ r%}t                              d|           Y d}~nd}~ww xY wt	          j        t                    5  ddl}ddd           dS # 1 swxY w Y   dS )z'Import any platform-specific C kernels.r   Nz!Failed to import from vllm._C: %r)vllm._CImportErrorloggerwarning
contextlibsuppressvllm._moe_C)r   vllmes      r   import_kernelszPlatform.import_kernels   s    	CNNNN 	C 	C 	CNN>BBBBBBBB	C -- 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s"    
616A$$A(+A(selected_backendr
   attn_selector_configr   c                     dS )z,Get the attention backend class of a device.r_   r   )r   r   r   s      r   get_attn_backend_clszPlatform.get_attn_backend_cls   s	     rr   c                     t           j        gS r=   )r
   
TORCH_SDPAr   s    r   get_supported_vit_attn_backendsz(Platform.get_supported_vit_attn_backends   s     !+
 	
r   	head_sizedtypebackendc                    |X||                                  v s"J d| d|                                               t                              d| d           |S t                              dt          j         d           t          j        S )a  
        Get the vision attention backend class of a device.

        NOTE: ViT Attention should be checked and override in the platform-specific
        implementation. we should not override this in any other places, like
        the model_executor/models/<model_name>.py.

        We check if the backend is None or not:
            1. If not, check if the backend is supported by the platform.
            2. If None, continue to the default selection logic.
        NzBackend z; is not supported for vit attentionSupported backends are: zUsing backend z for vit attentionzUsing default backend )r   r   	info_oncer
   r   )r   r   r   r   s       r   get_vit_attn_backendzPlatform.get_vit_attn_backend   s    $ cAACCCCCS7 S S+.+N+N+P+PS S DCC IgIIIJJJNX%9%DXXX	
 	
 	
 $..r   r   c                     dS )z:Stateless version of [torch.cuda.get_device_capability][].Nr   r   r   s     r   get_device_capabilityzPlatform.get_device_capability  s	     tr   
capabilityc                     |                      |          }|dS t          |t                    r||k    S |                                |k    S )a.  
        Test whether this platform is compatible with a device capability.

        The `capability` argument can either be:

        - A tuple `(major, minor)`.
        - An integer `<major><minor>`. (See
        [`DeviceCapability.to_int`][vllm.platforms.interface.DeviceCapability.to_int])
        r   NFr   r?   tuplerT   r   r   r   current_capabilitys       r   has_device_capabilityzPlatform.has_device_capability  Z     !666KK%5j%(( 	4%33!((**j88r   c                     |                      |          }|dS t          |t                    r||k    S |                                |k    S )a3  
        Test whether this platform has exactly the specified device capability.

        The `capability` argument can either be:

        - A tuple `(major, minor)`.
        - An integer `<major><minor>`. (See
        [`DeviceCapability.to_int`][vllm.platforms.interface.DeviceCapability.to_int])
        r   NFr   r   s       r   is_device_capabilityzPlatform.is_device_capability0  r   r   c                 r    |                      |          }|dS |                                dz  |dz  k    S )z
        Returns True if the device capability is any <major>.x.
        Mirrors CUDA 13 'family' architecture semantics (e.g. 10.x, 11.x, 12.x).
        r   NFrS   )r   rT   r   s       r   is_device_capability_familyz$Platform.is_device_capability_familyH  sG     !666KK%5"))++r1zR7GHHr   c                     t           )zGet the name of a device.NotImplementedErrorr   s     r   get_device_namezPlatform.get_device_nameW  
     "!r   c                     t           )z.Get the uuid of a device, e.g. the PCI bus ID.r   r   s     r   get_device_uuidzPlatform.get_device_uuid\  r   r   c                     t           )z*Get the total memory of a device in bytes.r   r   s     r   get_device_total_memoryz Platform.get_device_total_memorya  r   r   c                 ,    t          j        d          S )a  A device-specific wrapper of `torch.inference_mode`.

        This wrapper is recommended because some hardware backends such as TPU
        do not support `torch.inference_mode`. In such a case, they will fall
        back to `torch.no_grad` by overriding this method.
        T)mode)rm   inference_moder   s    r   r   zPlatform.inference_modef  s     #....r   z`seed_everything` is deprecated. It will be removed in v0.15.0 or later. Please use `vllm.utils.torch_utils.set_random_seed` instead.seedc                     |It          j        |           t          j                             |           t          j        |           dS dS )z
        Set the seed of each random module.
        `torch.manual_seed` will set seed on all devices.

        Loosely based on: https://github.com/Lightning-AI/pytorch-lightning/blob/2.4.0/src/lightning/fabric/utilities/seed.py#L20
        N)randomr   nprm   manual_seed)r   r   s     r   seed_everythingzPlatform.seed_everythingp  sM     KINN4   d##### r   devicec                     t           )z:
        Set the device for the current platform.
        r   r   r   s     r   
set_devicezPlatform.set_device  
    
 "!r   parserc                     dS )a  
        Do some pre-registration or update action for the current platform.

        This function is called before global VllmConfig is initialized or cli
        arguments are parsed. It's used for out-of-tree platforms to register or
        update the configuration.

        For example, the out-of-tree quantization config can be imported and
        registered here dynamically.
        Nr   )r   r   s     r   pre_register_and_updatez Platform.pre_register_and_update  s	     	r   vllm_configr   c                     dS )ac  
        Check and update the configuration for the current platform.

        It can raise an exception if the configuration is not compatible with
        the current platform, or it can update the configuration to make it
        compatible with the current platform.

        The config is passed by reference, so it can be modified in place.
        Nr   )r   r   s     r   check_and_update_configz Platform.check_and_update_config  s	     	r   
model_archc                     dS )a  
        Verify whether the current platform supports the specified model
        architecture.

        - This will raise an Error or Warning based on the model support on
        the current platform.
        - By default all models are considered supported.
        Nr   )r   r   s     r   verify_model_archzPlatform.verify_model_arch  s	     	r   quantc                 ^    | j         r#|| j         vrt          | d| j         d          dS dS )zW
        Verify whether the quantization is supported by the current platform.
        z, quantization is currently not supported in rO   N)rf   
ValueErrorr\   )r   r   s     r   verify_quantizationzPlatform.verify_quantization  sT    
 % 	%s7Q*Q*QXXcoXXX  	 	*Q*Qr   c                    t          j                                                    }|dv rt          j        S |                    d          s|                    d          rt          j        S |                    d          rt          j        S |dk    rt          j        S |                    d          rt          j	        S |rt          j
        nt          j        S )z
        Determine the CPU architecture of the current system.
        Returns CpuArchEnum indicating the architecture type.
        )x86_64amd64i386i686armaarchppcs390xriscv)r   machiner   r/   r0   
startswithr1   r2   r3   r4   r5   r6   )r   r   s     r   get_cpu_architecturezPlatform.get_cpu_architecture  s     "$$**,,999?"&& 	%'*<*<W*E*E 	%?"&& 	%&&$$(( 	%$$$+D{  1DDr   c                 Z    t                      rt                              d           dS dS )z?Checks whether pin memory is available on the current platform.zPUsing 'pin_memory=False' as WSL is detected. This may slow down the performance.FT)r   r   r   r   s    r   is_pin_memory_availablez Platform.is_pin_memory_available  s9     88 	 NN6   5tr   c                     t           )z3
        Return the memory usage in bytes.
        r   r   s     r   get_current_memory_usagez!Platform.get_current_memory_usage  s
     "!r   c                     t           )zA
        Return the punica wrapper for current platform.
        r   r   s    r   get_punica_wrapperzPlatform.get_punica_wrapper  r   r   c                 >    t          d          t          d          fS )zE
        Return the platform specific values for (-inf, inf)
        z-infinf)floatr   r   s     r   get_infinity_valueszPlatform.get_infinity_values  s    
 V}}eEll**r   c                     dS )zF
        Checks if the platform allows inplace memory updates
        Tr   r   s    r   can_update_inplacezPlatform.can_update_inplace  	    
 tr   c                     dS )zK
        Returns how much padding the LoRA logits need for kernels
           r   r   s    r   get_lora_vocab_padding_sizez$Platform.get_lora_vocab_padding_size  s	    
 sr   c                     dS )zW
        Get device specific communicator class for distributed communication.
        zUvllm.distributed.device_communicators.base_device_communicator.DeviceCommunicatorBaser   r   s    r   get_device_communicator_clsz$Platform.get_device_communicator_cls  s    
 gfr   c                     dS )zI
        Returns whether the current platform supports MX types.
        Fr   r   s    r   supports_mxzPlatform.supports_mx	  	    
 ur   c                     dS )zJ
        Returns whether the current platform supports FP8 types.
        Fr   r   s    r   supports_fp8zPlatform.supports_fp8  r	  r   c                     dS )a  
        Returns whether the preferred FP8 type is FNUZ on the current platform.

        There are two representations of FP8, OCP FP8 and FNUZ FP8.
        The OCP specification can be found at https://tinyurl.com/b7jvwpft.
        The FNUZ specification can be found at https://tinyurl.com/5n6hwwu5.

        AMD's MI300 and MI325 have native hardware support for FNUZ. All other
        hardware has converged on the OCP FP8 standard.
        Fr   r   s    r   is_fp8_fnuzzPlatform.is_fp8_fnuz  s	     ur   c                     t           j        S )z
        Returns the preferred FP8 type on the current platform.

        See the documentation for is_fp8_fnuz for details.
        )rm   float8_e4m3fnr   s    r   	fp8_dtypezPlatform.fp8_dtype%  s     ""r   c                     dS )zS
        Whether to use allgather in LogitsProcessor to gather the logits.
        Tr   r   s    r   use_all_gatherzPlatform.use_all_gather.  r  r   c                     dS )zR
        Returns if custom allreduce is supported on the current platform
        Fr   r   s    r   use_custom_allreducezPlatform.use_custom_allreduce5  r	  r   c                     dS )zu
        Returns True if we register attention as one giant opaque custom op
        on the current platform
        Fr   r   s    r   opaque_attention_opzPlatform.opaque_attention_op<  s	     ur   promptr   paramsSamplingParams | PoolingParamsprocessed_inputsr   c                     dS )z6Raises if this request is unsupported on this platformNr   )r   r  r  r  s       r   validate_requestzPlatform.validate_requestD  s      r   keyc                     t          t          | j        d           }|$t          ||          rt          ||          }||S t                              d| j        |           d S )Nz1Current platform %s does not have '%s' attribute.)getattrrm   r]   hasattrr   r   )rB   r  r   attrs       r   __getattr__zPlatform.__getattr__M  sp     0$77'&#"6"663''D ?	
 	
 	

 tr   c                 ^    | j         }|j        |                                 |_        |j        S )zA
        Return the global graph pool for this platform.
        )	__class__rh   graph_pool_handle)rB   r   s     r   get_global_graph_poolzPlatform.get_global_graph_pool]  s1     n!)%)%;%;%=%=C"%%r   c                     dS )zB
        Get static graph wrapper class for static graph.
        z=vllm.compilation.base_static_graph.AbstractStaticGraphWrapperr   r   s    r   get_static_graph_wrapper_clsz%Platform.get_static_graph_wrapper_clsf  s    
 ONr   prefix_storer   
group_rank
group_sizetimeoutr   c                     t           )zI
        Init platform-specific torch distributed process group.
        r   )r   r   r)  r*  r+  r,  s         r   #stateless_init_device_torch_dist_pgz,Platform.stateless_init_device_torch_dist_pgm  s
     "!r   c                     t           )zJ
        Check if the dtype is supported by the current platform.
        r   r   s     r   check_if_supports_dtypez Platform.check_if_supports_dtype{  r   r   c                     dS )zV
        Returns if the hybrid kv cache is supported by the current platform.
        Fr   r   s    r   support_hybrid_kv_cachez Platform.support_hybrid_kv_cache  r	  r   c                     dS )zQ
        Returns if the graph mode is supported by the current platform.
        Fr   r   s    r   support_static_graph_modez"Platform.support_static_graph_mode  r	  r   c                     dS )zN
        Returns if the current platform needs to sync weight loader.
        Fr   r   s    r   use_sync_weight_loaderzPlatform.use_sync_weight_loader  r	  r   c                 >    |                                  sS fd}|S )zD
        Wrap the original weight loader to make it synced.
        c                      | g|R i |}| j         t          j         d          k    rt          j        |            |S )Ncpu)r   rm   _sync)paramargskwargsoutoriginal_weight_loaders       r   _synced_weight_loaderzAPlatform.make_synced_weight_loader.<locals>._synced_weight_loader  sO    ((@@@@@@C|u|E2222E"""Jr   )r6  )r   r?  r@  s    ` r   make_synced_weight_loaderz"Platform.make_synced_weight_loader  s@    
 ))++ 	*))	 	 	 	 	 %$r   .c                     i S )zo
        Returns a mapping from device_type to a tuple of supported
        kv_buffer_device for nixl.
        r   r   s    r   get_nixl_supported_devicesz#Platform.get_nixl_supported_devices  s	     	r   c                     dS )zH
        Returns the nixl memory type for the current platform.
        Nr   r   s    r   get_nixl_memory_typezPlatform.get_nixl_memory_type  r  r   max_model_lenc                     |S )z?
        Check max_model_len for the current platform.
        r   )r   rF  s     r   check_max_model_lenzPlatform.check_max_model_len  s
    
 r   c                     i S )zX
        Set some additional forward context for the current platform if needs.
        r   )r   r<  r=  s      r   set_additional_forward_contextz'Platform.set_additional_forward_context  s	    
 	r   )r   Nr=   )r   )r   r   r   N)r  r   r  r  r  r   r   N)`r"   r#   r$   r!   rV   rX   r^   r`   rb   rd   re   rf   listrg   rh   r   propertyrk   rm   r   rq   rW   rs   rv   rx   r{   r}   r   r   rU   r   r   r   classmethodr   r   r   r   r   r   r   r   r8   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r   r   typesDevicer   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r"  r&  r(  r   r.  r0  r2  r4  r6  rA  dictrC  rE  rH  rJ  r   r   r   rZ   rZ   e   s        
 L#
 NC #LCKKK #-C,,, L#(*DI***%'c'''%)d
))),# , , , X, >$u{"3 > > > X>/ / / / // / / / /. . . . .. . . . .. . . . .. . . . .6 6 6 6 6     Dt D D D DD D D D D CS C C C [C *C * * * [*     [    [ 0 8 
	   [ 
5K0L 
 
 
 [

 
 59	/ // {/ 01	/
 
 / / / [/<    
D	    [  9 9#s(Oc)9 9 
	9 9 9 [9.  9 9#s(Oc)9 9 
	9 9 9 [9.  I II I 
	I I I [I " " "C " " " [" " " "C " " " [" " " "C " " " [" / / [/ Z	G 
$ 
$3: 
$ 
$ 
$ 
$	  [

$ " " " " " [" 59 +d2	   [ 
 
 
 [
 	3 	4 	 	 	 [	      [ E[ E E E [E( 
 
 
 
 [
 15" "['$."	" " " [" "3 " " " [" + +eUl8K + + + [+ 4    [ C    [ gC g g g [g D    [ T    [ D    [ #%+ # # # [# t    [ T    [ D    [ EE 1E ,	E
 
E E E [Es     &s & & & & OS O O O [O "" $" 	"
 " " 
" " " [" "EK " " " ["     [ $    [ t    [ % % [% 4U38_0D+E    [ S4Z    [      [ S#X    [  r   rZ   c                        e Zd Zej        ZdZdS )UnspecifiedPlatformr_   N)r"   r#   r$   r!   r-   r[   r]   r   r   r   rR  rR    s        $EKKKr   rR  )1r   r%   r   r   r   r   datetimer   typingr   r   r   r   numpyr   rm   typing_extensionsr   vllm.loggerr	   #vllm.v1.attention.backends.registryr
   torch.distributedr   r   vllm.configr   vllm.inputsr   r   vllm.pooling_paramsr   vllm.sampling_paramsr   vllm.utils.argparse_utilsr   vllm.v1.attention.selectorr   objectr"   r   rW   r   Enumr!   r/   r8   rZ   rR  r   r   r   <module>rb     sn        				   



       ; ; ; ; ; ; ; ; ; ; ; ;      ( ( ( ( ( ( # # # # # # D D D D D D 
$;;;;;;;;&&&&&&77777777111111333333@@@@@@BBBBBBB#	X		= = = = =
    49       $)   ', ', ', ', ',z ', ', ',T]	 ]	 ]	 ]	 ]	 ]	 ]	 ]	@    (     r   