
    j                         d Z ddlZddlmZmZmZmZmZ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 erdd	lmZ eeef   ZneZ G d
 de
      Z G d d      Zy)zC
Wrapper around router cache. Meant to handle model cooldown logic
    N)TYPE_CHECKINGAnyListOptionalTupleUnion)	TypedDict)verbose_logger)	DualCache)InMemoryCache)SensitiveDataMasker)Spanc                   6    e Zd ZU eed<   eed<   eed<   eed<   y)CooldownCacheValueexception_receivedstatus_code	timestampcooldown_timeN)__name__
__module____qualname__str__annotations__float     |/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/router_utils/cooldown_cache.pyr   r      s    r   r   c            	           e Zd ZdedefdZdededeeef   fdZ	dede
d	edee   fd
Zededefd       Zdee   dee   deeeef      fdZdee   dee   deeeef      fdZdee   dee   defdZy)CooldownCachecachedefault_cooldown_timec                 d    || _         || _        t               | _        t	        ddd      | _        y )N2   r   *)visible_prefixvisible_suffix	mask_char)r    r!   r   in_memory_cacher   exception_masker)selfr    r!   s      r   __init__zCooldownCache.__init__   s1    
%:", 3!
r   model_idr   returnc                 4   	 t        j                          }d| d}t        | j                  j                  t	        |            t	        |      ||      }||fS # t
        $ r4}t        j                  dj                  t	        |                   |d }~ww xY w)Ndeployment:	:cooldown)r   r   r   r   zCCooldownCache::_common_add_cooldown_logic - Exception occurred - {})	timer   r)   _mask_valuer   	Exceptionr
   errorformat)	r*   r,   original_exceptionexception_statusr   current_timecooldown_keycooldown_dataes	            r   _common_add_cooldown_logicz(CooldownCache._common_add_cooldown_logic*   s    	99;L(
)<L /#'#8#8#D#D*+$   01&+M  .. 	  U\\F
 G	s   AA 	B#/BBr6   r7   c                    	 |}|| j                   }| j                  ||||      \  }}| j                  j                  |||       y # t        $ r4}t        j                  dj                  t        |                   |d }~ww xY w)N)r,   r6   r7   r   )valuekeyttlzCCooldownCache::add_deployment_to_cooldown - Exception occurred - {})	r!   r<   r    	set_cacher3   r
   r4   r5   r   )	r*   r,   r6   r7   r   _cooldown_timer9   r:   r;   s	            r   add_deployment_to_cooldownz(CooldownCache.add_deployment_to_cooldownD   s    	
 +N%!%!;!; +/*I*I!#5!1,	 +J +'L- JJ  # " ! 
  	  U\\F
 G	s   AA	 		B/BBc                     d|  dS )Nr/   r0   r   )r,   s    r   get_cooldown_cache_keyz$CooldownCache.get_cooldown_cache_keyj   s    XJi00r   	model_idsparent_otel_spanc                 f  K   |D cg c]  }t         j                  |       }}| j                  j                  ||       d {   }g }|t	        d |D              r|S t        ||      D ]7  \  }}|s	t        |t              st        di |}|j                  ||f       9 |S c c}w 7 iw)NkeysrG   c              3   $   K   | ]  }|d u  
 y w)Nr   ).0vs     r   	<genexpr>z;CooldownCache.async_get_active_cooldowns.<locals>.<genexpr>   s     !=W!t)Ws   r   )
r   rE   r    async_batch_get_cacheallzip
isinstancedictr   append	r*   rF   rG   r,   rJ   resultsactive_cooldownsresultcooldown_cache_values	            r   async_get_active_cooldownsz(CooldownCache.async_get_active_cooldownsn   s     
 LU
KTxM00:9 	 
 

88(8 9 
 
 BD?c!=W!==## !$Iw 7Hf*VT2'9'CF'C$ ''3G(HI !8
  /

s'   B1B*"B1B/0B17B1(B1c                    |D cg c]  }d| d
 }}| j                   j                  ||      xs g }g }t        ||      D ]7  \  }}|s	t        |t              st        di |}|j                  ||f       9 |S c c}w )Nr/   r0   rI   r   )r    batch_get_cacherQ   rR   rS   r   rT   rU   s	            r   get_active_cooldownsz"CooldownCache.get_active_cooldowns   s     CLL)h+hZy1)L JJ&&DCS&T  	
  #Iw 7Hf*VT2'9'CF'C$ ''3G(HI !8
   Ms   A?c                 *   |D cg c]  }d| d
 }}| j                   j                  ||      xs g }d}t        ||      D ]:  \  }}|s	t        |t              st        di |}||d   }-|d   |k  s6|d   }< |xs | j                  S c c}w )z<Return min cooldown time required for a group of model id's.r/   r0   rI   Nr   r   )r    r\   rQ   rR   rS   r   r!   )	r*   rF   rG   r,   rJ   rV   min_cooldown_timerX   rY   s	            r   get_min_cooldownzCooldownCache.get_min_cooldown   s     CLL)h+hZy1)L JJ&&DCS&T  	
 .2 #Iw 7Hf*VT2'9'CF'C$$,(<_(M%)/:=NN(<_(M% !8 !>D$>$>>% Ms   BN)r   r   r   r   r   r+   r   r   r   r<   r3   intr   rC   staticmethodrE   r   r   rZ   r]   r`   r   r   r   r   r      s   	
i 	
 	
RW	s&&	'4$$ &$ 	$
  $L 1 1 1 1 c 6>tn 	eC++,	- : c 6>tn 	eC++,	- (?c?6>tn?	?r   r   )__doc__r1   typingr   r   r   r   r   r   typing_extensionsr	   litellmr
   litellm.caching.cachingr   litellm.caching.in_memory_cacher   0litellm.litellm_core_utils.sensitive_data_maskerr   opentelemetry.tracer   _Spanr   r   r   r   r   <module>rl      sU     C C ' " - 9 P1DD Y? Y?r   