
    ^h                         S r SSKrSSKJrJrJrJrJrJr  SSK	J
r
  SSKJr  SSKJr  \(       a	  SSKJr  \rO\r " S S	\5      r " S
 S5      rg)zC
Wrapper around router cache. Meant to handle model cooldown logic
    N)TYPE_CHECKINGAnyListOptionalTuple	TypedDict)verbose_logger)	DualCache)InMemoryCache)Spanc                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)CooldownCacheValue   exception_receivedstatus_code	timestampcooldown_time N)__name__
__module____qualname____firstlineno__str__annotations__float__static_attributes__r       ]/home/james-whalen/.local/lib/python3.13/site-packages/litellm/router_utils/cooldown_cache.pyr   r      s    r   r   c            	          \ rS rSrS\S\4S jrS\S\S\\\	4   4S jr
S\S	\S
\S\\   4S jr\S\S\4S j5       rS\\   S\\   S\\\\	4      4S jrS\\   S\\   S\\\\	4      4S jrS\\   S\\   S\4S jrSrg)CooldownCache   cachedefault_cooldown_timec                 :    Xl         X l        [        5       U l        g )N)r"   r#   r   in_memory_cache)selfr"   r#   s      r   __init__CooldownCache.__init__   s    
%:",r   model_idr   returnc                      [         R                   " 5       nSU S3n[        [        U5      [        U5      UUS9nXg4$ ! [         a5  n[        R
                  " SR                  [        U5      5      5        UeS nAff = f)Ndeployment:	:cooldown)r   r   r   r   zCCooldownCache::_common_add_cooldown_logic - Exception occurred - {})timer   r   	Exceptionr	   errorformat)	r&   r)   original_exceptionexception_statusr   current_timecooldown_keycooldown_dataes	            r   _common_add_cooldown_logic(CooldownCache._common_add_cooldown_logic!   s    	99;L(
)<L /#&'9#: 01&+	M  .. 	  U\\F
 G	s   ;> 
A=0A88A=r2   r3   c                     U=(       d    U R                   nU R                  UUUUS9u  pgU R                  R                  UUUS9  g ! [         a5  n[
        R                  " SR                  [        U5      5      5        UeS nAff = f)N)r)   r2   r3   r   )valuekeyttlzCCooldownCache::add_deployment_to_cooldown - Exception occurred - {})	r#   r8   r"   	set_cacher/   r	   r0   r1   r   )	r&   r)   r2   r3   r   _cooldown_timer5   r6   r7   s	            r   add_deployment_to_cooldown(CooldownCache.add_deployment_to_cooldown9   s    	*Hd.H.HN*.*I*I!#5!1,	 +J +'L JJ  # " ! 
  	  U\\F
 G	s   AA 
B0BBc                     SU  S3$ )Nr,   r-   r   )r)   s    r   get_cooldown_cache_key$CooldownCache.get_cooldown_cache_keyW   s    XJi00r   	model_idsparent_otel_spanc                 X  #    U Vs/ s H  n[         R                  U5      PM     nnU R                  R                  XBS9I S h  vN n/ nUc  U$ [	        X5       HB  u  p7U(       d  M  [        U[        5      (       d  M%  [        S0 UD6nUR                  X845        MD     U$ s  snf  Nc7f)NkeysrF   r   )	r    rC   r"   async_batch_get_cachezip
isinstancedictr   append	r&   rE   rF   r)   rI   resultsactive_cooldownsresultcooldown_cache_values	            r   async_get_active_cooldowns(CooldownCache.async_get_active_cooldowns[   s     
 LU
KTxM00:9 	 
 

88 9 
 
 BD?## !$I 7Hv*VT22'9'CF'C$ ''(HI !8
  /

s'   B*B#B*B( B*)B* )B*c                 &   U Vs/ s H	  nSU S3PM     nnU R                   R                  XBS9=(       d    / n/ n[        X5       HB  u  p7U(       d  M  [        U[        5      (       d  M%  [        S0 UD6nUR                  X845        MD     U$ s  snf )Nr,   r-   rH   r   )r"   batch_get_cacherK   rL   rM   r   rN   rO   s	            r   get_active_cooldowns"CooldownCache.get_active_cooldownsx   s     CLL)h+hZy1)L JJ&&D&T  	
  #I 7Hv*VT22'9'CF'C$ ''(HI !8
   Ms   Bc                 \   U Vs/ s H	  nSU S3PM     nnU R                   R                  XBS9=(       d    / nSn[        X5       HJ  u  p7U(       d  M  [        U[        5      (       d  M%  [        S0 UD6nUc  US   nM:  US   U:  d  ME  US   nML     U=(       d    U R                  $ s  snf )z<Return min cooldown time required for a group of model id's.r,   r-   rH   Nr   r   )r"   rW   rK   rL   rM   r   r#   )	r&   rE   rF   r)   rI   rP   min_cooldown_timerR   rS   s	            r   get_min_cooldownCooldownCache.get_min_cooldown   s     CLL)h+hZy1)L JJ&&D&T  	
 .2 #I 7Hv*VT22'9'CF'C$$,(<_(M%)/:=NN(<_(M% !8 !>D$>$>>% Ms   B))r"   r#   r%   N)r   r   r   r   r
   r   r'   r   r   r   r8   r/   intr   r@   staticmethodrC   r   r   rT   rX   r\   r   r   r   r   r    r       s   /i / /
RW	s&&	'0 & 	
  < 1 1 1 1 c 6>tn 	eC++,	- : c 6>tn 	eC++,	- (?c?6>tn?	?r   r    )__doc__r.   typingr   r   r   r   r   r   litellmr	   litellm.caching.cachingr
   litellm.caching.in_memory_cacher   opentelemetry.tracer   _Spanr   r    r   r   r   <module>rg      sF     G G " - 91DD I? I?r   