
    AHj[                         d dl Z d dlZd dlmZ d dlmZmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZmZ d Z G d d	e      Zy)
    N)uuid)LiteralOptional)verbose_logger)CustomLogger)HTTPHandlerget_async_httpx_clienthttpxSpecialProviderc                      dd l } ddl m } t        | d      r|j                  | j                        S |j	                         S )Nr   )datetimeUTC)r   hasattrnowr   utcnow)dtr   s     Q/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/integrations/lago.pyget_utc_datetimer      s2    !r5||BFF##      c                   B     e Zd Zd fdZd ZdedefdZd Zd Z xZ	S )	
LagoLoggerreturnc                     t         |           | j                          t        t        j
                        | _        t               | _        y )N)llm_provider)	super__init__validate_environmentr	   r
   LoggingCallbackasync_http_handlerr   sync_http_handler)self	__class__s    r   r   zLagoLogger.__init__    s<    !!#"8-==#
 "-r   c                 B   g }t        j                  dd      |j                  d       t        j                  dd      |j                  d       t        j                  dd      |j                  d       t        |      dkD  rt	        dj                  |            y)z
        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   z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                    |j                  d|j                  d             t               j                          |j                  dd       }|j                  d      }i }t        |t        j
                        st        |t        j                        rJt        |d      r>|d   j                  dd      |d   j                  dd      |d   j                  d	      d
}|j                  di       xs i }|j                  d      xs i }|j                  di       j                  dd       }|d   j                  dd       }	|d   j                  dd       }
|d   j                  dd        d}d }t        j                  dd       Ut        t        j                  d   t              r4t        j                  d   dv rt        j                  d   }nt        d      |dk(  r|}n|dk(  r|
}n|dk(  r|	}|t        dj                  ||	||
            dt        t        j                               |t        j                  d      ||d|di}t!        j"                  dj                  |             |S )Nidlitellm_call_idresponse_costmodelusageprompt_tokensr   completion_tokenstotal_tokens)r4   r5   r6   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)r?   user_idteam_idzinvalid LAGO_API_CHARGE_BY setrB   rA   zUExternal Customer ID is not set. Charge_by={}. User_id={}. End_user_id={}. Team_id={}eventr%   )r2   r1   )transaction_idexternal_subscription_idcode
propertiesz [91mLogged Lago Object:
{}[0m
)getr   	isoformat
isinstancelitellmModelResponseEmbeddingResponser   r&   r'   environstrr*   r+   r   uuid4r   debug)r    r-   response_objcostr2   r3   r7   r8   r?   rA   rB   	charge_byexternal_customer_idreturned_vals                 r   _common_logiczLagoLogger._common_logicA   st   vzz*;<=$$&zz/40

7# |W%:%:;,(A(A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
 zz./ 4 
 JJ';<	 @AA%#. )##* )##* 'gnnwW  "%djjl"3,@		"78(-NN	
 	6==lK	
 r   c                 R   t        j                  d      }|t        |t              sJ dj	                  |             |j                  d      r|dz  }n|dz  }t        j                  d      }| j                  ||      }dd	j	                  |      d
}	 | j                  j                  |t        j                  |      |      }	|	j                          y # t        $ rD}
t        |
dd       }|.t        |d      r"t        j                   d|j"                          |
d }
~
ww xY w)Nr$   <LAGO_API_BASE missing or not set correctly. LAGO_API_BASE={}/api/v1/events/api/v1/eventsr#   r-   rR   application/json	Bearer {}zContent-TypeAuthorizationurldataheadersresponsetext
Error Message: )r&   r'   rJ   rO   r+   endswithrW   r   postjsondumpsraise_for_statusr*   getattrr   r   rQ   rg   )r    r-   rR   
start_timeend_time_urlapi_key_data_headersrf   eerror_responses               r   log_success_eventzLagoLogger.log_success_event   s/   yy)J#%
 	WIPPQUV	W 
 ==O#D$$D))N+""&|"L.(//8

	--22ZZ&  3 H %%' 	$Q
D9N)gnf.M$$'89L9L8M%NOG		s   AC 	D&"?D!!D&c                   K   	 t        j                  d       t        j                  d      }|t	        |t
              sJ dj                  |             |j                  d      r|dz  }n|dz  }t        j                  d      }| j                  ||      }d	d
j                  |      d}d }
	 | j                  j                  |t        j                  |      |       d {   }
|
j                          t        j                  d|
j                          y # t        $ r}	|	d }	~	ww xY w7 J# t        $ r7}	|
.t!        |
d      r"t        j                  d|
j                          |	d }	~	ww xY ww)NzENTERS LAGO CALLBACKr$   rY   rZ   r[   r\   r#   r]   r^   r_   r`   rb   zLogged Lago Object: rg   rh   )r   rQ   r&   r'   rJ   rO   r+   ri   rW   r*   r   rj   rk   rl   rm   rg   r   )r    r-   rR   ro   rp   rq   rr   rs   rt   ru   rf   s              r   async_log_success_eventz"LagoLogger.async_log_success_event   sy    	  !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$$'8%HIG	s_   E5B*D .E514D2 %D0&6D2 E5	D-&D((D--E50D2 2	E2;2E--E22E5)r   N)
__name__
__module____qualname__r   r   dictrW   rw   ry   __classcell__)r!   s   @r   r   r      s0    /T2AD A4 AF@&r   r   )rk   r&   litellm._uuidr   typingr   r   httpxrK   litellm._loggingr   "litellm.integrations.custom_loggerr   &litellm.llms.custom_httpx.http_handlerr   r	   r
   r   r    r   r   <module>r      s<     	  $   + ; !k kr   