
    ^h                         % S r SSKrSSKJrJr  SSKJr  SSKJr  SSKJ	r	  SSK
JrJr  \" S5      r\\   \S'   \" S	5      r\\   \S	'   \" \R"                  S
9rS\4S jrS rS\4S jrS\\   4S jrg)z*
Helper functions to query prometheus API
    N)datetime	timedelta)Optional)
get_secret)verbose_logger)get_async_httpx_clienthttpxSpecialProviderPROMETHEUS_URLPROMETHEUS_SELECTED_INSTANCE)llm_providermetric_namec                 @  #    [         c  [        S5      eU  S3n[        [        R                  " 5       5      n[        R                  [          S3XS.S9I S h  vN nUR                  5       n[        R                  " SU5        UR                  5       S   S   nU$  NC7f)	N=PROMETHEUS_URL not set please set 'PROMETHEUS_URL=<>' in .envz[24h]z/api/v1/query)querytimeparams+json response from prometheus /query api %sdataresult)	r
   
ValueErrorintr   async_http_handlergetjsonr   debug)r   r   nowresponse_json_responseresultss         p/home/james-whalen/.local/lib/python3.13/site-packages/litellm/integrations/prometheus_helpers/prometheus_api.pyget_metric_from_prometheusr"      s      K
 	
 m5!E
diik
C'++
-(51N ,  H ]]_NFWmmof%h/GNs   ABBABc            
        #    Sn SS/nU H  n[        US9I Sh  vN nU(       a  [        R                  " SU5        U H  n[        R                  " SU5        US   nUS	   nUS
   n[        b  UR	                  S5      [        :w  a  MK  [        [        US   5      5      nUR	                  SS5      nUR	                  SS5      n	U SU SU SU	 S3-  n U S-  n M     [        R                  " SU 5        M     U $  N7f)z=
Gets fallback metrics from prometheus for the last 24 hours
 -litellm_deployment_successful_fallbacks_total)litellm_deployment_failed_fallbacks_total)r   Nzresponse json %sz
result= %smetricvaluesr   instance   primary_modelUnknownfallback_model`z3 successful fallback requests` with primary model=`z` -> fallback model=`
zresponse message %s)r"   r   r   r   r   r   float)
response_messagerelevant_metricsr'   response_jsonr   metric_valuesmost_recent_valuevaluer+   r-   s
             r!   #get_fallback_metric_from_prometheusr7   +   sB     73 #8
 
   !3]C'$$\6:) &x 0$1!$4!/;zz*-1MM E"3A"678 &

?I F!',<i!H aw.aboap  qF  GU  FV  VW  %X  X  D(  ( 	24DE- #. -
s   C<C:C C<returnc                      [         b  gg)NTF)r
        r!   is_prometheus_connectedr<   N   s    !r;   api_keyc                   #    [         c  [        S5      e[        R                  " 5       nU[	        SS9-
  nUR                  5       S-   nUR                  5       S-   n[          S3nU c  SnOSU  S	3nUUUS
S.n[        R                  XWS9I Sh  vN nUR                  5       n	[        R                  " SU	5        UR                  5       S   S   n
/ nU
 Hb  nUS   nU HT  u  p[        R                  " [        U5      5      R                  5       S-   n[        U5      nUR                  UUS.5        MV     Md     U$  N7f)zo
Expected Response Format:
[
{
    "date": "2024-08-18T00:00:00+00:00",
    "spend": 1.001818099998933
},
...]
Nr      )daysz+00:00z/api/v1/query_rangez*sum(delta(litellm_spend_metric_total[1d]))z5sum(delta(litellm_spend_metric_total{hashed_api_key="z"}[1d]))86400)r   startendstepr   r   r   r   r(   )datespend)r
   r   r   utcnowr   	isoformatr   r   r   r   r   fromtimestampr0   append)r=   end_date
start_date	start_strend_strurlr   r   r   r   r    formatted_resultsr   metric_data	timestampr6   rE   rF   s                     r!   get_daily_spend_from_prometheusrS   T   s`     K
 	

  HI2..J $$&1I  "X-G/
0C< EWIYW 	
 	F (++C+??H]]_NFWmmof%h/GX& +I))%	*:;EEG(RD%LE$$dU%CD	 !,   @s   BD>D<B.D>)__doc__r   r   r   typingr   litellmr   litellm._loggingr   &litellm.llms.custom_httpx.http_handlerr   r	   r
   str__annotations__r   LoggingCallbackr   r"   r7   boolr<   rS   r:   r;   r!   <module>r]      s     (   +
 !++; < <.89W.X hsm X+%55 
( F 58C= 5r;   