HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/.local/lib/python3.10/site-packages/langsmith/__pycache__/run_trees.cpython-310.pyc
o

���gaX�@s�UdZddlmZddlZddlZddlZddlmZmZddlm	Z	m
Z
mZmZm
Z
mZmZmZmZddlmZmZz
ddlmZmZWneyVddlmZmZYnwddlZddlZddlmZdd	lm Z dd
l!m"Z"m#Z#m$Z$m%Z%m&Z&e�'e(�Z)dZ*e�+e*�d��Z,e,�-d
�Z.e�+e*�d��Z/e�+e*�d��Z0e�+e*�d��Z1da2de3d<e�4�Z5d(dd�Z6Gdd�dej7�Z8Gdd�d�Z9d)d d!�Z:d*d&d'�Z;ddgZ<dS)+zSchemas 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�returnrcKs"tdurtdurtdi|��atS)N�)rr)r r"r"�F/home/arjun/.local/lib/python3.10/site-packages/langsmith/run_trees.py�get_cached_client*sr$c
sxeZdZUdZded<eed�Zded<edd�Zded	<ed
d�d�Z	ded
<eddd�Z
ded<eeddhid�Zded<edd�dd�Z
ded<eddd�Zded<eed�Zd ed!<eed�Zd"ed#<eed�Zd$ed%<	eddd�Zd&ed'<ed(d)d*�Zded+<ed(d,d*�Zded-<ed.d/d*�Zd0ed1<Gd2d3�d3�Zedd4�d�d8d9��Zed.d4�d�d:d;��Zed�d=d>��Zed�d@dA��Z�fdBdC�Zd�dFdG�Zd�dJdK�Z d�dMdN�Z!d�dPdQ�Z"d�dSdT�Z#ddddddU�d�d]d^�Z$	d�dddddddddddd_�d�dgdh�Z%didj�Z&d�d�dmdn�Z'd�dodp�Z(d�dqdr�Z)d�dsdt�Z*e+d�dwdx��Z,e+d�d{d|��Z-e+d�dd���Z.d�d�d��Z/d�d��Z0�Z1S)��RunTreez1Run Schema with back-references for posting runs.�str�name)�default_factoryr�id�chain)�default�run_typecCst�tj�S�N)r�nowr�utcr"r"r"r#�<lambda>8�zRunTree.<lambda>r�
start_timeNT)r+�exclude�Optional[RunTree]�
parent_run�__all__�
parent_run_id)r(r3z
List[RunTree]�
child_runscCst��pdS)Nr+)r�get_tracer_projectr"r"r"r#r0?r1�project_name)r(�alias�session_name�
project_id)r+r;�Optional[UUID]�
session_idr�extra�Optional[List[str]]rz
List[Dict]�eventsz
Optional[Any]�	ls_client�z!The order of the run in the tree.)r+�description�dotted_orderzThe trace id of the run.�trace_idFz3Whether to allow filesystem access for attachments.zOptional[bool]�dangerously_allow_filesystemc@seZdZdZdZdZdZdS)zRunTree.ConfigzPydantic model configuration.T�ignoreN)�__name__�
__module__�__qualname__�__doc__�arbitrary_types_allowed�allow_population_by_field_namer@r"r"r"r#�ConfigQs
rP)�pre�values�dictr!cCsx|�d�dur-|�d�dur-d|dvr|dd|d<nd|dvr-|ddd|d<|�d�dur8d|d<d|vrD|�d�|d<nd	|vrO|�d	�|d<|�d�sXd|d<|�d
�durf|d
j|d<d|vrot�|d<d|vr�d
|vr|d
j|d<n|d|d<tt|�d
i��|�d�dur�g|d<|�d�dur�g|d<|�d�dur�i|d<|�d�dur�i|d<|S)zAssign name to the run.r'N�
serializedr)����Unnamed�clientrC�_clientr5r7rGr@rBr�outputs�attachments)�get�popr)rrGr
rS�
setdefault)�clsrRr"r"r#�infer_defaultsXs>

zRunTree.infer_defaultscCsZ|�d�}|r
|��r
|St|d|d�}|dr'|djd||d<|S||d<|S)z#Ensure the dotted order of the run.rFr2r)r5�.)r[�strip�_create_current_dotted_orderrF)r^rR�current_dotted_orderr"r"r#�ensure_dotted_order|s
���zRunTree.ensure_dotted_orderrcCs|jdur	t�|_|jS)zReturn the client.N)rCr$��selfr"r"r#rW�s
zRunTree.clientrcCs|jSr-)rCrer"r"r#rX�szRunTree._clientcs |dkr	||_dSt��||�S)zSet the _client specially.rXN)rC�super�__setattr__)rfr'�value��	__class__r"r#rh�s
zRunTree.__setattr__�Union[Sequence[str], str]�NonecCs0t|t�r|g}|jdurg|_|j�|�dS)zAdd tags to the run.N)�
isinstancer&r�extend)rfrr"r"r#�add_tags�s


zRunTree.add_tagsr�Dict[str, Any]cCs2|jduri|_tt|j��di�}|�|�dS)zAdd metadata to the run.Nr)r@r
rSr]�update)rfr�	metadata_r"r"r#�add_metadata�s
zRunTree.add_metadatarYcC� |jduri|_|j�|�dS�z�Upsert the given outputs into the run.

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

        Returns:
            None
        N)rYrr)rfrYr"r"r#�add_outputs��
	zRunTree.add_outputs�inputscCrurv)ryrr)rfryr"r"r#�
add_inputs�rxzRunTree.add_inputs�TUnion[ls_schemas.RunEvent, Sequence[ls_schemas.RunEvent], Sequence[dict], dict, str]cCsh|jdurg|_t|t�r|j�|�dSt|t�r,|j�dt�tj��	�|d��dS|j�
|�dS)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)rBrnrS�appendr&rr.rr/�	isoformatro)rfrBr"r"r#�	add_event�s


��zRunTree.add_event)rY�error�end_timerBr�Optional[Dict]r��
Optional[str]r��Optional[datetime]�'Optional[Sequence[ls_schemas.RunEvent]]�Optional[Dict[str, Any]]cCsn|pt�tj�|_|dur|js||_n|j�|�|dur!||_|dur*|�|�|dur5|�	|�dSdS)z/Set the end time of the run and all child runs.N)
rr.rr/r�rYrrr�r�rt)rfrYr�r�rBrr"r"r#�end�s

�zRunTree.end)�run_idrTryrYr��reference_example_idr2r�rr@rZrr��Optional[ID_TYPE]rTr�rZ� Optional[ls_schemas.Attachments]cCs�|pd|i}tdid|�dt|��d|�d|pi�d|pi�d|�d|�d|�d	|	p/t�tj��d
|
�d|p7i�d|�d
|j�d|j�d|�d|
pYi�d|j��}|j	�
|�|S�d|j��}|j	�
|�|S)z Add a child run to the run tree.r'r)rTryrYr�r,r�r2r�r@r5r:rCrrZrHNr")r%rrr.rr/r<rCrHr8r�)rfr'r,r�rTryrYr�r�r2r�rr@rZ�serialized_�runr"r"r#�create_childs`����������	��
����
��������zRunTree.create_childcCsF|jhd�dd�}|jdur|j��|d<|jdur!|j��|d<|S)N>ryrYr8T)r3�exclude_noneryrY)rSry�copyrY)rf�	self_dictr"r"r#�_get_dicts_safe0s�

zRunTree._get_dicts_safe�exclude_child_runs�boolcCs~|��}|jjd	i|��|�d�}r-dd�|D�}|j�dt�tj	��
�t|�d��|s;|jD]
}|j
dd�q2dSdS)
z,Post the run tree to the API asynchronously.rZcSsg|]}t|��qSr")r&)�.0r'r"r"r#�
<listcomp>Bsz RunTree.post.<locals>.<listcomp>�uploaded_attachmentr}F)r�Nr")r�rW�
create_runr[rBr�rr.rr/r��setr8�post)rfr��kwargsrZ�keys�	child_runr"r"r#r�=s��
�zRunTree.postcs�|js|��dd�|j��D�}z|r,tdd�|jD�d���r,�fdd�|��D�}WntyG}zt�d|���WYd}~nd}~ww|j	j
|j|j|j
rW|j
��nd|jr`|j��nd|j|j|j|j|j|j|j|j|j|d�dS)	z5Patch the run tree to the API in a background thread.cSs i|]\}}t|t�r||�qSr")rn�tuple�r��a�vr"r"r#�
<dictcomp>Rs
��z!RunTree.patch.<locals>.<dictcomp>css"�|]}|�d�dkr|VqdS)r'r�N)r[)r��evr"r"r#�	<genexpr>Ys���z RunTree.patch.<locals>.<genexpr>Ncs"i|]
\}}|�dvr||�qS)rr"r���uploadedr"r#r�as
�z'Error filtering attachments to upload: )r'r�ryrYr�r7r�r�rFrGrBrr@rZ)r�r�rZ�items�nextrB�	Exception�logger�warningrW�
update_runr'r)ryr�rYr�r7r�rFrGrr@)rfrZ�er"r�r#�patchNsL���
����
�z
RunTree.patchcCsdS)z"Wait for all _futures to complete.Nr"rer"r"r#�waityszRunTree.waitcCs|jj|d�S)zReturn the URL of the run.)r�)rW�get_run_urlrer"r"r#�get_url}szRunTree.get_urlr�rcKs t|i}tt|j|fi|���S)zwCreate a new 'child' span from the provided dotted order.

        Returns:
            RunTree: The new span.
        )�LANGSMITH_DOTTED_ORDERr
r%�from_headers)r^rFr��headersr"r"r#�from_dotted_order�s�zRunTree.from_dotted_order�config�Optional[dict]c
s�zddlm}m}ddlm}m}ddlm�Wnty)}ztd�|�d}~ww|dur=|t	|t
�r9t||�nd�}nt||�}|�d�}	r�t	|	||f�r�|	j
r�t�fdd	�|	jD�d�}
r�|
j�t|	j
��}r�|jr�|j}|j|d
<|j|d<|j|d<|j|d
<|j|d<tt|jp�g|�dg���|d<|j|d<|�di�}
|
�di�}|�|j�nt|
d�r�|	j
|
j vr�|
j |	j
d}ndS|
j!|d<|
j"|d<t#j$|fi|��SdS)z�Create 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�	callbacksc3s�|]
}t|��r|VqdSr-)rn)r��tr�r"r#r��s�z/RunTree.from_runnable_config.<locals>.<genexpr>r,ryrYr2r�rr'r@r�	order_map�rWr:)%� langchain_core.callbacks.managerr�r��langchain_core.runnablesr�r�� langchain_core.tracers.langchainr��ImportErrorrnrSr
r[r7r��handlers�run_mapr&rFr,ryrYr2r��sortedr�rr'r]rrr�hasattrr�rWr:r%r�)r^r�r�r�r�r�r�r��config_�cb�tracerr�rF�extra_rsr"r�r#�from_runnable_config�s^�����
�����




"


zRunTree.from_runnable_configr��-Mapping[Union[str, bytes], Union[str, bytes]]cKs||��}ttt|�t��}|s#ttt|�t��}|sdS|�d�}|�	�}t
|�}|dd}||d<|dd|d<||d<t|�d	krO|d
d|d<|�d�pYt�
tj�|d<|�d
�pbd|d
<|�d�pkd|d<t�|�}	|	jsy|	jr�|�di�|d<|d�di�|dd<i|	j�|dd�}
|
|dd<tt|	j|�dg���}||d<|	jr�|	j|d<tdi|��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.
        Nrrr�rGrUr)rF����r7r2r,r*r'�parentr@rrr:r")r�r
r	r&r[r��bytes�LANGSMITH_DOTTED_ORDER_BYTES�decodera�_parse_dotted_order�lenrr.rr/�_Baggager�rrr]r�r�r:r%)r^r�r��	init_args�langsmith_trace�langsmith_trace_bytes�parent_dotted_order�parsed_dotted_orderrG�baggagerrr"r"r#r��sF�
�
�
zRunTree.from_headers�Dict[str, str]cCsBi}|jr|j|t�<t|j�di�|j|jd�}|��|d<|S)z.Return the RunTree as a dictionary of headers.r�rrr:r�)	rGrFr�r�r@r[rr<�	to_header)rfr�r�r"r"r#�
to_headerss�zRunTree.to_headersc	Cs&d|j�d|j�d|j�d|j�d�	S)z5Return a string representation of the RunTree object.zRunTree(id=z, name='z
', run_type='z', dotted_order='z'))r)r'r,rFrer"r"r#�__repr__s���zRunTree.__repr__)rRrSr!rS)r!r)r!r)rrlr!rm)rrqr!rm)rYrqr!rm)ryrqr!rm)rBr{r!rm)rYr�r�r�r�r�rBr�rr�r!rm)r*)r'r&r,rr�r�rTr�ryr�rYr�r�r�r�r>r2r�r�r�rrAr@r�rZr�r!r%)T)r�r�r!rm)r!rm�r!r&)rFr&r�rr!r%)r�r�r�rr!r4)r�r�r�rr!r4)r!r�)2rJrKrLrM�__annotations__rrr)r,r2r5�listr8r<r?rSr@rrBrCrFrGrHrPrr_rd�propertyrWrXrhrprtrwrzr�r�r�r�r�r�r�r��classmethodr�r�r�r�r��
__classcell__r"r"rjr#r%2s�
����#





'���)

+
@
8
r%c@sHeZdZdZ			ddd	d
�Zedd
d��Zeddd��Zddd�ZdS)r�zBaggage header information.Nr�Optional[Dict[str, str]]rrAr:r�cCs|pi|_|pg|_||_dS)zInitialize the Baggage object.Nr�)rfrrr:r"r"r#�__init__#s


z_Baggage.__init__�header_valuer!c	
Cs�|s|�Si}g}d}z8|�d�D]0}|�dd�\}}|tkr)t�tj�|��}q|tkr7tj�|��d�}q|tkrAtj�|�}qWnt	y]}zt
�d|���WYd}~nd}~ww||||d�S)z4Create a Baggage object from the given header value.N�,�=r�zError parsing baggage header: r�)�split�LANGSMITH_METADATA�json�loads�urllib�parse�unquote�LANGSMITH_TAGS�LANGSMITH_PROJECTr�r�r�)	r^r�rrr:�item�keyrir�r"r"r#�from_header.s*����z_Baggage.from_headerr��Mapping[Union[str, bytes], Any]cCsBd|vr|�|d�Sd|vr|�tt|d��d��S|�d�S)Nr�sbaggager)r�r
r�r�)r^r�r"r"r#r�Ds

z_Baggage.from_headersr&cCs�g}|jrt|j�}|�t�dtj�|����|jr/d�|j�}|�t�dtj�|����|j	rA|�t�dtj�|j	����d�|�S)z,Return the Baggage object as a header value.z	metadata=r�ztags=zproject=)
rrr��LANGSMITH_PREFIXr�r��quoter�joinr:)rfr��serialized_metadata�serialized_tagsr"r"r#r�Ms 
���
z_Baggage.to_header)NNN)rr�rrAr:r�)r�r�r!r�)r�r�r!r�r�)	rJrKrLrMr�r�r�r�r�r"r"r"r#r� s�r�rFr&�List[Tuple[datetime, UUID]]cCs|�d�}dd�|D�S)zParse the dotted order string.r`cSs0g|]}t�|dd�d�t|dd��f�qS)Ni����%Y%m%dT%H%M%S%fZ)r�strptimer)r��partr"r"r#r�ds"��z'_parse_dotted_order.<locals>.<listcomp>)r�)rF�partsr"r"r#r�as
�r�r2r�r�r>cCs,|pt�tj�}|pt�}|�d�t|�S)z Create the current dotted order.r)rr.rr/r�strftimer&)r2r��st�id_r"r"r#rbjs
rb)r rr!r)rFr&r!r)r2r�r�r>r!r&)=rM�
__future__rr��logging�sysrr�typingrrrrr	r
rrr
�uuidrr�pydantic.v1rrr��pydantic�	threading�urllib.parser��	langsmithr�
ls_schemasr�langsmith.clientrrrrr�	getLoggerrJr�r��internr��encoder�r�r�r�rr��Lock�_LOCKr$�RunBaser%r�r�rbr6r"r"r"r#�<module>sH,�


q
A