o
    /if.                     @   sj  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mZ d dlmZ d dlZd dlmZ d dlZd dlmZ G d	d
 d
eZG dd deZeG dd dZeG dd d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
eeef ZG dd dZe Z		d%de dee  dee  fddZ!d e"fd!d"Z#d#d$ Z$dS )&    )	dataclass)Enum)wraps)AnyCallableListUnionOptionalDict)perf_counterN)	signature)dataclass_to_dictc                   @   s<   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ZdS )	TraceTypeLLM	Retriever	EmbeddingToolAgentz
Agent StepChainChunkingzNode Parsing
SynthesizeQuery	RerankingN)__name__
__module____qualname__r   	RETRIEVER	EMBEDDINGTOOLAGENT
AGENT_STEPCHAINCHUNKINGNODE_PARSING
SYNTHESIZEQUERY	RERANKING r'   r'   Q/var/www/html/corbot_env/lib/python3.10/site-packages/deepeval/tracing/tracing.pyr      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(   r)      s    r)   c                   @   s   e Zd ZU ee ed< dZeeeef  ed< dZ	eeee
f  ed< dZeeeeef   ed< dZee
 ed< dZee
 ed< dS )LlmMetadatamodelN
tokenCounthyperparametersoutputMessagesllmPromptTemplatellmPromptTemplateVariables)r   r   r   r	   str__annotations__r0   r
   intr1   r   r2   r   r3   r4   r'   r'   r'   r(   r.       s   
 r.   c                   @   s   e Zd ZU ee ed< dS )EmbeddingMetadatar/   N)r   r   r   r	   r5   r6   r'   r'   r'   r(   r8   *   s   
 r8   c                   @   sR   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
d ed< d	S )
	BaseTracetypeexecutionTimenameinputoutputstatus	TraceDatatracesN)r   r   r   r   r   r5   r6   floatdictr)   r   r'   r'   r'   r(   r9   /   s   
 r9   c                   @   s   e Zd ZU eed< eed< dS )LlmTracer=   llmMetadataN)r   r   r   r5   r6   r.   r'   r'   r'   r(   rD   :   s   
 rD   c                   @      e Zd ZU eed< dS )EmbeddingTraceembeddingMetadataN)r   r   r   r8   r6   r'   r'   r'   r(   rG   @      
 rG   c                   @   rF   )GenericTracer:   N)r   r   r   r5   r6   r'   r'   r'   r(   rJ   E   rI   rJ   c                   @   sD   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S )TraceManagerc                 C   s   t  | _d S N)	threadinglocal_localselfr'   r'   r(   __init__N   s   zTraceManager.__init__c                 C   s$   t | jdsg | j_d | j_| jjS )Ntrace_stack)hasattrrO   rS   dict_trace_stackrP   r'   r'   r(   get_trace_stackQ   s   zTraceManager.get_trace_stackc                 C   s   |     d S rL   )rV   clearrP   r'   r'   r(   clear_trace_stackW   s   zTraceManager.clear_trace_stackc                 C   s   |   r|     d S d S rL   )rV   poprP   r'   r'   r(   pop_trace_stackZ   s   zTraceManager.pop_trace_stackc                 C   s   |   | d S rL   )rV   append)rQ   trace_instancer'   r'   r(   append_to_trace_stack^   s   z"TraceManager.append_to_trace_stackc                 C   s   || j _d S rL   )rO   rU   rQ   rU   r'   r'   r(   set_dict_trace_stacka   s   z!TraceManager.set_dict_trace_stackc                 C   s   t | jdd }d | j_|S )NrU   )getattrrO   rU   r^   r'   r'   r(   get_and_reset_dict_trace_stackd   s   z+TraceManager.get_and_reset_dict_trace_stackN)
r   r   r   rR   rV   rX   rZ   r]   r_   ra   r'   r'   r'   r(   rK   M   s    rK   r:   r<   r/   c                    s   t tttf sJ dtjtjfv r  d u r t d d u s-t  ts-J dtjtjfvrA d urAtd ddtf fdd}|S )	Nz#'type' must be a 'TraceType' or strz trace type requires a model.z'model' must be a str or Nonez-Parameter 'model' should not be provided for z trace types.funcc                    sn   t jkr(t }|j }tdd |D rdd |D }t|dkr(tdt  fdd}|S )	Nc                 s   s    | ]}|j d v V  qdS )rQ   clsNr<   .0pr'   r'   r(   	<genexpr>   s    z1trace.<locals>.decorator_trace.<locals>.<genexpr>c                 S   s   g | ]	}|j d vr|qS )rc   re   rf   r'   r'   r(   
<listcomp>   s    z2trace.<locals>.decorator_trace.<locals>.<listcomp>   zTFunction of type `TraceType.LLM` must have exactly one parameter of type 'list[str]'c                     sj  t  }tjkr$d|jv sd|jv r| d n| d }t|ts$tdd}|j}| r;tt|}|dks9|dkr;d}|rD| dd  }n| }||d}d }	d urSn j	}
tjkrlt
d|
|d tjg td	d
}	n"tjkrtd|
|d tjg td	d}	ntd|
|d tjg d}	t|	 t }zgz | i |}||	_W n" ty } ztj|	_td |j	t|t d|	_|d }~ww W t | |	_t }t|dkr|d }|j |	 t|dkrt!|d }t"| t#  |S t$  |S t | |	_t }t|dkr|d }|j |	 t|dkr0t!|d }t"| t#  w t$  w )NrQ   rd   rk   r   z2Argument type for `TraceType.LLM` must be a stringFT)argskwargs)r/   )r:   r;   r<   r=   r>   r?   rA   rE   )r:   r;   r<   r=   r>   r?   rA   rH   )r:   r;   r<   r=   r>   r?   rA   r:   )r:   message	traceback)%r   r   r   
parameters
isinstancer5   
ValueErrornextiterr   rD   r)   r,   r.   r   rG   r8   rJ   trace_managerr]   r   r>   	Exceptionr-   r?   __builtins__ro   
format_excr;   rV   lenrA   r[   r   r_   rX   rZ   )rl   rm   sig	input_strbound_methodparamsfirst_param
trace_argstrace_instance_inputr\   effective_name
start_timeresultecurrent_trace_stackparent_tracedict_representation)rb   r/   r<   r:   r'   r(   wrapper   s   












z/trace.<locals>.decorator_trace.<locals>.wrapper)	r   r   r   rq   valuesanyrz   rs   r   )rb   r{   r~   r   r/   r<   r:   )rb   r(   decorator_trace   s   

cztrace.<locals>.decorator_trace)rr   r   r   r5   r   r   rs   r   )r:   r<   r/   r   r'   r   r(   tracem   s$   

ur   tokensc                 C   s   d S rL   r'   )r   r'   r'   r(   set_token_usage   s   r   c                   C   s   t  S rL   )rv   ra   r'   r'   r'   r(   rV      s   rV   )NN)%dataclassesr   enumr   	functoolsr   typingr   r   r   r   r	   r
   timer   ro   inspectr   rM   deepeval.utilsr   r   r)   r.   r8   r9   rD   rG   rJ   r@   rK   rv   r5   r   r7   r   rV   r'   r'   r'   r(   <module>   sL     	

 