
    h*                     l    d dl mZ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mZmZ ddgZ G d d      Zy	)
    )DictListOptionalUnion)print_verboseverbose_logger)LATENCY_BUCKETS)DEFAULT_SERVICE_CONFIGSServiceLoggerPayloadServiceMetricsServiceTypeserror_classfunction_namec            	          e Zd ZdZ	 ddefdZdedee   fdZ	defdZ
d Zded	ef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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                    	 	 ddl m}m}m}m} ddlm} || _        || _        || _        || _        t        j                  d       i | _        t        D ].  }g }	| j                  |      }
t        j                  |
v r0| j!                  |j"                  d      }|r|	j%                  |       t        j&                  |
v re| j)                  |j"                  dt*        	      }|r|	j%                  |       | j)                  |j"                  d
      }|r|	j%                  |       t        j,                  |
v r0| j/                  |j"                  d      }|r|	j%                  |       |	s|	| j                  |j"                  <   1 i | _        || _        d| _        d| _        y # t        $ r t        d      w xY w# t        $ r}t9        dt;        |              |d }~ww xY w)Nr   )REGISTRYCounterGauge	Histogram)	Collectorz>Missing prometheus_client. Run `pip install prometheus-client`z#in init prometheus services metricslatency)type_of_requestfailed_requests)r   additional_labelstotal_requestssizez(Got exception on init prometheus client )prometheus_clientr   r   r   r   prometheus_client.gc_collectorr   ImportError	Exceptionr   debugpayload_to_prometheus_mapr   _get_service_metrics_initializer   	HISTOGRAMcreate_histogramvalueappendCOUNTERcreate_counterFAILED_REQUESTS_LABELSGAUGEcreate_gaugeprometheus_to_amount_mapr   mock_testing_success_callsmock_testing_failure_callsr   str)selfr   kwargsr   r   r   r   r   serviceservice_metricsmetrics_to_initialize	histogramcounter_failed_requestcounter_total_requestsgaugees                   d/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/integrations/prometheus_services.py__init__z!PrometheusServicesLogger.__init__   s   
?	QQD 'DN"DLDJ$DM  !FG  * (<UW(,(L(LW(U% "++/DD $ 5 5y !6 !I !'..y9!))-BB-1-@-@(9*@ .A .*
 .'../EF-1-@-@7G .A .* .'../EF!''+@@ --gmmV-TE'..u5"DSD227==AC (F 35D) ,D./D+./D+o  T r  	DSVHMNG	s/   F" EF: )8F: "F77F: :	G!GG!r5   returnc                     t         j                  t         j                  g}|t        vr|S t        j                  |i       j	                  dg       }|st        j                  d|        |S |S )NmetricszNo metrics found for service )r   r*   r&   r
   getr   r#   )r3   r5   DEFAULT_METRICSrA   s       r=   r%   z8PrometheusServicesLogger._get_service_metrics_initialize^   sl     *11>3K3KL11"")--gr:>>y"M  #@	!JK""    c                 d    | j                   j                         D ]  }||j                  k(  s y y)NTF)r   collectname)r3   metric_namemetrics      r=   is_metric_registeredz-PrometheusServicesLogger.is_metric_registeredk   s-    mm++-Ffkk) . rD   c                 L    | j                   j                  j                  |      S )zL
        Helper function to get a metric from the registry by name.
        )r   _names_to_collectorsrB   )r3   rH   s     r=   _get_metricz$PrometheusServicesLogger._get_metricq   s     }}1155kBBrD   r   c                     dj                  ||      }| j                  |      }|r| j                  |      S | j                  |dj                  |      |gt              S )Nlitellm_{}_{}zLatency for {} service)
labelnamesbuckets)formatrJ   rM   r   r	   r3   r5   r   rH   is_registereds        r=   r'   z)PrometheusServicesLogger.create_histogramw   sg    %,,WoF11+>##K00~~$++G4y#	  
 	
rD   c                     dj                  ||      }| j                  |      }|r| j                  |      S | j                  |dj                  |      |g      S )NrO   zGauge for {} servicerP   )rR   rJ   rM   r   rS   s        r=   r.   z%PrometheusServicesLogger.create_gauge   sc    %,,WoF11+>##K00zz/66w?WI  
 	
rD   r   c                     dj                  ||      }| j                  |      }|r| j                  |      S | j                  |dj                  ||      |g|xs g z         S )NrO   zTotal {} for {} servicerV   )rR   rJ   rM   r   )r3   r5   r   r   rH   rT   s         r=   r+   z'PrometheusServicesLogger.create_counter   ss     &,,WoF11+>##K00||%,,_gFy$5$;<  
 	
rD   labelsamountc                 t    t        || j                        sJ |j                  |      j                  |       y N)
isinstancer   rX   observe)r3   r8   rX   rY   s       r=   observe_histogramz*PrometheusServicesLogger.observe_histogram   s1     )T^^444 ((0rD   c                 t    t        || j                        sJ |j                  |      j                  |       y r[   )r\   r   rX   set)r3   r;   rX   rY   s       r=   update_gaugez%PrometheusServicesLogger.update_gauge   s/     %,,,V  (rD   c                     t        || j                        sJ |r# |j                  |g| j                  |       y |j                  |      j                  |       y r[   )r\   r   rX   inc)r3   counterrX   rY   r   s        r=   increment_counterz*PrometheusServicesLogger.increment_counter   sQ     '4<<000GNN66$56::6BNN6"&&v.rD   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   r8   rX   rY   r   rd   rX   rY   )r   r0   r5   r(   r$   r\   r   r^   durationr   _namere   r3   rf   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rD   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 )Nrh   rj   )r   r1   r5   r(   r$   r\   r   re   rm   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rD   c                   K   | j                   r| xj                  dz  c_        |j                  j                  | j                  v r5| j                  |j                  j                     }|D ]  }t        || j                        r3| j                  ||j                  j                  |j                         Mt        || j                        r7d|j                  v r)| j                  ||j                  j                  d       t        || j                        s|j                  s| j                  ||j                  j                  d      xs d|j                  j                  d      xs d	        y
y
w)z3
        Log successful call to prometheus
        rh   ri   r   rj   gauge_labels gauge_valuer   )r;   rX   rY   N)r   r0   r5   r(   r$   r\   r   r^   rk   r   rl   re   r   event_metadatara   rB   rm   s       r=   async_service_success_hookz3PrometheusServicesLogger.async_service_success_hook   sC     ++q0+??  D$B$BB99'//:O:OPL#c4>>2**"%&44&// + 
  T\\27G3997T** #&44  + 
  TZZ0--))"%#*#9#9#=#=n#M#SQS#*#9#9#=#=m#L#QPQ *  $ Cs   DE=E=*AE=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)Nrh   r   )rd   rX   r   rY   rj   )r   r1   	__class____name__	call_typer5   r(   r$   r\   r   rl   re   )r3   rf   ry   r   r   rn   ro   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)Fr[   )r|   
__module____qualname__litellm_service_latencyboolr>   r   r   r   r%   rJ   rM   r2   r'   r.   r   r+   floatr^   ra   re   r   rp   rr   rx   r   r"   r~    rD   r=   r   r      sH   " #DDL#	n	4 C

 

c 


C 
# 
 26	

 
 $DI.	
 1 1 	1) ) 	) 24/ / 	/
 $DI./,@ (,@ 8L <% S)^$rD   r   N)typingr   r   r   r   litellm._loggingr   r   %litellm.types.integrations.prometheusr	   litellm.types.servicesr
   r   r   r   r,   r   r   rD   r=   <module>r      s6    / . : A  (9 E ErD   