o
    :/i}+                  	   @   s  U d 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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 dd	lmZ dd
lmZmZmZ ddlmZ ddlmZmZ ej dZdZde fddZ!deeddeedddde! rdndej"ej#diddgej"ddidddZ$e%e&e%e&ef eB f e'd< edede&d eddfd!d"Z(edede&d eddfd#d$Z)edede&d eddfd%d&Z*ed' Z+d(e+de fd)d*Z,G d+d, d,eZ-e-j.e-j/e-j0d-Z1dAd.d/Z2d0e&de-fd1d2Z3e
ej4fd3e5dededf fd4d5Z6deded6 fd7d8Z7e2  ej"d9kr,e8d:9ej: e3e;Z<dBd;d<Z=dBd=e&d>e&dB fd?d@Z>dS )CzLogging configuration for vLLM.    N)	GeneratorHashable)contextmanager)	lru_cachepartial)Logger)
dictConfig)path)
MethodType)AnyLiteralcast)ColoredFormatterNewLineFormatterz?%(levelname)s %(asctime)s [%(fileinfo)s:%(lineno)d] %(message)sz%m-%d %H:%M:%Sreturnc                   C   sf   t jst jdkr
dS t jdkrdS t jdkr!ttjdo tj S t jdkr1ttjdo0tj S dS )N0F1Tzext://sys.stdoutisattyzext://sys.stderr)	envsNO_COLORVLLM_LOGGING_COLORVLLM_LOGGING_STREAMhasattrsysstdoutr   stderr r   r   X/lsinfo/ai/hellotax_ai/llm_service/venv_vllm/lib/python3.10/site-packages/vllm/logger.py
_use_color   s   


r   #vllm.logging_utils.NewLineFormatter)classdatefmtformatz#vllm.logging_utils.ColoredFormatter)vllm
vllm_colorr#   zlogging.StreamHandlerr$   )r    	formatterlevelstreamF)handlersr&   	propagate   )
formattersr(   loggersversiondisable_existing_loggersDEFAULT_LOGGING_CONFIGloggermsgargsc                 G      | j |g|R ddi d S N
stacklevel   )debugr0   r1   r2   r   r   r   _print_debug_onceK      r9   c                 G   r3   r4   )infor8   r   r   r   _print_info_onceQ   r:   r<   c                 G   r3   r4   )warningr8   r   r   r   _print_warning_onceW   r:   r>   )processgloballocalscopec                 C   s8   | dkrddl m} | S | dkrddl m} | S dS )z$Decide whether to log based on scoper@   r   )is_global_first_rankrA   )is_local_first_rankT)vllm.distributed.parallel_staterC   rD   )rB   rC   rD   r   r   r   _should_log_with_scope`   s   rF   c                	   @   sp   e Zd ZdZdddedededdfd	d
ZdddedededdfddZdddedededdfddZ	dS )_VllmLoggera
  
    Note:
        This class is just to provide type information.
        We actually patch the methods directly on the [`logging.Logger`][]
        instance to avoid conflicting with other libraries such as
        `intel_extension_for_pytorch.utils._logger`.
    r?   )rB   r1   r2   rB   r   Nc                G   "   t |sdS t| |g|R   dS )z~
        As [`debug`][logging.Logger.debug], but subsequent calls with
        the same message are silently dropped.
        N)rF   r9   selfr1   rB   r2   r   r   r   
debug_oncew      z_VllmLogger.debug_oncec                G   rH   )z|
        As [`info`][logging.Logger.info], but subsequent calls with
        the same message are silently dropped.
        N)rF   r<   rI   r   r   r   	info_once   s   z_VllmLogger.info_oncec                G   rH   )z
        As [`warning`][logging.Logger.warning], but subsequent calls with
        the same message are silently dropped.
        N)rF   r>   rI   r   r   r   warning_once   rL   z_VllmLogger.warning_once)
__name__
__module____qualname____doc__strr   LogScoperK   rM   rN   r   r   r   r   rG   n   s.    	
 
rG   )rK   rM   rN   c                  C   s"  i } t jst jrtdt jr5t} | d d }t j|d< t j|d< t r&dnd|d< | d d }t j|d< t jrqt	t jsDtd	t jt
t jd
d}t| }W d    n1 s]w   Y  t|tsotdt|j|} | di  D ]}|ddkrd|d< qy| rt|  d S d S )NzVLLM_CONFIGURE_LOGGING evaluated to false, but VLLM_LOGGING_CONFIG_PATH was given. VLLM_LOGGING_CONFIG_PATH implies VLLM_CONFIGURE_LOGGING. Please enable VLLM_CONFIGURE_LOGGING or unset VLLM_LOGGING_CONFIG_PATH.r(   r#   r&   r'   r$   r%   r,   z6Could not load logging config. File does not exist: %szutf-8)encodingz.Invalid logging config. Expected dict, got %s.r+   r    zvllm.logging.NewLineFormatterr   )r   VLLM_CONFIGURE_LOGGINGVLLM_LOGGING_CONFIG_PATHRuntimeErrorr/   VLLM_LOGGING_LEVELr   r   r	   existsopenjsonloadsread
isinstancedict
ValueErrortyperO   getvaluesr   )logging_configvllm_handlervllm_loggersfilecustom_configr%   r   r   r   _configure_vllm_root_logger   sF   



rj   namec                 C   s8   t | }t D ]\}}t||t|| q	tt|S )zThe main purpose of this function is to ensure that loggers are
    retrieved in such a way that we can be sure the root vllm logger has
    already been configured.)logging	getLogger_METHODS_TO_PATCHitemssetattrr
   r   rG   )rk   r0   method_namemethodr   r   r   init_logger   s   

rs   r&   c                 c   s*    t jjj}t |  d V  t | d S N)rl   rootmanagerdisable)r&   current_levelr   r   r   suppress_logging   s
   

ry   )colornewlineNc                 C   sj   | }|d ur3|j r,t|j dkr,|j d jdkr,|j d j}t|tr%dS t|tr,dS |j}|d usd S )Nr*   r   r#   rz   r{   )r(   lenrk   r%   r_   r   r   parent)r0   lgrr%   r   r   r   current_formatter_type   s   $

r   INFOhttpxc                 C   s.  |dv r|j j}|j}|j j}||sd S zq|j}|d ur*|j j}	|j}
|j j}nd}	d}
d}t| dI}tj 	d}|dkr]|
| d| d| d	| d
| d|	 d	|
 d n|
| d| d| d	| d| d|	 d	|
 d W d    n1 sw   Y  W n	 ty   Y nw tt| |S )N)callr    r   az%Y-%m-%d %H:%M:%S.%fr   z	 Call to z in :z from 
z Return from z to )f_codeco_filenamef_linenoco_name
startswithf_backr[   datetimenowstrftimewrite	NameErrorr   _trace_calls)log_pathroot_dirframeeventargfilenamelineno	func_name
last_framelast_filenamelast_linenolast_func_nameftsr   r   r   r      sn   

r   log_file_pathr   c                 C   sH   t d t d|  |du rtjtjt}tt	t
| | dS )a  
    Enable tracing of every function call in code under `root_dir`.
    This is useful for debugging hangs or crashes.
    `log_file_path` is the path to the log file.
    `root_dir` is the root directory of the code to trace. If None, it is the
    vllm root directory.

    Note that this call is thread-level, any threads calling this function
    will have the trace enabled. Other threads will not be affected.
    zVLLM_TRACE_FUNCTION is enabled. It will record every function executed by Python. This will slow down the code. It is suggested to be used for debugging hang or crashes only.zTrace frame log is saved to %sN)r0   r=   r;   osr	   dirname__file__r   settracer   r   )r   r   r   r   r   enable_trace_function_call)  s   r   )r   Nrt   )?rR   r   r\   rl   r   r   collections.abcr   r   
contextlibr   	functoolsr   r   r   logging.configr   r	   typesr
   typingr   r   r   	vllm.envsr   vllm.logging_utilsr   r   VLLM_LOGGING_PREFIX_FORMAT_DATE_FORMATboolr   rY   r   r/   r`   rS   __annotations__r9   r<   r>   rT   rF   rG   rK   rM   rN   rn   rj   rs   r   intry   r   rm   setLevelWARNINGrO   r0   r   r   r   r   r   r   <module>   s   

""+
0$
+