
    g                         U d Z ddlZddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZ  ed      Zee   ed<    ed	      Zee   ed	<    eej"                  
      ZdefdZd ZdefdZdee   fdZy)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                 B  K   t         t        d      |  d}t        t        j                               }t        j                  t          d||d       d {   }|j                         }t        j                  d|       |j                         d   d   }|S 7 Bw)	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         k/var/www/openai/venv/lib/python3.12/site-packages/litellm/integrations/prometheus_helpers/prometheus_api.pyget_metric_from_prometheusr"      s      K
 	
 m5!E
diik
C'++
-(5#1N ,  H ]]_NFWmmof%h/GNs   ABBABc            
        K   d} ddg}|D ]  }t        |       d{   }|rt        j                  d|       |D ]  }t        j                  d|       |d   }|d	   }|d
   }t        |j	                  d      t        k7  rGt        t        |d               }|j	                  dd      }|j	                  dd      }	| d| d| d|	 dz  } | dz  }  t        j                  d|         | S 7 Эw)zE
    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   +   sC     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   C0C.CC0returnc                      t         yy)NTF)r
        r!   is_prometheus_connectedr<   N   s    !r;   api_keyc                 ~  K   t         t        d      t        j                         }|t	        d      z
  }|j                         dz   }|j                         dz   }t          d}| d}nd|  d	}|||d
d}t        j                  ||       d{   }|j                         }	t        j                  d|	       |j                         d   d   }
g }|
D ]_  }|d   }|D ]S  \  }}t        j                  t        |            j                         dz   }t        |      }|j                  ||d       U a |S 7 w)z
    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   se     K
 	

  HI2..J $$&1I  "X-G/
0C< EWIYW 	
 	F (++C+??H]]_NFWmmof%h/GX& +Iu))%	*:;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;   