
    g(1                         d dl m Z mZ d dlmZmZmZmZ d dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ  G d d	e      Zy)
    )datetime	timedelta)DictListOptionalUnionN)ModelResponsetoken_counterverbose_logger)verbose_router_logger)	DualCache)CustomLoggerc                       e Zd ZU dZeed<   dZeed<   dZeed<   i fde	de
defd	Zd
 Zd Z	 	 	 ddede
deeeeef         deeeef      dee   f
dZy)LowestCostLoggingHandlerF	test_flagr   logged_successlogged_failurerouter_cache
model_listrouting_argsc                      || _         || _        y )N)r   r   )selfr   r   r   s       X/var/www/openai/venv/lib/python3.12/site-packages/litellm/router_strategy/lowest_cost.py__init__z!LowestCostLoggingHandler.__init__   s     )$    c                    	 	 |d   j                  d      y |d   d   j                  dd       }|d   j                  di       j                  dd       }||y t        |t              rt        |      }	 t	        j
                         j                  d      }t	        j
                         j                  d      }t	        j
                         j                  d      }	| d	| d	|	 }
| d
}||z
  }d}t        |t              r]t        |dd       }|Nt        |t        j                        r4|j                  }|j                  }t        |j                         |z         | j                  j!                  |      xs i }||vri ||<   |
||   vri ||   |
<   ||   |
   j                  dd      |z   ||   |
   d<   ||   |
   j                  dd      dz   ||   |
   d<   | j                  j#                  ||       | j$                  r| xj&                  dz  c_        y y # t(        $ r7}t+        j,                  dj/                  t        |                   Y d }~y d }~ww xY w)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_msr9   _usager8   request_count_dictes                     r   log_success_eventz*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)]$/)1J)> lM:$\7DAF)j.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" "	I"+-II"c                   K   	 	 |d   j                  d      y |d   d   j                  dd       }|d   j                  di       j                  dd       }||y t        |t              rt        |      }	 | d}t	        j
                         j                  d      }t	        j
                         j                  d      }	t	        j
                         j                  d	      }
| d
|	 d
|
 }||z
  }d}t        |t              r]t        |dd       }|Nt        |t        j                        r4|j                  }|j                  }t        |j                         |z         | j                  j!                  |       d {   xs i }||vri ||<   |||   vri ||   |<   ||   |   j                  dd      |z   ||   |   d<   ||   |   j                  dd      dz   ||   |   d<   | j                  j#                  ||       d {    | j$                  r| xj&                  dz  c_        y y 7 7 )# t(        $ r7}t+        j,                  dj/                  t        |                   Y d }~y d }~ww xY ww)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 - {})r/   r0   r1   r2   r   r3   r4   r	   r5   r6   r7   r8   r9   r:   r;   r   async_get_cacheasync_set_cacher   r   r>   r   r?   r@   )r   rA   rB   rC   rD   r   r!   rI   rE   rF   rG   rH   rJ   r9   rK   r8   rL   rM   s                     r   async_log_success_eventz0LowestCostLoggingHandler.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)1J)> lM:$\7DAF)j.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   I;H8 I;AH8 I;D'H8 H4BH8 H6%H8 2I;4H8 6H8 8	I8-I3.I;3I88I;Nr   healthy_deploymentsmessagesinputrequest_kwargsc                   K   | d}| j                   j                  |       d{   xs i }t        d       t        j                         j                  d      }t        j                         j                  d      }	t        j                         j                  d      }
| d|	 d|
 }|y|}|D ]  }|d	   d
   |vs|dddi||d	   d
   <    	 t        ||      }|j                         }g }i }|j                         D ]  \  }}d}|D ]  }||d	   d
   k(  s|} |!|j                  dd      xsS |j                  di       j                  dd      xs/ |j                  d	i       j                  dd      xs t        d      }|j                  dd      xsS |j                  di       j                  dd      xs/ |j                  d	i       j                  dd      xs t        d      }|j                  di       j                  d      }t        j                  j                  |i       }d}d}|j                  di       j                  dd      r!|j                  di       j                  d      }|j                  di       j                  dd      r!|j                  di       j                  d      }||j                  dd      }||j                  dd      }||z   }|j                  |i       j                  dd      }|j                  |i       j                  dd      }t        j                  d| d| d| d|j                  d	i       j                  d
              |j                  di       j                  dd      }||||<   ||z   |kD  s|dz   |kD  r|j                  ||f        t        |      dk(  ryt!        |d       }|d   d   } | S 7 # t        $ r d}Y w xY ww)z;
        Returns a deployment with the lowest cost
        r&   r(   Ninfr"   r#   r$   r%   r    r!   r   )r*   r+   )rT   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                     | d   S )Nr,    )xs    r   <lambda>zJLowestCostLoggingHandler.async_get_available_deployments.<locals>.<lambda>J  s    AaDr   )r   rP   r:   r   r3   r4   r
   r>   itemsr/   r6   
model_costr   debugappendlensorted)!r   r   rS   rT   rU   rV   rI   rL   rE   rF   rG   rH   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_deploymentsz8LowestCostLoggingHandler.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"-//2BB"G"K"K*# /4889PRV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   %O?O*BO?O?O- #=O?!K
O?-O<8O?;O<<O?)NNN)__name__
__module____qualname__r   bool__annotations__r   r1   r   r   listdictr   rN   rR   r2   r   r   r   r   r~   r`   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#r   r   )r   r   typingr   r   r   r   r6   r	   r
   r   litellm._loggingr   litellm.caching.cachingr   "litellm.integrations.custom_loggerr   r   r`   r   r   <module>r      s0    ) . .  @ @ 2 - ;@#| @#r   