
    5q iw                    T   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
 ddlmZmZmZmZ ddlmZmZmZmZ 	 ddlmZmZ ddlZ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jP                  e)      Z*dZ+ ejX                  e+ d      Z-e-j]                  d      Z/ ejX                  e+ d      Z0 ejX                  e+ d      Z1 ejX                  e+ d      Z2 ejX                  e+ d      Z3 ejX                  d      Z4 ed e5             Z6da7de8d<    ejr                         Z: ejv                  eee<e=ee>   f            dd      Z?d dZ@	 	 	 	 d!dZA G d de j                        ZC G d d      ZDd"dZE	 	 	 	 	 	 d#dZFddgZGy# e$ r ddlmZmZ Y _w xY w)$zSchemas for the LangSmith API.    )annotationsN)MappingSequence)datetimetimezone)AnyOptionalUnioncast)NAMESPACE_DNSUUIDuuid4uuid5)Fieldroot_validator)schemas)utils)ID_TYPE
RUN_TYPE_TClient_dumps_json_ensure_uuidz
langsmith-traceutf-8metadatatagsprojectreplicas__omit_auto_outputsOptional[Client]_CLIENT	_REPLICASdefaultc                     t         &t        5  t         t        di | a d d d        t         S t         S # 1 sw Y   t         S xY w)N )r!   _LOCKr   )init_kwargss    R/opt/movilizia/ClienteMCP/venv/lib/python3.12/site-packages/langsmith/run_trees.pyget_cached_clientr*   4   s>     	0 /;/	0 N7N	0 Ns	   3Ac                f    h d}t        | j                               |z
  }|rt        d|       | S )z2Validate that the dict only contains allowed keys.>
   
input_cost
total_costoutput_costinput_tokenstotal_tokensoutput_tokensinput_cost_detailsinput_token_detailsoutput_cost_detailsoutput_token_detailsz#Unexpected keys in usage metadata: )setkeys
ValueError)dataallowed_keys
extra_keyss      r)   !validate_extracted_usage_metadatar<   =   s;    L TYY[!L0J>zlKLLK    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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.<    ed/d0+      Zd1ed2<    edd3+      Zd4ed5<    G d6 d7      Z ed8      dUd9       Z ed/8      dUd:       ZedVd;       ZedWd<       Z fd=Z e!e!e!e!e!d>	 	 	 	 	 	 	 	 	 	 	 dXd?Z"dYd@Z#dZdAZ$d[dBZ%d\dCZ&	 	 	 	 d]dDZ'ddddddE	 	 	 	 	 	 	 	 	 	 	 d^dFZ(	 d_ddddddddddddG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d`dHZ)dI Z*	 da	 	 	 	 	 dbdJZ+dcdddKZ,d/dLdedMZ-dfdNZ.dgdOZ/e0	 	 	 	 	 	 dhdP       Z1e0	 	 	 	 	 	 didQ       Z2e0	 	 	 	 	 	 djdR       Z3dkdSZ4dT Z5 xZ6S )lRunTreez1Run Schema with back-references for posting runs.strname)default_factoryr   idchainr#   run_typec                 H    t        j                  t        j                        S N)r   nowr   utcr&   r=   r)   <lambda>zRunTree.<lambda>Z   s    hll9S r=   r   
start_timeNT)r$   excludeOptional[RunTree]
parent_runOptional[str]parent_dotted_order__all__parent_run_id)rB   rL   zlist[RunTree]
child_runsc                 2    t        j                         xs dS )Nr$   )r   get_tracer_projectr&   r=   r)   rJ   zRunTree.<lambda>c   s     8 8 : Gi r=   project_name)rB   aliassession_name
project_id)r$   rW   Optional[UUID]
session_iddict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_idFz3Whether to allow filesystem access for attachments.zOptional[bool]dangerously_allow_filesystemz8Projects to replicate this run to with optional updates..Optional[Sequence[tuple[str, Optional[dict]]]]r   c                      e Zd ZdZdZdZdZy)RunTree.ConfigzPydantic model configuration.TignoreN)__name__
__module____qualname____doc__arbitrary_types_allowedallow_population_by_field_namer]   r&   r=   r)   Configrh   y   s    +"&)-&r=   rp   )prec                V   |j                  d      9|j                  d      (d|d   v r|d   d   |d<   nd|d   v r|d   d   d   |d<   |j                  d      d|d<   d|v r|j                  d      |d<   nd	|v r|j                  d	      |d<   |j                  d      sd|d<   |j                  d
d      }||j                  |d<   |j                  |d<   d|vrt	               |d<   d|vr||j
                  |d<   n|d   |d<   t        t        |j                  di              |j                  d      g |d<   |j                  d      g |d<   |j                  d      i |d<   |j                  d      i |d<   |j                  d      t        j                         |d<   |S )zAssign name to the run.rA   N
serializedrC   Unnamedclientr`   _clientrN   rR   rP   rd   r]   r_   r   outputsattachmentsr   )
getpoprC   rc   r   rd   r   r\   
setdefaultr"   )clsvaluesrN   s      r)   infer_defaultszRunTree.infer_defaults   s    ::f%&**\*B*N--!'!5f!=v--!'!5d!;B!?v::f%&F6Nv"(**X"6F;& "(**Y"7F;zz+&"&F;ZZd3
!&0mmF?#,6,C,CF()v 7F4LV#%%/%8%8z"%+D\z"T6$$Wb12::h'!F8::f%F6N::i ( "F9::m$,$&F=!::j!)!*F:r=   c                    |j                  d      }|r|j                         r|S t        |d   |d         }|j                  d      }||dz   |z   |d<   |S ||d<   |S )z#Ensure the dotted order of the run.rc   rK   rC   rP   .)rz   strip_create_current_dotted_order)r}   r~   current_dotted_orderrP   s       r)   ensure_dotted_orderzRunTree.ensure_dotted_order   s      &zz.9$8$>$>$@M;< &, 
 %jj)>?*%83%>AU%UF>"  &:F>"r=   c                P    | j                   t               | _         | j                   S )zReturn the client.)r`   r*   selfs    r)   rv   zRunTree.client   s"    
 >>!.0DN~~r=   c                    | j                   S rG   )r`   r   s    r)   rw   zRunTree._client   s     ~~r=   c                >    |dk(  r|| _         yt        | 	  ||      S )zSet the _client specially.rw   N)r`   super__setattr__)r   rA   value	__class__s      r)   r   zRunTree.__setattr__   s&     9"DN7&tU33r=   )inputsrx   r   r   usage_metadatac                  |t         urt        |      | _        |t         ur/| j                  j	                  di       j                  |xs i        |t         ur)d| j                  d<   |i | _        nt        |      | _        |t         ur-d| j                  t        <   |i | _	        nt        |      | _	        |t         ur)t        |      | j                  j	                  di       d<   yy)a  Set the inputs, outputs, tags, and metadata of the run.

        If performed, this will override the default behavior of the
        end() method to ignore new outputs (that would otherwise be added)
        by the @traceable decorator.

        If your LangChain or LangGraph versions are sufficiently up-to-date,
        this will also override the default behavior of LangChainTracer.

        Args:
            inputs: The inputs to set.
            outputs: The outputs to set.
            tags: The tags to set.
            metadata: The metadata to set.
            usage_metadata: Usage information to set.

        Returns:
            None
        r   Finputs_is_truthyNTr   )NOT_PROVIDEDlistr   r]   r|   updater   r\   OVERRIDE_OUTPUTSrx   r<   )r   r   rx   r   r   r   s         r)   r6   zRunTree.set   s    8 |#T
DI<'JJ!!*b188RH% .3DJJ)*~ "6l,&+/DJJ'(!#G}-1.A JJ!!*b12BC .r=   c                    t        |t              r|g}| j                  g | _        | j                  j                  |       y)zAdd tags to the run.N)
isinstancer@   r   extend)r   r   s     r)   add_tagszRunTree.add_tags  s6    dC 6D99DI		r=   c                    | j                   i | _         t        t        | j                         j                  di       }|j	                  |       y)zAdd metadata to the run.Nr   )r]   r   r\   r|   r   )r   r   	metadata_s      r)   add_metadatazRunTree.add_metadata	  s>    ::DJtTZZ0;;JK	"r=   c                `    | j                   i | _         | j                   j                  |       y)Upsert the given outputs into the run.

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

        Returns:
            None
        N)rx   r   )r   rx   s     r)   add_outputszRunTree.add_outputs  s'     <<DLG$r=   c                ~    | j                   i | _         | j                   j                  |       d| j                  d<   y)r   NFr   )r   r   r]   )r   r   s     r)   
add_inputszRunTree.add_inputs  s8     ;;DK6" */

%&r=   c                v   | j                   g | _         t        |t              r| j                   j                  |       yt        |t              rO| j                   j                  dt        j                  t        j                        j                         |d       y| j                   j                  |       y)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rA   timemessage)r_   r   r\   appendr@   r   rH   r   rI   	isoformatr   )r   r_   s     r)   	add_eventzRunTree.add_event-  s    * ;;DKfd#KKv&$KK#$LL6@@B% KKv&r=   )rx   errorend_timer_   r   c               \   |xs# t        j                  t        j                        | _        | j
                  j                  t              s1|/| j                  s|| _        n| j                  j                  |       ||| _
        || j                  |       || j                  |       yy)z/Set the end time of the run and all child runs.N)r   rH   r   rI   r   r]   rz   r   rx   r   r   r   r   )r   rx   r   r   r_   r   s         r)   endzRunTree.endQ  s     !>HLL$> zz~~./"||#*DLLL''0DJNN6"h'  r=   )run_idrs   r   rx   r   reference_example_idrK   r   r   r]   ry   c                  |xs d|i}t        di d|dt        |      d|d|xs i d|xs i d|d|d|d	|	xs# t        j                  t        j
                        d
|
d|xs i d| d| j                  d| j                  d| j                  d|d|xs i d| j                  }| j                  j                  |       |S )z Add a child run to the run tree.rA   rC   rs   r   rx   r   rE   r   rK   r   r]   rN   rV   r   r`   r   ry   re   r&   )r?   r   r   rH   r   rI   rX   r   r`   re   rS   r   )r   rA   rE   r   rs   r   rx   r   r   rK   r   r   r]   ry   serialized_runs                   r)   create_childzRunTree.create_childk  s&   $ !2VTN 

F#
 #
 <R	

 Mr
 
 
 "6
 "?X\\(,,%?
 
 +2
 
 **
 ]]
 nn
  !
" $)r#
$ *.)J)J%
( 	s#
r=   c                    | j                  h dd      }| j                  | j                  j                         |d<   | j                  | j                  j                         |d<   |S )N>   r   rx   rS   T)rL   exclude_noner   rx   )r\   r   copyrx   )r   	self_dicts     r)   _get_dicts_safezRunTree._get_dicts_safe  sd    II7d  
	 ;;""&++"2"2"4Ih<<##'<<#4#4#6Ii r=   c                   | j                         }|| j                  k(  r|S |d   }t        t        | d|       }|j	                  d      }|rt        t        | d|       }nd}|j	                  d      }|rt        t        | d|       }	nd}	|j	                  d      rt        |d         }
g }|
dd D ]F  \  }}t        t        | d|       }|j                  |j                  d      t        |      z          H |
d   \  }}|j                  |j                  d      t        |      z          d	j                  |      }nd}t        j                  |      }|j                  |||	||d
       |r|j                  |       |S )zDRewrites ids/dotted_order for a given project with optional updates.rC   :rd   NrR   rc   rt   %Y%m%dT%H%M%S%fZr   )rC   rd   rR   rc   rX   )r   rX   r   r   rz   _parse_dotted_orderr   strftimer@   joinr   deepish_copyr   )r   rV   updatesrun_dictold_idnew_id	old_trace	new_traceparent
new_parentsegsrebuilttsseg_idreplts_last_dotteddups                      r)   _remap_for_projectzRunTree._remap_for_project  s    '')4,,,O$},&@ALL,	m	{!L>-JKIIo.},.HIJJ<<'&x'?@DG"3Bi L
F]vha~,FGr{{+=>TJKL bJGQNN7++,>?#f+MNXXg&FF  *

%!+ & ,	
 JJw
r=   c                X   | j                   rB| j                   D ]2  \  }}| j                  |      } | j                  j                  di | 4 n,| j	                         } | j                  j                  di | | j
                  ry| j
                  D cg c]  }t        |       }}| j                  j                  dt        j                  t        j                        j                         t        |      d       |s$| j                  D ]  }|j!                  d        yyc c}w )z,Post the run tree to the API asynchronously.uploaded_attachmentr   F)exclude_child_runsNr&   )r   r   rv   
create_runr   ry   r@   r_   r   r   rH   r   rI   r   r6   rS   post)	r   r   rV   r   r   kwargsrA   r7   	child_runs	            r)   r   zRunTree.post  s    ==)- 3%g22<@&&&223 ))+F"DKK"",V,*.*:*:;$CI;D;KK1$LL6@@B"4y "!__ 9	%89 " <s   D')exclude_inputsc                  | j                   s| j                          | j                  j                         D ci c]  \  }}t	        |t
              s|| }}}	 |rIt        d | j                  D        d      }|r*|j                         D ci c]  \  }}||d   vr|| }}}| j                  r| j                  D ]  \  }}| j                  ||      }	| j                  j                  |	d   |	d   |rdn|	d   |	d   |	j                  d	      |	j                  d
      |	j                  d      |	j                  d      |	j                  d      |	j                  d      |	j                  d      |	j                  d      |	j                  d      |	j                  d      |        y| j                  j                  | j                   | j"                  |rdn'| j$                  r| j$                  j'                         nd| j(                  r| j(                  j'                         nd| j*                  | j,                  | j.                  | j0                  | j                   | j2                  | j4                  | j                  | j6                  | j8                  |       yc c}}w c c}}w # t        $ r#}t        j                  d|        Y d}~)d}~ww xY w)zPatch the run tree to the API in a background thread.

        Args:
            exclude_inputs: whether to exclude inputs from the patch request.
        c              3  H   K   | ]  }|j                  d       dk(  r|  yw)rA   r   N)rz   ).0evs     r)   	<genexpr>z RunTree.patch.<locals>.<genexpr>  s)      66&>-BB s    "Nr   z'Error filtering attachments to upload: rA   rC   r   rx   r   rR   rX   r   r   rc   rd   r_   r   r]   )rA   r   r   rx   r   rR   rX   r   r   rc   rd   r_   r   r]   ry   )r   r   ry   itemsr   tuplenextr_   	Exceptionloggerwarningr   r   rv   
update_runrz   rA   rC   r   r   rx   r   rR   rX   r   rc   rd   r   r]   )
r   r   avry   uploadederV   r   r   s
             r)   patchzRunTree.patch  s    }}HHJ!--335
QAu9MAqD
 
	J"&++
   %0$5$5$7# AqHY$77 1#K # ==)- %g22<I&&!&)#D>#14x7I$Y/",,w/"*,,"?!)n!=)16L)M%\\*5!)n!=%\\*5#<<1!f-",,w/ + ' ( KK""YYww & 04$++**,/3||))+jj"00!..%)%>%>!..{{YYjj'' # Y
#
  	JNNDQCHII	Js5   JJ4J) J#$J) #J) )	K2KKc                     y)z"Wait for all _futures to complete.Nr&   r   s    r)   waitzRunTree.wait2  s    r=   c                :    | j                   j                  |       S )zReturn the URL of the run.)r   )rv   get_run_urlr   s    r)   get_urlzRunTree.get_url6  s    {{&&4&00r=   c                T    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)r}   rc   r   headerss       r)   from_dotted_orderzRunTree.from_dotted_order:  s2     #L
 G-S--g@@AAr=   c           	        	 ddl m}m} ddlm}m} ddlm |% |t        |t              rt        ||      nd      }nt        ||      }|j                  d      x}	rt        |	||f      r|	j                  rt        fd|	j                  D        d      x}
r|
j                   j                  t#        |	j                              x}r|j$                  r|j$                  }|j&                  |d	<   |j(                  |d
<   |j*                  |d<   |j,                  |d<   |j.                  |d<   t1        t3        |j4                  xs g |j                  dg       z               |d<   |j6                  |d<   |j9                  di       }|j9                  di       }|j;                  |j<                         nBt?        |
d      r5|	j                  |
j@                  v r|
j@                  |	j                     d   }ny|
jB                  |d<   |
jD                  |d<   tG        jH                  |fi |S y# t        $ r}t        d      |d}~ww xY w)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        |      s|  y wrG   )r   )r   tr   s     r)   r   z/RunTree.from_runnable_config.<locals>.<genexpr>q  s     N1z!_/MQNs   rE   r   rx   rK   r   r   rA   r]   r   	order_map   rv   rV   )% langchain_core.callbacks.managerr   r   langchain_core.runnablesr   r    langchain_core.tracers.langchainr   ImportErrorr   r\   r   rz   rR   r   handlersrun_mapr@   rc   rE   r   rx   rK   r   sortedr6   r   rA   r|   r   r   hasattrr   rv   rV   r?   r   )r}   configr   r   r   r   r   r   config_cbtracerr   rc   extra_r   r   s                  @r)   from_runnable_configzRunTree.from_runnable_configJ  s)   	 OH >#0:640H^V,dG >62G ;;{++R+21EFG  NN   ~~))#b.>.>*?@@@cFVFV"//%(\\z"#&::x $'KKy!'*~~|$%(\\z"!'CHH,SVZZPR=S8S(T!Uv!$v**7B7"--j"=	  .-"2B2BfFVFV2V%//0@0@A!D%}}F8%+%8%8F>",,\DVDDU  	H 	s   H/ /	I	8II	c           	     N   |j                         }t        t        t           |j	                  t
                    }|s>t        t        t           |j	                  t                    }|sy|j                  d      }|j                         }t        |      }|d   d   }||d<   |d   d   |d<   ||d<   t        |      d	k\  r|d
   d   |d<   |j	                  d      xs# t        j                  t        j                        |d<   |j	                  d      xs d|d<   |j	                  d      xs d|d<   t         j#                  |      }	|	j$                  s|	j&                  r|j)                  di       |d<   |d   j)                  di       |d   d<   i |	j$                  |d   d   }
|
|d   d<   t+        t-        |	j&                  |j	                  dg       z               }||d<   |	j.                  r|	j.                  |d<   |	j0                  r|	j0                  |d<   t3        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   rd   rt   rC   rc      rR   rK   rE   rD   rA   r   r]   r   r   rV   r   r&   )r   r   r	   r@   rz   r   bytesLANGSMITH_DOTTED_ORDER_BYTESdecoder   r   lenr   rH   r   rI   _Baggager   r   r   r|   r  r6   rV   r   r?   )r}   r   r   	init_argslangsmith_tracelangsmith_trace_bytesrP   parsed_dotted_orderrd   baggager   r   s               r)   r   zRunTree.from_headers  s,    KKM	x}gkk:P.QR$(-I!J%! )3::7CO-33512EF&q)!, (	*-b1!4	$$7	.!"#q()<R)@)CIo& #,--"= #
LLB
	, !*j 9 DW	*%MM&1=X	&''0w||!*!5!5gr!BIg-6w-?-J-JB.Igz* N'**Mi.@.LMH-5Igz*#gllY]]62-FFGHD $If(/(<(<In%$+$4$4Ij!###r=   c                    i }| j                   r| j                  |t         <   t        | j                  j                  di       | j                  | j                  | j                        }|j                         |d<   |S )z.Return the RunTree as a dictionary of headers.r   r   r   rV   r   r  )
rd   rc   r   r  r]   rz   r   rX   r   	to_header)r   r   r  s      r)   
to_headerszRunTree.to_headers  so    ==373D3DG-.0ZZ^^J3**]]	
 %..0	r=   c           	     p    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'))rC   rA   rE   rc   r   s    r)   __repr__zRunTree.__repr__  sB     $''(499+ 6'89J9J8K2O	
r=   )r~   r\   returnr\   )r"  r   )r"  r    )r   Optional[Mapping[str, Any]]rx   r#  r   zOptional[Sequence[str]]r   r#  r   z+Optional[ls_schemas.ExtractedUsageMetadata]r"  None)r   zUnion[Sequence[str], str]r"  r$  )r   dict[str, Any]r"  r$  )rx   r%  r"  r$  )r   r%  r"  r$  )r_   zTUnion[ls_schemas.RunEvent, Sequence[ls_schemas.RunEvent], Sequence[dict], dict, str]r"  r$  )rx   Optional[dict]r   rO   r   Optional[datetime]r_   z'Optional[Sequence[ls_schemas.RunEvent]]r   zOptional[dict[str, Any]]r"  r$  )rD   )rA   r@   rE   r   r   zOptional[ID_TYPE]rs   r&  r   r&  rx   r&  r   rO   r   rZ   rK   r'  r   r'  r   r^   r]   r&  ry   z Optional[ls_schemas.Attachments]r"  r?   rG   )rV   r@   r   r&  r"  r\   )T)r   boolr"  r$  )r   r(  r"  r$  )r"  r$  r"  r@   )rc   r@   r   r   r"  r?   )r	  r&  r   r   r"  rM   )r   z-Mapping[Union[str, bytes], Union[str, bytes]]r   r   r"  rM   )r"  zdict[str, str])7rj   rk   rl   rm   __annotations__r   r   rC   rE   rK   rN   rP   r   rS   rX   r[   r\   r]   r   r_   r`   rc   rd   re   r   rp   r   r   r   propertyrv   rw   r   r   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   classmethodr   r  r   r  r!  __classcell__)r   s   @r)   r?   r?   T   s(   ;
IU+B+'*Hc* 1STJT$)$$EJ!E).tT)JJ %_-.!J  GL#  "'t<!HJH-E4- %d ;D
;t4FJ4$T4@I}@ CL#  23MNHdN38#X4 .  @EN@H< 
  % %N      4 /;/;(40<FR1 ,1 -	1
 &1 .1 D1 
1f#%/ "'
"' 
"'N #'#'+:>-1(  ( 	(
 %( 8( +( 
(:  '(
 %)%)!%"&#/3)-'+$( $8<(( (
 "( #( (  ( ( -( '( %( "( ( 6(  
!(T <@..*8.	.`9, /4 HT1 BB B 
	B B >> > 
	> >@ 8$C8$OR8$	8$ 8$t
r=   r?   c                  \    e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 ddZed	d       Zed
d       ZddZy)r  zBaggage header information.Nc                T    |xs i | _         |xs g | _        || _        |xs g | _        y)zInitialize the Baggage object.Nr  )r   r   r   rV   r   s        r)   __init__z_Baggage.__init__  s-     !BJB	( Br=   c                   |s |        S i }g }d}d}	 |j                  d      D ]  }|j                  dd      \  }}|t        k(  r3t        j                  t        j
                  j                  |            }U|t        k(  r/t        j
                  j                  |      j                  d      }|t        k(  r t        j
                  j                  |      }|t        k(  st        j                  t        j
                  j                  |            }	|	D 
cg c]  \  }
}t        |
      |f }}
} 	  | ||||      S c c}}
w # t        $ r"}t        j                  d|        Y d}~8d}~ww xY w)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_PROJECTLANGSMITH_REPLICASr@   r   r   r   )r}   header_valuer   r   rV   r   itemkeyr   replicas_dataprojr   r   s                r)   from_headerz_Baggage.from_header  sO    5L	A$**3/ 
Y!ZZQ/
U,,#zz&,,*>*>u*EFHN*!<<//6<<SAD--#)<<#7#7#>L..$(JJv||/C/CE/J$KMJWXwTG 4XHX
Y D|h
 	
	  Y 	ANN;A3?@@	As0   CE $7E E2E E 	E6E11E6c                    d|v r| j                  |d         S d|v r1| j                  t        t        |d         j                  d            S | j                  d       S )Nr  s   baggager   )rC  r   r  r  )r}   r   s     r)   r   z_Baggage.from_headers  s[    ??79#5667"??4wz/B#C#J#J7#STT??4((r=   c                   g }| j                   rLt        | j                         }|j                  t         dt        j
                  j                  |              | j                  rRdj                  | j                        }|j                  t         dt        j
                  j                  |              | j                  rA|j                  t         dt        j
                  j                  | j                                | j                  rLt        | j                        }|j                  t         dt        j
                  j                  |              dj                  |      S )z,Return the Baggage object as a header value.z	metadata=r2  ztags=zproject=z	replicas=)r   r   r   LANGSMITH_PREFIXr8  r9  quoter   r   rV   r   )r   r   serialized_metadataserialized_tagsserialized_replicass        r)   r  z_Baggage.to_header  s   =="-dmm"<LL#$Ifll.@.@AT.U-VW 99!hhtyy1OLL#$E&,,*<*<_*M)NO LL#$HV\\-?-?@Q@Q-R,ST =="-dmm"<LL#$Ifll.@.@AT.U-VW xxr=   )NNNN)r   zOptional[dict[str, str]]r   r^   rV   rO   r   rf   )r>  rO   r"  r  )r   zMapping[Union[str, bytes], Any]r"  r  r)  )	rj   rk   rl   rm   r0  r,  rC  r   r  r&   r=   r)   r  r    sl    % .2$(&*CG'*' "' $	'
 A' 
 
6 ) )r=   r  c           	         | j                  d      }|D cg c])  }t        j                  |dd d      t        |dd       f+ c}S c c}w )zParse the dotted order string.r   Nir   )r4  r   strptimer   )rc   partsparts      r)   r   r   *  sX    s#E  
		4:'9	:Dcd<LM  s   .Ac                    | xs# t        j                  t        j                        }|xs
 t	               }|j                  d      t        |      z   S )z Create the current dotted order.r   )r   rH   r   rI   r   r   r@   )rK   r   stid_s       r)   r   r   3  s@     
	1x||HLL1B

EGC;;)*SX55r=   )r(   r   r"  r   )r9   !ls_schemas.ExtractedUsageMetadatar"  rR  )rc   r@   r"  zlist[tuple[datetime, UUID]])rK   r'  r   rZ   r"  r@   )Hrm   
__future__r   r6  loggingsyscollections.abcr   r   r   r   typingr   r	   r
   r   uuidr   r   r   r   pydantic.v1r   r   r  pydanticcontextvars	threadingurllib.parser8  	langsmithr   
ls_schemasr   langsmith.clientr   r   r   r   r   	getLoggerrj   r   rF  internr   encoder  r5  r;  r<  r=  r   objectr   r!   r*  Lockr'   
ContextVarr   r@   r\   r"   r*   r<   RunBaser?   r  r   r   rQ   r&   r=   r)   <module>rh     s   $ "   
 - ' - - 2 21    +  S S			8	$ #'7&8$>? 5<<WE SZZ#3"4H => /056CJJ"2!37;< SZZ#3"4H => 3::34 D&(# 	  	 SK""8HU3;N5O,P#QR	
+&.E

j   E

PK K\6"6,:66 i
 [   s   F F'&F'