o
    پi	                     @  sl   d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZ eG dd dZG d	d
 d
ZdS )    )annotations)	dataclass)OptionalN)
ServerArgs)is_cpuis_cudac                   @  s@   e Zd ZU ded< ded< ded< dddZd	d
 Zdd ZdS )ElasticEPStatezOptional[torch.Tensor]active_rankslast_active_ranksactive_ranks_cpureturnboolc                 C  s   t | j| jS N)torchequalr	   r
   self r   T/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/elastic_ep/elastic_ep.pyis_active_equal_last   s   z#ElasticEPState.is_active_equal_lastc                 C  s&   | j d ur| j    | _d S d S r   )r	   detachcpucloner   r   r   r   r   sync_active_to_cpu   s   
z!ElasticEPState.sync_active_to_cpuc                 C  s   | j d ur| j  | _d S d S r   )r	   r   r
   r   r   r   r   snapshot_active_to_last   s   
z&ElasticEPState.snapshot_active_to_lastN)r   r   )__name__
__module____qualname____annotations__r   r   r   r   r   r   r   r      s   
 
r   c                   @  sp   e Zd ZU dZded< edddZedd
dZedddZ	eddddddZ
eddddddZdS )ElasticEPStateManagerNzOptional[ElasticEPState]	_instancer   r   c                 C  s   | j S r   )r    )clsr   r   r   instance!   s   zElasticEPStateManager.instanceserver_argsr   c                 C  s0   | j d ur| j S |jd ur| jd d d| _ | j S )Nep_sizedevice)r    elastic_ep_backend_build_state)r!   r#   r   r   r   init%   s
   

zElasticEPStateManager.inittorch.devicec                   C  s(   t  rtdS t rtdS td)Ncudar   z)Only CUDA and CPU support elastic ep now.)r   r   r&   r   NotImplementedErrorr   r   r   r   _select_device.   s
   

z$ElasticEPStateManager._select_devicer$   r%   Optional[int]r&   Optional[torch.device]c                C  s,   | j ||d}t|| |   dS )Nr$   )r	   r
   r   )healthy_rank_stater   r   r   r   )r!   r%   r&   activer   r   r   r(   7   s   z"ElasticEPStateManager._build_statetorch.Tensorc                C  s<   |d ur|nt j }|d ur|n|  }t j|t j|dS )N)dtyper&   )r   distributedget_world_sizer-   onesint32)r!   r%   r&   sizedevr   r   r   r0   C   s   z(ElasticEPStateManager.healthy_rank_state)r   r   )r#   r   )r   r*   )r%   r.   r&   r/   r   r   )r%   r.   r&   r/   r   r2   )r   r   r   r    r   classmethodr"   r)   staticmethodr-   r(   r0   r   r   r   r   r      s   
 r   )
__future__r   dataclassesr   typingr   r   "sglang.srt.managers.schedule_batchr   sglang.srt.utilsr   r   r   r   r   r   r   r   <module>   s    