
    NgU                    l   U d Z 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
mZmZmZmZmZmZmZ ddlmZmZ 	 ddlmZmZ n# e$ r ddlmZmZ Y nw xY w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&  ej'        e(          Z)dZ* ej+        e* d          Z,e,-                    d          Z. ej+        e* d          Z/ ej+        e* d          Z0 ej+        e* d          Z1da2de3d<    ej4                    Z5d%dZ6 G d dej7                  Z8 G d d          Z9d&dZ:d'd$Z;ddgZ<dS )(zSchemas for the LangSmith API.    )annotationsN)datetimetimezone)	AnyDictListMappingOptionalSequenceTupleUnioncast)UUIDuuid4)Fieldroot_validator)schemas)utils)ID_TYPE
RUN_TYPE_TClient_dumps_json_ensure_uuidz
langsmith-traceutf-8metadatatagsprojectOptional[Client]_CLIENTinit_kwargsr   returnr   c                 D    t           t           t          di | a t           S )N )r    r   )r!   s    O/var/www/html/ai-engine/env/lib/python3.11/site-packages/langsmith/run_trees.pyget_cached_clientr&   *   s$    ?++{++GN    c                  ~    e Zd ZU dZded<    ee          Zded<    ed          Zded	<    ed
           Z	ded<    edd          Z
ded<    eeddhi          Zded<    ed d          Zded<    edd          Zded<    ee          Zded <    ee          Zd!ed"<    ee          Zd#ed$<   	  edd          Zd%ed&<    ed'd()          Zded*<    ed'd+)          Zded,<    G d- d.          Z ed/          dkd3            Z ed4/          dkd5            Zedld7            Zedmd9            Z fd:Zdnd=Zdod@ZdpdBZ dqdDZ!ddddddEdrdMZ"	 dsddddddddddddNdtdWZ#dX Z$dudvd[Z%dwd\Z&dwd]Z'dxd^Z(e)dyda            Z*e)dzdd            Z+e)d{dg            Z,d|diZ-dj Z. xZ/S )}RunTreez1Run Schema with back-references for posting runs.strname)default_factoryr   idchain)defaultrun_typec                 >    t          j        t          j                  S N)r   nowr   utcr$   r'   r%   <lambda>zRunTree.<lambda>8   s    hl9S9S r'   r   
start_timeNT)r/   excludeOptional[RunTree]
parent_run__all__parent_run_id)r,   r7   zList[RunTree]
child_runsc                 ,    t          j                    pdS )Nr/   )r   get_tracer_projectr$   r'   r%   r5   zRunTree.<lambda>?   s     8 : : Gi r'   project_name)r,   aliassession_name
project_id)r/   r@   Optional[UUID]
session_idr   extraOptional[List[str]]r   z
List[Dict]eventszOptional[Any]	ls_client z!The order of the run in the tree.)r/   descriptiondotted_orderzThe trace id of the run.trace_idc                      e Zd ZdZdZdZdZdS )RunTree.ConfigzPydantic model configuration.TignoreN)__name__
__module____qualname____doc__arbitrary_types_allowedallow_population_by_field_namerE   r$   r'   r%   ConfigrN   N   s%        ++"&)-&r'   rV   )prevaluesdictr"   c                   |                     d          R|                     d          =d|d         v r|d         d         |d<   n!d|d         v r|d         d         d         |d<   |                     d          d|d<   d|v r|                    d          |d<   nd	|v r|                    d	          |d<   |                     d          sd|d<   |                     d
          |d
         j        |d<   d|vrt                      |d<   d|vr d
|v r|d
         j        |d<   n|d         |d<   t          t          |                    di                      |                     d          g |d<   |                     d          g |d<   |                     d          i |d<   |                     d          i |d<   |S )zAssign name to the run.r+   N
serializedr-   UnnamedclientrH   _clientr9   r;   rL   rE   rG   r   outputsattachments)getpopr-   r   rL   r   rY   
setdefault)clsrX   s     r%   infer_defaultszRunTree.infer_defaultsU   s    ::f%&**\*B*B*N---!'!5f!=v---!'!5d!;B!?v::f%&F6Nv"(**X"6"6F;&  "(**Y"7"7F;zz+&& 	'"&F;::l##/&,\&:&=F?#v 77F4LV##v%%%+L%9%Bz""%+D\z"T6$$Wb11222::h'!F8::f%F6N::i  ( "F9::m$$,$&F=!r'   Fc                    |                     d          }|r|                                r|S t          |d         |d                   }|d         r|d         j        dz   |z   |d<   n||d<   |S )z#Ensure the dotted order of the run.rK   r6   r-   r9   .)rb   strip_create_current_dotted_orderrK   )re   rX   current_dotted_orders      r%   ensure_dotted_orderzRunTree.ensure_dotted_ordery   s      &zz.99 	$8$>$>$@$@ 	M;< &, 
  
 , 	:|$1C7:NN >"" &:F>"r'   r   c                D    | j         t                      | _         | j         S )zReturn the client.)rH   r&   selfs    r%   r^   zRunTree.client   s!    
 >!.00DN~r'   r   c                    | j         S r2   )rH   rn   s    r%   r_   zRunTree._client   s     ~r'   c                f    |dk    r	|| _         dS t                                          ||          S )zSet the _client specially.r_   N)rH   super__setattr__)ro   r+   value	__class__s      r%   rs   zRunTree.__setattr__   s5     9"DNNN77&&tU333r'   Union[Sequence[str], str]Nonec                    t          |t                    r|g}| j        g | _        | j                            |           dS )zAdd tags to the run.N)
isinstancer*   r   extend)ro   r   s     r%   add_tagszRunTree.add_tags   sF    dC   	6D9DI	r'   r   Dict[str, Any]c                    | j         i | _         t          t          | j                                       di           }|                    |           dS )zAdd metadata to the run.Nr   )rE   r   rY   rd   update)ro   r   	metadata_s      r%   add_metadatazRunTree.add_metadata   sL    :DJtTZ00;;JKK	"""""r'   r`   c                V    | j         i | _         | j                             |           dS )zUpsert the given outputs into the run.

        Args:
            outputs (Dict[str, Any]): A dictionary containing the outputs to be added.

        Returns:
            None
        N)r`   r~   )ro   r`   s     r%   add_outputszRunTree.add_outputs   s/     <DLG$$$$$r'   TUnion[ls_schemas.RunEvent, Sequence[ls_schemas.RunEvent], Sequence[dict], dict, str]c                ~   | j         g | _         t          |t                    r| j                             |           dS t          |t                    rN| j                             dt          j        t          j                  	                                |d           dS | j         
                    |           dS )a~  Add an event to the list of events.

        Args:
            events (Union[ls_schemas.RunEvent, Sequence[ls_schemas.RunEvent],
                    Sequence[dict], dict, str]):
                The event(s) to be added. It can be a single event, a sequence
                of events, a sequence of dictionaries, a dictionary, or a string.

        Returns:
            None
        Neventr+   timemessage)rG   ry   rY   appendr*   r   r3   r   r4   	isoformatrz   )ro   rG   s     r%   	add_eventzRunTree.add_event   s    * ;DKfd## 	'Kv&&&&&$$ 		'K#$L66@@BB%      Kv&&&&&r'   )r`   errorend_timerG   r   Optional[Dict]r   Optional[str]r   Optional[datetime]'Optional[Sequence[ls_schemas.RunEvent]]Optional[Dict[str, Any]]c                  |pt          j        t          j                  | _        |)| j        s|| _        n| j                            |           ||| _        ||                     |           || 	                    |           dS dS )z/Set the end time of the run and all child runs.N)
r   r3   r   r4   r   r`   r~   r   r   r   )ro   r`   r   r   rG   r   s         r%   endzRunTree.end   s     !>HL$>$>< -&##G,,,DJNN6"""h'''''  r'   )run_idr[   inputsr`   r   reference_example_idr6   r   r   rE   ra   r   r   Optional[ID_TYPE]r[   r   r   ra    Optional[ls_schemas.Attachments]c               4   |pd|i}t          di d|dt          |          d|d|pi d|pi d|d|d|d	|	pt          j        t          j                  d
|
d|pi d| d| j        d| j        d|d|pi }| j        	                    |           |S )z Add a child run to the run tree.r+   r-   r[   r   r`   r   r0   r   r6   r   rE   r9   r?   rH   r   ra   r$   )
r)   r   r   r3   r   r4   rA   rH   r<   r   )ro   r+   r0   r   r[   r   r`   r   r   r6   r   r   rE   ra   serialized_runs                   r%   create_childzRunTree.create_child   s,   $ !2VTN 
 
 

F###
 #{
 <R	

 Mr
 %
 X
 "6!5
 "?X\(,%?%?
 X
 +2
 t
 **
 nn
 
  $)r!
$ 	s###
r'   c                    |                      h dd          }| j        | j                                        |d<   | j        | j                                        |d<   |S )N>   r   r`   r<   T)r7   exclude_noner   r`   )rY   r   copyr`   )ro   	self_dicts     r%   _get_dicts_safezRunTree._get_dicts_safe  sm    II777d  
 
	 ;""&+"2"2"4"4Ih<##'<#4#4#6#6Ii r'   exclude_child_runsboolc                   |                                  } | j        j        di | |                    d          x}red |D             }| j                            dt          j        t          j	                  
                                t          |          d           |s | j        D ]}|                    d           dS dS )	z,Post the run tree to the API asynchronously.ra   c                ,    g | ]}t          |          S r$   )r*   ).0r+   s     r%   
<listcomp>z RunTree.post.<locals>.<listcomp>1  s    666$CII666r'   uploaded_attachmentr   F)r   Nr$   )r   r^   
create_runrb   rG   r   r   r3   r   r4   r   setr<   post)ro   r   kwargsra   keys	child_runs         r%   r   zRunTree.post,  s    %%''((((( **]333; 	66+666DK1$L66@@BB"4yy    " 	9!_ 9 9	%8888	9 	99 9r'   c                :   | j         s|                                  | j        }	 |rAt          d | j        D             d          r fd|                                D             }n4# t          $ r'}t                              d|            Y d}~nd}~ww xY w| j	        
                    | j        | j        | j        r| j                                        nd| j        | j        | j        | j         | j        | j        | j        | j        | j        |           dS )z5Patch the run tree to the API in a background thread.c              3  L   K   | ]}|                     d           dk    |V   dS )r+   r   N)rb   )r   evs     r%   	<genexpr>z RunTree.patch.<locals>.<genexpr>F  sD        66&>>-BBB BBBB r'   Nc                0    i | ]\  }}|d          v||S )r   r$   )r   avuploadeds      r%   
<dictcomp>z!RunTree.patch.<locals>.<dictcomp>N  s9     # # # AqHY$777 1777r'   z'Error filtering attachments to upload: )r+   r   r`   r   r;   r   r   rK   rL   rG   r   rE   ra   )r   r   ra   nextrG   items	Exceptionloggerwarningr^   
update_runr+   r-   r`   r   r   r;   r   rK   rL   r   rE   )ro   ra   er   s      @r%   patchzRunTree.patch=  ss   } 	HHJJJ&	J  "&+  
    # # # #$/$5$5$7$7# # #K
  	J 	J 	JNNHQHHIIIIIIII	J7+/<ADL%%'''T*,!%!:]*];*# 	 	
 	
 	
 	
 	
s   AA) )
B3BBc                    dS )z"Wait for all _futures to complete.Nr$   rn   s    r%   waitzRunTree.waite  s    r'   c                8    | j                             |           S )zReturn the URL of the run.)r   )r^   get_run_urlrn   s    r%   get_urlzRunTree.get_urli  s    {&&4&000r'   r   r   c                V    t           |i}t          t           | j        |fi |          S )zwCreate a new 'child' span from the provided dotted order.

        Returns:
            RunTree: The new span.
        )LANGSMITH_DOTTED_ORDERr   r)   from_headers)re   rK   r   headerss       r%   from_dotted_orderzRunTree.from_dotted_orderm  s8     #L
 G-S-g@@@@AAAr'   configOptional[dict]c           	     f   	 ddl m}m} ddlm}m} ddlm n"# t          $ r}t          d          |d}~ww xY w|1 |t          |t                    rt          ||          nd          }nt          ||          }|                    d          x}	rt          |	||f          r|	j        rt          fd|	j        D             d          x}
r[|
j                            t#          |	j                            x}r|j        r|j        }|j        |d	<   |j        |d
<   |j        |d<   |j        |d<   |j        |d<   t1          t3          |j        pg |                    dg           z                       |d<   |j        |d<   |                    di           }|                    di           }|                    |j                   n9t?          |
d          r'|	j        |
j         v r|
j         |	j                 d         }ndS |
j!        |d<   |
j"        |d<   tG          j$        |fi |S dS )zCreate a new 'child' span from the provided runnable config.

        Requires langchain to be installed.

        Returns:
            Optional[RunTree]: The new span or None if
                no parent span information is found.
        r   )AsyncCallbackManagerCallbackManager)RunnableConfigensure_config)LangChainTracerz{RunTree.from_runnable_config requires langchain-core to be installed. You can install it with `pip install langchain-core`.N	callbacksc              3  <   K   | ]}t          |          |V  d S r2   )ry   )r   tr   s     r%   r   z/RunTree.from_runnable_config.<locals>.<genexpr>  s2      NN1z!_/M/MNQNNNNNNr'   r0   r   r`   r6   r   r   r+   rE   r   	order_map   r^   r?   )% langchain_core.callbacks.managerr   r   langchain_core.runnablesr   r    langchain_core.tracers.langchainr   ImportErrorry   rY   r   rb   r;   r   handlersrun_mapr*   rK   r0   r   r`   r6   r   sortedr   r   r+   rd   r~   r   hasattrr   r^   r?   r)   r   )re   r   r   r   r   r   r   r   config_cbtracerr   rK   extra_r   r   s                  @r%   from_runnable_configzRunTree.from_runnable_config}  s   	        ONNNNNNNHHHHHHH 	 	 	H  	
 >#m0:640H0HR^V,,,d GG >622G ;;{+++R	E21EFGG	E  	E
 NNNNNNN  	E ~))#b.>*?*?@@@ cFV "/%(\z"#&:x $'Ky!'*~|$%(\z"!'CH,SVZZPR=S=S8S(T(T!U!Uv!$v**7B77"--j"==	  ....-- "2BfFV2V2V%/0@A!Dt%}F8%+%8F>",\DDVDDDts    
949r   -Mapping[Union[str, bytes], Union[str, bytes]]c           	        |                                 }t          t          t                   |                    t
                              }|sQt          t          t                   |                    t                              }|sdS |                    d          }|	                                }t          |          }|d         d         }||d<   |d         d         |d<   ||d<   t          |          d	k    r|d
         d         |d<   |                    d          pt          j        t          j                  |d<   |                    d          pd|d<   |                    d          pd|d<   t                               |          }	|	j        s|	j        r|                    di           |d<   |d                             di           |d         d<   i |	j        |d         d         }
|
|d         d<   t+          t-          |	j        |                    dg           z                       }||d<   |	j        r
|	j        |d<   t1          di |S )a  Create a new 'parent' span from the provided headers.

        Extracts parent span information from the headers and creates a new span.
        Metadata and tags are extracted from the baggage header.
        The dotted order and trace id are extracted from the trace header.

        Returns:
            Optional[RunTree]: The new span or None if
                no parent span information is found.
        Nr   r   r   rL   r\   r-   rK      r;   r6   r0   r.   r+   parentrE   r   r   r?   r$   )r   r   r
   r*   rb   r   bytesLANGSMITH_DOTTED_ORDER_BYTESdecoderi   _parse_dotted_orderlenr   r3   r   r4   _Baggager   r   r   rd   r   r   r?   r)   )re   r   r   	init_argslangsmith_tracelangsmith_trace_bytesparent_dotted_orderparsed_dotted_orderrL   baggager   r   s               r%   r   zRunTree.from_headers  sf    KKMM	x}gkk:P.Q.QRR 	D$(-I!J!J% %! ) 3::7CCO-335512EFF&q)!, (	*-b1!4	$$7	.!"##q(()<R)@)CIo& #,--"="= #
LB
 B
	, !*j 9 9 DW	*%MM&11=X	&''00 
	Aw| 
	A!*!5!5gr!B!BIg-6w-?-J-JB. .Igz* N'*Mi.@.LMH-5Igz*#glY]]62-F-FFGGHHD $If# A,3,@	.)#####r'   Dict[str, str]c                    i }| j         r| j        |t           <   t          | j                            di           | j        | j                  }|                                |d<   |S )z.Return the RunTree as a dictionary of headers.r   r   r   r?   r   )	rL   rK   r   r   rE   rb   r   rA   	to_header)ro   r   r   s      r%   
to_headerszRunTree.to_headers  sr    = 	E373DG-/0Z^^J33*
 
 

 %..00	r'   c           	     H    d| j          d| j         d| j         d| j         d	S )z5Return a string representation of the RunTree object.zRunTree(id=z, name='z', run_type='z', dotted_order='z'))r-   r+   r0   rK   rn   s    r%   __repr__zRunTree.__repr__  sV    O$' O O49 O OO O9=9JO O O	
r'   )rX   rY   r"   rY   )r"   r   )r"   r   )r   rv   r"   rw   )r   r|   r"   rw   )r`   r|   r"   rw   )rG   r   r"   rw   )r`   r   r   r   r   r   rG   r   r   r   r"   rw   )r.   )r+   r*   r0   r   r   r   r[   r   r   r   r`   r   r   r   r   rC   r6   r   r   r   r   rF   rE   r   ra   r   r"   r)   )T)r   r   r"   rw   )r"   rw   r"   r*   )rK   r*   r   r   r"   r)   )r   r   r   r   r"   r8   )r   r   r   r   r"   r8   )r"   r   )0rP   rQ   rR   rS   __annotations__r   r   r-   r0   r6   r9   listr<   rA   rD   rY   rE   r   rG   rH   rK   rL   rV   r   rf   rl   propertyr^   r_   rs   r{   r   r   r   r   r   r   r   r   r   r   classmethodr   r   r   r   r   __classcell__)ru   s   @r%   r)   r)   2   s        ;;IIIuU+++B++++E'***H**** 51S1STTTJTTTT$)E$$E$E$EJEEEE %_-.! ! !J     GG  L     "'t<!H!H!HJHHHH%---E---- %d ; ; ;D;;;;t444F4444$uT4@@@I@@@@ C  L     U23MNNNHNNNN        ^! ! ! !F ^        X    X4 4 4 4 4   # # # #% % % %"' "' "' "'N #'#'+:>-1( ( ( ( ( (4  '&
 %)%)!%"&#/3)-'+$( $8<& & & & & &P  9 9 9 9 9"&
 &
 &
 &
P   1 1 1 1 B B B [B > > > [>@ 6$ 6$ 6$ [6$p   
 
 
 
 
 
 
r'   r)   c                  Z    e Zd ZdZ	 	 	 ddd	Zedd            Zedd            ZddZdS )r   zBaggage header information.Nr   Optional[Dict[str, str]]r   rF   r?   r   c                8    |pi | _         |pg | _        || _        dS )zInitialize the Baggage object.Nr   )ro   r   r   r?   s       r%   __init__z_Baggage.__init__  s(     !BJB	(r'   header_valuer"   c                Z   |s
 |             S i }g }d}	 |                     d          D ]}|                     dd          \  }}|t          k    r2t          j        t          j                            |                    }X|t          k    r3t          j                            |                               d          }|t          k    rt          j                            |          }n4# t          $ r'}t                              d|            Y d}~nd}~ww xY w | |||          S )z4Create a Baggage object from the given header value.N,=r   zError parsing baggage header: r   )splitLANGSMITH_METADATAjsonloadsurllibparseunquoteLANGSMITH_TAGSLANGSMITH_PROJECTr   r   r   )	re   r  r   r   r?   itemkeyrt   r   s	            r%   from_headerz_Baggage.from_header  sL     	355L
	A$**3// ? ?!ZZQ//
U,,,#z&,*>*>u*E*EFFHHN**!<//66<<SAADD---#)<#7#7#>#>L?  	A 	A 	ANN?A??@@@@@@@@	A sH4lKKKKs   CC+ +
D5DDr   Mapping[Union[str, bytes], Any]c                    d|v r|                      |d                   S d|v rA|                      t          t          |d                                       d                    S |                      d           S )Nr   s   baggager   )r  r   r   r   )re   r   s     r%   r   z_Baggage.from_headers0  sp    ??79#56667""??4wz/B#C#C#J#J7#S#STTT??4(((r'   r*   c                (   g }| j         rPt          | j                   }|                    t           dt          j                            |                      | j        rVd                    | j                  }|                    t           dt          j                            |                      | j	        rA|                    t           dt          j                            | j	                              d                    |          S )z,Return the Baggage object as a header value.z	metadata=r	  ztags=zproject=)
r   r   r   LANGSMITH_PREFIXr  r  quoter   joinr?   )ro   r   serialized_metadataserialized_tagss       r%   r   z_Baggage.to_header9  s   = 	"-dm"<"<LL#WWfl.@.@AT.U.UWW   9 	!hhty11OLL#OO&,*<*<_*M*MOO    	LL#TTV\-?-?@Q-R-RTT   xxr'   )NNN)r   r  r   rF   r?   r   )r  r   r"   r   )r   r  r"   r   r   )	rP   rQ   rR   rS   r  r  r  r   r   r$   r'   r%   r   r     s        %% .2$(&*		) 	) 	) 	) 	) L L L [L* ) ) ) [)     r'   r   rK   r*   List[Tuple[datetime, UUID]]c                D    |                      d          }d |D             S )zParse the dotted order string.rh   c                v    g | ]6}t          j        |d d         d          t          |dd                    f7S )Ni%Y%m%dT%H%M%S%fZ)r   strptimer   )r   parts     r%   r   z'_parse_dotted_order.<locals>.<listcomp>P  sS        
	4:'9	:	:Dcdd<L<LM  r'   )r  )rK   partss     r%   r   r   M  s6    s##E    r'   r6   r   r   rC   c                    | pt          j        t          j                  }|pt	                      }|                    d          t          |          z   S )z Create the current dotted order.r"  )r   r3   r   r4   r   strftimer*   )r6   r   stid_s       r%   rj   rj   V  sF     
	1x|HL11B

EGGC;;)**SXX55r'   )r!   r   r"   r   )rK   r*   r"   r  )r6   r   r   rC   r"   r*   )=rS   
__future__r   r  loggingsysr   r   typingr   r   r   r	   r
   r   r   r   r   uuidr   r   pydantic.v1r   r   r   pydantic	threadingurllib.parser  	langsmithr   
ls_schemasr   langsmith.clientr   r   r   r   r   	getLoggerrP   r   r  internr   encoder   r  r  r  r    r   Lock_LOCKr&   RunBaser)   r   r   rj   r:   r$   r'   r%   <module>r<     s   $ $ $ " " " " " "   



 ' ' ' ' ' ' ' ' S S S S S S S S S S S S S S S S S S S S S S        111111111                     + + + + + +       S S S S S S S S S S S S S S		8	$	$ #'7$>$>$>?? 5<<WEE SZ#3 = = =>> /55566CJ"2;;;<<          	   W
 W
 W
 W
 W
j  W
 W
 W
t> > > > > > > >B   6 6 6 6 i
 s   A AA