
    gr!                     `    d dl mZmZmZ d dlmZmZ d dlmZ d dl	m
Z
mZ ddgZ G d d      Zy	)
    )ListOptionalUnion)print_verboseverbose_logger)LATENCY_BUCKETS)ServiceLoggerPayloadServiceTypeserror_classfunction_namec            	           e Zd ZdZ	 ddefdZdefdZd Zdedefd	Z		 ddeded
e
ee      fdZdedefdZg fdeded
e
ee      fdZdefdZdefdZdefdZdedeeef   fdZy)PrometheusServicesLoggerNmock_testingc                 L   	 	 ddl m}m}m} || _        || _        || _        t        j                  d       t        D cg c]  }|j                   c}| _
        i | _        | j                  D ]R  }| j                  |d      }| j                  |dt              }	| j                  |d	      }
||	|
g| j                  |<   T i | _        || _        d| _        d| _        y # t        $ r t        d      w xY wc c}w # t
        $ r}t'        d
t)        |              |d }~ww xY w)Nr   )REGISTRYCounter	Histogramz>Missing prometheus_client. Run `pip install prometheus-client`z#in init prometheus services metricslatency)type_of_requestfailed_requests)r   additional_labelstotal_requestsz(Got exception on init prometheus client )prometheus_clientr   r   r   ImportError	Exceptionr   debugr
   valueservicespayload_to_prometheus_mapcreate_histogramcreate_counterFAILED_REQUESTS_LABELSprometheus_to_amount_mapr   mock_testing_success_callsmock_testing_failure_callsr   str)selfr   kwargsr   r   r   itemservice	histogramcounter_failed_requestcounter_total_requestses               ]/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/prometheus_services.py__init__z!PrometheusServicesLogger.__init__   sW   
/	JJ 'DN"DL$DM  !FG4@ALDTZZLADM  *  == 11'91U	)-)<)<$5&< *= *&
 *.)<)<-= *= *& **;..w7 )"  )
 !-D./D+./D+Q  T  B>  	DSVHMNG	s4   
C 2C< C7BC< C44C< <	D#DD#returnc                 d    | j                   j                         D ]  }||j                  k(  s y y)NTF)r   collectname)r'   metric_namemetrics      r/   is_metric_registeredz-PrometheusServicesLogger.is_metric_registeredI   s-    mm++-Ffkk) .     c                 L    | j                   j                  j                  |      S )zL
        Helper function to get a metric from the registry by name.
        )r   _names_to_collectorsget)r'   r5   s     r/   _get_metricz$PrometheusServicesLogger._get_metricO   s     }}1155kBBr8   r*   r   c                     dj                  ||      }| j                  |      }|r| j                  |      S | j                  |dj                  |      |gt              S )Nlitellm_{}_{}zLatency for {} service)
labelnamesbuckets)formatr7   r<   r   r   )r'   r*   r   r5   is_registereds        r/   r    z)PrometheusServicesLogger.create_histogramU   sg    %,,WoF11+>##K00~~$++G4y#	  
 	
r8   r   c                     dj                  ||      }| j                  |      }|r| j                  |      S | j                  |dj                  ||      |g|xs g z         S )Nr>   zTotal {} for {} service)r?   )rA   r7   r<   r   )r'   r*   r   r   r5   rB   s         r/   r!   z'PrometheusServicesLogger.create_countera   ss     &,,WoF11+>##K00||%,,_gFy$5$;<  
 	
r8   labelsamountc                 t    t        || j                        sJ |j                  |      j                  |       y N)
isinstancer   rD   observe)r'   r+   rD   rE   s       r/   observe_histogramz*PrometheusServicesLogger.observe_histogramq   s1     )T^^444 ((0r8   c                     t        || j                        sJ |r# |j                  |g| j                  |       y |j                  |      j                  |       y rG   )rH   r   rD   inc)r'   counterrD   rE   r   s        r/   increment_counterz*PrometheusServicesLogger.increment_counter{   sQ     '4<<000GNN66$56::6BNN6"&&v.r8   payloadc                    | j                   r| xj                  dz  c_        |j                  j                  | j                  v r| j                  |j                  j                     }|D ]  }t        || j                        r3| j                  ||j                  j                  |j                         Lt        || j                        scd|j                  v sr| j                  ||j                  j                  d        y y )N   r+   rD   rE   r   rM   rD   rE   r   r$   r*   r   r   rH   r   rJ   durationr   _namerN   r'   rO   prom_objectsobjs       r/   service_success_hookz-PrometheusServicesLogger.service_success_hook   s    ++q0+??  D$B$BB99'//:O:OPL#c4>>2**"%&44&// + 
  T\\27G3997T** #&44  +  $ Cr8   c                 ^   | j                   r| xj                  dz  c_        |j                  j                  | j                  v rj| j                  |j                  j                     }|D ]A  }t        || j                        s| j                  ||j                  j                  d       C y y )NrQ   rS   )r   r%   r*   r   r   rH   r   rN   rW   s       r/   service_failure_hookz-PrometheusServicesLogger.service_failure_hook   s    ++q0+??  D$B$BB99'//:O:OPL#c4<<0** #&44  +  $ Cr8   c                   K   | j                   r| xj                  dz  c_        |j                  j                  | j                  v r| j                  |j                  j                     }|D ]  }t        || j                        r3| j                  ||j                  j                  |j                         Lt        || j                        scd|j                  v sr| j                  ||j                  j                  d        yyw)z3
        Log successful call to prometheus
        rQ   rR   r   rS   NrT   rW   s       r/   async_service_success_hookz3PrometheusServicesLogger.async_service_success_hook   s      ++q0+??  D$B$BB99'//:O:OPL#c4>>2**"%&44&// + 
  T\\27G3997T** #&44  +  $ Cs   CD	D	,D	errorc                   K   | j                   r| xj                  dz  c_        |j                  j                  }|j                  }|j
                  j                  | j                  v r| j                  |j
                  j                     }|D ]{  }t        || j                        sd|j                  v r,| j                  ||j
                  j                  ||gd       T| j                  ||j
                  j                  d       } y y w)NrQ   r   )rM   rD   r   rE   rS   )r   r%   	__class____name__	call_typer*   r   r   rH   r   rV   rN   )r'   rO   r_   r   r   rX   rY   s          r/   async_service_failure_hookz3PrometheusServicesLogger.async_service_failure_hook   s     
 ++q0+oo..))??  D$B$BB99'//:O:OPL#c4<<0(CII5..$'#*??#8#8/:M.J#$ /  ..$'#*??#8#8#$ /  $ Cs   B$D'A&D)FrG   )rb   
__module____qualname__litellm_service_latencyboolr0   r7   r<   r&   r    r   r   r!   floatrJ   rN   r	   rZ   r\   r^   r   r   rd    r8   r/   r   r      s    " #44l4 C

 

c 

  26	

 
 $DI.	
 1 1 	1 24/ / 	/
 $DI./,@ (,@ 8L .% S)^$r8   r   N)typingr   r   r   litellm._loggingr   r   %litellm.types.integrations.prometheusr   litellm.types.servicesr	   r
   r"   r   rj   r8   r/   <module>ro      s-    ) ( : A E'9 O Or8   