o
    ưi[                     @   s   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d ZG d	d
 d
eZdS )    N)uuid)LiteralOptional)verbose_logger)CustomLogger)HTTPHandlerget_async_httpx_clienthttpxSpecialProviderc                  C   s2   dd l } ddl m } t| dr|| jS | S )Nr   )datetimeUTC)r
   hasattrnowr   utcnow)dtr
    r   P/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/lago.pyget_utc_datetime   s
   
r   c                       sH   e Zd Zd fddZdd Zdedefdd	Zd
d Zdd Z  Z	S )
LagoLoggerreturnNc                    s,   t    |   ttjd| _t | _d S )N)Zllm_provider)	super__init__validate_environmentr   r	   ZLoggingCallbackasync_http_handlerr   sync_http_handler)self	__class__r   r   r       s   
zLagoLogger.__init__c                 C   sp   g }t dddu r|d t dddu r|d t dddu r)|d t|dkr6td|dS )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   Zmissing_keysr   r   r   r   (   s   


zLagoLogger.validate_environmentkwargsc                 C   s  | d| d t   | dd }| d}i }t|tjs't|tjrCt|drC|d  dd|d  dd|d  d	d
}| di pJi }| dpQi }| di  dd }|d  dd }	|d  dd }
|d  dd  d}d }t	dd d urttj
d trtj
d dv rtj
d }ntd|dkr|}n|dkr|
}n|dkr|	}|d u rtd||	||
dtt |t	d||d|di}td| |S )NidZlitellm_call_idresponse_costmodelusageprompt_tokensr   completion_tokenstotal_tokens)r+   r,   r-   litellm_paramsproxy_server_requestbodyusermetadataZuser_api_key_user_idZuser_api_key_team_idZuser_api_key_org_idend_user_idZLAGO_API_CHARGE_BY)r3   user_idteam_idzinvalid LAGO_API_CHARGE_BY setr5   r4   zUExternal Customer ID is not set. Charge_by={}. User_id={}. End_user_id={}. Team_id={}eventr   )r)   r(   )Ztransaction_idZexternal_subscription_idcode
propertiesz [91mLogged Lago Object:
{}[0m
)getr   	isoformat
isinstancelitellmZModelResponseZEmbeddingResponser   r    r!   environstrr$   r%   r   uuid4r   debug)r   r&   response_objZcostr)   r*   r.   r/   r3   r4   r5   Z	charge_byZexternal_customer_idZreturned_valr   r   r   _common_logicA   sh   





	zLagoLogger._common_logicc              
   C   s   t d}|d urt|tsJ d||dr|d7 }n|d7 }t d}| j||d}dd	|d
}z| jj|t	
||d}	|	  W d S  typ }
 zt|
dd }|d urjt|drjtd|j  |
d }
~
ww )Nr   <LAGO_API_BASE missing or not set correctly. LAGO_API_BASE={}/api/v1/events/api/v1/eventsr   r&   rA   application/json	Bearer {}zContent-TypeAuthorizationurldataheadersresponsetext
Error Message: )r    r!   r;   r>   r%   endswithrB   r   postjsondumpsraise_for_statusr$   getattrr   r   r@   rQ   )r   r&   rA   
start_timeend_time_urlapi_key_data_headersrP   eZerror_responser   r   r   log_success_event   s8   




zLagoLogger.log_success_eventc              
      s   z>t d td}|d urt|tsJ d||dr&|d7 }n|d7 }td}| j||d}d	d
|d}W n t	yM }	 z|	d }	~	ww d }
z| j
j|t||dI d H }
|
  t d|
j  W d S  t	y }	 z|
d urt|
drt d|
j  |	d }	~	ww )NzENTERS LAGO CALLBACKr   rC   rD   rE   rF   r   rG   rH   rI   rJ   rL   zLogged Lago Object: rQ   rR   )r   r@   r    r!   r;   r>   r%   rS   rB   r$   r   rT   rU   rV   rW   rQ   r   )r   r&   rA   rY   rZ   r[   r\   r]   r^   r_   rP   r   r   r   async_log_success_event   sL   






z"LagoLogger.async_log_success_event)r   N)
__name__
__module____qualname__r   r   dictrB   r`   ra   __classcell__r   r   r   r   r      s    C r   )rU   r    Zlitellm._uuidr   typingr   r   Zhttpxr<   Zlitellm._loggingr   Z"litellm.integrations.custom_loggerr   Z&litellm.llms.custom_httpx.http_handlerr   r   r	   r   r   r   r   r   r   <module>   s   
