
    ^hH                         S SK r S SKrS SKrS SKJrJr  S SKrS SKrS SKJ	r	  S SK
Jr  S SKJrJrJr  S r " S S\5      rg)	    N)LiteralOptional)verbose_logger)CustomLogger)HTTPHandlerget_async_httpx_clienthttpxSpecialProviderc                      SS K n SSK J n  [        U S5      (       a  UR                  U R                  5      $ UR	                  5       $ )Nr   )datetimeUTC)r   hasattrnowr   utcnow)dtr   s     S/home/james-whalen/.local/lib/python3.13/site-packages/litellm/integrations/lago.pyget_utc_datetimer      s5    !r5||BFF##      c                   P   ^  \ rS rSrS
U 4S jjrS rS\S\4S jrS rS r	S	r
U =r$ )
LagoLogger   returnc                    > [         TU ]  5         U R                  5         [        [        R
                  S9U l        [        5       U l        g )N)llm_provider)	super__init__validate_environmentr   r	   LoggingCallbackasync_http_handlerr   sync_http_handler)self	__class__s    r   r   LagoLogger.__init__    s<    !!#"8-==#
 "-r   c                 P   / n[         R                  " SS5      c  UR                  S5        [         R                  " SS5      c  UR                  S5        [         R                  " SS5      c  UR                  S5        [        U5      S:  a  [	        SR                  U5      5      eg)zm
Expects
LAGO_API_BASE,
LAGO_API_KEY,
LAGO_API_EVENT_CODE,

Optional:
LAGO_API_CHARGE_BY

in the environment
LAGO_API_KEYNLAGO_API_BASELAGO_API_EVENT_CODEr   zMissing keys={} in environment.)osgetenvappendlen	Exceptionformat)r    missing_keyss     r   r   LagoLogger.validate_environment(   s     99^T*2/99_d+3099*D19 56|q =DD\RSS !r   kwargsc                 ,   UR                  SUR                  S5      5        [        5       R                  5         UR                  SS 5      nUR                  S5      n0 n[        U[        R
                  5      (       d  [        U[        R                  5      (       aO  [        US5      (       a>  US   R                  SS5      US   R                  SS5      US   R                  S	5      S
.nUR                  S0 5      =(       d    0 nUR                  S5      =(       d    0 nUR                  S0 5      R                  SS 5      nUS   R                  SS 5      n	US   R                  SS 5      n
US   R                  SS 5        SnS n[        R                  " SS 5      b\  [        [        R                  S   [        5      (       a6  [        R                  S   S;   a  [        R                  S   nO[        S5      eUS:X  a  UnOUS:X  a  U
nOUS:X  a  U	nUc  [        SR                  XX5      5      eS[        [        R                  " 5       5      U[        R                  " S5      XCS.UES.0n[         R"                  " SR                  U5      5        U$ )Nidlitellm_call_idresponse_costmodelusageprompt_tokensr   completion_tokenstotal_tokens)r6   r7   r8   litellm_paramsproxy_server_requestbodyusermetadatauser_api_key_user_iduser_api_key_team_iduser_api_key_org_idend_user_idLAGO_API_CHARGE_BY)rA   user_idteam_idzinvalid LAGO_API_CHARGE_BY setrD   rC   zUExternal Customer ID is not set. Charge_by={}. User_id={}. End_user_id={}. Team_id={}eventr&   )r4   r3   )transaction_idexternal_subscription_idcode
propertiesz [91mLogged Lago Object:
{}[0m
)getr   	isoformat
isinstancelitellmModelResponseEmbeddingResponser   r'   r(   environstrr+   r,   uuiduuid4r   debug)r    r/   response_objcostr4   r5   r9   r:   rA   rC   rD   	charge_byexternal_customer_idreturned_vals                 r   _common_logicLagoLogger._common_logicA   s}   vzz*;<=$$&zz/40

7# |W%:%:;;,(A(ABBlG,,!-g!6!:!:?A!N%1'%:%>%>?RTU%V ,W 5 9 9. IE  $4b9?R-112HIOR*..vr:>>vtL ,001GN ,001GNz"&&'<dCBO	.299)40<JJ+,cB
 B
 zz./ 4 
 JJ';<	 @AA%#. )##* )##* 'gnn  "%djjl"3,@		"78(-NN	
 	6==lK	
 r   c                 p   [         R                  " S5      nUb  [        U[        5      (       d   SR	                  U5      5       eUR                  S5      (       a  US-  nOUS-  n[         R                  " S5      nU R                  XS9nSS	R	                  U5      S
.n U R                  R                  U[        R                  " U5      US9n	U	R                  5         g ! [         aK  n
[        U
SS 5      nUb4  [        US5      (       a#  [        R                   " SUR"                   35        U
eS n
A
ff = f)Nr%   <LAGO_API_BASE missing or not set correctly. LAGO_API_BASE={}/api/v1/events/api/v1/eventsr$   r/   rU   application/json	Bearer {}zContent-TypeAuthorizationurldataheadersresponsetext
Error Message: )r'   r(   rL   rQ   r,   endswithrZ   r   postjsondumpsraise_for_statusr+   getattrr   r   rT   rk   )r    r/   rU   
start_timeend_time_urlapi_key_data_headersrj   eerror_responses               r   log_success_eventLagoLogger.log_success_event   s8   yy)J#%
 %
 	WIPPQUV	W 
 ==O#D$$D))N+""&"L.(//8

	--22ZZ&  3 H %%' 	$Q
D9N)gnf.M.M$$'89L9L8M%NOG		s    ?C   
D5*AD00D5c                   #     [         R                  " S5        [        R                  " S5      nUb  [	        U[
        5      (       d   SR                  U5      5       eUR                  S5      (       a  US-  nOUS-  n[        R                  " S5      nU R                  XS9nS	S
R                  U5      S.nS n
 U R                  R                  U[        R                  " U5      US9I S h  vN n
U
R                  5         [         R                  " SU
R                   35        g ! [         a  n	U	eS n	A	ff = f NL! [         a>  n	U
b4  [!        U
S5      (       a#  [         R                  " SU
R                   35        U	eS n	A	ff = f7f)NzENTERS LAGO CALLBACKr%   r]   r^   r_   r`   r$   ra   rb   rc   rd   rf   zLogged Lago Object: rk   rl   )r   rT   r'   r(   rL   rQ   r,   rm   rZ   r+   r   rn   ro   rp   rq   rk   r   )r    r/   rU   rs   rt   ru   rv   rw   rx   ry   rj   s              r   async_log_success_event"LagoLogger.async_log_success_event   s    	  !7899_-D#
c) ) MTT 
 }}S!!'((ii/G&&f&PE 2!,!3!3G!<H .2	!4499ZZ&  :  H %%'  #7!GH  	G	
  	#&(A(A$$'8%HIG	s_   FB4D& 8F;2D< -D:.7D< %F&
D70D22D77F:D< <
F9E??FF)r   r   )r   N)__name__
__module____qualname____firstlineno__r   r   dictrZ   r{   r~   __static_attributes____classcell__)r!   s   @r   r   r      s5    /T2AD A4 AF@& &r   r   )ro   r'   rR   typingr   r   httpxrM   litellm._loggingr   "litellm.integrations.custom_loggerr   &litellm.llms.custom_httpx.http_handlerr   r   r	   r   r    r   r   <module>r      s<     	  $   + ; !k kr   