o
    i
                     @   s   d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZmZ d dlmZmZ G dd deZeG d	d
 d
ZG dd dee ZdS )    )	dataclassN)
VllmConfig)AttentionBackendAttentionCGSupportAttentionMetadataBuilderCommonAttentionMetadata)mamba_get_block_table_tensorsplit_decodes_and_prefills)AttentionSpec	MambaSpecc                   @   s4   e Zd ZedefddZeded fddZdS )LinearAttentionBackendreturnc                   C   s   dS )NLINEAR_ATTN r   r   r   \/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/v1/attention/backends/linear_attn.pyget_name      zLinearAttentionBackend.get_nameLinearAttentionMetadataBuilderc                   C   s   t S N)r   r   r   r   r   get_builder_cls   r   z&LinearAttentionBackend.get_builder_clsN)__name__
__module____qualname__staticmethodstrr   typer   r   r   r   r   r      s
    r   c                   @   sL   e Zd ZU eed< eed< eed< eed< ejed< ejed< ejed< dS )	LinearAttentionMetadatanum_prefillsnum_prefill_tokensnum_decodesnum_decode_tokensquery_start_locseq_lensstate_indices_tensorN)r   r   r   int__annotations__torchTensorr   r   r   r   r      s   
 

r   c                	       sf   e Zd ZU dZeed< ejZde	de
e dedejf fddZ		dd
edededefddZ  ZS )r      reorder_batch_thresholdkv_cache_speclayer_namesvllm_configdevicec                    s$   t  |||| t|tsJ d S r   )super__init__
isinstancer   )selfr*   r+   r,   r-   	__class__r   r   r/   0   s   z'LinearAttentionMetadataBuilder.__init__Fcommon_prefix_lencommon_attn_metadata
fast_buildr   c              	   C   sb   |j }|j}t|j|j| j| jjjd d df }t|| j	d\}}}	}
t
||
||	|||d}|S )Nr   )decode_threshold)r   r   r   r    r!   r"   r#   )r!   r"   r   block_table_tensorr*   r,   cache_configmamba_cache_moder	   r)   r   )r1   r4   r5   r6   r!   r"   r#   r   r   r    r   attn_metadatar   r   r   build:   s0   

	z$LinearAttentionMetadataBuilder.build)F)r   r   r   r)   r$   r%   r   UNIFORM_SINGLE_TOKEN_DECODE_cudagraph_supportr
   listr   r   r&   r-   r/   r   boolr   r<   __classcell__r   r   r2   r   r   +   s,   
 r   )dataclassesr   r&   vllm.configr   vllm.v1.attention.backendr   r   r   r    vllm.v1.attention.backends.utilsr   r	   vllm.v1.kv_cache_interfacer
   r   r   r   r   r   r   r   r   <module>   s   
