o
    پi|                     @   s2  d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	 ddl
ZddlZddlmZ ddlmZ eeZded	efd
dZedddG dd dZddefddZedddG dd deZedddG dd dZedddG dd deZedddG dd dZedddG dd deZdS )zKCommon config utils for mamba2 - NemotronH, FalconH1, Qwen3Next, LFM2, etc.    N)ABC)	dataclassfield)ListOptional)divide)envsngroupstp_sizec                 C   s   | | dkrdS ||  S )zkCompute the increase in group numbers to account for
    replication in order to accompany the head shards.r    )r	   r
   r   r   R/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/configs/mamba_utils.pyextra_groups_for_head_shards   s   r   T)kw_onlyfrozenc                   @   s"   e Zd ZU ejed< ejed< dS )Mamba2StateDTypeconvtemporalN)__name__
__module____qualname__torchdtype__annotations__r   r   r   r   r   )   s   
 
r   returnc                 C   s  t jt jt jd}|tj t j}t j}| durQd}t| dr,t| jdr,| jj	}nt| dr4| j	}|durQ||vrMt
d| dt|  d n|| }tj }|durs||vrot
d| dt|  d n|| }t
d	| d
|  t||dS )a  
    Get mamba2 state dtype from config or environment variable.

    Priority (from highest to lowest):
    1. Environment variable SGLANG_MAMBA_SSM_DTYPE
    2. Config file (config.mamba_ssm_dtype or config.text_config.mamba_ssm_dtype)
    3. Default "float32"

    Args:
        config: Optional config object (PretrainedConfig). If provided, will read
                mamba_ssm_dtype from it. For VL models, reads from text_config.

    Returns:
        Mamba2StateDType with conv and temporal dtypes
    )float32bfloat16float16Ntext_configmamba_ssm_dtypezInvalid mamba_ssm_dtype 'z' in config. Must be one of z. Using default 'float32'.z,' from environment variable. Must be one of zMamba2 state dtype: conv_dtype=z, ssm_dtype=)r   r   )r   r   r   r   getr   SGLANG_MAMBA_CONV_DTYPEhasattrr   r   loggerwarninglistkeysSGLANG_MAMBA_SSM_DTYPEdebugr   )config	dtype_map
conv_dtype	ssm_dtypeconfig_dtypeenv_ssm_dtyper   r   r   mamba2_state_dtype/   sB   




r.   c                   @   sB   e Zd ZU edd dZeed< ee ed< e	defddZ
d	S )
BaseLinearStateParamsc                   C   s   t d S N)r.   r   r   r   r   <lambda>p   s    zBaseLinearStateParams.<lambda>)default_factoryr   layersr   c                 C   sT   t tdd | jjD }t t| jj}|| jjj || jjj  t	| j
 S )Nc                 S   s   g | ]}t |qS r   )npprod).0
conv_shaper   r   r   
<listcomp>v   s    z=BaseLinearStateParams.mamba_cache_per_req.<locals>.<listcomp>)intr4   sumshaper   r5   r   r   itemsizelenr3   )self
conv_numel	ssm_numelr   r   r   mamba_cache_per_reqs   s   z)BaseLinearStateParams.mamba_cache_per_reqN)r   r   r   r   r   r   r   r$   r9   propertyrA   r   r   r   r   r/   n   s
   
 r/   c                   @   s   e Zd ZU eeeef  ed< eeeef ed< eed< eed< eed< eed< eed< eed< eed	< ed
edededededed	edd fddZdS )Mamba2StateShaper   r   intermediate_sizeconv_dimssm_state_size	num_headshead_dim
state_sizeconv_kerneltp_world_sizen_groupsr   c                 C   sl   ||  dkrt || }||7 }|d| |  }t|| |d f}	t|| ||f}
t|	g|
|||||||d	S )Nr         )	r   r   rD   rE   rF   rG   rH   rI   rJ   )r   r   rC   )rK   rD   rL   rG   rH   rI   rJ   extra_groupsrE   conv_state_shapetemporal_state_shaper   r   r   create   s"   
zMamba2StateShape.createN)	r   r   r   r$   tupler9   r   staticmethodrR   r   r   r   r   rC      s8   
 	rC   c                   @      e Zd ZU eed< dS )Mamba2CacheParamsr;   N)r   r   r   rC   r   r   r   r   r   rV         
 rV   c                   @   s   e Zd ZU eeeef  ed< eeeef ed< eed< eed< eed< eed< eed< eed< ed	d	d
dddedededee dee dededd fddZ	d	S )KimiLinearStateShaper   r   rG   rH   num_k_heads
head_k_dimrJ   num_specN   r   )rY   rZ   conv_kernel_sizer[   rK   r]   r   c              
   C   s   |d u r|}|d u r|}|| }|| }t || |d f}	t || |d f}
t || ||f}|	d |	d f}	|
d |
d f}
t|	|
|
g|||||||dS )NrN   r   )r   r   rG   rH   rY   rZ   rJ   r[   )r   rX   )rK   rG   rH   rY   rZ   r]   r[   	proj_sizeproj_k_sizerP   conv_state_k_shaperQ   r   r   r   rR      s*   zKimiLinearStateShape.create)
r   r   r   r   rS   r9   r   rT   r   rR   r   r   r   r   rX      s>   
 	rX   c                   @   rU   )KimiLinearCacheParamsr;   N)r   r   r   rX   r   r   r   r   r   ra      rW   ra   r0   )__doc__loggingabcr   dataclassesr   r   typingr   r   numpyr4   r   sglang.srt.distributed.utilsr   sglang.srt.environr   	getLoggerr   r"   r9   r   r   r.   r/   rC   rV   rX   ra   r   r   r   r   <module>   s0   


?

3

1