o
    پi                     @   s  U d dl Z d dl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mZ d dlmZmZ eeZdaee ed< d	d
 dd
 dZdedejdefddZdedejdefddZdefddZdejdededefddZdeddfddZdee fdd ZdS )!    N)Optional)BaseSparseAlgorithmDeepSeekNSAAlgorithmQuestAlgorithm)FlashAttentionAdaptorNSABackendAdaptor)SparseConfigSparseCoordinator_global_sparse_coordinatorc                 K      t | |fi |S Nr   configdevicekw r   Y/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/mem_cache/sparsity/factory.py<lambda>   s    r   c                 K   r   r   r   r   r   r   r   r      s
    )questdeepseek_nsar   r   returnc                 K   s<   | j  }t|}|d u rtd| || |fi |S )NzUnknown sparse algorithm: )	algorithmlower_ALGORITHM_REGISTRYget
ValueError)r   r   kwargsalgorithm_namefactoryr   r   r   _create_sparse_algorithm   s
   

r!   backendsparse_algorithmc                 C   s2   t |tr
t||S | dv rt|S td|  )zCreate backend adaptor.)fa3flashattentionzUnknown attention backend: )
isinstancer   r	   r   r   )r"   r   r#   req_to_token_poolr   r   r   _create_backend_adaptor-   s
   

r(   c           	   
   C   s   | j }|dur>zt|}|dd}|dd}|dd}|}W n tjy= } ztd|  W Y d}~nd}~ww t||| j||d	}|S )
z Parse hierarchical sparse configNr   r   r"   r%   min_sparse_prompt_leni   z<Failed to parse hierarchical_sparse_attention_extra_config: )r   r"   	page_sizer)   sparse_extra_config)	*hierarchical_sparse_attention_extra_configjsonloadspopJSONDecodeErrorloggerwarningr
   r*   )	server_argsextra_config_strextra_configr   r"   r)   r+   er   r   r   r   _parse_sparse_config=   s,   
r7   start_layer	end_layerc              
   K   sN   t |}t|| fi |}t|j| ||}	t|||	||||| d}
t|
 |
S )N)r   r   backend_adaptorr'   token_to_kv_poolr8   r9   r   )r7   r!   r(   r"   r   register_sparse_coordinator)r   r'   r;   r8   r9   r3   r   r   r   r:   coordinatorr   r   r   create_sparse_coordinator[   s"   	

r>   r=   c                 C   s   | a d S r   r   )r=   r   r   r   r<   x   s   r<   c                   C   s   t S r   r?   r   r   r   r   get_sparse_coordinator}   s   r@   ) r-   loggingtypingr   torch7sglang.srt.mem_cache.sparsity.algorithms.base_algorithmr   5sglang.srt.mem_cache.sparsity.algorithms.deepseek_nsar   8sglang.srt.mem_cache.sparsity.algorithms.quest_algorithmr   5sglang.srt.mem_cache.sparsity.backend.backend_adaptorr   r	   5sglang.srt.mem_cache.sparsity.core.sparse_coordinatorr
   r   	getLogger__name__r1   r   __annotations__r   r   r!   strr(   r7   intr>   r<   r@   r   r   r   r   <module>   sP   
 



