
    g!              
           d dl Z d dlZd dlmZmZmZ d dlZd dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ e	 	 ddej$                  fd	       Zd
ee   dee   dee   dee   def
dZy)    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                   K   ddl m}m}m}m} t        j                  d       	 t        j                  d| j                  dd        d| j                  dd               t        |       }| j                  d	i       xs i }	t        |	      }
t        |       }t        t        t           |j                  d
d             }t        t        t           |j                  dd             }t        t        t           |j                  dd             }t        t        t           |j                  dd             }|j                  dd       }| j                  dd       }||j                  dd       n| j                  dd       }||j                  dd       }| j                  dd      du rd}t        j                  d| d|        t        j                  d| d|        t        ||||
      rd |||||
|| ||||
       d {    t!        j"                   ||||
|||             |j$                  j'                  |||
||       d {    y t)        d      | d   dus| d   du r6d| v r1|
|d   xs d }nd!}| j                  d"      }t)        d#| d$| d%      y y 7 7 W# t(        $ r}d&t        |       d't+        j,                          }| j                  d"d(      }| j                  d	i       j                  d)i       }|d*| d+| d,z  }t!        j"                  |j/                  ||-             t        j0                  d.t        |             Y d }~y d }~ww xY ww)/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                           b/var/www/openai/venv/lib/python3.12/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J& J"AJ& J$J& M$AJ&  M$"J& $J& &	M!/B(MM$M!!M$r   r    r!   r"   returnc                     | |||yy)zN
    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   