o
    i                     @   sZ   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 G dd dZ
dS )    N)TracebackType)Selfc                       s   e Zd Zg dZdee dee deddf fddZdefd	d
Z	de
e dB dedB dedB ddfddZdd Zdd Zdee fddZd"ddZdefddZdefddZdeddfddZd"d d!Z  ZS )#ServerProcess)z/reset_prefix_cachez/reset_mm_cachez/reset_encoder_cache
server_cmdafter_bench_cmdshow_stdoutreturnNc                   s    t    || _|| _|| _d S N)super__init__r   r   r   )selfr   r   r   	__class__ R/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/benchmarks/sweep/server.pyr      s   

zServerProcess.__init__c                 C   s   |    | S r	   )startr   r   r   r   	__enter__"   s   zServerProcess.__enter__exc_type	exc_valueexc_tracebackc                 C   s   |    d S r	   )stop)r   r   r   r   r   r   r   __exit__&   s   zServerProcess.__exit__c                 C   s0   t j| jd| jr
d nt jtjddiB d| _d S )NTVLLM_SERVER_DEV_MODE1)start_new_sessionstdoutenv)
subprocessPopenr   r   DEVNULLosenviron_server_processr   r   r   r   r   .   s   zServerProcess.startc                 C   s\   | j }| d u r,tt tt|jt	j
 W d    d S 1 s%w   Y  d S d S r	   )r#   poll
contextlibsuppressProcessLookupErrorr!   killpggetpgidpidsignalSIGKILL)r   server_processr   r   r   r   8   s   "zServerProcess.stopcmdc                 C   s"   t j|| jrd ddS t jddS )NT)r   check)r   runr   r    )r   r.   r   r   r   run_subcommandA   s   zServerProcess.run_subcommandc                 C   s"   | j s	|   d S | | j  d S r	   )r   reset_cachesr1   r   r   r   r   after_benchH   s   zServerProcess.after_benchc                 C   sr   | j }dD ]}||v r|||d  } nqd}dD ]}||v r.t|||d  } nqd}d| d| S )N)z--host   	localhost)z-pz--porti@  zhttp://:)r   indexint)r   r   host_keyhostport_keyportr   r   r   _get_vllm_server_addressO   s   z&ServerProcess._get_vllm_server_addressc                 C   s<   |   }zt| d}|jdkW S  tjy   Y dS w )Nz/health   F)r=   requestsgetstatus_codeRequestException)r   server_addressresponser   r   r   is_server_readyb   s   zServerProcess.is_server_readytimeoutc                 C   sn   t  }|  s5| j d ur| jj}td| t  | |kr*td| dt d |  rd S d S )Nz(Server process crashed with return code z%Server failed to become ready within z	 seconds.r4   )	time	monotonicrE   r#   r$   
returncodeRuntimeErrorTimeoutErrorsleep)r   rF   
start_timerI   r   r   r   wait_until_readyj   s   

zServerProcess.wait_until_readyc                 C   s   | j }|d dr(|  }td|  | jD ]}t|| }|  qd S |d dr9d|v r7tdd S td|d  d)	Nr   vllmzResetting caches at infinity_embz--vector-disk-cachezLInfinity server uses caching but does not expose a method to reset the cachez)No implementation of `reset_caches` for `zB` server. Please specify a custom command via `--after-bench-cmd`.)	r   endswithr=   printVLLM_RESET_CACHE_ENDPOINTSr?   postraise_for_statusNotImplementedError)r   r   rC   endpointresr   r   r   r2   y   s"   

zServerProcess.reset_caches)r   N)__name__
__module____qualname__rS   liststrboolr   r   r   typeBaseExceptionr   r   r   r   r1   r3   r=   rE   r8   rN   r2   __classcell__r   r   r   r   r      s:    


	
r   )r%   r!   r+   r   rG   typesr   r?   typing_extensionsr   r   r   r   r   r   <module>   s   