o
    ưiE%                     @   s   d dl Z d dlmZ d dl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 d d	lmZ G d
d deZG dd deZdS )    N)datetime)DictListOptionalUnion)token_counter)verbose_router_logger)	DualCache)CustomLogger)LiteLLMPydanticObjectBase)print_verbosec                   @   s   e Zd ZU dZeed< dS )RoutingArgs<   ttlN)__name__
__module____qualname__r   int__annotations__ r   r   ]/home/app/Keep/.python/lib/python3.10/site-packages/litellm/router_strategy/lowest_tpm_rpm.pyr      s   
 r   c                   @   s   e Zd ZU dZeed< dZeed< dZeed< dZ	eed< i fde
d	efd
dZdd Zdd Z		ddededeeeeef   deeeef  fddZdS )LowestTPMLoggingHandlerF	test_flagr   logged_successlogged_failurei  default_cache_time_secondsrouter_cacherouting_argsc                 C   s   || _ tdi || _d S )Nr   )r   r   r   )selfr   r   r   r   r   __init__   s   z LowestTPMLoggingHandler.__init__c              
   C   s  z	 d|vs|d d u rW d S |d  dd u rW d S |d d  dd }|d  di  dd }|d u s9|d u r<W d S t|trEt|}|d d }t d}| d	| }	| d
| }
| jj|	dphi }| |d| ||< | jj	|	|| j
jd | jj|
dpi }| |dd ||< | jj	|
|| j
jd | jr|  jd7  _W d S W d S  ty } ztdt| tt  W Y d }~d S d }~ww Nlitellm_paramsmetadatamodel_group
model_infoidusagetotal_tokens%H-%M:tpm::rpm:keyr   )r,   valuer      z\litellm.router_strategy.lowest_tpm_rpm.py::async_log_success_event(): Exception occured - {})get
isinstancer   strr   nowstrftimer   	get_cacheZ	set_cacher   r   r   r   	Exceptionr   errorformatdebug	traceback
format_exc)r   kwargsresponse_obj
start_timeend_timer#   r%   r'   current_minutetpm_keyrpm_keyrequest_count_dicter   r   r   log_success_event   sR   


z)LowestTPMLoggingHandler.log_success_eventc              
      s  z	 d|vs|d d u rW d S |d  dd u rW d S |d d  dd }|d  d}d }|d ur>t|tr>| dd }|d u sF|d u rIW d S t|trRt|}d|vrYW d S |d d }t d}	| d	|	 }
| d
|	 }| jj	|
dI d H pi }| |d| ||< | jj
|
|| jjdI d H  | jj	|dI d H pi }| |dd ||< | jj
||| jjdI d H  | jr|  jd7  _W d S W d S  ty } ztdt| tt  W Y d }~d S d }~ww r    )r/   r0   dictr   r1   r   r2   r3   r   Zasync_get_cacheZasync_set_cacher   r   r   r   r5   r   	exceptionr7   r8   r9   r:   )r   r;   r<   r=   r>   r#   r$   r%   r'   r?   r@   rA   rB   rC   r   r   r   async_log_success_event\   sb   
	

z/LowestTPMLoggingHandler.async_log_success_eventNr#   healthy_deploymentsmessagesinputc                 C   s\  t d| d|  t d}| d| }| d| }| jj|d}| jj|d}	t d| d| d	|	  zt||d
}
W n tyO   d}
Y nw t d|
  t	d}|du rpi }|D ]
}d||d d < qdn|D ]}|d d |vrd||d d < qr|}d}|
 D ]\}}d}|D ]}||d d kr|}q|du rqd}|du r|d}|du r|di d}|du r|di d}|du rt	d}d}|du r|d}|du r|di d}|du r|di d}|du rt	d}||
 |kr
q|	dur||	v r|	| d |krq||k r'|}|}qtd |S )zE
        Returns a deployment with the lowest TPM/RPM usage.
        z6get_available_deployments - Usage Based. model_group: z, healthy_deployments: r(   r)   r*   r+   ztpm_key=z, tpm_dict: z, rpm_dict: )rI   textr   zinput_tokens=infNr$   r%   Ztpmr!   Zrpmr.   z+returning picked lowest tpm/rpm deployment.)r   r8   r   r2   r3   r   r4   r   r5   floatitemsr/   r   )r   r#   rH   rI   rJ   r?   r@   rA   Ztpm_dictZrpm_dictZinput_tokensZ
lowest_tpmZ
deploymentdZall_deploymentsitemZitem_tpmZ_deploymentmZ_deployment_tpmZ_deployment_rpmr   r   r   get_available_deployments   s   



z1LowestTPMLoggingHandler.get_available_deployments)NN)r   r   r   r   boolr   r   r   r   r   r	   rE   r   rD   rG   r1   listr   r   r   r   rR   r   r   r   r   r      s0   
 
=Kr   )r9   r   typingr   r   r   r   Zlitellmr   Zlitellm._loggingr   Zlitellm.caching.cachingr	   Z"litellm.integrations.custom_loggerr
   Zlitellm.types.utilsr   Zlitellm.utilsr   r   r   r   r   r   r   <module>   s   