
    /Uir'                        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e      Z G d de      Z G d de      Zy)    )annotationsN)ABCabstractmethod)datetimetimezone)Any   )logger   )TracingProcessor)Scope)NoOpSpanSpanSpanImpl	TSpanData)	NoOpTraceTrace	TraceImplc                  T    e Zd Zd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
 Zy) SynchronousMultiTracingProcessorzV
    Forwards all calls to a list of TracingProcessors, in order of registration.
    c                D    d| _         t        j                         | _        y )N )_processors	threadingLock_lockselfs    s/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/venv/lib/python3.12/site-packages/agents/tracing/provider.py__init__z)SynchronousMultiTracingProcessor.__init__   s    9;^^%
    c                r    | j                   5  | xj                  |fz  c_        ddd       y# 1 sw Y   yxY wzj
        Add a processor to the list of processors. Each processor will receive all traces/spans.
        N)r   r   )r   tracing_processors     r   add_tracing_processorz6SynchronousMultiTracingProcessor.add_tracing_processor   s5     ZZ 	5!2 44	5 	5 	5s   -6c                f    | j                   5  t        |      | _        ddd       y# 1 sw Y   yxY wz_
        Set the list of processors. This will replace the current list of processors.
        N)r   tupler   r   
processorss     r   set_processorsz/SynchronousMultiTracingProcessor.set_processors"   s-     ZZ 	1$Z0D	1 	1 	1s   '0c                    | j                   D ]  }	 |j                  |        y# t        $ r%}t        j                  d| d|        Y d}~Ad}~ww xY w)z1
        Called when a trace is started.
        Error in trace processor z during on_trace_start: N)r   on_trace_start	Exceptionr
   errorr   trace	processores       r   r.   z/SynchronousMultiTracingProcessor.on_trace_start)   sc     )) 	aIa((/	a  a8C[\][^_``a   %	AAAc                    | j                   D ]  }	 |j                  |        y# t        $ r%}t        j                  d| d|        Y d}~Ad}~ww xY w)z2
        Called when a trace is finished.
        r-   z during on_trace_end: N)r   on_trace_endr/   r
   r0   r1   s       r   r7   z-SynchronousMultiTracingProcessor.on_trace_end3   sc     )) 	_I_&&u-	_  _8CYZ[Y\]^^_r5   c                    | j                   D ]  }	 |j                  |        y# t        $ r%}t        j                  d| d|        Y d}~Ad}~ww xY w)z0
        Called when a span is started.
        r-   z during on_span_start: N)r   on_span_startr/   r
   r0   r   spanr3   r4   s       r   r9   z.SynchronousMultiTracingProcessor.on_span_start=   sc     )) 	`I`''-	`  `8CZ[\Z]^__`r5   c                    | j                   D ]  }	 |j                  |        y# t        $ r%}t        j                  d| d|        Y d}~Ad}~ww xY w)z1
        Called when a span is finished.
        r-   z during on_span_end: N)r   on_span_endr/   r
   r0   r:   s       r   r=   z,SynchronousMultiTracingProcessor.on_span_endG   sc     )) 	^I^%%d+	^  ^8CXYZX[\]]^r5   c                    | j                   D ]+  }t        j                  d|        	 |j                          - y# t        $ r%}t        j
                  d| d|        Y d}~Xd}~ww xY w)z4
        Called when the application stops.
        zShutting down trace processor z$Error shutting down trace processor : N)r   r
   debugshutdownr/   r0   r   r3   r4   s      r   rA   z)SynchronousMultiTracingProcessor.shutdownQ   st     )) 	VILL9)EFV""$	V  VCI;bQRPSTUUVs   <	A*A%%A*c                    | j                   D ]  }	 |j                           y# t        $ r%}t        j                  d| d|        Y d}~@d}~ww xY w)z>
        Force the processors to flush their buffers.
        zError flushing trace processor r?   N)r   force_flushr/   r
   r0   rB   s      r   rD   z,SynchronousMultiTracingProcessor.force_flush\   s^     )) 	QIQ%%'	Q  Q>ykA3OPPQs   $	AAAN)r$   r   r*   list[TracingProcessor])r2   r   returnNone)r;   z	Span[Any]rG   rH   rG   rH   )__name__
__module____qualname____doc__r    r%   r+   r.   r7   r9   r=   rA   rD   r   r!   r   r   r      s:    &
51a_`^	VQr!   r   c                  "   e Zd ZdZedd       Zedd       Zedd       Zedd       Zedd       Z	edd       Z
edd       Zedd	       Zedd
       Ze	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 	 d	 	 	 	 	 	 	 	 	 dd       Zedd       Zy)TraceProviderz(Interface for creating traces and spans.c                     y)z7Add a processor that will receive all traces and spans.Nr   r   r3   s     r   register_processorz TraceProvider.register_processorj       r!   c                     y)z3Replace the list of processors with ``processors``.Nr   r)   s     r   r+   zTraceProvider.set_processorsn   rS   r!   c                     y)z*Return the currently active trace, if any.Nr   r   s    r   get_current_tracezTraceProvider.get_current_tracer   rS   r!   c                     y)z)Return the currently active span, if any.Nr   r   s    r   get_current_spanzTraceProvider.get_current_spanv   rS   r!   c                     y)z#Enable or disable tracing globally.Nr   r   disableds     r   set_disabledzTraceProvider.set_disabledz   rS   r!   c                     y)+Return the current time in ISO 8601 format.Nr   r   s    r   time_isozTraceProvider.time_iso~   rS   r!   c                     y)z Generate a new trace identifier.Nr   r   s    r   gen_trace_idzTraceProvider.gen_trace_id   rS   r!   c                     y)zGenerate a new span identifier.Nr   r   s    r   gen_span_idzTraceProvider.gen_span_id   rS   r!   c                     y)z Generate a new group identifier.Nr   r   s    r   gen_group_idzTraceProvider.gen_group_id   rS   r!   Nc                     y)zCreate a new trace.Nr   r   nametrace_idgroup_idmetadatar[   s         r   create_tracezTraceProvider.create_trace   rS   r!   c                     y)zCreate a new span.Nr   )r   	span_dataspan_idparentr[   s        r   create_spanzTraceProvider.create_span   rS   r!   c                     y)z,Clean up any resources used by the provider.Nr   r   s    r   rA   zTraceProvider.shutdown   rS   r!   )r3   r   rG   rH   )r*   rF   rG   rH   rG   zTrace | NonerG   zSpan[Any] | Noner[   boolrG   rH   rG   strNNNFrh   rx   ri   
str | Nonerj   r{   rk   zdict[str, Any] | Noner[   rv   rG   r   NNF
rn   r   ro   r{   rp   zTrace | Span[Any] | Noner[   rv   rG   zSpan[TSpanData]rI   )rJ   rK   rL   rM   r   rR   r+   rV   rX   r\   r_   ra   rc   re   rl   rq   rA   r   r!   r   rO   rO   g   sz   2F F B B 9 9 8 8 2 2 : : / / . . / /   $#*."" " 	"
 (" " 
" "  #+/!! ! )	!
 ! 
! ! ; ;r!   rO   c                      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d	Zdd
Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZy)DefaultTraceProviderc                    t               | _        t        j                  j	                  dd      j                         dv | _        y )NOPENAI_AGENTS_DISABLE_TRACINGfalse)true1)r   _multi_processorosenvirongetlower	_disabledr   s    r   r    zDefaultTraceProvider.__init__   s8     @ B(GQWWY ^
 
r!   c                :    | j                   j                  |       yr#   )r   r%   rQ   s     r   rR   z'DefaultTraceProvider.register_processor   s     	33I>r!   c                :    | j                   j                  |       yr'   )r   r+   r)   s     r   r+   z#DefaultTraceProvider.set_processors   s     	,,Z8r!   c                *    t        j                         S )z=
        Returns the currently active trace, if any.
        )r   rV   r   s    r   rV   z&DefaultTraceProvider.get_current_trace   s     &&((r!   c                *    t        j                         S )z<
        Returns the currently active span, if any.
        )r   rX   r   s    r   rX   z%DefaultTraceProvider.get_current_span   s     %%''r!   c                    || _         y)z2
        Set whether tracing is disabled.
        N)r   rZ   s     r   r\   z!DefaultTraceProvider.set_disabled   s     "r!   c                d    t        j                  t        j                        j	                         S )r^   )r   nowr   utc	isoformatr   s    r   r_   zDefaultTraceProvider.time_iso   s    ||HLL)3355r!   c                D    dt        j                         j                   S )zGenerate a new trace ID.trace_uuiduuid4hexr   s    r   ra   z!DefaultTraceProvider.gen_trace_id   s    

(()**r!   c                J    dt        j                         j                  dd  S )zGenerate a new span ID.span_N   r   r   s    r   rc   z DefaultTraceProvider.gen_span_id   s#    tzz|'',-..r!   c                J    dt        j                         j                  dd  S )zGenerate a new group ID.group_Nr   r   r   s    r   re   z!DefaultTraceProvider.gen_group_id   s#    

(("-.//r!   Nc                    | j                   s|r"t        j                  d|        t               S |xs | j	                         }t        j                  d| d|        t        ||||| j                        S )z%
        Create a new trace.
        z(Tracing is disabled. Not creating trace zCreating trace 	 with id )rh   ri   rj   rk   r3   )r   r
   r@   r   ra   r   r   rg   s         r   rl   z!DefaultTraceProvider.create_trace   sw     >>XLLCD6JK;2t002tfIhZ@A++
 	
r!   c                   | j                   s|r#t        j                  d|        t        |      S |st	        j
                         }t	        j                         }| t        j                  d       t        |      S t        |t              st        |t              r't        j                  d| d| d       t        |      S |r|j                  nd}|j                  }nt        |t              rCt        |t              r$t        j                  d| d       t        |      S |j                  }d}n\t        |t              rLt        |t              r$t        j                  d| d       t        |      S |j                  }|j                  }t        j                  d| d|        t        |xs | j                         | j                   |	      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   )ri   ro   	parent_idr3   rn   )r   r
   r@   r   r   rX   rV   r0   
isinstancer   ro   ri   r   r   r   rc   r   )	r   rn   ro   rp   r[   current_spancurrent_tracer   ri   s	            r   rq   z DefaultTraceProvider.create_span   s    >>XLLB9+NOI&& 113L!335M$*  	**M95LRZ9[l^4>[\  	**0<,,$I$--H&&),wvh.KLM	**HI%&(+wvh.KLM	**IH~i[	'CD1t//1++
 	
r!   c                    | j                   ry 	 t        j                  d       | j                  j	                          y # t
        $ r"}t        j                  d|        Y d }~y d }~ww xY w)NzShutting down trace providerz$Error shutting down trace provider: )r   r
   r@   r   rA   r/   r0   )r   r4   s     r   rA   zDefaultTraceProvider.shutdown0  sZ    >>	ELL78!!**, 	ELL?sCDD	Es   /? 	A*A%%A*rI   )r3   r   rE   rs   rt   ru   rw   ry   rz   r|   r}   )rJ   rK   rL   r    rR   r+   rV   rX   r\   r_   ra   rc   re   rl   rq   rA   r   r!   r   r   r      s    
?9)("6+/0  $#*.

 
 	

 (
 
 

< #+/5
5
 5
 )	5

 5
 
5
nEr!   r   )
__future__r   r   r   r   abcr   r   r   r   typingr   r
   processor_interfacer   scoper   spansr   r   r   r   tracesr   r   r   r   rO   r   r   r!   r   <module>r      s^    " 	   # '   1  6 6 / /SQ'7 SQl>;C >;BPE= PEr!   