Ë
    uPêj…#  ã                   óF   — d dl Z d dlmZ d dlmZ d dlmZ  G d„ de«      Zy)é    N)ÚFinal)Ú	DualCache)ÚCustomLoggerc                   ó’   — e Zd ZU dZeed<   dZeed<   dZeed<   de	fd„Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zdedefd„Zdedefd„Zdedefd„Zy)ÚLeastBusyLoggingHandlerFÚ	test_flagr   Úlogged_successÚlogged_failureÚrouter_cachec                 ó   — || _         y )N)r   )Úselfr   s     úg/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/router_strategy/least_busy.pyÚ__init__z LeastBusyLoggingHandler.__init__   s
   € Ø(ˆÕó    c                 ó¼  — 	 |d   j                  d«      €y|d   d   j                  dd«      }|d   j                  di «      j                  dd«      }|�|€yt        |t        «      rt        |«      }|› d�}| j                  j                  |¬«      xs i }|j                  |d	«      d
z   ||<   | j                  j                  ||¬«       y# t        $ r Y yw xY w)zX
        Log when a model is being used.

        Caching based on model group.
        Úlitellm_paramsÚmetadataNÚmodel_groupÚ
model_infoÚidÚ_request_count©Úkeyr   é   ©r   Úvalue)ÚgetÚ
isinstanceÚintÚstrr   Ú	get_cacheÚ	set_cacheÚ	Exception)r   ÚmodelÚmessagesÚkwargsr   r   Úrequest_count_api_keyÚrequest_count_dicts           r   Úlog_pre_api_callz(LeastBusyLoggingHandler.log_pre_api_call   sü   € ð	ØÐ&Ñ'×+Ñ+¨JÓ7Ð?Øà%+Ð,<Ñ%=¸jÑ%I×%MÑ%MÈmÐ]aÓ%b�ØÐ,Ñ-×1Ñ1°,ÀÓC×GÑGÈÈdÓS�ØÐ&¨"¨*ØÜ ¤CÔ(Ü˜R›�Bà2=°¸nÐ/MÐ%à,0×,=Ñ,=×,GÑ,GÐLaÐ,GÓ,bÒ,hÐfhÐ"Ø);×)?Ñ)?ÀÀAÓ)FÈÑ)JÐ" 2Ñ&à×!Ñ!×+Ñ+Ð0EÐM_Ð+Õ`øÜò 	Ùð	ús   ‚C —AC ÁA5C Ã	CÃCc                 ó
  — 	 |d   j                  d«      €y |d   d   j                  dd «      }|d   j                  di «      j                  dd «      }|�|€y t        |t        «      rt        |«      }|› d�}| j                  j                  |¬«      xs i }|j                  |d«      }	|	€y |	d	z
  ||<   | j                  j                  ||¬
«       | j                  r| xj                  d	z  c_        y y # t        $ r Y y w xY w©Nr   r   r   r   r   r   r   r   r   r   )
r   r   r   r    r   r!   r"   r   r	   r#   ©
r   r&   Úresponse_objÚ
start_timeÚend_timer   r   r'   r(   Úrequest_count_values
             r   Úlog_success_eventz)LeastBusyLoggingHandler.log_success_event2   s,  € ð	ØÐ&Ñ'×+Ñ+¨JÓ7Ð?Øà%+Ð,<Ñ%=¸jÑ%I×%MÑ%MÈmÐ]aÓ%b�àÐ,Ñ-×1Ñ1°,ÀÓC×GÑGÈÈdÓS�ØÐ&¨"¨*ØÜ ¤CÔ(Ü˜R›�Bà2=°¸nÐ/MÐ%à,0×,=Ñ,=×,GÑ,GÐLaÐ,GÓ,bÒ,hÐfhÐ"Ø9K×9OÑ9OÐPRÐTUÓ9VÐ#Ø&Ð.ØØ)<¸qÑ)@Ð" 2Ñ&Ø×!Ñ!×+Ñ+Ð0EÐM_Ð+Ô`ð —>’>Ø×'Ò'¨1Ñ,Ö'ð "øäò 	Ùð	úó%   ‚C6 —AC6 ÁAC6 Â.AC6 Ã6	DÄDc                 ó
  — 	 |d   j                  d«      €y |d   d   j                  dd «      }|d   j                  di «      j                  dd «      }|�|€y t        |t        «      rt        |«      }|› d�}| j                  j                  |¬«      xs i }|j                  |d«      }	|	€y |	d	z
  ||<   | j                  j                  ||¬
«       | j                  r| xj                  d	z  c_        y y # t        $ r Y y w xY wr+   )
r   r   r   r    r   r!   r"   r   r
   r#   r,   s
             r   Úlog_failure_eventz)LeastBusyLoggingHandler.log_failure_eventN   s,  € ð	ØÐ&Ñ'×+Ñ+¨JÓ7Ð?Øà%+Ð,<Ñ%=¸jÑ%I×%MÑ%MÈmÐ]aÓ%b�ØÐ,Ñ-×1Ñ1°,ÀÓC×GÑGÈÈdÓS�ØÐ&¨"¨*ØÜ ¤CÔ(Ü˜R›�Bà2=°¸nÐ/MÐ%à,0×,=Ñ,=×,GÑ,GÐLaÐ,GÓ,bÒ,hÐfhÐ"Ø9K×9OÑ9OÐPRÐTUÓ9VÐ#Ø&Ð.ØØ)<¸qÑ)@Ð" 2Ñ&Ø×!Ñ!×+Ñ+Ð0EÐM_Ð+Ô`ð —>’>Ø×'Ò'¨1Ñ,Ö'ð "øäò 	Ùð	úr2   c              ƒ   ó:  K  — 	 |d   j                  d«      €y |d   d   j                  dd «      }|d   j                  di «      j                  dd «      }|�|€y t        |t        «      rt        |«      }|› d�}| j                  j                  |¬«      ƒ d {  –—† xs i }|j                  |d«      }	|	€y |	d	z
  ||<   | j                  j                  ||¬
«      ƒ d {  –—†  | j                  r| xj                  d	z  c_        y y 7 Œm7 Œ)# t        $ r Y y w xY w­wr+   )
r   r   r   r    r   Úasync_get_cacheÚasync_set_cacher   r	   r#   r,   s
             r   Úasync_log_success_eventz/LeastBusyLoggingHandler.async_log_success_eventi   sG  è ø€ ð	ØÐ&Ñ'×+Ñ+¨JÓ7Ð?Øà%+Ð,<Ñ%=¸jÑ%I×%MÑ%MÈmÐ]aÓ%b�àÐ,Ñ-×1Ñ1°,ÀÓC×GÑGÈÈdÓS�ØÐ&¨"¨*ØÜ ¤CÔ(Ü˜R›�Bà2=°¸nÐ/MÐ%à26×2CÑ2C×2SÑ2SÐXmÐ2SÓ2n×,nÒ,tÐrtÐ"Ø9K×9OÑ9OÐPRÐTUÓ9VÐ#Ø&Ð.ØØ)<¸qÑ)@Ð" 2Ñ&Ø×'Ñ'×7Ñ7Ð<QÐYkÐ7Ól×lÐlð —>’>Ø×'Ò'¨1Ñ,Ö'ð "ð -oøð
 mùô
 ò 	Ùð	üóo   ‚D„D ˜D™AD ÁDÁ?D ÂDÂD Â7DÂ8(D Ã D
Ã!%D ÄDÄD Ä
D Ä	DÄDÄDÄDc              ƒ   ó:  K  — 	 |d   j                  d«      €y |d   d   j                  dd «      }|d   j                  di «      j                  dd «      }|�|€y t        |t        «      rt        |«      }|› d�}| j                  j                  |¬«      ƒ d {  –—† xs i }|j                  |d«      }	|	€y |	d	z
  ||<   | j                  j                  ||¬
«      ƒ d {  –—†  | j                  r| xj                  d	z  c_        y y 7 Œm7 Œ)# t        $ r Y y w xY w­wr+   )
r   r   r   r    r   r6   r7   r   r
   r#   r,   s
             r   Úasync_log_failure_eventz/LeastBusyLoggingHandler.async_log_failure_event…   sG  è ø€ ð	ØÐ&Ñ'×+Ñ+¨JÓ7Ð?Øà%+Ð,<Ñ%=¸jÑ%I×%MÑ%MÈmÐ]aÓ%b�ØÐ,Ñ-×1Ñ1°,ÀÓC×GÑGÈÈdÓS�ØÐ&¨"¨*ØÜ ¤CÔ(Ü˜R›�Bà2=°¸nÐ/MÐ%à26×2CÑ2C×2SÑ2SÐXmÐ2SÓ2n×,nÒ,tÐrtÐ"Ø9K×9OÑ9OÐPRÐTUÓ9VÐ#Ø&Ð.ØØ)<¸qÑ)@Ð" 2Ñ&Ø×'Ñ'×7Ñ7Ð<QÐYkÐ7Ól×lÐlð —>’>Ø×'Ò'¨1Ñ,Ö'ð "ð -oøð
 mùô
 ò 	Ùð	ür9   Úhealthy_deploymentsÚall_deploymentsc                 ó&  — |D ]  }|d   d   |vsŒd||d   d   <   Œ t        d«      }d}|j                  «       D ]  \  }}||k  sŒ|}|}Œ |�-|D ]  }|d   d   |k(  sŒ|c S  t        j                  |«      }|S t        j                  |«      }|S )zE
        Helper to get deployments using least busy strategy
        r   r   r   ÚinfN)ÚfloatÚitemsÚrandomÚchoice)	r   r<   r=   ÚdÚmin_trafficÚmin_deploymentÚkÚvÚms	            r   Ú_get_available_deploymentsz2LeastBusyLoggingHandler._get_available_deployments    sÑ   € ð %ò 	;ˆAà�‰˜tÑ$¨OÒ;Ø9:�  ,¡°Ñ 5Ò6ð	;ô ˜E“lˆØˆØ#×)Ñ)Ó+ò 	#‰DˆAˆqØ�;‹Ø�Ø!"‘ð	#ð Ð%à(ò �Ø�\‘? 4Ñ(¨NÓ:Ø’Hðô $Ÿ]™]Ð+>Ó?ˆNð Ðô $Ÿ]™]Ð+>Ó?ˆNØÐr   r   c                 ór   — |› d�}| j                   j                  |¬«      xs i }| j                  ||¬«      S )zJ
        Sync helper to get deployments using least busy strategy
        r   r   ©r<   r=   )r   r!   rJ   ©r   r   r<   r'   r=   s        r   Úget_available_deploymentsz1LeastBusyLoggingHandler.get_available_deployments¾   sO   € ð +6¨°nÐ'EÐØ!%×!2Ñ!2×!<Ñ!<ÐAVÐ!<Ó!WÒ!]Ð[]ˆØ×.Ñ.Ø 3Ø+ð /ó 
ð 	
r   c              ƒ   óŽ   K  — |› d�}| j                   j                  |¬«      ƒ d{  –—† xs i }| j                  ||¬«      S 7 Œ­w)zK
        Async helper to get deployments using least busy strategy
        r   r   NrL   )r   r6   rJ   rM   s        r   Úasync_get_available_deploymentsz7LeastBusyLoggingHandler.async_get_available_deploymentsÍ   s\   è ø€ ð +6¨°nÐ'EÐØ'+×'8Ñ'8×'HÑ'HÐMbÐ'HÓ'c×!cÒ!iÐgiˆØ×.Ñ.Ø 3Ø+ð /ó 
ð 	
ð "dús   ‚%A§A¨AN)Ú__name__Ú
__module__Ú__qualname__r   ÚboolÚ__annotations__r	   r   r
   r   r   r)   r1   r4   r8   r;   ÚlistÚdictrJ   r    rN   rP   © r   r   r   r      s‡   … Ø€IˆtÓØ€N�CÓØ€N�CÓð) Yó )òò4ò8ò6ò8ð6à!ðð óð<
àð
ð "ó
ð	
Àð 	
Ð[_ô 	
r   r   )rB   Útypingr   Úlitellm.caching.cachingr   Ú"litellm.integrations.custom_loggerr   r   rX   r   r   ú<module>r\      s!   ðó Ý å -Ý ;ôF
˜lõ F
r   