o
    پi                     @   sR   d dl Z d dlmZmZ d dlZdZG dd dZG dd dZG dd	 d	ZdS )
    N)ThreadPoolExecutoras_completed<   c                   @   s>   e Zd ZU dZdZeed< dZeed< dZe	ed< dd	 Z
d
S )AbortAllMixinzbTest /abort_request with abort_all=True.

    Server needs sufficient --max-running-requests.
        abort_all_num_requestsi>  abort_all_max_new_tokens   abort_all_sleepc                    s   j }fddt|I  fddt|D }tj tjjd ddidd		  t
|D ]}| }|d
 d d d q3j  W d    d S 1 sYw   Y  d S )Nc                     .   t j jd dd jdddtd} |  S )N	/generatezThe capital of France isr   Ttemperaturemax_new_tokens
ignore_eostextsampling_paramsjsontimeout)requestspostbase_urlr   _REQUEST_TIMEOUTr   responseself V/home/ubuntu/.local/lib/python3.10/site-packages/sglang/test/kits/abort_timeout_kit.py
run_decode      z0AbortAllMixin.test_abort_all.<locals>.run_decodec                       g | ]}  qS r   submit.0_executorr!   r   r    
<listcomp>'       z0AbortAllMixin.test_abort_all.<locals>.<listcomp>z/abort_request	abort_allT
   r   	meta_infofinish_reasontypeabort)r   r   rangetimesleepr
   r   r   r   raise_for_statusr   resultassertEqualassertIsNoneprocesspoll)r   num_requestsfuturesfuturer7   r   r*   r!   r   r    test_abort_all   s    
"zAbortAllMixin.test_abort_allN)__name__
__module____qualname____doc__r   int__annotations__r   r
   floatr@   r   r   r   r    r   
   s   
 r   c                   @   s2   e Zd ZU dZdZeed< dZeed< dd ZdS )	WaitingTimeoutMixinzkTest waiting queue timeout.

    Server needs SGLANG_REQ_WAITING_TIMEOUT and --max-running-requests=1.
    r	   waiting_timeout_num_requestsi   waiting_timeout_max_new_tokensc                    s   j }fddt|C  fddt|D }d}t|D ]}| }|ddkr9|d7 }|d	 d
 q |d j	  W d    d S 1 sSw   Y  d S )Nc                     r   )Nr   z	Today is r   Tr   r   r   )r   r   r   rJ   r   r   r   r   r   r    r!   D   r"   z<WaitingTimeoutMixin.test_waiting_timeout.<locals>.run_decodec                    r#   r   r$   r&   r)   r   r    r+   T   r,   z<WaitingTimeoutMixin.test_waiting_timeout.<locals>.<listcomp>r   objecterror   code  )
rI   r   r3   r   r7   getr8   r9   r:   r;   )r   r<   r=   error_countr>   r7   r   r?   r    test_waiting_timeoutA   s   
"z(WaitingTimeoutMixin.test_waiting_timeoutN)	rA   rB   rC   rD   rI   rE   rF   rJ   rR   r   r   r   r    rH   8   s
   
 rH   c                   @   sJ   e Zd ZU dZdZeed< dZeed< dZe	ed< dZ
eed< d	d
 ZdS )RunningTimeoutTwoWaveMixinaU  Test running timeout with a two-wave pattern.

    Sends two waves with different forward_entry_time so that timeouts are
    triggered in separate batches. Regression test for
    https://github.com/sgl-project/sglang/pull/18760

    Server needs SGLANG_REQ_RUNNING_TIMEOUT and sufficient --max-running-requests
    to hold both waves.
       running_timeout_num_wave1running_timeout_num_wave2   running_timeout_sleepi   running_timeout_max_new_tokensc                    s   j }j}fddt|| B  fddt|D }tj  fddt|D }t|| D ]}| }|	ddkrL
|d d	 q7W d    n1 sWw   Y  j  d S )
Nc                     r   )Nr   z+Write a long story about a magical kingdom.r   Tr   r   r   )r   r   r   rY   r   r   r   r   r   r    r!   u   r"   zLRunningTimeoutTwoWaveMixin.test_running_timeout_no_crash.<locals>.run_decodec                    r#   r   r$   r&   r)   r   r    r+      r,   zLRunningTimeoutTwoWaveMixin.test_running_timeout_no_crash.<locals>.<listcomp>c                    r#   r   r$   r&   r)   r   r    r+      r,   rK   rL   rN   rO   )rU   rV   r   r3   r4   r5   rX   r   r7   rP   r8   r9   r:   r;   )r   	num_wave1	num_wave2futures1futures2r>   r7   r   r?   r    test_running_timeout_no_crashq   s   z8RunningTimeoutTwoWaveMixin.test_running_timeout_no_crashN)rA   rB   rC   rD   rU   rE   rF   rV   rX   rG   rY   r^   r   r   r   r    rS   a   s   
 
rS   )	r4   concurrent.futuresr   r   r   r   r   rH   rS   r   r   r   r    <module>   s    .)