
    ^h%                     F    S SK r S SKJr  S SKJr  S SKJr   " S S\5      rg)    N)Optional)	DualCache)CustomLoggerc                       \ rS rSr% Sr\\S'   Sr\\S'   Sr	\\S'   S\
S\4S	 jrS
 rS rS rS rS rS\S\4S jrS\S\4S jrS\S\4S jrSrg)LeastBusyLoggingHandler   F	test_flagr   logged_successlogged_failurerouter_cache
model_listc                 *    Xl         0 U l        X l        g )N)r   mapping_deployment_to_idr   )selfr   r   s      \/home/james-whalen/.local/lib/python3.13/site-packages/litellm/router_strategy/least_busy.py__init__ LeastBusyLoggingHandler.__init__   s    (.0%$    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3nU R                  R                  US9=(       d    0 nUR                  US	5      S
-   Xu'   U R                  R                  XgS9  g! [         a     gf = f)z@
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_call(LeastBusyLoggingHandler.log_pre_api_call   s	   	&'++J7?$%56zBFF!4 ,-11,CGGdS&"*C((RB+6-~(F% %%//4I/JPb # *<)?)?A)F)J"&!!++- ,   		s   C AC A7C 
C! C!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3nU R                  R                  US9=(       d    0 nUR                  US5      n	U	c  g U	S	-
  X'   U R                  R                  XxS
9  U R                  (       a  U =R                  S	-  sl        g g ! [         a     g f = f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_event)LeastBusyLoggingHandler.log_success_event:   s7   	&'++J7?$%56zBFF!4 ,-11,CGGdS&"*C((RB+6-~(F% %%//4I/JPb # 6H5K5KBPQ5R#&.)<q)@"&!!++- , 
 >>''1,' " 		%   D AD AD 9AD 
DD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3nU R                  R                  US9=(       d    0 nUR                  US5      n	U	c  g U	S	-
  X'   U R                  R                  XxS
9  U R                  (       a  U =R                  S	-  sl        g g ! [         a     g f = fr0   )
r!   r"   r#   r$   r   r%   r&   r	   r   r'   r1   s
             r   log_failure_event)LeastBusyLoggingHandler.log_failure_event\   s7   	&'++J7?$%56zBFF!4 ,-11,CGGdS&"*C((RB+6-~(F% %%//4I/JPb # 6H5K5KBPQ5R#&.)<q)@"&!!++- , 
 >>''1,' " 		r8   c                 R  #     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3nU R                  R                  US9I S h  vN =(       d    0 nUR                  US5      n	U	c  g U	S	-
  X'   U R                  R                  XxS
9I S h  vN   U R                  (       a  U =R                  S	-  sl        g g  Ns N.! [         a     g f = f7fr0   )
r!   r"   r#   r$   r   async_get_cacheasync_set_cacher	   r
   r'   r1   s
             r   async_log_success_event/LeastBusyLoggingHandler.async_log_success_event}   sV     	&'++J7?$%56zBFF!4 ,-11,CGGdS&"*C((RB+6-~(F% ++;;@U;VV  # 6H5K5KBPQ5R#&.)<q)@"&''77- 8   
 >>''1,' " W  		p   D'D D'AD D'AD D "D D'#D &D'*D D'D D 
D$!D'#D$$D'c                 R  #     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3nU R                  R                  US9I S h  vN =(       d    0 nUR                  US5      n	U	c  g U	S	-
  X'   U R                  R                  XxS
9I S h  vN   U R                  (       a  U =R                  S	-  sl        g g  Ns N.! [         a     g f = f7fr0   )
r!   r"   r#   r$   r   r=   r>   r	   r   r'   r1   s
             r   async_log_failure_event/LeastBusyLoggingHandler.async_log_failure_event   sV    	&'++J7?$%56zBFF!4 ,-11,CGGdS&"*C((RB+6-~(F% ++;;@U;VV  # 6H5K5KBPQ5R#&.)<q)@"&''77- 8   
 >>''1,' " W  		rA   healthy_deploymentsall_deploymentsc                 >   U H  nUS   S   U;  d  M  SX#S   S   '   M     [        S5      nSnUR                  5        H  u  pgXt:  d  M  UnUnM     Ub1  U H  nUS   S   U:X  d  M  Us  $    [        R                  " U5      nU$ [        R                  " U5      nU$ )z5
Helper to get deployments using least busy strategy
r   r   r   infN)floatitemsrandomchoice)	r   rE   rF   dmin_trafficmin_deploymentkvms	            r   _get_available_deployments2LeastBusyLoggingHandler._get_available_deployments   s     %At$O;9:, 56 % El#))+DA!" , %(\?4(N:H ) $]]+>?N  $]]+>?Nr   r   c                 p    U S3nU R                   R                  US9=(       d    0 nU R                  UUS9$ )z:
Sync helper to get deployments using least busy strategy
r   r   rE   rF   )r   r%   rS   r   r   rE   r+   rF   s        r   get_available_deployments1LeastBusyLoggingHandler.get_available_deployments   sO     $/-~ >++55:O5PVTV.. 3+ / 
 	
r   c                    #    U S3nU R                   R                  US9I Sh  vN =(       d    0 nU R                  UUS9$  N7f)z;
Async helper to get deployments using least busy strategy
r   r   NrV   )r   r=   rS   rW   s        r   async_get_available_deployments7LeastBusyLoggingHandler.async_get_available_deployments   s`      $/-~ >##338M3NNTRT 	 .. 3+ / 
 	
 Os   "AAA)r   r   r   N)__name__
__module____qualname____firstlineno__r	   bool__annotations__r
   r#   r   r   listr   r-   r6   r:   r?   rC   dictrS   r$   rX   r[   __static_attributes__ r   r   r   r      s    ItNCNC%Y %D %
@ DB!F D! <

 "


59
r   r   )rK   typingr   litellm.caching.cachingr   "litellm.integrations.custom_loggerr   r   rf   r   r   <module>rj      s!      - ;l
l l
r   