
    g                         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 er	ddlmZ e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	TypedDict)verbose_logger)	DualCache)InMemoryCache)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     X/var/www/openai/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                 >    || _         || _        t               | _        y )N)r   r   r   in_memory_cache)selfr   r   s      r   __init__zCooldownCache.__init__   s    
%:",r   model_idr   returnc                    	 t        j                          }d| d}t        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   	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 /#&'9#: 01&+	M  .. 	  U\\F
 G	s   >A 	A>
/A99A>r-   r.   c                    	 |xs | j                   }| j                  ||||      \  }}| j                  j                  |||       y # t        $ r4}t        j                  dj                  t        |                   |d }~ww xY w)N)r$   r-   r.   r   )valuekeyttlzCCooldownCache::add_deployment_to_cooldown - Exception occurred - {})	r   r3   r   	set_cacher*   r	   r+   r,   r   )	r"   r$   r-   r.   r   _cooldown_timer0   r1   r2   s	            r   add_deployment_to_cooldownz(CooldownCache.add_deployment_to_cooldown9   s    	*Hd.H.HN*.*I*I!#5!1,	 +J +'L- JJ  # " ! 
  	  U\\F
 G	s   AA	 		B/BBc                     d|  dS )Nr'   r(   r   )r$   s    r   get_cooldown_cache_keyz$CooldownCache.get_cooldown_cache_keyW   s    XJi00r   	model_idsparent_otel_spanc                 B  K   |D cg c]  }t         j                  |       }}| j                  j                  ||       d {   }g }||S t	        ||      D ]7  \  }}|s	t        |t              st        di |}|j                  ||f       9 |S c c}w 7 Ww)Nkeysr>   r   )	r   r<   r   async_batch_get_cachezip
isinstancedictr   append	r"   r=   r>   r$   rA   resultsactive_cooldownsresultcooldown_cache_values	            r   async_get_active_cooldownsz(CooldownCache.async_get_active_cooldowns[   s     
 LU
KTxM00:9 	 
 

88(8 9 
 
 BD?## !$Iw 7Hf*VT2'9'CF'C$ ''3G(HI !8
  /

s'   BB"BBB%B6(B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'   r(   r@   r   )r   batch_get_cacherC   rD   rE   r   rF   rG   s	            r   get_active_cooldownsz"CooldownCache.get_active_cooldownsx   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'   r(   r@   Nr   r   )r   rN   rC   rD   rE   r   r   )	r"   r=   r>   r$   rA   rH   min_cooldown_timerJ   rK   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   r3   r*   intr   r:   staticmethodr<   r   r   rL   rO   rR   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>r\      sF     G G " - 91DD I? I?r   