
    ^h!              
           S SK r S SKrS SKJrJrJr  S SKrS SKJr  S SK	J
r
Jr  S SKJr  S SKJr  S SKJr  \  SS\R$                  4S	 jj5       rS
\\   S\\   S\\   S\\   S\4
S jrg)    N)OptionalUnioncast)verbose_proxy_logger)!_get_parent_otel_span_from_kwargs get_litellm_metadata_from_kwargs)log_db_metrics)StandardLoggingPayload)!get_end_user_id_for_cost_trackingcompletion_responsec                   #    SSK JnJnJnJn  [
        R                  " S5         [
        R                  " SU R                  SS 5       SU R                  SS 5       35        [        U S9nU R                  S	0 5      =(       d    0 n	[        U	5      n
[        U S9n[        [        [           UR                  S
S 5      5      n[        [        [           UR                  SS 5      5      n[        [        [           UR                  SS 5      5      n[        [        [           UR                  SS 5      5      nUR                  SS 5      nU R                  SS 5      nUb  UR                  SS 5      OU R                  SS 5      nUb  UR                  SS 5      nU R                  SS5      SL a  Sn[
        R                  " SU SU 35        [
        R                  " SU SU 35        [        UUUU
S9(       a\  U" UUUU
UU UUUUS9
I S h  vN   [         R"                  " U" UUU
UUUS95        UR$                  R'                  UUU
UUS9I S h  vN   g [)        S5      eU S   SLd  U S   SL a>  SU ;   a7  Ub  US   =(       d    S nOS!nU R                  S"5      n[)        S#U S$U S%35      eg g  N Na! [(         a  nS&[        U5       S'[*        R,                  " 5        3nU R                  S"S(5      nU R                  S	0 5      R                  S)0 5      nUS*U S+U S,3-  n[         R"                  " UR/                  UUS-95        [
        R0                  " S.[        U5      5         S nAg S nAff = f7f)/Nr   )prisma_clientproxy_logging_objupdate_cacheupdate_databasez!INSIDE _PROXY_track_cost_callbackzkwargs stream: streamz  + complete streaming response: complete_streaming_response)kwargslitellm_paramsuser_api_key_user_iduser_api_key_team_iduser_api_key_org_iduser_api_key_aliasuser_api_end_user_max_budgetstandard_logging_objectresponse_costuser_api_key	cache_hitFTg        zCache Hit: response_cost z, for user_id zuser_api_key z, prisma_client: r   user_idteam_idend_user_id)
tokenr   r    r"   r!   r   r   
start_timeend_timeorg_id)r#   r    r"   r   r!   parent_otel_span)r#   	key_aliasr"   r   
max_budgetzBUser API key and team id and user id missing from custom callback. response_cost_failure_debug_infozCresponse_cost_failure_debug_info is None in standard_logging_objectz!standard_logging_object not foundmodelzCost tracking failed for model=z.
Debug info - zG
Add custom pricing - https://docs.litellm.ai/docs/proxy/custom_pricingz"Error in tracking cost callback - z
 Traceback: metadataz-
 Args to _PROXY_track_cost_callback
 model: z
 metadata: 
)error_messagefailing_modelz$Error in tracking cost callback - %s)litellm.proxy.proxy_serverr   r   r   r   r   debuggetr   r   r   r   r   strinfo_should_track_cost_callbackasynciocreate_taskslack_alerting_instancecustomer_spend_alert	Exception	traceback
format_excfailed_tracking_alert	exception)r   r   r$   r%   r   r   r   r   r'   r   r"   r-   r    r!   r&   r(   end_user_max_budget	sl_objectr   r    cost_tracking_failure_debug_infor+   e	error_msgs                           g/home/james-whalen/.local/lib/python3.13/site-packages/litellm/proxy/hooks/proxy_track_cost_callback.py_PROXY_track_cost_callbackrF      s      BChW""fjj4899YZ`ZdZd  fC  EI  [J  ZK  L	
 =FK$4b9?R7G36Bx}hll3I4&PQx}hll3I4&PQhsmX\\2G%NO#5I4(PQ	&ll+I4P6<jj%t7
	
 $ MM/40OT2 	 $#<<=Lzz+u-5 #$))/nWIV !&&~->}oN +)'	 &&"/# +#!(;)%!   ## * '$/&3 ')9	 (??TT&' +"/2 U     X  ht+x D(-Jf-T(!"DE a` 5 < 5 

7+5eW<LMmLn  ow  x  .U(M28  W8QiNbNbNdMef	

7B'::.377
BGFug][cZddfgg	33'# 4 	
 	&&'MsSTvVVWsb   #M/G"J0 J,	AJ0 J.J0 M/AJ0 *M/,J0 .J0 0
M,:B(M'"M/'M,,M/r   r    r!   r"   returnc                     U c	  Uc  Uc  Ub  gg)zF
Determine if the cost callback should be tracked based on the kwargs
TF r   s       rE   r6   r6      s"     	 "    )NN)r7   r<   typingr   r   r   litellmlitellm._loggingr   'litellm.litellm_core_utils.core_helpersr   r   litellm.proxy.auth.auth_checksr	   litellm.types.utilsr
   litellm.utilsr   ModelResponserF   r4   boolr6   rI   rJ   rE   <module>rT      s      ( (  1 : 6 ;  	vW ..vW vWr3-c] c] #	
 
rJ   