o
    ưi.                     @   s   d Z ddl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rGdd	lmZ e	eef ZneZG d
d deZG dd dZdS )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                   @   s.   e Zd ZU eed< eed< eed< eed< dS )CooldownCacheValueexception_receivedstatus_code	timestampcooldown_timeN)__name__
__module____qualname__str__annotations__float r   r   Z/home/app/Keep/.python/lib/python3.10/site-packages/litellm/router_utils/cooldown_cache.pyr      s
   
 r   c                	   @   s   e Zd ZdedefddZdededeeef fdd	Z	ded
e
dedee fddZeejdddedefddZdee dee deeeef  fddZdee dee deeeef  fddZdee dee defddZdS )CooldownCachecachedefault_cooldown_timec                 C   s(   || _ || _t | _tdddd| _d S )N2   r   *)Zvisible_prefixZvisible_suffixZ	mask_char)r   r   r   Zin_memory_cacher   exception_masker)selfr   r   r   r   r   __init__    s   zCooldownCache.__init__model_idr   returnc           	   
   C   sn   zt   }t|}t| jt|t|||d}||fW S  ty6 } zt	d
t| |d }~ww )N)r   r   r   r   zCCooldownCache::_common_add_cooldown_logic - Exception occurred - {})timer   get_cooldown_cache_keyr   r    Z_mask_valuer   	Exceptionr	   errorformat)	r!   r#   original_exceptionexception_statusr   current_timecooldown_keycooldown_dataer   r   r   _common_add_cooldown_logic+   s*   

	z(CooldownCache._common_add_cooldown_logicr*   r+   c           	   
   C   sr   z |}|d u r
| j }| j||||d\}}| jj|||d W d S  ty8 } ztdt| |d }~ww )N)r#   r*   r+   r   )valuekeyttlzCCooldownCache::add_deployment_to_cooldown - Exception occurred - {})	r   r0   r   Z	set_cacher'   r	   r(   r)   r   )	r!   r#   r*   r+   r   Z_cooldown_timer-   r.   r/   r   r   r   add_deployment_to_cooldownE   s0   
z(CooldownCache.add_deployment_to_cooldowni   )maxsizec                 C   s   d|  d S )Ndeployment:	:cooldownr   )r#   r   r   r   r&   k   s   z$CooldownCache.get_cooldown_cache_key	model_idsparent_otel_spanc           	         s   dd |D }| j j||dI d H }g }|d u s"tdd |D r$|S t||D ]\}}|rBt|trBtdi |}|||f q)|S )Nc                 S      g | ]}t |qS r   r   r&   .0r#   r   r   r   
<listcomp>t   s    
z<CooldownCache.async_get_active_cooldowns.<locals>.<listcomp>keysr9   c                 s   s    | ]}|d u V  qd S )Nr   )r=   vr   r   r   	<genexpr>   s    z;CooldownCache.async_get_active_cooldowns.<locals>.<genexpr>r   )r   Zasync_batch_get_cacheallzip
isinstancedictr   append	r!   r8   r9   r@   resultsZactive_cooldownsr#   resultcooldown_cache_valuer   r   r   async_get_active_cooldownsp   s    	z(CooldownCache.async_get_active_cooldownsc           	      C   sh   dd |D }| j j||dpg }g }t||D ]\}}|r1t|tr1tdi |}|||f q|S )Nc                 S   r:   r   r;   r<   r   r   r   r>      s    z6CooldownCache.get_active_cooldowns.<locals>.<listcomp>r?   r   )r   batch_get_cacherD   rE   rF   r   rG   rH   r   r   r   get_active_cooldowns   s   z"CooldownCache.get_active_cooldownsc           	      C   s   dd |D }| j j||dpg }d}t||D ]%\}}|r=t|tr=tdi |}|du r3|d }q|d |k r=|d }q|pB| jS )z<Return min cooldown time required for a group of model id's.c                 S   s   g | ]}d | dqS )r6   r7   r   r<   r   r   r   r>      s    z2CooldownCache.get_min_cooldown.<locals>.<listcomp>r?   Nr   r   )r   rM   rD   rE   rF   r   r   )	r!   r8   r9   r@   rI   Zmin_cooldown_timer#   rJ   rK   r   r   r   get_min_cooldown   s   

zCooldownCache.get_min_cooldownN)r   r   r   r
   r   r"   r   r   r   r0   r'   intr   r4   staticmethod	functools	lru_cacher&   r   r   rL   rN   rO   r   r   r   r   r      sT    


&


r   )__doc__rR   r%   typingr   r   r   r   r   r   Ztyping_extensionsr   Zlitellmr	   Zlitellm.caching.cachingr
   Zlitellm.caching.in_memory_cacher   Z0litellm.litellm_core_utils.sensitive_data_maskerr   Zopentelemetry.tracer   _Spanr   r   r   r   r   r   <module>   s     