o
    
۾i	                     @   st   d dl mZ d dlmZ d dl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ZmZ G d	d
 d
eZdS )    )abstractmethod)IterableN)
VllmConfig)AttentionLayerBase)AttentionBackend)get_mamba_attn_backend)KVCacheSpec	MambaSpecc                   @   s   e Zd ZU dZeejdf ed< ede	ee
df  fddZeedefddZedeejdf fd	d
ZdededB fddZdee fddZdS )	MambaBasez
    Base class for Mamba-like layers which support the v1 engine.
    Inherit from this class if you implement a custom layer.
    .kv_cachereturnc                 C   s   dS )z
        Defines the shape of the state.
        For mamba layers this is usually a (conv_state, ssm_state) tuple.
        In this case, returns (conv_state_shape, ssm_state_shape).
        N selfr   r   ]/home/ubuntu/.local/lib/python3.10/site-packages/vllm/model_executor/layers/mamba/abstract.pyget_state_shape   s   zMambaBase.get_state_shapec                 C      d S Nr   r   r   r   r   
mamba_type"   s   zMambaBase.mamba_typec                 C   r   r   r   r   r   r   r   get_state_dtype'   s   zMambaBase.get_state_dtypevllm_configNc              	   C   sf   |j d ur|jjjdvrtd|jj}|jj}t| 	 | 
 ||| j|jj|j r/|j jdS ddS )N)
qwen3_nextz5Mamba with speculative decoding is not supported yet.r   )shapesdtypes
block_sizepage_size_paddedr   mamba_cache_modenum_speculative_blocks)speculative_configmodel_config	hf_config
model_typeNotImplementedErrorcache_configmamba_block_sizemamba_page_size_paddedr	   r   r   r   r   num_speculative_tokens)r   r   r$   r   r   r   r   get_kv_cache_spec+   s&   

zMambaBase.get_kv_cache_specc                 C   s
   t | jS )z5Get the attention backend class for this Mamba layer.)r   r   r   r   r   r   get_attn_backendC   s   
zMambaBase.get_attn_backend)__name__
__module____qualname____doc__tupletorchTensor__annotations__r   r   intr   propertystrr   dtyper   r   r   r'   typer   r(   r   r   r   r   r
      s   
 r
   )abcr   collections.abcr   r.   vllm.configr   /vllm.model_executor.layers.attention_layer_baser   vllm.v1.attention.backendr   vllm.v1.attention.selectorr   vllm.v1.kv_cache_interfacer   r	   r
   r   r   r   r   <module>   s   