
    ^h#                         S SK r S SKJr  S SKJrJrJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S S	KJr   " S
 S\5      r " S S\5      rg)    N)datetime)DictListOptionalUnion)token_counter)verbose_router_logger)	DualCache)CustomLogger)LiteLLMPydanticObjectBase)print_verbosec                   $    \ rS rSr% Sr\\S'   Srg)RoutingArgs   <   ttl N)__name__
__module____qualname____firstlineno__r   int__annotations____static_attributes__r       `/home/james-whalen/.local/lib/python3.13/site-packages/litellm/router_strategy/lowest_tpm_rpm.pyr   r      s    Cr   r   c                       \ rS rSr% Sr\\S'   Sr\\S'   Sr	\\S'   Sr
\\S'   0 4S	\S
\S\4S jjrS rS r  SS\S\S\\\\\4         S\\\\4      4S jjrSrg)LowestTPMLoggingHandler   F	test_flagr   logged_successlogged_failurei  default_cache_time_secondsrouter_cache
model_listrouting_argsc                 <    Xl         X l        [        S0 UD6U l        g )Nr   )r$   r%   r   r&   )selfr$   r%   r&   s       r   __init__ LowestTPMLoggingHandler.__init__   s     )$'7,7r   c                 6     US   R                  S5      c  g US   S   R                  SS 5      nUS   R                  S0 5      R                  SS 5      nUb  Uc  g [        U[        5      (       a  [        U5      nUS   S   n[        R
                  " 5       R                  S5      nU S	U 3n	U S
U 3n
U R                  R                  U	S9=(       d    0 nUR                  US5      U-   X'   U R                  R                  XU R                  R                  S9  U R                  R                  U
S9=(       d    0 nUR                  US5      S-   X'   U R                  R                  XU R                  R                  S9  U R                  (       a  U =R                  S-  sl        g g ! [         aa  n[        R                   " SR#                  [        U5      5      5        [        R$                  " [&        R(                  " 5       5         S nAg S nAff = fNlitellm_paramsmetadatamodel_group
model_infoidusagetotal_tokens%H-%M:tpm::rpm:keyr   )r8   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/   r1   r3   current_minutetpm_keyrpm_keyrequest_count_dictes                r   log_success_event)LowestTPMLoggingHandler.log_success_event    s   8	 &'++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"&!!++t?P?P?T?T , 
 &*%6%6%@%@W%@%M%SQS");)?)?A)F)J"&!!++t?P?P?T?T , 
 >>''1,' " 	!''nuuF
 "''	(<(<(>?	s%   F- AF- EF- -
H7AHHc                   #      US   R                  S5      c  g US   S   R                  SS 5      nUS   R                  S0 5      R                  SS 5      nUb  Uc  g [        U[        5      (       a  [        U5      nUS   S   n[        R
                  " 5       R                  S5      nU S	U 3n	U S
U 3n
U R                  R                  U	S9I S h  vN =(       d    0 nUR                  US5      U-   X'   U R                  R                  XU R                  R                  S9I S h  vN   U R                  R                  U
S9I S h  vN =(       d    0 nUR                  US5      S-   X'   U R                  R                  XU R                  R                  S9I S h  vN   U R                  (       a  U =R                  S-  sl        g g  N N N N2! [         aa  n[        R                   " SR#                  [        U5      5      5        [        R$                  " [&        R(                  " 5       5         S nAg S nAff = f7fr,   )r;   r<   r   r=   r   r>   r?   r$   async_get_cacheasync_set_cacher&   r   r    r!   rB   r	   rC   rD   rE   rF   rG   rH   s                r   async_log_success_event/LowestTPMLoggingHandler.async_log_success_event[   sQ    =	 &'++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~.>? ++;;;HHNB # *<)?)?A)F)U"&''77t?P?P?T?T 8    ++;;;HHNB # *<)?)?A)F)J"&''77t?P?P?T?T 8   
 >>''1,' "' I I  	!''nuuF
 "''	(<(<(>?	s   IG IAG IA6G GAG +G, G GAG "G#*G IG G G G 
I!AH=8I=IINr/   healthy_deploymentsmessagesinputc                    [         R                  " SU SU 35        [        R                  " 5       R	                  S5      nU SU 3nU SU 3nU R
                  R                  US9nU R
                  R                  US9n	[         R                  " SU SU S	U	 35         [        X4S
9n
[         R                  " SU
 35        [        S5      nUc  0 nU H  nSXS   S   '   M     O!U H  nUS   S   U;  d  M  SXS   S   '   M     UnSnUR                  5        GH.  u  nnSnU H  nUUS   S   :X  d  M  UnM     Uc  M'  SnUc  UR                  S5      nUc!  UR                  S0 5      R                  S5      nUc!  UR                  S0 5      R                  S5      nUc  [        S5      nSnUc  UR                  S5      nUc!  UR                  S0 5      R                  S5      nUc!  UR                  S0 5      R                  S5      nUc  [        S5      nUU
-   U:  a  GM  U	b  X;   a  X   S-   U:  a  GM!  UU:  d  GM*  UnUnGM1     [        S5        U$ ! [         a    Sn
 GNf = f)z5
Returns a deployment with the lowest TPM/RPM usage.
z6get_available_deployments - Usage Based. model_group: z, healthy_deployments: r4   r5   r6   r7   ztpm_key=z, tpm_dict: z, rpm_dict: )rZ   textr   zinput_tokens=infNr0   r1   tpmr-   rpmr:   z+returning picked lowest tpm/rpm deployment.)r	   rE   r   r>   r?   r$   r@   r   rB   floatitemsr;   r   )r(   r/   rY   rZ   r[   rM   rN   rO   tpm_dictrpm_dictinput_tokens
lowest_tpm
deploymentdall_deploymentsitemitem_tpm_deploymentm_deployment_tpm_deployment_rpms                        r   get_available_deployments1LowestTPMLoggingHandler.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(867H|_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&4+;"o5J&%
(
M 6N 	CD}  	L	s   !	I I,+I,)r%   r$   r&   )NN)r   r   r   r   r    boolr   r!   r   r"   r#   r
   listdictr)   rR   rW   r=   r   r   r   r   rp   r   r   r   r   r   r      s    ItNCNC&11 OQ8%8378GK89v>H 48,0XX "X 4S#X/0	X
 c4i()X Xr   r   )rF   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>r|      s@      . . ! 2 - ; 9 '+ `l `r   