Ë
    uPêj$  ã                   ó˜   — d dl 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 d dlmZ d d	lmZ  G d
„ de«      Z G d„ de«      Zy)é    N)Údatetime)ÚFinal)Ú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__© ó    úk/home/oem/CyberBrain26-unified/.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f      dz  deez  dz  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                 ó  — 	 	 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        $ rG}t        j                   d|«       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   )r/   Úvaluer   é   z\litellm.router_strategy.lowest_tpm_rpm.py::async_log_success_event(): Exception occured - %s)ÚgetÚ
isinstancer   Ústrr   ÚnowÚstrftimer   Ú	get_cacheÚ	set_cacher   r   r   r   Ú	Exceptionr   ÚerrorÚ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   s  € ð1	@ðð   vÑ-°Ð8HÑ1IÐ1QØØÐ&Ñ'×+Ñ+¨JÓ7Ð?Øà%+Ð,<Ñ%=¸jÑ%I×%MÑ%MÈmÐ]aÓ%b�àÐ,Ñ-×1Ñ1°,ÀÓC×GÑGÈÈdÓS�ØÐ&¨"¨*ØÜ ¤CÔ(Ü˜R›�Bà&2°7Ñ&;¸NÑ&K�ô
 )1¯©«×(?Ñ(?ÀÓ(H�Ø$/ =°°nÐ5EÐ!F�Ø$/ =°°nÐ5EÐ!F�ð &*×%6Ñ%6×%@Ñ%@ÀWÐ%@Ó%MÒ%SÐQSÐ"Ø);×)?Ñ)?ÀÀAÓ)FÈÑ)UÐ" 2Ñ&à×!Ñ!×+Ñ+°Ð?QÐW[×WhÑWh×WlÑWlÐ+Ômð &*×%6Ñ%6×%@Ñ%@ÀWÐ%@Ó%MÒ%SÐQSÐ"Ø);×)?Ñ)?ÀÀAÓ)FÈÑ)JÐ" 2Ñ&à×!Ñ!×+Ñ+°Ð?QÐW[×WhÑWh×WlÑWlÐ+Ômð —>’>Ø×'Ò'¨1Ñ,Ö'ð "øäò 	@Ü!×'Ñ'ØnÐpqôô "×'Ñ'¬	×(<Ñ(<Ó(>×?Ñ?ûð		@ús)   ‚
F/ �F/ ¢AF/ Á$E	F/ Æ/	G?Æ8=G:Ç:G?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        $ rG}t!        j"                  d|«       t!        j$                  t'        j(                  «       «       Y d }~y d }~ww xY w­wr#   )r2   r3   Údictr   r4   r   r5   r6   r   Úasync_get_cacheÚasync_set_cacher   r   r   r   r9   r   Ú	exceptionr;   r<   r=   )r    r>   r?   r@   rA   r&   r'   r(   r*   rB   rC   rD   rE   rF   s                 r   Úasync_log_success_eventz/LowestTPMLoggingHandler.async_log_success_eventQ   s~  è ø€ ð;	@ðð   vÑ-°Ð8HÑ1IÐ1QØØÐ&Ñ'×+Ñ+¨JÓ7Ð?Øà%+Ð,<Ñ%=¸jÑ%I×%MÑ%MÈmÐ]aÓ%b�à$*Ð+;Ñ$<×$@Ñ$@ÀÓ$N�
Ø�ØÐ)¬j¸ÄTÔ.JØ#Ÿ™¨¨dÓ3�BØÐ&¨"¨*ØÜ ¤CÔ(Ü˜R›�Bà ,Ñ.ØØ&2°7Ñ&;¸NÑ&K�ô
 )1¯©«×(?Ñ(?ÀÓ(H�Ø$/ =°°nÐ5EÐ!F�Ø$/ =°°nÐ5EÐ!F�ð ,0×+<Ñ+<×+LÑ+LÐQXÐ+LÓ+Y×%YÒ%_Ð]_Ð"Ø);×)?Ñ)?ÀÀAÓ)FÈÑ)UÐ" 2Ñ&à×'Ñ'×7Ñ7ØÐ'9¸t×?PÑ?P×?TÑ?Tð 8ó ÷ ð ð
 ,0×+<Ñ+<×+LÑ+LÐQXÐ+LÓ+Y×%YÒ%_Ð]_Ð"Ø);×)?Ñ)?ÀÀAÓ)FÈÑ)JÐ" 2Ñ&à×'Ñ'×7Ñ7ØÐ'9¸t×?PÑ?P×?TÑ?Tð 8ó ÷ ð ð
 —>’>Ø×'Ò'¨1Ñ,Ö'ð "ð! &Zøðøð
 &Zøðùô ò 	@Ü!×+Ñ+ØnÐpqôô "×'Ñ'¬	×(<Ñ(<Ó(>×?Ñ?ûð		@ü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Ç<=H>È9IÈ>IÉINr&   Úhealthy_deploymentsÚmessagesÚinputc                 ó’  — t        j                  d||«       t        j                  «       j	                  d«      }|› d|› �}|› d|› �}| j
                  j                  |¬«      }| j
                  j                  |¬«      }	t        j                  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  s|	�||	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.
        zQget_available_deployments - Usage Based. model_group: %s, healthy_deployments: %sr+   r,   r-   r.   z&tpm_key=%s, tpm_dict: %s, rpm_dict: %s)rO   Útextr   zinput_tokens=%sÚinfNr'   r(   Útpmr$   Úrpmr1   z+returning picked lowest tpm/rpm deployment.)r   r;   r   r5   r6   r   r7   r   r9   ÚfloatÚitemsr2   r
   )r    r&   rN   rO   rP   rB   rC   rD   Ú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Ï  € ô 	×#Ñ#Ø_ØØô	
ô
 !)§¡£× 7Ñ 7¸Ó @ˆØ'˜=¨¨nÐ-=Ð>ˆØ'˜=¨¨nÐ-=Ð>ˆà×$Ñ$×.Ñ.°7Ð.Ó;ˆØ×+Ñ+×5Ñ5¸'Ð5ÓBˆä×#Ñ#Ð$LÈgÐW_ÐaiÔjð	Ü(°(ÀÔGˆLô 	×#Ñ#Ð$5°|ÔDô ˜5“\ˆ
àÐàˆHØ1ò =�
Ø;<�˜ LÑ1°$Ñ7Ò8ñ=ð )ò 8�à�\‘? 4Ñ(°Ò8Ø67�H˜Q˜|™_¨TÑ2Ò3ð8ð
 "*ˆàˆ
Ø-×3Ñ3Ó5ó &	)‰NˆD�(àˆKØ(ò $�Ø˜1˜\™?¨4Ñ0Ó0Ø"#‘Kð$ð Ð"Øà"ˆOØÐ&Ø"-§/¡/°%Ó"8�ØÐ&Ø"-§/¡/Ð2BÀBÓ"G×"KÑ"KÈEÓ"R�ØÐ&Ø"-§/¡/°,ÀÓ"C×"GÑ"GÈÓ"N�ØÐ&Ü"'¨£,�à"ˆOØÐ&Ø"-§/¡/°%Ó"8�ØÐ&Ø"-§/¡/Ð2BÀBÓ"G×"KÑ"KÈEÓ"R�ØÐ&Ø"-§/¡/°,ÀÓ"C×"GÑ"GÈÓ"N�ØÐ&Ü"'¨£,�ð ˜<Ñ'¨/Ò9ØÐ(¨T°XÑ-=Ø˜d‘^ aÑ'¨?Ò:áØ˜JÔ&Ø%�
Ø(’
ðM&	)ôN 	ÐCÔDØÐøô} ò 	Ø‹Lð	ús   ÂH7 È7IÉI)NN)r   r   r   r   Úboolr   r   r   r   r   r   rI   r!   rG   rM   r4   Úlistre   r   r   r   r   r      s¢   … Ø€IˆtÓØ€N�CÓØ€N�CÓØ&1Ð Ó1àEGñ 8 Yð 8¸dó 8ò2@òh<@ðD 15Ø#'ñXàðXð "ðXð �t˜C ˜H‘~Ñ&¨Ñ-ð	Xð
 �T‰z˜DÑ ôXr   r   )r<   r   Útypingr   Úlitellmr   Úlitellm._loggingr   Úlitellm.caching.cachingr   Ú"litellm.integrations.custom_loggerr   Úlitellm.types.utilsr	   Úlitellm.utilsr
   r   r   r   r   r   ú<module>ro      s=   ðó Ý Ý å !Ý 2Ý -Ý ;Ý 9Ý 'ôÐ+ô ôT˜lõ Tr   