o
    ÔÙ¾i  ã                
   @   sô   d dl Zd dlZ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
mZ d dlmZmZmZ d dlmZmZ ddedefd	d
„Zddedefdd„Zdd„ Zedkrxeejdd… ƒZzeeƒ W ee ¡ dd dS ee ¡ dd w dS )é    N)Ú
create_app)Úrun_scheduler_process)Ú
ServerArgsÚprepare_server_argsÚset_global_server_args)Úconfigure_loggerÚloggerTÚinclude_parentÚskip_pidc              	   C   sô   t  ¡ t  ¡ u rt tjtj¡ | du rt ¡ } d}zt 	| ¡}W n tj
y,   Y dS w |jdd}|D ]}|j|kr=q5z| ¡  W q5 tj
yM   Y q5w |rxz| t ¡ kr`| ¡  t d¡ | ¡  | tj¡ W dS  tj
yw   Y dS w dS )z-Kill the process and all its child processes.NFT)Ú	recursiver   )Ú	threadingÚcurrent_threadÚmain_threadÚsignalÚSIGCHLDÚSIG_DFLÚosÚgetpidÚpsutilÚProcessÚNoSuchProcessÚchildrenÚpidÚkillÚsysÚexitÚsend_signalÚSIGQUIT)Ú
parent_pidr	   r
   Úitselfr   Úchild© r!   ú_/home/ubuntu/.local/lib/python3.10/site-packages/sglang/multimodal_gen/runtime/launch_server.pyÚkill_process_tree   s<   ÿ
ÿ
ÿõr#   Úserver_argsÚlaunch_http_serverc                 C   s¦  t | ƒ t d¡ | j}g }g }g }t|d ƒD ]}tjdd\}}| |¡ | |¡ qg }	g }
t|d ƒD ]}tjdd\}}|
 |¡ |	 |¡ q7| jpS| jd }g }g }t|ƒD ]T}tjdd\}}| |¡ |dkr…tj	t
|||| |dd||
f	d|› d	d
}ntj	t
|||| |dd||d  |	|d  f	d|› d	d
}| |¡ | ¡  | |¡ q\g }|D ]}| ¡  qµ|D ]}| ¡  q¾|D ]}| ¡  qÇ|	D ]}| ¡  qÐ|
D ]}| ¡  qÙt|ƒD ]B\}}z| ¡ }W n# ty   t d|› d¡ ||  ¡  t d|| j› ¡ ‚ w |d dkrtdƒ‚| |¡ | ¡  qät d¡ |rQt d¡ | jrMt d¡ tj	t| fdd	d
}| ¡  |S t| ƒ |S )zH
    Args:
        launch_http_server: False for offline local mode
    zStarting server...é   F)Úduplexéd   r   Nzsglang-diffusionWorker-T)ÚtargetÚargsÚnameÚdaemonzRank z< scheduler is dead. Please check if there are relevant logs.zExit code: ÚstatusÚreadyz;Initialization failed. Please see the error messages above.zAll workers are readyzStarting FastAPI server.z:Launch FastAPI server in another process because of webui.zsglang-diffusion-webui)r   r   ÚinfoÚnum_gpusÚrangeÚmpÚPipeÚappendÚmaster_portr   r   ÚstartÚcloseÚ	enumerateÚrecvÚEOFErrorÚerrorÚjoinÚexitcodeÚRuntimeErrorÚdebugÚwebuiÚlaunch_http_server_only)r$   r%   r0   Ú	processesÚtask_pipes_to_slaves_wÚtask_pipes_to_slaves_rÚ_ÚrÚwÚresult_pipes_from_slaves_wÚresult_pipes_from_slaves_rr5   Úscheduler_pipe_readersÚscheduler_pipe_writersÚiÚreaderÚwriterÚprocessÚscheduler_infosÚpÚdataÚhttp_server_processr!   r!   r"   Úlaunch_server=   sÆ   



÷ò

÷ò






ÿúÿ




üþrT   c                 C   s0   t | ƒ t| ƒ}tj|d| j| j| jdd d S )NTF)Ú
use_colorsÚ	log_levelÚhostÚportÚreload)r   r   ÚuvicornÚrunrV   rW   rX   )r$   Úappr!   r!   r"   rA   ¼   s   
úrA   Ú__main__r&   F)r	   )TN)T)Úmultiprocessingr2   r   r   r   r   r   rZ   Ú5sglang.multimodal_gen.runtime.entrypoints.http_serverr   Ú1sglang.multimodal_gen.runtime.managers.gpu_workerr   Ú)sglang.multimodal_gen.runtime.server_argsr   r   r   Ú1sglang.multimodal_gen.runtime.utils.logging_utilsr   r   ÚboolÚintr#   rT   rA   Ú__name__Úargvr$   r   r!   r!   r!   r"   Ú<module>   s(   '
&ú