
    ^h(1                         S SK J r Jr  S SKJrJrJrJr  S SKrS SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJr   " S S	\5      rg)
    )datetime	timedelta)DictListOptionalUnionN)ModelResponsetoken_counterverbose_logger)verbose_router_logger)	DualCache)CustomLoggerc                       \ rS rSr% 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      S\\   4
S jjrSrg)LowestCostLoggingHandler   F	test_flagr   logged_successlogged_failurerouter_cache
model_listrouting_argsc                     Xl         X l        g )N)r   r   )selfr   r   r   s       ]/home/james-whalen/.local/lib/python3.13/site-packages/litellm/router_strategy/lowest_cost.py__init__!LowestCostLoggingHandler.__init__   s     )$    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 [        R
                  " 5       R                  S5      n[        R
                  " 5       R                  S5      n[        R
                  " 5       R                  S5      n	U S	U S	U	 3n
U S
3nXC-
  nSn[        U[        5      (       ac  [        USS 5      nUbS  [        U[        R                  5      (       a4  UR                  nUR                  n[        UR                  5       U-  5        U R                  R!                  US9=(       d    0 nUU;  a  0 UU'   U
UU   ;  a  0 UU   U
'   UU   U
   R                  SS5      U-   UU   U
   S'   UU   U
   R                  SS5      S-   UU   U
   S'   U R                  R#                  UUS9  U R$                  (       a  U =R&                  S-  sl        g g ! [(         a8  n[*        R,                  " SR/                  [        U5      5      5         S nAg S nAff = f)Nlitellm_paramsmetadatamodel_group
model_infoid%Y-%m-%d%H%M-_mapr   usagekeytpmrpm   r+   valuezSlitellm.router_strategy.lowest_cost.py::log_success_event(): Exception occured - {})get
isinstanceintstrr   nowstrftimer	   getattrlitellmUsagecompletion_tokenstotal_tokensfloattotal_secondsr   	get_cache	set_cacher   r   	Exceptionr   	exceptionformat)r   kwargsresponse_obj
start_timeend_timer!   r#   current_datecurrent_hourcurrent_minuteprecise_minutecost_keyresponse_msr;   _usager:   request_count_dictes                     r   log_success_event*LowestCostLoggingHandler.log_success_event   s   Q	 &'++J7?$%56zBFF!4 ,-11,CGGdS&"*C((RB
  (||~66zB'||~66t<!)!8!8!>$0><..AQ!R)]$/)1)> lM::$\7DAF)j.O.O,2,D,D)'-':':k779<MMN &*%6%6%@%@X%@%N%TRT" //-/&r*!);B)??=?&r*>: 'r*>:>>uaH<W #2&~6u= 'r*>:>>uaH1L #2&~6u= !!++@R+S >>''1,' " 	$$ellF
 	s$   H? AH? G H? ?
J	.I<<Jc                 8  #      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[        R
                  " 5       R                  S5      n[        R
                  " 5       R                  S5      n	[        R
                  " 5       R                  S	5      n
U S
U	 S
U
 3nXC-
  nSn[        U[        5      (       ac  [        USS 5      nUbS  [        U[        R                  5      (       a4  UR                  nUR                  n[        UR                  5       U-  5        U R                  R!                  US9I S h  vN =(       d    0 nUU;  a  0 UU'   UUU   ;  a  0 UU   U'   UU   U   R                  SS5      U-   UU   U   S'   UU   U   R                  SS5      S-   UU   U   S'   U R                  R#                  UUS9I S h  vN   U R$                  (       a  U =R&                  S-  sl        g g  N N.! [(         a8  n[*        R,                  " SR/                  [        U5      5      5         S nAg S nAff = f7f)Nr   r    r!   r"   r#   r(   r$   r%   r&   r'   r   r)   r*   r,   r-   r.   r/   z`litellm.proxy.hooks.prompt_injection_detection.py::async_pre_call_hook(): Exception occured - {})r1   r2   r3   r4   r   r5   r6   r	   r7   r8   r9   r:   r;   r<   r=   r   async_get_cacheasync_set_cacher   r   r@   r   rA   rB   )r   rC   rD   rE   rF   r!   r#   rK   rG   rH   rI   rJ   rL   r;   rM   r:   rN   rO   s                     r   async_log_success_event0LowestCostLoggingHandler.async_log_success_eventl   s    U	 &'++J7?$%56zBFF!4 ,-11,CGGdS&"*C((RB
	 *]$/'||~66zB'||~66t<!)!8!8!>$0><..AQ!R)1)> lM::$\7DAF)j.O.O,2,D,D)'-':':k779<MMN ++;;;IIOR # //-/&r*!);B)??=?&r*>: 'r*>:>>uaH<W #2&~6u= 'r*>:>>uaH1L #2&~6u= ''77 (: 8   
 >>''1,' "/ J$  	$$ryyF
 	sk   JI JAI JD6I IBI $I%*I JI I 
J.JJJJNr!   healthy_deploymentsmessagesinputrequest_kwargsc                 z  #    U S3nU R                   R                  US9I Sh  vN =(       d    0 n[        S5        [        R                  " 5       R                  S5      n[        R                  " 5       R                  S5      n	[        R                  " 5       R                  S5      n
U SU	 SU
 3nUc  gUnU H   nUS	   S
   U;  d  M  USSS.0XS	   S
   '   M"      [        X4S9nUR                  5       n/ n0 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'  UR                  SS5      =(       d]    UR                  S0 5      R                  SS5      =(       d4    UR                  S	0 5      R                  SS5      =(       d    [        S5      nUR                  SS5      =(       d]    UR                  S0 5      R                  SS5      =(       d4    UR                  S	0 5      R                  SS5      =(       d    [        S5      nUR                  S0 5      R                  S5      n[        R                  R                  U0 5      nSnSnUR                  S0 5      R                  SS5      (       a!  UR                  S0 5      R                  S5      nUR                  S0 5      R                  SS5      (       a!  UR                  S0 5      R                  S5      nUc  UR                  SS5      nUc  UR                  SS5      nUU-   nUR                  U0 5      R                  SS5      nUR                  U0 5      R                  SS5      n[        R                  " SU SU SU SUR                  S	0 5      R                  S
5       35        UR                  S0 5      R                  SS5      nUb  UUU'   UU-   U:  d	  US-   U:  a  GM  UR                  UU45        GM     [        U5      S:X  a  g[!        US S9nUS   S   n U $  GN! [         a    Sn GNNf = f7f)z+
Returns a deployment with the lowest cost
r(   r*   Ninfr$   r%   r&   r'   r"   r#   r   )r,   r-   )rX   textr,   r   r-   modelinput_cost_per_tokenoutput_cost_per_tokeng      @zitem_cost: z, item_tpm: z, item_rpm: z, model_id: api_base r.   c                     U S   $ )Nr.    )xs    r   <lambda>JLowestCostLoggingHandler.async_get_available_deployments.<locals>.<lambda>J  s    AaDr   )r   rS   r<   r   r5   r6   r
   r@   itemsr1   r8   
model_costr   debugappendlensorted)!r   r!   rW   rX   rY   rZ   rK   rN   rG   rH   rI   rJ   all_deploymentsdinput_tokens_itemspotential_deployments_cost_per_deploymentitemitem_map_deploymentm_deployment_tpm_deployment_rpmitem_litellm_model_nameitem_litellm_model_cost_mapitem_input_costitem_output_cost	item_costitem_rpmitem_tpm_deployment_api_baseselected_deployments!                                    r   async_get_available_deployments8LowestCostLoggingHandler.async_get_available_deployments   s     "]$'#'#4#4#D#D#D#RRXVX
 	e||~..z:||~..t4!006(><..9IJ%,$At$O;"Aa$8:, 56 %	((GL
 !&&( !#!-335ND(K(1\?400"#K ) " t,  ??#3R8<<UDI ??<488E  <	  t,  ??#3R8<<UDI ??<488E  <	  '2oo6F&K&O&OPW&X#*1*<*<*@*@'+'
 #O#/4889OQUVV"-//2BB"G"K"K*# /4889PRVWW#.??3CR#H#L#L+$  &"="A"A*C#  '#>#B#B+S$  (*::I||NB7;;E1EH||NB7;;E1EH!''i[XJl8*T`alapapq}  @B  bC  bG  bG  HL  bM  aN  O $/??3CR#H#L#LB$  $/=F$%9: <'/9a</1%,,k9-EFe 6h $%* &'<. Q3A6q9""y S2  	L	sA   "P;P%B#P;P; 	P( )<P;)K=P;(P84P;7P88P;)r   r   )NNN)__name__
__module____qualname____firstlineno__r   bool__annotations__r   r3   r   r   listdictr   rP   rU   r4   r   r   r   r   r   __static_attributes__rd   r   r   r   r      s    ItNCNC OQ%%%37%GK%RhVx 48,0)-I#I# "I# 4S#X/0	I#
 c4i()I# !I# I#r   r   )r   r   typingr   r   r   r   r8   r	   r
   r   litellm._loggingr   litellm.caching.cachingr   "litellm.integrations.custom_loggerr   r   rd   r   r   <module>r      s0    ) . .  @ @ 2 - ;@#| @#r   