o
    پi*                     @  s  d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ d dlmZmZ erJd dlZd dlmZmZ eeZd	gZed
d ej D  Z d%ddZ!G dd dZ"eddd&ddZ#	d'd(d!d"Z$	d'd)d#d$Z%dS )*    )annotationsN)	lru_cache)TYPE_CHECKINGAnyDictListOptionalSetTupleUnion)envsget_bool_env_var)create_log_targetslog_json)EmbeddingReqInputGenerateReqInputzx-smg-routing-keyc                 C  s   g | ]}|  qS  )lower.0hr   r   S/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/utils/request_logger.py
<listcomp>!   s    r   requestOptional['fastapi.Request']returnOptional[Dict[str, str]]c                   s     d u rd S  fddt D S )Nc                   s"   i | ]} j | r|qS r   )headersgetr   r   vr   r   
<dictcomp>+   s   " z0_extract_whitelisted_headers.<locals>.<dictcomp>)WHITELISTED_HEADERS)r   r   r    r   _extract_whitelisted_headers&   s   r$   c                   @  sh   e Zd Zd)d	d
Zd*ddZ				d+d,ddZ		d-d.ddZ		d/d0d!d"Zd1d$d%Zd2d'd(Z	dS )3RequestLoggerlog_requestsboollog_requests_levelintlog_requests_formatstrlog_requests_targetOptional[List[str]]c                 C  s<   || _ || _|| _|| _|  | _|  | _tj	
 | _d S N)r&   r(   r*   r,   _compute_metadatametadata_setup_targetstargetsr   SGLANG_LOG_REQUEST_EXCEEDED_MSr   log_exceeded_msselfr&   r(   r*   r,   r   r   r   __init__/   s   
zRequestLogger.__init__r   List[logging.Logger]c                 C  s   t | jtdS )N)r2   name_prefix)r   r,   __name__)r6   r   r   r   r1   B   s   zRequestLogger._setup_targetsNOptional[bool]Optional[int]Optional[str]Nonec                 C  sP   |d ur|| _ |d ur|| _|d ur|| _|d ur|| _|  | _|  | _d S r.   )r&   r(   r*   r,   r/   r0   r1   r2   r5   r   r   r   	configureG   s   
zRequestLogger.configureobj.Union['GenerateReqInput', 'EmbeddingReqInput']	tokenizerr   r   r   c                   s  | j sd S | j\}}}t|}| jdkr,|jt|||d}|r$||d< t| jd| n|r3d| nd}	| dt	|||d |	  | j
d	krz|jd u r||jd ur~ d ur|jrmt|jd
 trm fdd|jD }
n j|jdd}
|
|_d S d S d S d S d S )Njsonridr@   r   zrequest.received
, headers= zReceive: obj=
skip_names   r   c                   s   g | ]	} j |d dqS )Fskip_special_tokens)decode)r   
_input_idsrB   r   r   r   }   s    z6RequestLogger.log_received_request.<locals>.<listcomp>FrK   )r&   r0   r$   r*   rE   _transform_data_for_loggingr   r2   _log_dataclass_to_string_truncatedr(   text	input_ids
isinstancelistrM   )r6   r@   rB   r   
max_lengthrI   _r   log_dataheaders_strdecodedr   rO   r   log_received_requestZ   s:   






z"RequestLogger.log_received_requestFoutis_multimodal_genc                 C  s   | j sd S |d ddd }| jdkr|| jk rd S | j\}}}t|}	| jdkrM|jt|||d}
|	r:|	|
d< |sDt||||
d< t| j	d	|
 d S t
|||d
}|rXdn	dt
|||d
 }|	rid|	 nd}| d| | |  d S )N	meta_infoe2e_latencyr   i  rC   rD   r   r]   zrequest.finishedrH   rG   z, out=rF   zFinish: obj=)r&   r   r4   r0   r$   r*   rE   rP   r   r2   rR   rQ   )r6   r@   r]   r^   r   e2e_latency_msrW   rI   out_skip_namesr   rY   obj_strout_strrZ   r   r   r   log_finished_request   s6   

z"RequestLogger.log_finished_request<Tuple[Optional[int], Optional[Set[str]], Optional[Set[str]]]c                 C  s   d }d }d }| j rA| jdkrd}h d}h d}n(| jdkr)d}h d}h d}n| jdkr1d}n| jd	kr9d}ntd
| j|||fS )Nr   i   @>   rS   rT   	lora_path
audio_data
image_datainput_embedssampling_params>   rS   	embedding
output_ids   >   rS   rT   rg   rh   ri   rj   rJ         z6Invalid --log-requests-level: self.log_requests_level=)r&   r(   
ValueError)r6   rW   rI   rb   r   r   r   r/      s(   

	





zRequestLogger._compute_metadatamsgc                 C  s   | j D ]}|| qd S r.   )r2   info)r6   rr   targetr   r   r   rQ      s   
zRequestLogger._log)r&   r'   r(   r)   r*   r+   r,   r-   )r   r8   )NNNN)
r&   r;   r(   r<   r*   r=   r,   r-   r   r>   )NN)r@   rA   rB   r   r   r   r   r>   )FN)
r@   rA   r]   r   r^   r'   r   r   r   r>   )r   rf   )rr   r+   r   r>   )
r:   
__module____qualname__r7   r1   r?   r\   re   r/   rQ   r   r   r   r   r%   .   s     

/
((r%   rJ   )maxsizer'   c                   C  s   t dS )NSGLANG_DISABLE_REQUEST_LOGGINGr   r   r   r   r   disable_request_logging   s   ry   ro   datar   rW   r)   rI   Optional[Set[str]]r+   c                   s(  d u rt  t tr/t kr*d }t d |  dt | d   S t  S t ttfrWt krSd }t d | d t | d   S t S t troddfdd 	 D  d S t
 rt
 } jj dd fd	d|D  d
 S t S )NrJ   z ... {z, c                 3  s2    | ]\}}|vrd | dt |  V  qdS )'z': N)rR   r   kr!   rW   rI   r   r   	<genexpr>   s    z1_dataclass_to_string_truncated.<locals>.<genexpr>}(c                 3  s8    | ]}|j vr|j  d tt |j  V  qdS )=N)namerR   getattrr   frz   rW   rI   r   r   r      s    
))setrU   r+   lenreprrV   tupledictjoinitemsdataclassesis_dataclassfields	__class__r:   rz   rW   rI   half_lengthr   r   r   r   rR      s@   
(
&

	

rR   c                   s  d u rt  t tr't kr%d } d | d  | d   S  S t ttfrUt krLd }t d | dg t | d   S fdd D S t trffdd  D S t	 r{t
 } fdd|D S t ttttd fr S t S )NrJ   z...c                   s   g | ]}t | qS r   rP   )r   r!   )rW   r   r   r     s    z/_transform_data_for_logging.<locals>.<listcomp>c                   s$   i | ]\}}|vr|t | qS r   r   r~   r   r   r   r"     s
    
z/_transform_data_for_logging.<locals>.<dictcomp>c                   s,   i | ]}|j vr|j tt |j qS r   )r   rP   r   r   r   r   r   r"   "  s
    
)r   rU   r+   r   rV   r   r   r   r   r   r   r)   floatr'   typer   r   r   r   rP     s0   
(


rP   )r   r   r   r   )r   r'   )ro   N)rz   r   rW   r)   rI   r{   r   r+   )rz   r   rW   r)   rI   r{   r   r   )&
__future__r   r   logging	functoolsr   typingr   r   r   r   r   r	   r
   r   sglang.srt.environr   sglang.srt.utils.commonr   sglang.srt.utils.log_utilsr   r   fastapisglang.srt.managers.io_structr   r   	getLoggerr:   logger_DEFAULT_WHITELISTED_HEADERSSGLANG_LOG_REQUEST_HEADERSr   r#   r$   r%   ry   rR   rP   r   r   r   r   <module>   s2   (

 .+