o
    ưi                     @   s|   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l	m
Z
mZmZmZ d dlmZmZ d dlmZ G dd	 d	eZdS )
    N)uuid)CustomLogger)Api	EndpointsHttpMethods)BaseApiSpanSpanApiTypeTraceApiTraceSpanApiStatus)to_zod_compatible_isovalidate_environment)verbose_loggerc                       sh   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Z  ZS )DeepEvalLoggerz+Logs litellm traces to DeepEval's platform.c                    sP   t d}t dd| _t| j |stdt|d| _t j|i | d S )NZCONFIDENT_API_KEYZLITELM_ENVIRONMENTZdevelopmentz@Please set 'CONFIDENT_API_KEY=<>' in your environment variables.)api_key)	osgetenvlitellm_environmentr   
ValueErrorr   apisuper__init__)selfargskwargsr   	__class__ ]/home/app/Keep/.python/lib/python3.10/site-packages/litellm/integrations/deepeval/deepeval.pyr      s   

zDeepEvalLogger.__init__c                 C      | j ||||dd dS z,Logs a success event to DeepEval's platform.T
is_successN_sync_event_handlerr   r   response_obj
start_timeend_timer   r   r   log_success_event"      

z DeepEvalLogger.log_success_eventc                 C   r   z,Logs a failure event to DeepEval's platform.Fr    Nr"   r$   r   r   r   log_failure_event(   r)   z DeepEvalLogger.log_failure_eventc                        | j ||||ddI dH  dS r*   _async_event_handlerr$   r   r   r   async_log_failure_event.      
z&DeepEvalLogger.async_log_failure_eventc                    r,   r   r-   r$   r   r   r   async_log_success_event4   r0   z&DeepEvalLogger.async_log_success_eventc                 C   s   t |}t |}|di }| j|||||d}	| j|	|||| jd}
i }z
|
jddd}W |S  ty@   |
jddd}Y |S w )Nstandard_logging_object)r2   r&   r'   r!   )r2   r&   r'   r   T)Zby_aliasZexclude_none)r   get_create_base_api_span_create_trace_apir   Z
model_dumpAttributeErrordict)r   r   r%   r&   r'   r!   Z_start_timeZ	_end_timeZ_standard_logging_objectbase_api_spanZ	trace_apibodyr   r   r   _prepare_trace_api:   s2   z!DeepEvalLogger._prepare_trace_apic           	   
   C   sZ   |  |||||}z| jjtjtj|d}W n ty$ } z|d }~ww t	d| d S )NmethodZendpointr9   z7DeepEvalLogger: sync_log_failure_event: Api response %s)
r:   r   send_requestr   POSTr   TRACING_ENDPOINT	Exceptionr   debug)	r   r   r%   r&   r'   r!   r9   responseer   r   r   r#   X   s    

z"DeepEvalLogger._sync_event_handlerc                    s@   |  |||||}| jjtjtj|dI d H }td| d S )Nr;   z4DeepEvalLogger: async_event_handler: Api response %s)	r:   r   Za_send_requestr   r>   r   r?   r   rA   )r   r   r%   r&   r'   r!   r9   rB   r   r   r   r.   j   s   
z#DeepEvalLogger._async_event_handlerc                 C   s   | di  di }|r"| di  di gd  di  dd}nt| dd	}t| d
t |r6dnd|r<tjntjtj	| dt t|t|| dd|| dd |r`| dd nd |rk| dd dS d dS )NrB   usagechoicesr   messagecontentZ	NO_OUTPUTZerror_string idZlitellm_success_callbackZlitellm_failure_callbacktrace_idinputZNO_INPUTmodelZprompt_tokensZcompletion_tokens)r   namestatustypeZ	traceUuid	startTimeendTimerK   outputrL   ZinputTokenCountZoutputTokenCount)
r3   strr   r   uuid4r
   SUCCESSZERROREDr   ZLLM)r   r   r2   r&   r'   r!   rD   rR   r   r   r   r4   z   s2   



z$DeepEvalLogger._create_base_api_spanc                 C   s0   t |dt g g |gg g t|t||d	S )NrJ   )	r   Z	baseSpansZ
agentSpansZllmSpansZretrieverSpansZ	toolSpansrP   rQ   environment)r	   r3   r   rT   rS   )r   r8   r2   r&   r'   r   r   r   r   r5      s   z DeepEvalLogger._create_trace_api)__name__
__module____qualname____doc__r   r(   r+   r/   r1   r:   r#   r.   r4   r5   __classcell__r   r   r   r   r      s    #r   )r   Zlitellm._uuidr   Z"litellm.integrations.custom_loggerr   Z!litellm.integrations.deepeval.apir   r   r   Z#litellm.integrations.deepeval.typesr   r   r	   r
   Z#litellm.integrations.deepeval.utilsr   r   Zlitellm._loggingr   r   r   r   r   r   <module>   s    