
    i7%                         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e      Z G d de      Zy)    N)datetime)DictListOptionalUnion)token_counter)verbose_router_logger)	DualCache)CustomLogger)LiteLLMPydanticObjectBase)print_verbosec                       e Zd ZU dZeed<   y)RoutingArgs<   ttlN)__name__
__module____qualname__r   int__annotations__     w/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/router_strategy/lowest_tpm_rpm.pyr   r      s    Cr   r   c                       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
Zd Zd Z	 	 ddededeeeeef         deeeef      fdZy)LowestTPMLoggingHandlerF	test_flagr   logged_successlogged_failurei  default_cache_time_secondsrouter_cacherouting_argsc                 2    || _         t        di || _        y )Nr   )r    r   r!   )selfr    r!   s      r   __init__z LowestTPMLoggingHandler.__init__   s    ('7,7r   c                 2   	 	 d|vs|d   y |d   j                  d      y |d   d   j                  dd       }|d   j                  di       j                  dd       }||y t        |t              rt        |      }|d   d   }t	        j
                         j                  d      }| d	| }	| d
| }
| j                  j                  |	      xs i }|j                  |d      |z   ||<   | j                  j                  |	|| j                  j                         | j                  j                  |
      xs i }|j                  |d      dz   ||<   | j                  j                  |
|| j                  j                         | j                  r| xj                  dz  c_        y y # t        $ r^}t        j                   dj#                  t        |                   t        j$                  t'        j(                                Y d }~y d }~ww xY wNlitellm_paramsmetadatamodel_group
model_infoidusagetotal_tokens%H-%M:tpm::rpm:keyr   )r2   valuer      z\litellm.router_strategy.lowest_tpm_rpm.py::async_log_success_event(): Exception occured - {})get
isinstancer   strr   nowstrftimer    	get_cache	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es                r   log_success_eventz)LowestTPMLoggingHandler.log_success_event   s4   :	  v-8H1I1Q&'++J7?$%56zBFF!4 ,-11,CGGdS&"*C(RB+G4^D
 "*!8!8!A(M~.>?(M~.>? &*%6%6%@%@W%@%M%SQS");)?)?A)F)U"2&!!++'9t?P?P?T?T , 
 &*%6%6%@%@W%@%M%SQS");)?)?A)F)J"2&!!++'9t?P?P?T?T , 
 >>''1,' " 	!''nuuF
 "''	(<(<(>?	s*   
F/ F/ AF/ $E	F/ /	H8AHHc                   K   	 	 d|vs|d   y |d   j                  d      y |d   d   j                  dd       }|d   j                  d      }d }|"t        |t              r|j                  dd       }||y t        |t              rt	        |      }d|vry |d   d   }t        j                         j                  d      }	| d	|	 }
| d
|	 }| j                  j                  |
       d {   xs i }|j                  |d      |z   ||<   | j                  j                  |
|| j                  j                         d {    | j                  j                  |       d {   xs i }|j                  |d      dz   ||<   | j                  j                  ||| j                  j                         d {    | j                  r| xj                  dz  c_        y y 7 7 7 7 -# t        $ r^}t!        j"                  dj%                  t	        |                   t!        j&                  t)        j*                                Y d }~y d }~ww xY wwr&   )r5   r6   dictr   r7   r   r8   r9   r    async_get_cacheasync_set_cacher!   r   r   r   r<   r	   	exceptionr>   r?   r@   rA   )r#   rB   rC   rD   rE   r)   r*   r+   r-   rF   rG   rH   rI   rJ   s                 r   async_log_success_eventz/LowestTPMLoggingHandler.async_log_success_eventZ   s    D	  v-8H1I1Q&'++J7?$%56zBFF!4 $$4599,G
)jT.J#d3B&"*C(RB,.+G4^D
 "*!8!8!A(M~.>?(M~.>? ++;;;HHNB # *<)?)?A)F)U"2&''77'9t?P?P?T?T 8    ++;;;HHNB # *<)?)?A)F)J"2&''77'9t?P?P?T?T 8   
 >>''1,' "' I I  	!++nuuF
 "''	(<(<(>?	s   I
G3 IG3 IAG3 :I;G3 IAG3 3G+4AG3 	G-
#G3 -G/.AG3 G1%G3 )I+G3 -G3 /G3 1G3 3	I<AIIIINr)   healthy_deploymentsmessagesinputc                    t        j                  d| d|        t        j                         j	                  d      }| d| }| d| }| j
                  j                  |      }| j
                  j                  |      }	t        j                  d| d| d	|	        	 t        ||
      }
t        j                  d|
        t        d      }|i }|D ]  }d||d   d   <    n|D ]  }|d   d   |vsd||d   d   <    |}d}|j                         D ]  \  }}d}|D ]  }||d   d   k(  s|} |!d}||j                  d      }|!|j                  di       j                  d      }|!|j                  di       j                  d      }|t        d      }d}||j                  d      }|!|j                  di       j                  d      }|!|j                  di       j                  d      }|t        d      }||
z   |kD  r|	||	v r|	|   dz   |k\  r||k  s|}|} t        d       |S # t        $ r d}
Y w xY w)zE
        Returns a deployment with the lowest TPM/RPM usage.
        z6get_available_deployments - Usage Based. model_group: z, healthy_deployments: r.   r/   r0   r1   ztpm_key=z, tpm_dict: z, rpm_dict: )rS   textr   zinput_tokens=infNr*   r+   tpmr'   rpmr4   z+returning picked lowest tpm/rpm deployment.)r	   r?   r   r8   r9   r    r:   r   r<   floatitemsr5   r   )r#   r)   rR   rS   rT   rF   rG   rH   tpm_dictrpm_dictinput_tokens
lowest_tpm
deploymentdall_deploymentsitemitem_tpm_deploymentm_deployment_tpm_deployment_rpms                        r   get_available_deploymentsz1LowestTPMLoggingHandler.get_available_deployments   s    	##D[MQhi|h}~	
 "009 M~&67 M~&67$$..7.;$$..7.;##wi|H:\(L	
	((GL 	##mL>$BC 5\
H1
;<L1$78 2 )\?4(867HQ|_T23 )
 #
-335ND(K(1\?400"#K ) ""O&"-//%"8&"-//2BB"G"K"KE"R&"-//,"C"G"G"N&"',"O&"-//%"8&"-//2BB"G"K"KE"R&"-//,"C"G"G"N&"',,&8&48+;"o5J&%
(
M 6N 	CD}  	L	s   $I II)NN)r   r   r   r   boolr   r   r   r   r   r
   rM   r$   rK   rQ   r7   listr   r   r   r   ri   r   r   r   r   r      s    ItNCNC&11EG 8Y 8d 8;zEV 48,0XX "X 4S#X/0	X
 c4i()Xr   r   )r@   r   typingr   r   r   r   litellmr   litellm._loggingr	   litellm.caching.cachingr
   "litellm.integrations.custom_loggerr   litellm.types.utilsr   litellm.utilsr   r   r   r   r   r   <module>rs      s@      . . ! 2 - ; 9 '+ fl fr   