
    .`i!                     T   d dl mZ d dlmZ d dlmZ d dlmZ e G d d                      Ze G d de                      Ze G d	 d
e                      Z	e G d de                      Z
e G d de                      Zdee         fdZddededz  dee         fdZdeeef         dedeeef         fdZdee         dee         dee         deeeeef         eeef         eef                  fdZdee         deeeeef         ee         f                  fdZdS )    )	dataclass)REGISTRY)Metric)Samplec                   8    e Zd ZU dZeed<   eeef         ed<   dS )r   zA base class for prometheus metrics.

    Each metric may be associated with key=value labels, and
    in some cases a single vLLM instance may have multiple
    metrics with the same name but different sets of labels.
    namelabelsN)__name__
__module____qualname____doc__str__annotations__dict     j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/metrics/reader.pyr   r      s;           IIIcNr   r   c                       e Zd ZU dZeed<   dS )Counterz+A monotonically increasing integer counter.valueN)r
   r   r   r   intr   r   r   r   r   r      s         55JJJJJr   r   c                   *    e Zd ZU dZee         ed<   dS )VectorzAn ordered array of integer counters.

    This type - which doesn't exist in Prometheus - models one very
    specific metric, vllm:spec_decode_num_accepted_tokens_per_pos.
    valuesN)r
   r   r   r   listr   r   r   r   r   r   r      s.           Ir   r   c                       e Zd ZU dZeed<   dS )Gaugez)A numerical value that can go up or down.r   N)r
   r   r   r   floatr   r   r   r   r   r   *   s         33LLLLLr   r   c                   B    e Zd ZU dZeed<   eed<   eeef         ed<   dS )	Histograma  Observations recorded in configurable buckets.

    Buckets are represented by a dictionary. The key is
    the upper limit of the bucket, and the value is the
    observed count in that bucket. A '+Inf' key always
    exists.

    The count property is the total count across all
    buckets, identical to the count of the '+Inf' bucket.

    The sum property is the total sum of all observed
    values.
    countsumbucketsN)	r
   r   r   r   r   r   r   r   r   r   r   r   r    r    1   sD           JJJ	JJJ#s(^r   r    returnc                     g } t          j                    D ]}|j                            d          s|j        dk    rIt          |          }|D ]6}|                     t          |j        |j        |j	                             7r|j        dk    rt          |d          }|j        dk    r@t          |          D ]/\  }}|                     t          |j        ||                     0|D ]C}|                     t          |j        |j        t          |j	                                       D |j        dk    rwt          |d	          }t          |d
          }t          |d          }t          |||          D ]3\  }}	}
}|                     t          |j        ||	|
|                     4t!          d|j                   | S )a  An API for accessing in-memory Prometheus metrics.

    Example:
        >>> for metric in llm.get_metrics():
        ...     if isinstance(metric, Counter):
        ...         print(f"{metric} = {metric.value}")
        ...     elif isinstance(metric, Gauge):
        ...         print(f"{metric} = {metric.value}")
        ...     elif isinstance(metric, Histogram):
        ...         print(f"{metric}")
        ...         print(f"    sum = {metric.sum}")
        ...         print(f"    count = {metric.count}")
        ...         for bucket_le, value in metrics.buckets.items():
        ...             print(f"    {bucket_le} = {value}")
    zvllm:gauge)r   r	   r   counter_totalz,vllm:spec_decode_num_accepted_tokens_per_pos)r   r	   r   	histogram_bucket_count_sum)r   r	   r#   r!   r"   zUnknown metric type )r   collectr   
startswithtype_get_samplesappendr   r	   r   #_digest_num_accepted_by_pos_samplesr   r   r   _digest_histogramr    AssertionError)	collectedmetricsamplessr	   r   bucket_samplescount_samplessum_samplesr#   count_value	sum_values               r   get_metrics_snapshotr>   F   sA     !I"$$ 6G 6G{%%g.. 	;'!!"6**G    v{1817KKK    [I%%"6844G{LLL 'J'&R&R  NFF$$FKvNNN   
 !  A$$V[QWVVV   
 [K'' *&)<<N(::M&vv66K;L{< <  7i   #[% ')%      !!E!E!EFFFr   Nr6   suffixc                 P    |
| j         |z   n| j         fd| j        D             S )Nc                 *    g | ]}|j         k    |S r   )r   ).0r8   r   s     r   
<listcomp>z _get_samples.<locals>.<listcomp>   s     888!4Ar   )r   r7   )r6   r?   r   s     @r   r0   r0      s7    %+%7FK&  V[D8888v~8888r   r	   key_to_removec                 X    |                                  }|                    |           |S N)copypop)r	   rD   labels_copys      r   _strip_labelrJ      s'    ++--KOOM"""r   r9   r:   r;   c                 x   i }| D ]i}|j         d         }t          t          |j         d                                                    }||vri ||<   t	          |j                  ||         |<   ji }|D ]?}t          |j                                                   }t	          |j                  ||<   @i }|D ]2}t          |j                                                   }|j        ||<   3t          |                                          t          |                                          cxk    r%t          |                                          k    sn J g }	t          |                                          }
|
D ]<}t          |          }|	
                    |||         ||         ||         f           =|	S )Nle)r	   	frozensetrJ   itemsr   r   setkeysr   r   r1   )r9   r:   r;   buckets_by_labelsr8   bucket
labels_keycounts_by_labelssums_by_labelsoutput
label_keyskr	   s                r   r3   r3      s   4 KM = =$|AHd;;AACCDD
...,.j)03AG*%f-->@ 4 4qx~~//00
'*17||$$>@N - -qx~~//00
%&Wz"" 	""$$%%$$&&''	& 	& 	& 	&~""$$%%	& 	& 	& 	& 	& 	&
 F',,..//J 
 
a&q)+;A+>q@QR	
 	
 	
 	
 Mr   r7   c                    d}i }| D ]}t          |j        d                   }t          ||          }t          t	          |j        d                                                    }||vri ||<   t          |j                  ||         |<   g }|                                D ]S\  }}t          |          }dg|dz   z  }	|                                D ]
\  }
}||	|
<   |                    ||	f           T|S )Nr   position   )	r   r	   maxrM   rJ   rN   r   r   r1   )r7   max_posvalues_by_labelsr8   rZ   rS   rV   values_by_positionr	   r   posvals               r   r2   r2      s$   * GIK > >qx
+,,gx((|AHjAAGGIIJJ
---+-Z(14QW$X..F*:*@*@*B*B ( (&
&j!!!$*0022 	 	HCF3KKvv&''''Mr   rF   )dataclassesr   prometheus_clientr   r   
PromMetricprometheus_client.samplesr   r   r   r   r    r   r>   r   r0   r   rJ   tupler   r   r3   r2   r   r   r   <module>rg      s   " ! ! ! ! ! & & & & & & 2 2 2 2 2 2 , , , , , , 	 	 	 	 	 	 	 	     f        V        F           (Id6l I I I IX9 9 9S4Z 94< 9 9 9 9
c3h  S#X    9L915f9LPQWL9	%S#XS#XU:
;<9 9 9 9x(&\(	%S#XS	)
*+( ( ( ( ( (r   