o
    :/iu                  	   @   s   d dl Z d dlZd dl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 d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ eeZ	dde	dejdB dedefddZdejdefddZdejdefddZdS )    N)partial)Any)FastAPI)envs)EngineClient)H11_MAX_HEADER_COUNT_DEFAULT%H11_MAX_INCOMPLETE_EVENT_SIZE_DEFAULT)SSLCertRefresher)init_logger)find_process_using_portFappsockenable_ssl_refreshuvicorn_kwargsc                    sz  t d  jD ]!}t|dd}t|dd}|du s|du r q	t d|d| q	 jD ])}t|dd}t|dd}t|dd}|du sN|du sN|durOq.t d||j q.|d	d}|d
d}	|du rjt}|	du rpt}	t	j
 fi |}
||
_|	|
_|
  t	|
 j_t t jjj|r|gndd|sdnt|
j|
j|
j|
jdt dfdd}ddd}tj| tj | d fdd}| }zJzI dH  | W W |!  !  S  tj"y3   |d }t#|}|durt $d||d|%  t d &  Y W |!  !  S w |!  !  w )z
    Start a FastAPI app using Uvicorn, with support for custom Uvicorn config
    options.  Supports http header limits via h11_max_incomplete_event_size and
    h11_max_header_count.
    zAvailable routes are:methodsNpathzRoute: %s, Methods: %sz, endpointzRoute: %s, Endpoint: %sh11_max_incomplete_event_sizeh11_max_header_count)sockets)ssl_contextkey_path	cert_pathca_pathreturnc                      s       d S N)set )shutdown_eventr   f/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/vllm/entrypoints/launcher.pysignal_handlera   s   z"serve_http.<locals>.signal_handlerc                      s   d S r   r   r   r   r   r   dummy_shutdownd   s   z"serve_http.<locals>.dummy_shutdownc                     sf     I d H   jj} | jj}d t| j|dI d H  d_	  	  r1
  d S d S )N)timeoutT)waitstateengine_clientvllm_configshutdown_timeoutrun_in_executorr   shutdownshould_exitcancelstop)r%   r"   r   loopserverserver_taskr   ssl_cert_refresherwatchdog_taskr   r   handle_shutdownj   s   
z#serve_http.<locals>.handle_shutdownportz7port %s is used by process %s launched with command:
%s z"Shutting down FastAPI HTTP server.)r   N)'loggerinforoutesgetattrjoin__name__popr   r   uvicornConfigr   r   loadServerr$   r/   asyncioget_running_loopcreate_taskwatchdog_loopr%   server	   sslssl_keyfilessl_certfilessl_ca_certsEventadd_signal_handlersignalSIGINTSIGTERMr+   CancelledErrorr   warningcmdliner)   )r   r   r   r   router   r   r   r   r   configr    r!   r3   shutdown_taskr4   processr   r-   r   
serve_http   s   










rV   r/   enginec                    s$   d}	 t |I dH  t| | q)z
    # Watchdog task that runs in the background, checking
    # for error state in the engine. Needed to trigger shutdown
    # if an exception arises is StreamingResponse() generator.
    g      @TN)rA   sleepterminate_if_errored)r/   rW   VLLM_WATCHDOG_TIME_Sr   r   r   rD      s   
rD   c                 C   s*   |j o|j }tjs|rd| _dS dS dS )a  
    See discussions here on shutting down a uvicorn server
    https://github.com/encode/uvicorn/discussions/1103
    In this case we cannot await the server shutdown here
    because handler must first return to close the connection
    for this request.
    TN)errored
is_runningr   VLLM_KEEP_ALIVE_ON_ENGINE_DEATHr*   )r/   rW   engine_erroredr   r   r   rY      s   

rY   )F)rA   rL   socket	functoolsr   typingr   r=   fastapir   vllmr   vllm.engine.protocolr   vllm.entrypoints.constantsr   r   vllm.entrypoints.sslr	   vllm.loggerr
   vllm.utils.network_utilsr   r;   r6   boolrV   r@   rD   rY   r   r   r   r   <module>   s4   
v