
    JiP                         d dl Z d dl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mZ erd dlmZ  G d	 d
ee         Zy)    N)datetime)reduce)TYPE_CHECKINGAnyDictListOptionalcast
SimpleSpan   )BaseSpanHandlerTreec                   `   e Zd ZdZdefdZ	 	 	 ddedej                  dee	   dee   d	ee
ee	f      d
e	defdZ	 	 ddedej                  dee	   dee	   d
e	defdZ	 	 ddedej                  dee	   dee   d
e	dee   fdZdee   fdZdedee   dee   dee   fdZded   fdZddZy)SimpleSpanHandlerz'Span Handler that manages SimpleSpan's.returnc                      y)zClass name.r    )clss    /var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/llama_index_instrumentation/span_handlers/simple.py
class_namezSimpleSpanHandler.class_name   s    "    Nid_
bound_argsinstanceparent_span_idtagskwargsc                 &    t        |||xs i       S )zCreate a span.)r   	parent_idr   r   )selfr   r   r   r   r   r   s          r   new_spanzSimpleSpanHandler.new_span   s     c^$*"MMr   resultc                 >   | j                   |   }t        t        |      }t        j                         |_        |j
                  |j                  z
  j                         |_        | j                  5  | xj                  |gz  c_
        ddd       |S # 1 sw Y   |S xY w)z#Logic for preparing to drop a span.N)
open_spansr
   r   r   nowend_time
start_timetotal_secondsdurationlockcompleted_spans)r"   r   r   r   r$   r   spans          r   prepare_to_exit_spanz&SimpleSpanHandler.prepare_to_exit_span"   s|     s#J% 8GGIYY 	+  TF* 	+	+s   1BBerrc                     || j                   v rN| j                  5  | j                   |   }dt        |      i|_        | xj                  |gz  c_        ddd       |S y# 1 sw Y   S xY w)zLogic for droppping a span.errorN)r&   r,   strmetadatadropped_spans)r"   r   r   r   r0   r   r.   s          r   prepare_to_drop_spanz&SimpleSpanHandler.prepare_to_drop_span3   si     $//! -s+!(#c( 3""tf,"- K- Ks   8AA(c                 x    | j                   | j                  z   }|D cg c]  }|j                  | c}S c c}w )z+Helper method to get all parent/root spans.)r-   r5   r!   )r"   	all_spansss      r   _get_parentszSimpleSpanHandler._get_parentsE   s5    ((4+=+==	$<a(;<<<s   77parentaccspansc                 F   |s|S |D cg c]  }|j                   |j                  k(  s|  }}|s|S |D cg c]	  }||vs| }}|D cg c]+  }| j                  ||g|D cg c]
  }||k7  s	| c}      - }}}|t        d |      z   S c c}w c c}w c c}w c c}}w )zBuilds the tree by parent root.r;   r<   r=   c                     | |z   S Nr   )xys     r   <lambda>z9SimpleSpanHandler._build_tree_by_parent.<locals>.<lambda>]   s
    Q r   )r!   r   _build_tree_by_parentr   )	r"   r;   r<   r=   r9   childrenupdated_spanscchildren_treess	            r   rE   z'SimpleSpanHandler._build_tree_by_parentJ   s     J$B!vzz(AABBJ$)?qQh->?? 	
  &&qc])Ma1f!)M ' 
 
 V.??? C @ *N
s3   BB	B BB"
B-B1
BBr   c           
         	 ddl m} | j                  | j                  z   }|D ]  j
                  t        fd|D              r%t        j                  dj
                   d       xj
                  dz  c_        |j                  t        j
                  d	              | j                         }g }|D ]J  }| j                  ||g|D cg c]
  }||k7  s	| c}
      }t        |d       }	|j                  |	       L g }
 |       }|D ]  }|D ]  }|j
                  (|j                         r|
j                  |        |       }|j                  |j                    d|j"                   d|j                   |j
                  |j$                           |
j                  |       |
S # t        $ r}t        d      d}~ww xY wc c}w )zMethod for getting trace trees.r   r   zO`treelib` package is missing. Please install it by using `pip install treelib`.Nc              3   P   K   | ]  }|j                   j                  k(    y wrA   r   r!   ).0nsr9   s     r   	<genexpr>z5SimpleSpanHandler._get_trace_trees.<locals>.<genexpr>m   s     Arvv,As   #&zParent with id z missing from spansz-MISSINGrL   r?   c                     | j                   S rA   )r)   )rB   s    r   rD   z4SimpleSpanHandler._get_trace_trees.<locals>.<lambda>x   s
    all r   )keyz ())tag
identifierr;   data)treelibr   ImportErrorr-   r5   r!   anywarningswarnappendr   r:   rE   sorted	all_nodescreate_noder   r+   r)   )r"   r   er8   parentsspan_groupspr9   this_span_groupsorted_span_grouptreestreegrpr.   s          `      r   _get_trace_treesz"SimpleSpanHandler._get_trace_trees_   s   	$ ((4+=+==	 	NA{{"AyAA}<OPQz)  t!LM	N ##% 	2A"88qcY)I!q&!)I 9 O !'<R S01	2 v 	C >>)~~'T*#v  88*Bt}}oQ7#xx>>	 ! 	  	TW  	) 	& *Js#   F5 
GG5	G>G		Gc                     | j                         }|D ]+  }t        |j                  ddd              t        d       - y)zMethod for viewing trace trees.FTc                     | j                   S rA   )rU   )nodes    r   rD   z5SimpleSpanHandler.print_trace_trees.<locals>.<lambda>   s
     r   )stdoutsortingrQ    N)rh   printshow)r"   re   rf   s      r   print_trace_treesz#SimpleSpanHandler.print_trace_trees   s>    %%' 	D$))5$<R)ST"I	r   )NNN)NN)r   N)__name__
__module____qualname____doc__r3   r   inspectBoundArgumentsr	   r   r   r   r#   r/   BaseExceptionr6   r   r:   rE   rh   rq   r   r   r   r   r      s   1#3 # #'(,)-
N
N **
N 3-	
N
 !
N tCH~&
N 
N 

N  #' $ ** 3-	
   
* #''+ ** 3-	
 m$  
*	$=d:. =
@ @'+J'7@@DZ@P@	j	@*/$v, /br   r   )rv   rY   r   	functoolsr   typingr   r   r   r   r	   r
   'llama_index_instrumentation.span.simpler   baser   rV   r   r   r   r   r   <module>r}      s6        A A > !F
3 Fr   