o
    پiA                     @  s   d dl mZ d dlmZmZ d dlmZmZmZ d dl	m
Z
mZmZmZmZmZ e
rHd dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ G d
d deZG dd deZG dd deZdS )    )annotations)ABCabstractmethod)EnumIntEnumauto)TYPE_CHECKINGListOptionalTupleTypeUnion)ModelWorkerBatch)TpModelWorker)
ServerArgs)BaseSpecWorkerNGRAMWorkerc                   @  s   e Zd ZdZe Ze Ze Ze Ze Z	e
dddZddd	Zdd
dZdddZdddZdddZdddZdddZdS )SpeculativeAlgorithmz/Enumeration of speculative decoding algorithms.nameOptional[str]returnc                 C  s:   |d u r| j S z| |  W S  ty   td| w )Nz$Unknown speculative algorithm name: )NONEupperKeyError
ValueError)clsr    r   T/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/speculative/spec_info.pyfrom_string   s   z SpeculativeAlgorithm.from_stringboolc                 C  
   | t jkS N)r   r   selfr   r   r   is_none!      
zSpeculativeAlgorithm.is_nonec                 C  s   | t jkp	| t jkS r"   )r   EAGLEEAGLE3r#   r   r   r   is_eagle$   s   zSpeculativeAlgorithm.is_eaglec                 C  r!   r"   )r   r(   r#   r   r   r   	is_eagle3(   r&   zSpeculativeAlgorithm.is_eagle3c                 C  r!   r"   )r   
STANDALONEr#   r   r   r   is_standalone+   r&   z"SpeculativeAlgorithm.is_standalonec                 C  r!   r"   )r   NGRAMr#   r   r   r   is_ngram.   r&   zSpeculativeAlgorithm.is_ngramc                 C  s   |   p|  S r"   )r)   r,   r#   r   r   r   supports_spec_v21   s   z%SpeculativeAlgorithm.supports_spec_v2server_argsr   MOptional[Union[Type[BaseSpecWorker], Type[TpModelWorker], Type[NGRAMWorker]]]c           
      C  s   |   rJ d|j }|  r%|jr%|rddlm} |S ddlm} |S |  r;|r3ddlm	} |S ddl
m} |S |  rQ|rIddlm} |S ddlm} |S |  rh|r`td	| j d
ddlm}	 |	S td)Nz4Cannot create worker for NONE speculative algorithm.r   )MultiLayerEagleWorkerV2)MultiLayerEagleWorker)EAGLEWorkerV2)EAGLEWorker)StandaloneWorkerV2)StandaloneWorkerzSpeculative algorithm z* does not support overlap worker creation.r   z'Unreachable code path in create_worker.)r%   disable_overlap_scheduler)   enable_multi_layer_eagle2sglang.srt.speculative.multi_layer_eagle_worker_v2r2   /sglang.srt.speculative.multi_layer_eagle_workerr3   &sglang.srt.speculative.eagle_worker_v2r4   #sglang.srt.speculative.eagle_workerr5   r,   +sglang.srt.speculative.standalone_worker_v2r6   (sglang.srt.speculative.standalone_workerr7   r.   r   r   #sglang.srt.speculative.ngram_workerr   )
r$   r0   enable_overlapr2   r3   r4   r5   r6   r7   r   r   r   r   create_worker4   s>   z"SpeculativeAlgorithm.create_workerN)r   r   r   r   r   r    )r0   r   r   r1   )__name__
__module____qualname____doc__r   r'   r(   r+   r-   r   classmethodr   r%   r)   r*   r,   r.   r/   rB   r   r   r   r   r      s     





r   c                   @  s   e Zd Ze Ze Ze ZdS )SpecInputTypeN)rD   rE   rF   r   EAGLE_DRAFTEAGLE_VERIFYNGRAM_VERIFYr   r   r   r   rI   l   s    
rI   c                   @  sB   e Zd ZdddZdddZdd	d
ZedddZdddZdS )	SpecInputspec_input_typerI   c                 C  s
   || _ d S r"   )rN   )r$   rN   r   r   r   __init__u   r&   zSpecInput.__init__r   r    c                 C  s   | j tjkS r"   )rN   rI   rJ   r#   r   r   r   is_draft_inputx   s   zSpecInput.is_draft_inputc                 C  s   | j tjtjhv S r"   )rN   rI   rK   rL   r#   r   r   r   is_verify_input}   s   zSpecInput.is_verify_inputTuple[int, int]c                 C  s   d S r"   r   r#   r   r   r   !get_spec_adjust_token_coefficient   s   z+SpecInput.get_spec_adjust_token_coefficientforward_batchr   Tuple[List[int], List[int]]c                   s<   |   \  fdd|jD }fdd|jD }||fS )Nc                      g | ]}|  qS r   r   .0x)c1r   r   
<listcomp>   s    zASpecInput.get_spec_adjusted_global_num_tokens.<locals>.<listcomp>c                   rV   r   r   rW   )c2r   r   r[      s    )rS   global_num_tokensglobal_num_tokens_for_logprob)r$   rT   r]   r^   r   )rZ   r\   r   #get_spec_adjusted_global_num_tokens   s   
z-SpecInput.get_spec_adjusted_global_num_tokensN)rN   rI   rC   )r   rR   )rT   r   r   rU   )	rD   rE   rF   rO   rP   rQ   r   rS   r_   r   r   r   r   rM   t   s    


rM   N)
__future__r   abcr   r   enumr   r   r   typingr   r	   r
   r   r   r   "sglang.srt.managers.schedule_batchr   sglang.srt.managers.tp_workerr   sglang.srt.server_argsr   'sglang.srt.speculative.base_spec_workerr   r@   r   r   rI   rM   r   r   r   r   <module>   s     ]