o
    hr'                     @  s   d dl mZ d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZ 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 ddlmZmZmZ G dd deZG dd deZG dd deZdS )    )annotationsN)ABCabstractmethod)datetimetimezone)Any   )logger   )TracingProcessor)Scope)NoOpSpanSpanSpanImpl	TSpanData)	NoOpTraceTrace	TraceImplc                   @  sf   e Zd ZdZdd ZdddZd d
dZd!ddZd!ddZd"ddZ	d"ddZ
d#ddZdd ZdS )$ SynchronousMultiTracingProcessorzV
    Forwards all calls to a list of TracingProcessors, in order of registration.
    c                 C  s   d| _ t | _d S )N )_processors	threadingLock_lockselfr   r   X/var/www/html/openai_agents/venv/lib/python3.10/site-packages/agents/tracing/provider.py__init__   s   z)SynchronousMultiTracingProcessor.__init__tracing_processorr   c                 C  s<   | j  |  j|f7  _W d   dS 1 sw   Y  dS zj
        Add a processor to the list of processors. Each processor will receive all traces/spans.
        N)r   r   )r   r   r   r   r   add_tracing_processor   s   "z6SynchronousMultiTracingProcessor.add_tracing_processor
processorslist[TracingProcessor]c                 C  s6   | j  t|| _W d   dS 1 sw   Y  dS z_
        Set the list of processors. This will replace the current list of processors.
        N)r   tupler   r   r!   r   r   r   set_processors"   s   "z/SynchronousMultiTracingProcessor.set_processorstracer   returnNonec                 C  X   | j D ]&}z|| W q ty) } ztd| d|  W Y d}~qd}~ww dS )z1
        Called when a trace is started.
        Error in trace processor z during on_trace_start: N)r   on_trace_start	Exceptionr	   errorr   r'   	processorer   r   r   r,   )      
"z/SynchronousMultiTracingProcessor.on_trace_startc                 C  r*   )z2
        Called when a trace is finished.
        r+   z during on_trace_end: N)r   on_trace_endr-   r	   r.   r/   r   r   r   r3   3   r2   z-SynchronousMultiTracingProcessor.on_trace_endspan	Span[Any]c                 C  r*   )z0
        Called when a span is started.
        r+   z during on_span_start: N)r   on_span_startr-   r	   r.   r   r4   r0   r1   r   r   r   r6   =   r2   z.SynchronousMultiTracingProcessor.on_span_startc                 C  r*   )z1
        Called when a span is finished.
        r+   z during on_span_end: N)r   on_span_endr-   r	   r.   r7   r   r   r   r8   G   r2   z,SynchronousMultiTracingProcessor.on_span_endc                 C  sf   | j D ]-}td|  z|  W q ty0 } ztd| d|  W Y d}~qd}~ww dS )z4
        Called when the application stops.
        zShutting down trace processor z$Error shutting down trace processor : N)r   r	   debugshutdownr-   r.   r   r0   r1   r   r   r   r;   Q   s   
"z)SynchronousMultiTracingProcessor.shutdownc                 C  sV   | j D ]%}z|  W q ty( } ztd| d|  W Y d}~qd}~ww dS )z>
        Force the processors to flush their buffers.
        zError flushing trace processor r9   N)r   force_flushr-   r	   r.   r<   r   r   r   r=   \   s   
"z,SynchronousMultiTracingProcessor.force_flushN)r   r   r!   r"   )r'   r   r(   r)   )r4   r5   r(   r)   r(   r)   )__name__
__module____qualname____doc__r   r    r&   r,   r3   r6   r8   r;   r=   r   r   r   r   r      s    










r   c                   @  s   e Zd ZdZed4ddZed5d
dZed6ddZed7ddZed8ddZ	ed9ddZ
ed9ddZed9ddZed9ddZe				 d:d;d(d)Ze			 d<d=d0d1Zed>d2d3ZdS )?TraceProviderz(Interface for creating traces and spans.r0   r   r(   r)   c                 C     dS )z7Add a processor that will receive all traces and spans.Nr   r   r0   r   r   r   register_processorj       z TraceProvider.register_processorr!   r"   c                 C  rE   )z3Replace the list of processors with ``processors``.Nr   r%   r   r   r   r&   n   rH   zTraceProvider.set_processorsTrace | Nonec                 C  rE   )z*Return the currently active trace, if any.Nr   r   r   r   r   get_current_tracer   rH   zTraceProvider.get_current_traceSpan[Any] | Nonec                 C  rE   )z)Return the currently active span, if any.Nr   r   r   r   r   get_current_spanv   rH   zTraceProvider.get_current_spandisabledboolc                 C  rE   )z#Enable or disable tracing globally.Nr   r   rM   r   r   r   set_disabledz   rH   zTraceProvider.set_disabledstrc                 C  rE   )+Return the current time in ISO 8601 format.Nr   r   r   r   r   time_iso~   rH   zTraceProvider.time_isoc                 C  rE   )z Generate a new trace identifier.Nr   r   r   r   r   gen_trace_id   rH   zTraceProvider.gen_trace_idc                 C  rE   )zGenerate a new span identifier.Nr   r   r   r   r   gen_span_id   rH   zTraceProvider.gen_span_idc                 C  rE   )z Generate a new group identifier.Nr   r   r   r   r   gen_group_id   rH   zTraceProvider.gen_group_idNFnametrace_id
str | Nonegroup_idmetadatadict[str, Any] | Noner   c                 C  rE   )zCreate a new trace.Nr   r   rW   rX   rZ   r[   rM   r   r   r   create_trace   rH   zTraceProvider.create_trace	span_datar   span_idparentTrace | Span[Any] | NoneSpan[TSpanData]c                 C  rE   )zCreate a new span.Nr   )r   r_   r`   ra   rM   r   r   r   create_span   rH   zTraceProvider.create_spanc                 C  rE   )z,Clean up any resources used by the provider.Nr   r   r   r   r   r;      rH   zTraceProvider.shutdown)r0   r   r(   r)   )r!   r"   r(   r)   r(   rI   r(   rK   rM   rN   r(   r)   r(   rQ   NNNFrW   rQ   rX   rY   rZ   rY   r[   r\   rM   rN   r(   r   NNF
r_   r   r`   rY   ra   rb   rM   rN   r(   rc   r?   )r@   rA   rB   rC   r   rG   r&   rJ   rL   rP   rS   rT   rU   rV   r^   rd   r;   r   r   r   r   rD   g   sB    
	rD   c                   @  s   e Zd Zd5ddZd6ddZd7ddZd8ddZd9ddZd:ddZd;ddZ	d;ddZ
d;ddZd;ddZ	 	 	 	!d<d=d)d*Z	 	 	!d>d?d1d2Zd5d3d4Zd S )@DefaultTraceProviderr(   r)   c                 C  s$   t  | _tjdd dv | _d S )NOPENAI_AGENTS_DISABLE_TRACINGfalse)true1)r   _multi_processorosenvirongetlower	_disabledr   r   r   r   r      s   zDefaultTraceProvider.__init__r0   r   c                 C     | j | dS r   )rr   r    rF   r   r   r   rG         z'DefaultTraceProvider.register_processorr!   r"   c                 C  rx   r#   )rr   r&   r%   r   r   r   r&      ry   z#DefaultTraceProvider.set_processorsrI   c                 C     t  S )z=
        Returns the currently active trace, if any.
        )r   rJ   r   r   r   r   rJ         z&DefaultTraceProvider.get_current_tracerK   c                 C  rz   )z<
        Returns the currently active span, if any.
        )r   rL   r   r   r   r   rL      r{   z%DefaultTraceProvider.get_current_spanrM   rN   c                 C  s
   || _ dS )z2
        Set whether tracing is disabled.
        N)rw   rO   r   r   r   rP      s   
z!DefaultTraceProvider.set_disabledrQ   c                 C  s   t tj S )rR   )r   nowr   utc	isoformatr   r   r   r   rS         zDefaultTraceProvider.time_isoc                 C  s   dt  j S )zGenerate a new trace ID.trace_uuiduuid4hexr   r   r   r   rT      r   z!DefaultTraceProvider.gen_trace_idc                 C     dt  jdd  S )zGenerate a new span ID.span_N   r   r   r   r   r   rU         z DefaultTraceProvider.gen_span_idc                 C  r   )zGenerate a new group ID.group_Nr   r   r   r   r   r   rV      r   z!DefaultTraceProvider.gen_group_idNFrW   rX   rY   rZ   r[   r\   r   c                 C  sV   | j s|rtd|  t S |p|  }td| d|  t||||| jdS )z%
        Create a new trace.
        z(Tracing is disabled. Not creating trace zCreating trace 	 with id )rW   rX   rZ   r[   r0   )rw   r	   r:   r   rT   r   rr   r]   r   r   r   r^      s   
z!DefaultTraceProvider.create_tracer_   r   r`   ra   rb   rc   c           	      C  s@  | j s|rtd|  t|S |sMt }t }|du r(td t|S t|t	s2t|trBtd| d| d t|S |rG|j
nd}|j}n:t|trjt|t	rdtd| d t|S |j}d}nt|trt|trtd| d t|S |j
}|j}td| d|  t||p|  || j|d	S )
z$
        Create a new span.
        z'Tracing is disabled. Not creating span NzTNo active trace. Make sure to start a trace with `trace()` first Returning NoOpSpan.zParent z or z is no-op, returning NoOpSpanzCreating span r   )rX   r`   	parent_idr0   r_   )rw   r	   r:   r   r   rL   rJ   r.   
isinstancer   r`   rX   r   r   r   rU   rr   )	r   r_   r`   ra   rM   current_spancurrent_tracer   rX   r   r   r   rd      sL   






z DefaultTraceProvider.create_spanc              
   C  s\   | j rd S ztd | j  W d S  ty- } ztd|  W Y d }~d S d }~ww )NzShutting down trace providerz$Error shutting down trace provider: )rw   r	   r:   rr   r;   r-   r.   )r   r1   r   r   r   r;   0  s   
zDefaultTraceProvider.shutdownr?   )r0   r   r>   re   rf   rg   rh   ri   rj   rk   rl   )r@   rA   rB   r   rG   r&   rJ   rL   rP   rS   rT   rU   rV   r^   rd   r;   r   r   r   r   rm      s*    









7rm   )
__future__r   rs   r   r   abcr   r   r   r   typingr   r	   processor_interfacer   scoper   spansr   r   r   r   tracesr   r   r   r   rD   rm   r   r   r   r   <module>   s    VA