Ë
    tPêj¨  ã                   ó’   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ  G d„ de«      Zy)é    )ÚFinal)ÚHTTPException)Úverbose_logger)Úverbose_proxy_logger)Ú	DualCache)ÚRateLimitType)ÚCustomLogger)ÚUserAPIKeyAuth)ÚProxyRateLimitError)Ú#resolve_llm_provider_for_rate_limitc                   ó*   — e Zd Zd„ Zdedededefd„Zy)Ú_PROXY_MaxBudgetLimiterc                  ó   — y )N© )Úselfs    úk/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/hooks/max_budget_limiter.pyÚ__init__z _PROXY_MaxBudgetLimiter.__init__   s   € Øó    Úuser_api_key_dictÚcacheÚdataÚ	call_typec              ƒ   óx  K  — 	 t        j                  d«       |j                  }|j                  }|�|€y ddlm} |j                  �|j                  d«      dury ddlm	} d|› �}	|	 ||j                  «      v ry ddlm}
  |
|	|j                  xs d	¬
«      ƒ d {  –—† }t        j                  d|||«       ||k\  r>t        |r|j                  d«      nd «      \  }}t        dt        j                   ||¬«      ‚y 7 Œ`# t"        $ r}|‚d }~wt$        $ r }t'        j(                  d|«       Y d }~y d }~ww xY w­w)Nz'Inside Max Budget Limiter Pre-Call Hookr   )Úgeneral_settingsÚapply_user_budget_to_team_keysT)Úget_reserved_counter_keyszspend:user:)Úget_current_spendg        )Úcounter_keyÚfallback_spendz2MaxBudgetLimiter: user_id=%s, spend=%.6f, max=%.6fÚmodelzMax budget limit reached.)ÚdetailÚrate_limit_typer    Úllm_providerzXlitellm.proxy.hooks.max_budget_limiter.py::async_pre_call_hook(): Exception occured - %s)r   ÚdebugÚuser_max_budgetÚuser_idÚlitellm.proxy.proxy_serverr   Úteam_idÚgetÚ/litellm.proxy.spend_tracking.budget_reservationr   Úbudget_reservationr   Ú
user_spendr   r   r   ÚBUDGETr   Ú	Exceptionr   Ú	exception)r   r   r   r   r   Ú
max_budgetr&   r   r   Úuser_counter_keyr   Ú
curr_spendÚresolved_modelr#   Úes                  r   Úasync_pre_call_hookz+_PROXY_MaxBudgetLimiter.async_pre_call_hook   s^  è ø€ ð9	Ü ×&Ñ&Ð'PÔQØ 1× AÑ AˆJØ.×6Ñ6ˆGàÐ! W _ØåCð "×)Ñ)Ð5Ø$×(Ñ(Ð)IÓJÐRVÑVàõð )4°G°9Ð&=ÐØÑ#<Ð=N×=aÑ=aÓ#bÑbØåDá&7Ø,Ø0×;Ñ;ÒB¸sô'÷ !ˆJô
 !×&Ñ&ØDØØØô	ð ˜ZÒ'Ü/RÑhlÐSW×S[ÑS[Ð\cÔSdÐrvÓ/wÑ,� Ü)Ø6Ü$1×$8Ñ$8Ø(Ø!-ô	ð ð (ð!ùô* ò 	ØˆGûÜò 	Ü×$Ñ$ØjÐlm÷ñ ûð	üso   ‚D:„1D  µD:¶%D  ÁD:ÁD  Á;D:Á<!D  ÂC>ÂAD  Ã=D:Ã>D  Ä 	D7Ä	DÄD7ÄD2Ä-D:Ä2D7Ä7D:N)	Ú__name__Ú
__module__Ú__qualname__r   r
   r   ÚdictÚstrr5   r   r   r   r   r      s7   „ òð@à)ð@ð ð@ð ð	@ð
 ô@r   r   N)Útypingr   Úfastapir   Úlitellmr   Úlitellm._loggingr   Úlitellm.caching.cachingr   Úlitellm.exceptionsr   Ú"litellm.integrations.custom_loggerr	   Úlitellm.proxy._typesr
   Ú1litellm.proxy.common_utils.proxy_rate_limit_errorr   Ú&litellm.proxy.hooks.rate_limiter_utilsr   r   r   r   r   ú<module>rE      s1   ðÝ å !å "Ý 1Ý -Ý ,Ý ;Ý /Ý QÝ VôE˜lõ Er   