o
    )i                     @   s   d dl Z d dlmZmZ d dlmZ d dlmZ zd dlm	Z
 d dlmZ W n ey1   dZ
Y nw G dd dZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZdS )    N)OptionalUnion)PrometheusStatLogger)SpecDecodingProm)metrics)Metricc                   @   s   e Zd Zdd Zdd ZdS )RayPrometheusMetricc                 C   s   t d u rtdd | _d S )Nz1RayPrometheusMetric requires Ray to be installed.)ray_metricsImportErrormetricself r   h/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/v1/metrics/ray_wrappers.py__init__   s
   
zRayPrometheusMetric.__init__c                 O   s   |r|  D ]\}}t|tst|||< q| j| |rEt|t| jjkr8tdt| jj dt| | jtt	| jj| | S )Nz=Number of labels must match the number of tag keys. Expected z, got )
items
isinstancestrr   Zset_default_tagslenZ	_tag_keys
ValueErrordictzip)r   labelsZlabelskwargskvr   r   r   r      s&   

zRayPrometheusMetric.labelsN)__name__
__module____qualname__r   r   r   r   r   r   r      s    r   c                
   @   s`   e Zd ZdZ			ddedee deee  dee fdd	Zd
ee	e
f fddZdd ZdS )RayGaugeWrapperzVWraps around ray.util.metrics.Gauge to provide same API as
    prometheus_client.Gauge Nnamedocumentation
labelnamesmultiprocess_modec                 C   s(   ~|rt |nd }tj|||d| _d S N)r    descriptiontag_keys)tupler	   ZGauger   )r   r    r!   r"   r#   labelnames_tupler   r   r   r   2   s   	zRayGaugeWrapper.__init__valuec                 C      | j |S N)r   setr   r)   r   r   r   r,   A      zRayGaugeWrapper.setc                 C   s   | j t S r+   )r   r,   timer   r   r   r   set_to_current_timeD   s   z#RayGaugeWrapper.set_to_current_time)r   Nr   )r   r   r   __doc__r   r   listr   r   intfloatr,   r0   r   r   r   r   r   .   s     

r   c                	   @   sP   e Zd ZdZ		ddedee deee  fddZdd
ee	e
f fddZdS )RayCounterWrapperzZWraps around ray.util.metrics.Counter to provide same API as
    prometheus_client.Counterr   Nr    r!   r"   c                 C   s&   |rt |nd }tj|||d| _d S r$   )r'   r	   Counterr   )r   r    r!   r"   r(   r   r   r   r   M   s
   zRayCounterWrapper.__init__      ?r)   c                 C   s   |dkrd S | j |S )Nr   )r   incr-   r   r   r   r8   V   s   zRayCounterWrapper.inc)r   N)r7   )r   r   r   r1   r   r   r2   r   r   r3   r4   r8   r   r   r   r   r5   I   s    

	r5   c                   @   s\   e Zd ZdZ			ddedee deee  deee  fdd	Zd
e	e
ef fddZdS )RayHistogramWrapperz^Wraps around ray.util.metrics.Histogram to provide same API as
    prometheus_client.Histogramr   Nr    r!   r"   bucketsc                 C   s4   |rt |nd }|r|ng }tj||||d| _d S )N)r    r%   r&   
boundaries)r'   r	   Z	Histogramr   )r   r    r!   r"   r:   r(   r;   r   r   r   r   `   s   zRayHistogramWrapper.__init__r)   c                 C   r*   r+   )r   observer-   r   r   r   r<   l   r.   zRayHistogramWrapper.observe)r   NN)r   r   r   r1   r   r   r2   r4   r   r   r3   r<   r   r   r   r   r9   \   s    


r9   c                   @   s   e Zd ZdZeZdS )RaySpecDecodingPromz
    RaySpecDecodingProm is used by RayMetrics to log to Ray metrics.
    Provides the same metrics as SpecDecodingProm but uses Ray's
    util.metrics library.
    N)r   r   r   r1   r5   _counter_clsr   r   r   r   r=   p   s    r=   c                   @   s,   e Zd ZdZeZeZeZ	e
Zedd ZdS )RayPrometheusStatLoggerz1RayPrometheusStatLogger uses Ray metrics instead.c                   C   s   d S r+   r   r   r   r   r   _unregister_vllm_metrics   s   z0RayPrometheusStatLogger._unregister_vllm_metricsN)r   r   r   r1   r   Z
_gauge_clsr5   r>   r9   Z_histogram_clsr=   Z_spec_decoding_clsstaticmethodr@   r   r   r   r   r?   z   s    r?   )r/   typingr   r   Zvllm.v1.metrics.loggersr   Zvllm.v1.spec_decode.metricsr   Zray.utilr   r	   Zray.util.metricsr   r
   r   r   r5   r9   r=   r?   r   r   r   r   <module>   s    
