
    Jii:                        U d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZmZ d dlZd dlmZ d dlmZ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& dZ' ejP                  e)      Z* edi       Z+eee,ef      e-d<    ed      Z.edee,ef   ded   fd       Z/ G d de      Z0 G d de      Z1 G d d      Z2e1jg                          y)    N)contextmanager)Context
ContextVarTokencopy_context)partial)AnyCallableDict	GeneratorListOptionalProtocolTypeVar)
deprecated)	BaseModel
ConfigDictField   )	BaseEvent)BaseEventHandler)SpanDropEvent)active_span_id)BaseSpanHandlerNullSpanHandler__dispatcher_span_decorated__instrument_tags)defaultactive_instrument_tags_Rnew_tagsreturnNNNc              #      K   t         j                  |       }	 d  t         j                  |       y # t         j                  |       w xY wwN)r   setreset)r!   tokens     x/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/llama_index_instrumentation/dispatcher.pyr   r   "   s;     "&&x0E,$$U+$$U+s   A3 AA

Ac                        e Zd ZdededdfdZy)EventDispatchereventkwargsr"   Nc                      y r%    )selfr,   r-   s      r)   __call__zEventDispatcher.__call__-   s        )__name__
__module____qualname__r   r	   r1   r/   r2   r)   r+   r+   ,   s    DiD3D4Dr2   r+   c                   H    e Zd ZU dZ ed      Z eed      Zee	d<    eg d      Z
ee   e	d	<    e e       gd
      Zee   e	d<    eed      Zee	d<    edd      Zed   e	d<    edd      Zee	d<    edd      Zee	d<    eed      Zeeeef      e	d<   dg g ddddfded	ee   dee   deded   dedef fdZed7d       Zed7d       ZdeddfdZdeddfd Zd!e d"eddfd#Z!d!e d"eddfd$Z" e#d%d&'      de$fd(       Z%	 	 	 d8d)ed*e&jN                  d+ee   d,ee   d-eeeef      d"eddfd.Z(	 	 d9d)ed*e&jN                  d+ee   d/ee)   d"eddfd0Z*	 	 d9d)ed*e&jN                  d+ee   d1ee   d"eddfd2Z+d3e,d4e-f   de,d4e-f   fd5Z.edefd6       Z/ xZ0S ):
Dispatchera
  
    Dispatcher class.

    Responsible for dispatching BaseEvent (and its subclasses) as well as
    sending signals to enter/exit/drop a BaseSpan. It does so by sending
    event and span signals to its attached BaseEventHandler as well as
    BaseSpanHandler.

    Concurrency:
        - Dispatcher is async-task and thread safe in the sense that
        spans of async coros will maintain its hieararchy or trace-trees and
        spans which emanate from various threads will also maintain its
        hierarchy.
    T)arbitrary_types_allowedzName of dispatcher)default_factorydescriptionnamezList of attached handlers)r   r:   event_handlerszSpan handler.span_handlerszName of parent Dispatcher.parent_nameNzDispatcher manager.ManagermanagerrootzRoot of the Dispatcher tree.	root_namezGWhether to propagate the event to parent dispatchers and their handlers	propagatezJId of current enclosing span. Used for creating `dispatch_event` partials.current_span_ids c           	      2    t         |   |||||||       y )N)r;   r<   r=   r>   r@   rB   rC   )super__init__)	r0   r;   r<   r=   r>   r@   rB   rC   	__class__s	           r)   rH   zDispatcher.__init__X   s,     	)'# 	 	
r2   r"   c                 d    | j                   J | j                   j                  | j                     S r%   )r@   dispatchersr>   r0   s    r)   parentzDispatcher.parentl   s-    ||'''||''(8(899r2   c                 d    | j                   J | j                   j                  | j                     S r%   )r@   rK   rB   rL   s    r)   rA   zDispatcher.rootq   s+    ||'''||''77r2   handlerc                 0    | xj                   |gz  c_         yzAdd handler to set of handlers.N)r<   r0   rO   s     r)   add_event_handlerzDispatcher.add_event_handlerv   s    y(r2   c                 0    | xj                   |gz  c_         yrQ   )r=   rR   s     r)   add_span_handlerzDispatcher.add_span_handlerz   s    wi'r2   r,   r-   c                    | }|j                   j                  t        j                                |rD|j                  D ]  }	  |j
                  |fi |  |j                  sd}n|j                  }|rCyy# t        $ r Y Dw xY w)z*Dispatch event to all registered handlers.N)	tagsupdater   getr<   handleBaseExceptionrC   rM   )r0   r,   r-   chs        r)   r,   zDispatcher.event~   s    "& 	

04467%% AHHU-f-
 ;;HH  % s   A77	BBc           
        K   | }|j                   j                  t        j                                g }|re|j                  D ]8  }	 |j                  t        j                   |j                  |fi |             : |j                  sd}n|j                  }|re|rt        j                  |ddi d{    yy# t        $ r Y w xY w7 w)z9Asynchronously dispatch event to all registered handlers.Nreturn_exceptionsT)rW   rX   r   rY   r<   appendasynciocreate_taskahandler[   rC   rM   gather)r0   r,   r-   r\   tasksr]   s         r)   aeventzDispatcher.aevent   s     "&

04467$&%% LL!4!4YQYYu5O5O!PQ
 ;;HH  ..%@4@@@  %  As<   AC5B<;CC5C6C<	CCCCz0.10.41z`get_dispatch_event()` has been deprecated in favor of using `event()` directly. If running into this warning through an integration package, then please update your integration to the latest version.)versionreasonc                     | j                   S )aI  
        Keep for backwards compatibility.

        In llama-index-core v0.10.41, we removed this method and made changes to
        integrations or packs that relied on this method. Adding back this method
        in case any integrations or apps have not been upgraded. That is, they
        still rely on this method.
        )r,   rL   s    r)   get_dispatch_eventzDispatcher.get_dispatch_event   s    " zzr2   id_
bound_argsinstance	parent_idrW   c           
          | }|rI|j                   D ]  }	  |j                  d|||||d|  |j                  sd}n|j                  }|rHyy# t        $ r Y Iw xY w)z9Send notice to handlers that a span with id_ has started.rk   rl   rm   rn   rW   Nr/   )r=   
span_enterr[   rC   rM   )	r0   rk   rl   rm   rn   rW   r-   r\   r]   s	            r)   rq   zDispatcher.span_enter   s     #'__ 
 ALL #-!)"+! ! ;;HH!  % s   A	AAerrc           	          | }|rH|j                   D ]  }	  |j                  d||||d|  |j                  sd}n|j                  }|rGyy# t        $ r Y Hw xY w)z>Send notice to handlers that a span with id_ is being dropped.rk   rl   rm   rr   Nr/   )r=   	span_dropr[   rC   rM   )r0   rk   rl   rm   rr   r-   r\   r]   s           r)   ru   zDispatcher.span_drop   s}     #'__ 
	AKK #-!)	
 !
 ;;HH  %    A	AAresultc           	          | }|rH|j                   D ]  }	  |j                  d||||d|  |j                  sd}n|j                  }|rGyy# t        $ r Y Hw xY w)z8Send notice to handlers that a span with id_ is exiting.rk   rl   rm   rw   Nr/   )r=   	span_exitr[   rC   rM   )r0   rk   rl   rm   rw   r-   r\   r]   s           r)   rz   zDispatcher.span_exit   s}     #'__ 
	AKK #-!)%	
 !
 ;;HH  % rv   func.c                     	 t        |t              r|S t        |t        d       t        j
                  dt        dt        dt        dt        dt        f
 fd       }t        j
                  dt        dt        dt        dt        dt        f
 fd       }t        j                  |      r ||      S  ||      S # t        $ r Y w xY w)	NTr{   rm   argsr-   r"   c                     t        j                  |       j                  |i |}|>t        |      j                  }| j                  }| d| dt        j                          }n#| j                   dt        j                          }t        j                         }d }	t               }
t        j                  |      j                  t        j                  u rd nj                  }j!                  |||||       dt"        j$                  dt&        dt         j(                  dt*        dt,        d	d ffd
}	  | |i |}	t/        |	t"        j$                        rft#        j0                  |	      }|j3                  t5        |||||
             |t/        |	t"        j$                        st        j6                         S S j9                  ||||	       |	t/        |	t"        j$                        st        j6                         S S # t:        $ r@}j=                  t?        |t'        |                   jA                  ||||        d }~ww xY w# t/        |	t"        j$                        st        j6                         w w xY w)N.-rp   futurespan_idrl   rm   contextr"   c           	      V   	 | j                         rd n| j                         }j                  ||||       |	 |j                  t        j
                         S # t        $ r"}t        j                  d|        Y d }~S d }~ww xY w# t        $ r@}j                  t        |t        |                   j                  ||||        d }~ww xY w# 	 |j                  t        j
                         w # t        $ r"}t        j                  d|        Y d }~w d }~ww xY wxY w)Nry   z Failed to reset active_span_id: r   err_strrt   )	exceptionrw   rz   runr   r'   
ValueError_loggerdebugr[   r,   r   strru   )	r   r   rl   rm   r   rw   er0   r(   s	          r)   handle_future_resultz>Dispatcher.span.<locals>.wrapper.<locals>.handle_future_result,  s   N%+%5%5%7TV]]_FNN##-!)%	 #  "NN$8$8%@% N  (H&LMMN % JJ}Wc!fMNNN#
XST #  NN$8$8%@% N  (H&LMMNsd   8B  A	B&BB	C;CCC D( C:9D(:	D%D D( D%%D()r   rl   rm   r   ry   r   rt   )!inspect	signaturebindtyper3   uuiduuid4r5   r   rY   r   r   r&   	old_valuer   MISSINGrq   ra   Futurer   BoundArgumentsr	   r   
isinstanceensure_futureadd_done_callbackr   r'   rz   r[   r,   r   ru   )r{   rm   r}   r-   rl   actual_classmethod_namerk   rW   rw   r   rn   r   
new_futurer   r(   r0   s                  @r)   wrapperz Dispatcher.span.<locals>.wrapper  sZ   5**4055tFvFJ##H~66"mm%a}Adjjl^D**+1TZZ\N;)--/DF #nG"&&s+E %5== @eooIOO%!#   N N N $22 N 	 N
 ! N  ND0t.v.fgnn5!(!6!6v!>J000$''1%-$+ & "&'..9"((/ : NNJRX #  " "&'..9"((/ : ! 

=c!fEF3:VWX
 "&'..9"((/ :s+   <AH H 	I;III 2J	c           	      8  K    t        j                  |       j                  |i |}|>t        |      j                  }| j                  }| d| dt        j                          }n#| j                   dt        j                          }t        j                         }t        j                  |      }	|	j                  t        j                  u rd n|	j                  }
j                  ||||
|       	  | |i | d {   }j!                  ||||       |t        j"                  |	       S 7 0# t$        $ r@}j'                  t)        |t+        |                   j-                  ||||        d }~ww xY w# t        j"                  |	       w xY ww)Nr   r   rp   ry   r   rt   )r   r   r   r   r3   r   r   r5   r   rY   r   r&   r   r   r   rq   rz   r'   r[   r,   r   r   ru   )r{   rm   r}   r-   rl   r   r   rk   rW   r(   rn   rw   r   r0   s                r)   async_wrapperz&Dispatcher.span.<locals>.async_wrapperk  sv     6**4055tFvFJ##H~66"mm%a}Adjjl^D**+1TZZ\N;)--/D"&&s+E %5== @eooIOO%!#  ,#T4V44 
Xf    $$U+ 5  

=c!fEF3:VWX $$U+sN   C2F6D4 D2D4 F  F2D4 4	E==;E88E==F   FF)hasattrDISPATCHER_SPAN_DECORATED_ATTRsetattrAttributeErrorwrapt	decoratorr
   r	   listdictr   iscoroutinefunction)r0   r{   r   r   s   `   r)   spanzDispatcher.span  s    	t;<D8$? 
U	0( U	0c U	0 U	0t U	0PS U	0 
U	0n 
"	,"	,&)"	,15"	,?C"	,"	, 
"	,H &&t, &&4= K  	 	s   B9 B9 9	CCc                 |    | j                   r%| j                   j                   d| j                   S | j                  S )zName to be used in logging.r   )rM   r;   rL   s    r)   log_namezDispatcher.log_name  s5     ;;kk&&'q4499r2   )r"   r7   r#   )NN)1r3   r4   r5   __doc__r   model_configr   r   r;   __annotations__r<   r   r   r   r=   r   r>   r@   r   rB   rC   boolr   rD   r   r	   rH   propertyrM   rA   rS   rU   r   r,   rf   r   r+   rj   r   r   rq   r[   ru   rz   r
   r    r   r   __classcell__)rI   s   @r)   r7   r7   0   sm    d;Lc7KLD#L-2 ;.ND)*  ,1 "#,M4(  )EK  $)"7$GXi   67UVIsV]It  27`2htCH~.  13/1'+

 -.
 O,	

 
 )$
 
 
( : : 8 8))9 )d )( (D (9   $A) As At A$ =	O 		 #'#')- ** 3-	
 C= tCH~&  
B #''+ ** 3-	
 m$  
> #' $ ** 3-	
   
6K!#r'* K!xR/@ K!Z #  r2   r7   c                   ,    e Zd ZdeddfdZdeddfdZy)r?   rA   r"   Nc                 *    |j                   |i| _        y r%   r;   rK   )r0   rA   s     r)   rH   zManager.__init__  s    3799d2Cr2   dc                 h    |j                   | j                  v ry || j                  |j                   <   y r%   r   )r0   r   s     r)   add_dispatcherzManager.add_dispatcher  s+    66T%%%'(DQVV$r2   )r3   r4   r5   r7   rH   r   r/   r2   r)   r?   r?     s+    DZ DD D)
 )t )r2   r?   )4ra   r   loggingr   
contextlibr   contextvarsr   r   r   r   	functoolsr   typingr	   r
   r   r   r   r   r   r   r   r   pydanticr   r   r   baser   r<   r   events.spanr   r   r   r=   r   r   r   	getLoggerr3   r   r   r   r   r    r   r+   r7   r?   model_rebuildr/   r2   r)   <module>r      s        % @ @  T T T  ! 1 1  , &  
 "A 
'

H
% 6@r6 
4S>2  T] ,d38n ,;K1L , ,Eh Ek k\) )    r2   