o
    /if>                     @   s  U d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZmZ d dlZd dlmZ d d	lmZ G d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZeG dd dZeG dd deZeG dd deZ eG d d! d!eZ!eG d"d# d#eZ"eG d$d% d%eZ#e	eeeef Z$e	ee e!e"e#f Z%ee% Z&ed&g d'Z'ee& e(d(< ed)dd'Z)G d*d+ d+Z*e* Z+G d,d- d-Z,dS ).    )
ContextVar)	dataclass)Enum)AnyListUnionOptionalDict)perf_counter)	BaseModelFieldN)dataclass_to_dict)trackc                   @   s   e Zd ZdZdZdZdZdS )TraceProviderLLAMA_INDEXDEFAULTCUSTOMHYBRIDN)__name__
__module____qualname__r   r   r   r    r   r   P/var/www/html/corbot_env/lib/python3.10/site-packages/deepeval/tracing/tracer.pyr      s
    r   c                   @   s8   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdS )	TraceTypeAgentChainChunking	EmbeddingLLMNode ParsingQuery	Reranking	Retriever
SynthesizeToolN)r   r   r   AGENTCHAINCHUNKING	EMBEDDINGr   NODE_PARSINGQUERY	RERANKING	RETRIEVER
SYNTHESIZETOOLr   r   r   r   r      s    r   c                   @   s4   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdS )LlamaIndexTraceTypez
Agent Stepr   r   r   r   r   r    r!   r"   r#   N)r   r   r   
AGENT_STEPr&   r'   r(   r   r)   r*   r+   r,   r-   r   r   r   r   r/   &   s    r/   c                   @   s   e Zd ZdZdZdS )TraceStatusSuccessErrorN)r   r   r   SUCCESSERRORr   r   r   r   r1   3   s    r1   c                   @   s   e Zd ZU dZee ed< edddZee	ee
f  ed< edddZeee	eef   ed< edddZee ed	< edd
dZee ed< dS )LlmMetadataNmodel
tokenCountaliastoken_countoutputMessagesoutput_messagespromptTemplateprompt_templatepromptTemplateVariablesprompt_template_variables)r   r   r   r7   r   str__annotations__r   r;   r	   intr=   r   r?   r   rA   r   r   r   r   r6   8   s   
  r6   c                   @   6   e Zd ZU dZee ed< edddZee	 ed< dS )EmbeddingMetadataNr7   vectorLengthr9   vector_length)
r   r   r   r7   r   rB   rC   r   rH   rD   r   r   r   r   rF   D      
 rF   c                   @   s>   e Zd ZU edddZee ed< edddZee ed< dS )RetrieverMetadataNtopKr9   top_kaverageChunkSizeaverage_chunk_size)	r   r   r   r   rL   r   rD   rC   rN   r   r   r   r   rJ   I   s   
 rJ   c                   @   rE   )RerankingMetadataNr7   rK   r9   rL   )
r   r   r   r7   r   rB   rC   r   rL   rD   r   r   r   r   rO   N   rI   rO   c                   @   sZ   e Zd ZU eeef ed< eed< eed< eed< e	ed< e
ed< eed< ed ed	< d
S )	BaseTracetypeexecutionTimenameinputoutputstatustraceProvider	TraceDatatracesN)r   r   r   r   r   rB   rC   floatdictr   r1   r   r   r   r   r   r   rP   S   s   
 rP   c                   @      e Zd ZU eed< dS )LlmTracellmMetadataN)r   r   r   r6   rC   r   r   r   r   r]   _      
 r]   c                   @   r\   )EmbeddingTraceembeddingMetadataN)r   r   r   rF   rC   r   r   r   r   r`   e   r_   r`   c                   @   r\   )RetrieverTraceretrieverMetadataN)r   r   r   rJ   rC   r   r   r   r   rb   k   r_   rb   c                   @   r\   )RerankingTracererankingMetadataN)r   r   r   rO   rC   r   r   r   r   rd   q   r_   rd   c                   @   r\   )GenericTracerQ   N)r   r   r   rB   rC   r   r   r   r   rf   {   r_   rf   trace_stack)defaulttrace_stack_vardict_trace_stackc                   @   sL   e Z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S )TraceManagerc                 C   s   t  S N)ri   getselfr   r   r   get_trace_stack   s   zTraceManager.get_trace_stackc                 C   s   t   S rl   )ri   rm   copyrn   r   r   r   get_trace_stack_copy   s   z!TraceManager.get_trace_stack_copyc                 C      t | d S rl   )ri   set)ro   	new_stackr   r   r   set_trace_stack      zTraceManager.set_trace_stackc                 C   s   |  g  d S rl   )rv   rn   r   r   r   clear_trace_stack   rw   zTraceManager.clear_trace_stackc                 C   s&   |   }|r| |d d  d S d S )N)rr   rv   )ro   current_stackr   r   r   pop_trace_stack   s   zTraceManager.pop_trace_stackc                 C   s    |   }|| | | d S rl   )rr   appendrv   )ro   trace_instancerz   r   r   r   append_to_trace_stack   s   
z"TraceManager.append_to_trace_stackc                 C   rs   rl   )dict_trace_stack_varrt   ro   rj   r   r   r   set_dict_trace_stack   rw   z!TraceManager.set_dict_trace_stackc                 C   s   t  }t d  |S rl   )r   rm   rt   r   r   r   r   get_and_reset_dict_trace_stack   s   
z+TraceManager.get_and_reset_dict_trace_stackN)r   r   r   rp   rr   rv   rx   r{   r~   r   r   r   r   r   r   rk      s    rk   c                    @   s  e Zd Zdeeef fddZdd Zdd Zdeeef de	fd	d
Z
dd Zd%dedee fddZdddddddddddi dddfdededededeee  dee dee dee dee dee deeeef  deeeef  d ee d!ee d"ee fd#d$ZdS )&Tracer
trace_typec                 C   sX   || _ t| j trtj| _ntj| _i | _d | _d | _	d | _
i | _d | _d | _d| _d S )NF)r   
isinstancer   r   r   trace_providerr   input_params
start_timeexecution_timemetadatastatus_resultsrU   track_paramsis_tracking)ro   r   r   r   r   __init__   s   

zTracer.__init__c                    sv   t  | _t j}t|\}}}  fdd|D | jd< |jj}|| jd< | j	| j
| jfi | j}t| | S )Nc                    s   i | ]}|d vr| | qS ))ro   clsr   ).0arglocals_r   r   
<dictcomp>   s    z$Tracer.__enter__.<locals>.<dictcomp>rT   rS   )r
   r   inspectcurrentframef_backgetargvaluesr   f_codeco_namecreate_trace_instancer   r   trace_managerr~   )ro   caller_frameargs_	func_namer}   r   r   r   	__enter__   s   



zTracer.__enter__c                 C   s  | j d u r,| jtjkr,| jtjks#| jtjks#| jtjks#| jtj	kr,t
d| j dt | j | _|d urBd|jt|d| _nd| jd< |   t }|d }t|dkrh|d	 }|j| t| t|dkrt|d
 }t| t  | jrt| jd p| j| jd | jd | jd | jd | jd p| j| jd | jd | jd | jd | jd | jd | jd | jd |d d S d S t  d S )Nz4`set_parameters` was not called before the end of a z trace type.r3   )rV   exception_typemessager2   rV   ry      r   
event_namer7   rT   responseretrieval_contextcompletion_timetoken_usage
token_costdistinct_idconversation_idadditional_datahyperparametersfail_silently	run_async)r   r7   rT   r   r   r   r   r   r   r   r   r   r   r   rg   )r   r   r   r   r   r   r   r(   r,   r+   
ValueErrorr
   r   r   r   rB   r   update_trace_instancer   rr   lenrY   r|   rv   r   r   rx   r   r   r   r{   )ro   exc_typeexc_valexc_tbcurrent_trace_stackr}   parent_tracedict_representationr   r   r   __exit__   sb   







zTracer.__exit__trace_provierc                 K   sd  |t jkr|tjkr$t||d|dd|dd d tjg |dd d	S |tjkrCt	||d|dd|dd d tjg |dd d	S |tj
krbt||d|dd|dd d tjg |d	d d
	S |tjkrt||d|dd|dd d tjg |dd d	S t||d|dd|dd d tjg dS |t jkrt||d|dd|dd d tjg dS d S )Nr   rS    rT   r^   )	rQ   rW   rR   rS   rT   rU   rV   rY   r^   ra   )	rQ   rW   rR   rS   rT   rU   rV   rY   ra   rc   )	rQ   rW   rR   rS   rT   rU   rV   rY   rc   re   )	rQ   rW   rR   rS   rT   rU   rV   rY   re   )rQ   rW   rR   rS   rT   rU   rV   rY   )r   r   r   r   r]   rm   r1   r4   r(   r`   r,   rb   r+   rd   rf   r   )ro   r   r   paramsr   r   r   r      s   






















zTracer.create_trace_instancec                 C   s   t  }|d }| j|_| jd |_| j|_| jtj	kro| j
tjkr1t| jts,J d| j|_n>| j
tjkrFt| jtsAJ d| j|_n)| j
tjkr[t| jtsVJ d| j|_n| j
tjkrot| jtskJ d| j|_t | d S )Nry   rV   z;Metadata must be of type LlmMetadata for the LLM trace typezGMetadata must be of type EmbeddingMetadata for the EMBEDDING trace typezGMetadata must be of type RetrieverMetadata for the RETRIEVER trace typezGMetadata must be of type RerankingMetadata for the RERANKING trace type)r   rr   r   rR   r   rV   rU   r   r   r   r   r   r   r   r   r6   r^   r(   rF   ra   r,   rJ   rc   r+   rO   re   rv   )ro   rz   current_tracer   r   r   r   o  sF   


zTracer.update_trace_instanceNrU   r   c                 C   s   || _ |s?| jtjkr;| jtjkrt | _d S | jtj	kr#t
 | _d S | jtjkr/t | _d S | jtjkr=t | _d S d S d S || _d S rl   )rU   r   r   r   r   r   r   r6   r   r(   rF   r,   rJ   r+   rO   )ro   rU   r   r   r   r   set_parameters  s   
zTracer.set_parametersFTr   r7   rT   r   r   r   r   r   r   r   r   r   r   raise_exceptionr   c                 C   s0   d| _ |||||||||	|
|||||d| _d S )NT)r   r7   rT   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )ro   r   r7   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s"   zTracer.trackrl   )r   r   r   r   r   rB   r   r   r   r   r   r   r   r   Metadatar   r   rZ   r	   boolr   r   r   r   r   r      sr    @

O'
	
r   )-contextvarsr   dataclassesr   enumr   typingr   r   r   r   r	   timer
   pydanticr   r   r   deepeval.utilsr   deepeval.eventr   r   r   r/   r1   r6   rF   rJ   rO   rP   r]   r`   rb   rd   rf   r   rX   
TraceStackri   rC   r   rk   r   r   r   r   r   r   <module>   sR    	
 