
    ^hF                         S SK r S SKJrJr  S SKJr  S SKJrJr  S SKJ	r	  S SK
Jr  S SK7  S SKJr  S S	KJr   " S
 S\	5      rg)    N)datetime	timedelta)Optional)print_verboseverbose_logger)CustomLogger)UserAPIKeyAuth)*StandardLoggingPayload)!get_end_user_id_for_cost_trackingc                      \ rS rSrS rS rS\S\\   S\\   S\\   S\\   S	\\   S
\\   S\\   4S jr	S	\\   S
\\   S\\   S\\   S\
4
S jrS\\   S\\   S\\   S\\   S	\\   S
\\   S\\   S\4S jrS\\   S\\   S\
S\
4S jrS\
S\\   S\\   S\\   S	\\   S
\\   S\4S jrS rS\
S\S\4S jrS\
S\4S jrS\
4S jr S7S\
S\4S jjrS \S\
S\4S! jrS \S\
S\4S" jrS#\S$\S%\\   S&\\   S'\4
S( jrS$\S%\S&\S'\4S) jrS$\S%\\   S&\\   S'\4S* jrS$\S%\\   S&\\   S'\4S+ jrS$\S%\S&\S'\S,\4
S- jrS.\S/\S0\4S1 jrS2\\   S/\\   S3\4S4 jr S5r!g6)8PrometheusLogger   c                 4    SSK JnJnJn  SSKJnJn  USLaQ  [        R                  " SUR                  R                   35        U" SSUR                  R                   3S9U l        g U" S	S
SSS[        SSS/[        -   S9U l        U" SSSSS[        SSS[        /S9U l        U" SS/ SQ["        S9U l        U" SS/ SQ["        S9U l        U" SS/ SQ["        S9U l        U" SS/ SQS9U l        U" S S!/ SQS9U l        U" S"S#/ SQS9U l        U" S$S%/ SQS9U l        U" S&S'S(S/S9U l        U" S)S*SS/S9U l        U" S+S,/ S-QS9U l        U" S.S// S-QS9U l        U" S0S1/ S2QS9U l        U" S3S4/ S2QS9U l        U" S5S6S7/S9U l        / S8Qn/ S9QnU" S:S;US9U l         U" S<S=U[B        /-   S9U l"        U" S>S?[        /U-   U-   S9U l#        U" S@SA[        /U-   [        -   U-   S9U l$        U" SBSC[        /U-   U-   S9U l%        / S9QnU" SDSEXx-   S9U l&        U" SFSG[        SH/U-   [        -   5      U l'        U" SISJ[        SH/U-   [        -   5      U l(        U" SKSL/ SQS9U l)        U" SMSN/ SQS9U l*        g ! [V         a  n	[Y        SO[[        U	5       35        U	eS n	A	ff = f)PNr   )CounterGauge	Histogram)CommonProxyErrorspremium_userTu>   🚨🚨🚨 Prometheus Metrics is on LiteLLM Enterprise
🚨 !litellm_not_a_premium_user_metricu?   🚨🚨🚨 Prometheus Metrics is on LiteLLM Enterprise. 🚨 )namedocumentation$litellm_proxy_failed_requests_metriczjTotal number of failed responses from proxy - the client did not get a success response from litellm proxyend_userhashed_api_keyapi_key_aliasteam
team_aliasuser)r   r   
labelnames#litellm_proxy_total_requests_metriczXTotal number of requests made to the proxy server - track number of client side requests$litellm_request_total_latency_metricz0Total latency (seconds) for a request to LiteLLM)modelr   r   r   r   )r!   bucketslitellm_llm_api_latency_metricz1Total latency (seconds) for a models LLM API call*litellm_llm_api_time_to_first_token_metricz-Time to first token for a models LLM API calllitellm_spend_metriczTotal spend on LLM requests)r   r   r   r$   r   r   r    )r!   litellm_total_tokensz7Total number of input + output tokens from LLM requestslitellm_input_tokensz.Total number of input tokens from LLM requestslitellm_output_tokensz/Total number of output tokens from LLM requests$litellm_remaining_team_budget_metriczRemaining budget for teamteam_id'litellm_remaining_api_key_budget_metriczRemaining budget for api key,litellm_remaining_api_key_requests_for_modelzLRemaining Requests API Key can make for model (model based rpm limit on key))r   r   r$   *litellm_remaining_api_key_tokens_for_modelzJRemaining Tokens API Key can make for model (model based tpm limit on key)litellm_remaining_requestszWLLM Deployment Analytics - remaining requests for model, returned from LLM API Provider)model_groupapi_providerapi_baselitellm_model_namer   r   litellm_remaining_tokensz:remaining tokens for model, returned from LLM API Provider(litellm_provider_remaining_budget_metriczHRemaining budget for provider - used when you set provider budget limitsr3   r5   model_idr4   r3   )r   r   r   r   litellm_deployment_statezlLLM Deployment Analytics - The state of the deployment: 0 = healthy, 1 = partial outage, 2 = complete outagelitellm_deployment_cooled_downzLLM Deployment Analytics - Number of times a deployment has been cooled down by LiteLLM load balancing logic. exception_status is the status of the exception that caused the deployment to be cooled down$litellm_deployment_success_responseszOLLM Deployment Analytics - Total number of successful LLM API calls via litellm$litellm_deployment_failure_responseszLLM Deployment Analytics - Total number of failed LLM API calls for a specific LLM deploymeny. exception_status is the status of the exception from the llm api!litellm_deployment_total_requestszXLLM Deployment Analytics - Total number of LLM API calls via litellm - success + failure+litellm_deployment_latency_per_output_tokenz3LLM Deployment Analytics - Latency per output token'litellm_deployment_successful_fallbackszfLLM Deployment Analytics - Number of successful fallback requests from primary model -> fallback modelfallback_model#litellm_deployment_failed_fallbackszbLLM Deployment Analytics - Number of failed fallback requests from primary model -> fallback model&litellm_llm_api_failed_requests_metricz5deprecated - use litellm_proxy_failed_requests_metriclitellm_requests_metriczdeprecated - use litellm_proxy_total_requests_metric. Total number of LLM calls to litellm - track total per API Key, team, userz(Got exception on init prometheus client ).prometheus_clientr   r   r   litellm.proxy.proxy_serverr   r   r   warningnot_premium_uservaluer   REQUESTED_MODELEXCEPTION_LABELSr   STATUS_CODEr"   LATENCY_BUCKETSr#   r&   r'   r(   litellm_tokens_metriclitellm_input_tokens_metriclitellm_output_tokens_metricr,   r.   r/   r0   !litellm_remaining_requests_metriclitellm_remaining_tokens_metricr7   r:   EXCEPTION_STATUSr;   r<   r=   r>   r?   r@   rB   rC   rD   	Exceptionr   str)
selfkwargsr   r   r   r   r   _logged_llm_labelsteam_and_key_labelses
             Y/home/james-whalen/.local/lib/python3.13/site-packages/litellm/integrations/prometheus.py__init__PrometheusLogger.__init__   s5   z	CCR4'&&UVgVxVxV~V~U  A :A<$cdu  eG  eG  eM  eM  dN  #O:6 8?; K$##  #	#9D5 8?:x$## 	8D4  9B6B (9D5 3<0C (3D/ ?H<? (?D; )0&-)D% *1&I*D& 07&@0D, 18'A1D- 9>6+%|49D5 <A9.,o><D8 AF>^GAD= ?D<\G?D; 6;,i6D2 49*L4D0 =B:Z*+=D9"# -2*~--D) 3:0 ]-1A0BB3D/ 9@;o+,/AADWW9D5
 9@; @+,$%"# &&9D5 6=8x+,/AADWW6D2# @IBS-C@D< <C9x "23%&"#<D8 8?5t "23%&"#8D4 ;B=U;D7 ,3. a,D(  	DSVHMNG	s   A'I/ *HI/ /
J9JJc                 V  #    SSK Jn  [        R                  " SU 35        UR	                  S5      nUb  [        U[        5      (       d  [        SU 35      eUR	                  SS5      nUR	                  S0 5      =(       d    0 nUR	                  S	0 5      n	[        US
S9n
US	   S   nUS	   S   nUS	   S   nUS	   S   nUS	   S   nUS   nUS   nUS   n[        SU SU SU SU
 SU 3
5        Ub9  [        U[        5      (       a$  UR                  S5      (       a  SSKJn  U" U5      nU R                  U
UUUUUUUS9  U R                  UU
UUUUUUS9  U R!                  UUUUUS9  U R#                  UUUU	S9  U R%                  UUUUUUUS9  U R'                  XUU5        g 7f) Nr   r   z@prometheus Logging - Enters success logging function for kwargs standard_logging_objectz)standard_logging_object is required, got=r$    litellm_paramsmetadata
prometheusservice_typeuser_api_key_user_iduser_api_key_hashuser_api_key_aliasuser_api_key_team_iduser_api_key_team_aliascompletion_tokenstotal_tokensresponse_costz'inside track_prometheus_metrics, model z, response_cost z, tokens_used z, end_user_id z, user_api_key zsk-)
hash_token)end_user_iduser_api_keyrh   r$   user_api_teamuser_api_team_aliasuser_idrm   )standard_logging_payloadro   rp   rh   r$   rq   rr   rs   )rq   rr   rp   rh   ra   )rp   rh   rW   rb   )rW   r$   rp   rh   rq   rr   rt   )litellm.types.utilsr   r   debugget
isinstancedict
ValueErrorr   r   rU   
startswithlitellm.proxy.utilsrn   ._increment_top_level_request_and_spend_metrics_increment_token_metrics#_increment_remaining_budget_metrics#_set_virtual_key_rate_limit_metrics_set_latency_metrics"set_llm_deployment_success_metrics)rV   rW   response_obj
start_timeend_timer   rt   r$   ra   	_metadataro   rs   rp   rh   rq   rr   output_tokenstokens_usedrm   rn   s                       r[   async_log_success_event(PrometheusLogger.async_log_success_eventR  s    >NvhW	

 FLZZ%F
  $+:$d4
 4
 ;<T;UV  

7B'$4b9?R"&&z26	7
 +:67MN/
;<OP5jABVW0<=ST6zB%
 11DE.~>0A5eW<L]O[ijuiv  wE  FQ  ER  Ra  bn  ao  p	

 $<--''..6%l3L 	;;#%1' 3' 	< 		
 	%% &>#%1' 3 	& 	
 	00' 3%1) 	1 	
 	00%1	 	1 	
 	!!%1' 3 &> 	" 	
 	//-	
 	s   F'F)rt   ro   rp   rh   r$   rq   rr   rs   c	           	      6   U R                   R                  UUUUUUU5      R                  US   5        U R                  R                  UUUUUUU5      R                  US   5        U R                  R                  UUUUUUU5      R                  US   5        g )Nrl   prompt_tokensrk   )rN   labelsincrO   rP   )	rV   rt   ro   rp   rh   r$   rq   rr   rs   s	            r[   r~   )PrometheusLogger._increment_token_metrics  s     	""))	
 #&~6
7((//	
 #&7
8))00	
 #&':;
<    ra   c                    UR                  S0 5      R                  SS 5      nUR                  S0 5      R                  SS 5      nU R                  XvS9nUR                  S0 5      R                  SS 5      n	UR                  S0 5      R                  SS 5      n
U R                  XS9nU R                  R                  X5      R	                  U5        U R
                  R                  X45      R	                  U5        g )Nrb   user_api_key_team_spenduser_api_key_team_max_budget
max_budgetspenduser_api_key_spenduser_api_key_max_budget)rw   _safe_get_remaining_budgetr,   r   setr.   )rV   rq   rr   rp   rh   ra   _team_spend_team_max_budget_remaining_team_budget_api_key_spend_api_key_max_budget_remaining_api_key_budgets               r[   r   4PrometheusLogger._increment_remaining_budget_metrics  s    %((R8<<%t
 *--j"=AA*D
 "&!@!@' "A "
 (++J;?? $
 -00R@DD%t
 %)$C$C* %D %
! 	1188	

#$
%44;;	

#'
(r   rm   c	           	          U R                   R                  UUUUUUU5      R                  5         U R                  R                  UUUUUUU5      R                  U5        g N)rD   r   r   r(   )	rV   ro   rp   rh   r$   rq   rr   rs   rm   s	            r[   r}   ?PrometheusLogger._increment_top_level_request_and_spend_metrics  sk     	$$++	
 #%!!((	
 #m
r   rW   rb   c                 `   SSK Jn  U" U5      nSU 3nSU 3nUR                  U[        R                  5      n	UR                  U[        R                  5      n
U R
                  R                  XU5      R                  U	5        U R                  R                  XU5      R                  U
5        g )Nr   )#get_model_group_from_litellm_kwargszlitellm-key-remaining-requests-zlitellm-key-remaining-tokens-)	)litellm.proxy.common_utils.callback_utilsr   rw   sysmaxsizer/   r   r   r0   )rV   rp   rh   rW   rb   r   r2    remaining_requests_variable_nameremaining_tokens_variable_nameremaining_requestsremaining_tokenss              r[   r   4PrometheusLogger._set_virtual_key_rate_limit_metrics0  s    	
 :&A-k]; 	) ,I)V&%\\*JCKKX#<<(FT99@@k	

# 
!77>>k	

#
r   c                 D   US   nUR                  S5      =(       d    [        R                  " 5       n	UR                  S5      n
UR                  SS 5      nUR                  SS 5      nUbj  [        U[        5      (       aU  UR                  S5      SL aA  X-
  R	                  5       nU R
                  R                  UUUUU5      R                  U5        O[        R                  " S5        UbW  [        U[        5      (       aB  X-
  nUR	                  5       nU R                  R                  UUUUU5      R                  U5        U
bY  [        U
[        5      (       aC  X-
  nUR	                  5       nU R                  R                  UUUUU5      R                  U5        g g g )	Nmodel_parametersr   r   api_call_start_timecompletion_start_timestreamTzUTime to first token metric not emitted, stream option in model_parameters is not True)rw   r   nowrx   total_secondsr'   r   observer   rv   r&   r#   )rV   rW   r$   rp   rh   rq   rr   rt   r   r   r   r   r   time_to_first_token_secondsapi_call_total_timeapi_call_total_time_seconds
total_timetotal_time_secondss                     r[   r   %PrometheusLogger._set_latency_metricsN  s    "::L!M#ZZ
3Ex||~)/L)A
$jj)>E &

+BD I "-0(;; $$X. &;mo ( ;;BB"# g12  g *z0
 0
 .6-K*=*K*K*M'//66"# g12 !jX&F&F$,$9J!+!9!9!;55<<"# g() 'G!r   c           	      \  #    SSK Jn  [        R                  " SU 35        UR	                  SS5      nUR	                  S0 5      nUR	                  S0 5      =(       d    0 n[        USS	9n	US
   S   n
US
   S   nUS
   S   nUS
   S   nUS
   S   nUR	                  SS 5         U R                  R                  U	UUUUUU
5      R                  5         U R                  U5        g ! [         a8  n[        R                  " SR                  [        U5      5      5         S nAg S nAff = f7f)Nr   r   z@prometheus Logging - Enters failure logging function for kwargs r$   r`   r_   ra   rc   rd   rb   rf   rg   rh   ri   rj   	exception0prometheus Layer Error(): Exception occured - {})ru   r   r   rv   rw   r   rC   r   r   "set_llm_deployment_failure_metricsrT   r   formatrU   )rV   rW   r   r   r   r   r$   rt   ra   ro   rs   rp   rh   rq   rr   rZ   s                   r[   async_log_failure_event(PrometheusLogger.async_log_failure_event  sV    >NvhW	

 

7B';A::%r<
   $4b9?R7
 +:67MN/
;<OP5jABVW0<=ST6zB%
 	

;%	77>>"# ce33F; 	  	$$BII#a&Q 	s1   B#D,&A C' &D,'
D)1.D$D,$D))D,request_dataoriginal_exceptionuser_api_key_dictc                   #     U R                   R                  UR                  UR                  UR                  UR                  SS5      UR                  UR                  UR                  [        USS5      [        UR                  R                  5      S9	R                  5         U R                  R                  UR                  UR                  UR                  UR                  SS5      UR                  UR                  UR                  [        [        USS5      5      S9R                  5         g! [         a8  n[         R"                  " SR%                  [        U5      5      5         SnAgSnAff = f7f)a  
Track client side failures

Proxy level tracking - failed client side requests

labelnames=[
            "end_user",
            "hashed_api_key",
            "api_key_alias",
            REQUESTED_MODEL,
            "team",
            "team_alias",
        ] + EXCEPTION_LABELS,
r$   r`   status_codeN)	r   r   r   requested_modelr   r   r    exception_statusexception_classr   r   r   r   r   r   r    r   r   )r   r   ro   api_key	key_aliasrw   r-   r   rs   getattrrU   	__class____name__r   r"   rT   r   r   r   )rV   r   r   r   rZ   s        r[   async_post_call_failure_hook-PrometheusLogger.async_post_call_failure_hook  sE    (	55<<*66088/99 , 0 0" =&..,77&..!();]D!Q #$6$@$@$I$I J = 
 ce44;;*66088/99 , 0 0" =&..,77&..(:M4 PQ < 	 ce 	$$BII#a&Q 		s/   E;D1D6 5E;6
E8 .E3.E;3E88E;datac                   #     U R                   R                  UR                  UR                  UR                  UR                  SS5      UR                  UR                  UR                  SS9R                  5         g! [         a8  n[        R                  " SR                  [        U5      5      5         SnAgSnAff = f7f)z`
Proxy level tracking - triggered when the proxy responds with a success response to the client
r$   r`   200r   r   N)r"   r   ro   r   r   rw   r-   r   rs   r   rT   r   r   r   rU   )rV   r   r   responserZ   s        r[   async_post_call_success_hook-PrometheusLogger.async_post_call_success_hook  s     	44;;*66088/99 $" 5&..,77&..! < 	 ce 	$$BII#a&Q 		s/   CA:A? >C?
C	.B<7C<CCrequest_kwargsc                     [         R                  " S5        UR                  S0 5      nUR                  S0 5      =(       d    0 nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  S	S5      nUR                  S
S5      n	 U R                  UUUU	S9  U R                  R                  UUUU	[        [        USS5      5      UR                  R                  UUS   S   US   S   US   S   US   S   S9R                  5         U R                  R                  UUUU	UUS   S   US   S   US   S   US   S   S9	R                  5         g! [         a     gf = f)z
Sets Failure metrics when an LLM API call fails

- mark the deployment as partial outage
- increment deployment failure responses metric
- increment deployment total requests metric

Args:
    request_kwargs: dict

(setting remaining tokens requests metricr_   ra   r$   Nr2   r4   r9   r   custom_llm_providerr8   r   rb   rg   rh   ri   rj   )r5   r9   r4   r3   r   r   r   r   r   r   r   	r5   r9   r4   r3   r   r   r   r   r   )r   rv   rw   set_deployment_partial_outager=   r   rU   r   r   r   r   r>   rT   )
rV   r   rt   _litellm_paramsr5   r2   r4   r9   r   llm_providers
             r[   r   3PrometheusLogger.set_llm_deployment_failure_metrics  s   @	  !KL?M?Q?Q)2@$ -001A2FL"O!/!3!3GT!B266}dKK/33JEH/33JEH#1#5#5k4#HI*../DdKL ..#5!!)	 /  55<<#5!!)!$WYt%L!M ) 3 3 < < +7
C'  7zB( .j9:PQ3J?- = $ ce2299#5!!) +7
C'  7zB( .j9:PQ3J?- :   ce 		s   E:E= =
F
	F
r   c                 $    [         R                  " S5        UR                  S5      nUc  g US   nUS   nUR                  S5      nUR                  S0 5      =(       d    0 n	U	R                  S0 5      n
UR                  SS 5      nU	R                  S	S 5      nU
R                  S
5      =(       d    0 nUR                  SS 5      nS nS nUS   S   =n(       a$  UR                  SS 5      nUR                  SS 5      nU(       a<   U R                  R	                  UUUUUS   S   US   S   5      R                  U5        U(       a;  U R                  R	                  UUUUUS   S   US   S   5      R                  U5         U R                  UUUUS9  U R                  R	                  UUUUUUS   S   US   S   US   S   US   S   S9	R                  5         U R                  R	                  UUUUUUS   S   US   S   US   S   US   S   S9	R                  5         X2-
  nS nUR                  SS 5      b  US   SL a  UR                  SU5      U-
  nU=(       d    UnUR                  5       nS nUbT  US:  aM  UU-  nU R                  R	                  UUUUUS   S   US   S   US   S   US   S   S9R                  U5        g g g ! [         a8  n[         R                  " SR!                  [#        U5      5      5         S nAg S nAff = f)Nr   r_   r2   r4   response_headersra   rb   r$   r   
model_infoidhidden_paramsadditional_headersx_ratelimit_remaining_requestsx_ratelimit_remaining_tokensrg   rh   r8   ri   rj   r   r   Tr   r   )r5   r9   r4   r3   r   r   r   r   zLPrometheus Error: set_llm_deployment_success_metrics. Exception occured - {})r   rv   rw   rQ   r   r   rR   set_deployment_healthyr<   r   r>   r   r?   r   rT   errorr   rU   )rV   r   r   r   r   rt   r2   r4   _response_headersr   r   r5   r   _model_infor9   r   r   r   response_ms!time_to_first_token_response_time_latency_latency_secondslatency_per_tokenrZ   s                           r[   r   3PrometheusLogger.set_llm_deployment_success_metricsO  s   W	  !KL""#<= % (/2=AK/
;H . 2 23E F,001A2FL"O'++J;I!/!3!3GT!B*../DdKL#--5;K"tT2H04.2%=o%N$& !  &8%;%;4d&" $6#9#92D$  " 66== &,Z89LM,Z89MN #()44;; &,Z89LM,Z89MN #&' ''#5!!)	 (  55<<#5!!) +7
C'  7zB( .j9:PQ3J?- =   ce2299#5!!) +7
C'  7zB( .j9:PQ3J?- :   ce &.%:KEI- ""8T2>"8,4 #&&'>IJV 2 #D"R{H'557 !%(]Q->$4}$D!@@GG'9%%!-#;J#G+$ #;:"F,# 2*=>TU7
C1  H  '+,# .?(&  	  ^eeF
 	s   *K JK 
L.L

Loriginal_model_groupc                   #    SSK JnJn  [        R                  " SUU5        UR                  S0 5      nUR                  US9nUR                  S5      nU R                  R                  UUUS   US   US	   US
   [        [        USS5      5      [        UR                  R                  5      S9R                  5         g7f)z6

Logs a successful LLM fallback event on prometheus

r   StandardLoggingMetadataStandardLoggingPayloadSetupzLPrometheus: log_success_fallback_event, original_model_group: %s, kwargs: %srb   rb   r$   rg   rh   ri   rj   r   Nr   rA   r   r   r   r   r   r   )*litellm.litellm_core_utils.litellm_loggingr   r   r   rv   rw   get_standard_logging_metadatar@   r   rU   r   r   r   r   )	rV   r   rW   r   r   r   r   standard_metadata
_new_models	            r[   log_success_fallback_event+PrometheusLogger.log_success_fallback_event  s     	

 	Z 	

 JJz2.	'EE" F  	
 ZZ(
44;;0%,-@A+,@A"#9:()BC );]D!QR 2 < < E EF 	< 		
 #%   B?Cc                   #    SSK JnJn  [        R                  " SUU5        UR                  S5      nUR                  S0 5      nUR                  US9nU R                  R                  UUUS   US   US	   US
   [        [        USS5      5      [        UR                  R                  5      S9R                  5         g7f)z0
Logs a failed LLM fallback event on prometheus
r   r   zLPrometheus: log_failure_fallback_event, original_model_group: %s, kwargs: %sr$   rb   r   rg   rh   ri   rj   r   Nr   )r   r   r   r   rv   rw   r   rB   r   rU   r   r   r   r   )	rV   r   rW   r   r   r   r   r   r   s	            r[   log_failure_fallback_event+PrometheusLogger.log_failure_fallback_event  s     	

 	Z 	

 ZZ(
JJz2.	'EE" F  	
 	00770%,-@A+,@A"#9:()BC );]D!QR 2 < < E EF 	8 		
 #%r  stater5   r9   r4   r3   c                 Z    U R                   R                  X#XE5      R                  U5        g r   )r:   r   r   )rV   r  r5   r9   r4   r3   s         r[   set_litellm_deployment_state-PrometheusLogger.set_litellm_deployment_state5  s&     	%%,,(	

#e*r   c                 *    U R                  SXX45        g )Nr   r  rV   r5   r9   r4   r3   s        r[   r   'PrometheusLogger.set_deployment_healthyA       	))!X	
r   c                 *    U R                  SXX45        g )N   r  r  s        r[   r   .PrometheusLogger.set_deployment_partial_outageL  r  r   c                 *    U R                  SXX45        g )N   r  r  s        r[   set_deployment_complete_outage/PrometheusLogger.set_deployment_complete_outageW  r  r   r   c                 Z    U R                   R                  XX4U5      R                  5         g)z^
increment metric when litellm.Router / load balancing logic places a deployment in cool down
N)r;   r   r   )rV   r5   r9   r4   r3   r   s         r[    increment_deployment_cooled_down1PrometheusLogger.increment_deployment_cooled_downb  s'     	++22(BR	

#%r   providerr   budget_limitc                 t    U R                   R                  U5      R                  U R                  UUS95        g)z/
Track provider remaining budget in Prometheus
r   N)r7   r   r   r   )rV   r  r   r  s       r[   track_provider_remaining_budget0PrometheusLogger.track_provider_remaining_budgetq  s<     	55<<XFJJ++' , 	
r   r   returnc                 0    Uc  [        S5      $ Uc  U$ X-
  $ )Ninf)float)rV   r   r   s      r[   r   +PrometheusLogger._safe_get_remaining_budget~  s(     <=!!r   )r;   rB   r=   r?   r:   r<   r@   r>   rO   rC   r&   r'   r   rP   r7   r   r"   r.   r/   r0   rQ   r,   rR   r#   rD   r(   rN   N)g      ?)"r   
__module____qualname____firstlineno__r\   r   r   r   rU   r~   ry   r   r!  r}   r   r   r   rT   r	   r   r   r   r   r   r  intr  r   r   r  r  r  r   __static_attributes__ r   r[   r   r      s   ~@
pd(="8(= c](= sm	(=
 %SM(= }(=  }(= &c](= #(=T")}") &c]") sm	")
 %SM") ")Hc] sm %SM	
 }  } &c] # < sm  %SM  	 
  <=*=* }=* sm	=*
 %SM=*  }=* &c]=* #9=*~)V00 &0 *	0d-;.L Lf  #^^
 ^@"$'"15"KT"H $' 15 KT D

  
 3-	

 3-
 
	
	
 	
 		

 	
	
	
 3-	
 3-		

 	
	
	
 3-	
 3-		

 	
  	
  

$)
9>
	""5/	"2:5/	"		"r   r   )r   r   r   typingr   litellm._loggingr   r   "litellm.integrations.custom_loggerr   litellm.proxy._typesr	   %litellm.types.integrations.prometheusru   r   litellm.utilsr   r   r(  r   r[   <module>r/     s0     (  : ; / 3 6 ;w"| w"r   