
    .`ij                         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 d dl	m
Z
 d dlmZ  ee          Z G d d          Z G d d	          ZddZddZded
efdZdee         ded
efdZdS )    N)Counter)suppress)Any)init_loggerc                   6    e Zd ZdZddedz  ddfdZdefdZdS )GCDebugConfigz
    Config for GC Debugger.
    - 0: disable GC debugger
    - 1: enable GC debugger with gc.collect elapsed times
    - '{"top_objects":5}': enable GC debugger with top 5 collected objects
    Ngc_debug_confreturnc                    d| _         d| _        |r|dk    rn|dk    rd| _         nt	 t          j        |          }d| _         |                    dd          | _        n<# t
          $ r/ d| _         t                              dt          j	                   Y nw xY wt          
                    dt          |                      d S )	NF01Ttop_objectsz!Failed to parse VLLM_GC_DEBUG(%s)zGC Debug Config. %s)enabledr   jsonloadsget	ExceptionloggererrorenvsVLLM_GC_DEBUGdebugstr)selfr	   	json_confs      g/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/utils/gc_utils.py__init__zGCDebugConfig.__init__   s    " " 	V 4 4c!!DLLV J}55	##,==#C#C   V V V$@$BTUUUUUV 	*CII66666s   6A 6BBc                 &    d| j          d| j         S )Nzenabled:z,top_objects:)r   r   )r   s    r   __repr__zGCDebugConfig.__repr__*   s    G$,GGT5EGGG    N)__name__
__module____qualname____doc__r   r   r     r!   r   r   r      sk         7 7cDj 7D 7 7 7 7$H# H H H H H Hr!   r   c                   F    e Zd ZdZdeddfdZdedeeef         ddfdZ	dS )	
GCDebuggerz
    Debugger for GC which logs helpful information for GC understanding.
    To enable, you should call maybe_attach_gc_debug_callback in the process.
    configr
   Nc                 `    || _         t          j                    | _        d| _        d| _        d S )Nr    )r*   timemonotonic_nsstart_time_nsnum_objectsgc_top_collected_objects)r   r*   s     r   r   zGCDebugger.__init__4   s2    "&"3"5"5 ! .0%%%r!   phaseinfoc           
         |                     d          }|dS |dk    rat          j                    | _        t	          j        |          }t          |          | _        t          || j	        j
                  | _        dS |dk    rvt          j                    | j        z
  dz  }t                              d|t          |                     dd                    | j        || j        r
d	| j         nd
           dS dS )zA
        Handles a GC event (e.g. GC start or GC finish)
        
generationNstartstopg    .AzSGC took %.3fms to complete. Collected %s objects (out of %d) in GC generation %d.%s	collected?z Top collected objects: 
r,   )r   r-   r.   r/   gcget_objectslenr0   !_compute_top_gc_collected_objectsr*   r   r1   r   r3   r   )r   r2   r3   r5   objects
elpased_mss         r   handlezGCDebugger.handle=   s    XXl++
FG "&!2!4!4DnZ00G"7||D,M0- -D))) f__ +--0BBcIJKKJDHH[#..//  4P1NPPP    	 _r!   )
r#   r$   r%   r&   r   r   r   dictintr@   r'   r!   r   r)   r)   .   sq         
0} 0 0 0 0 0 C  tCH~  $            r!   r)   r
   c                      t          j        d           t          j        d           t          j        d           t          j                     dS )z
    Freeze all objects tracked by the garbage collector. It should be invoked
    after server init / warmup, to reduce GC overhead from static objects
    during serving time.
    r         N)r:   collectfreezer'   r!   r   freeze_gc_heaprH   `   s:     JqMMMJqMMMJqMMMIKKKKKr!   c                      t          t          j                  } | j        rXt	          |           dt
          dt          t
          t          f         ddffd}t          j	        
                    |           dS dS )zI
    Attached a callback for GC debug when VLLM_GC_DEBUG is enabled.
    r2   r3   r
   Nc                 4                         | |           d S r"   )r@   )r2   r3   debuggers     r   gc_callbackz3maybe_attach_gc_debug_callback.<locals>.gc_callbackw   s    OOE4(((((r!   )r   r   r   r   r)   r   rA   rB   r:   	callbacksappend)r*   rL   rK   s     @r   maybe_attach_gc_debug_callbackrO   o   s     4-..F~ ))&11	)s 	)$sCx. 	)T 	) 	) 	) 	) 	) 	) 	K((((() )r!   oc                     d}t          t                    5  dt          |            d}ddd           n# 1 swxY w Y   t          t	          |                      | S )z
    Detailed object type.

    TODO(Jialin): Further enhance the detailed type with element types for
    easier debugging. We tried but occasionally it would run into signals
    which kills the engine.
    r,   z(size:)N)r   r   r<   r   type)rP   size_strs     r   _compute_detailed_typerU   }   s     H 
)		 & &%CFF%%%& & & & & & & & & & & & & & &$q''ll&H&&&s   7;;r>   topc                     |dk    rdS d | D             }d                     d t          |                              |          D                       S )z+
    Group collected objects by types.
    r   r,   c                 ,    g | ]}t          |          S r'   )rU   ).0rP   s     r   
<listcomp>z5_compute_top_gc_collected_objects.<locals>.<listcomp>   s!    ???!*1--???r!   
c              3   ,   K   | ]\  }}|d d| V  dS )z>5:Nr'   )rY   object_typecounts      r   	<genexpr>z4_compute_top_gc_collected_objects.<locals>.<genexpr>   sK        K ###k##     r!   )joinr   most_common)r>   rV   object_typess      r   r=   r=      sm     axxr??w???L99  "),"7"7"C"CC"H"H     r!   )r
   N)r:   r   r-   collectionsr   
contextlibr   typingr   	vllm.envsr   vllm.loggerr   r#   r   r   r)   rH   rO   r   rU   listrB   r=   r'   r!   r   <module>rj      se   
			                           # # # # # #	X		H H H H H H H H</ / / / / / / /d   ) ) ) )'c 'c ' ' ' ' 
tCy 
s 
s 
 
 
 
 
 
r!   