§
    ~Štj~Ó  ã                  óZ  — U d Z ddlmZ ddlZddlZddlZddl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mZ ddlmZ ddlmZmZmZmZ dd	lmZmZ ddl m!c 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dl,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3  ej4        e5¦  «        Z6 G d„ de¦  «        Z7 G d„ ded¬¦  «        Z8 G d„ ded¬¦  «        Z9 G d„ ded¬¦  «        Z: e;h d£¦  «        Z<de=d<    e;dh¦  «        Z>de=d<    e;h d£¦  «        Z?de=d <   dad"„Z@dbd%„ZAdcd'„ZBd(ZC ejD        eC› d)�¦  «        ZEeE F                    d*¦  «        ZG ejD        eC› d+�¦  «        ZH ejD        eC› d,�¦  «        ZI ejD        eC› d-�¦  «        ZJ ejD        eC› d.�¦  «        ZK ejD        d/¦  «        ZL ed eM¦   «         ¦  «        ZN ejO        ¦   «         ZP ejQ        eee:                           d0d¬1¦  «        ZR ejQ        eeS                  d2d¬1¦  «        ZT ed eM¦   «         ¦  «        ZUd3„ ZVd4ZWddd7„ZXeUeUeUeUeUfded@„ZYdfdC„ZZ G dD„ dEe%j[        ¦  «        Z\ G dF„ dG¦  «        Z] ej^        dH¬I¦  «        dgdL„¦   «         Z_dhdM„Z`didQ„ZadjdS„ZbdkdW„Zce"jd        aed9e=dX<   dEdEgZfdld]„Zg G d^„ d_e¦  «        Zhdmd`„ZidS )nzSchemas for the LangSmith API.é    )ÚannotationsN)ÚMappingÚSequence)ÚdatetimeÚtimezone)ÚAnyÚ
NamedTupleÚOptionalÚUnionÚcast)ÚUUID)Ú
ConfigDictÚFieldÚPrivateAttrÚmodel_validator)ÚNotRequiredÚ	TypedDict)Úschemas)Úutils)Ú_v2_migration_utils)Úuuid7Úuuid7_deterministic)ÚID_TYPEÚ
RUN_TYPE_TÚClientÚ_dumps_jsonÚ_ensure_uuid)Úuuid7_from_datetimec                  ó   — e Zd ZU dZded<   dS )Ú
ApiKeyAuthz*API key authentication for write replicas.ÚstrÚapi_keyN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úQ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/run_trees.pyr    r       s   € € € € € € Ø4Ð4à€L€L�L€L€Lr*   r    c                  ó(   — e Zd ZU dZded<   ded<   dS )ÚServiceAuthz9Service-to-service JWT authentication for write replicas.r!   Úservice_keyúNotRequired[str]Ú	tenant_idNr#   r)   r*   r+   r-   r-   %   s0   € € € € € € ØCÐCàÐÐÑØÐÐÑÐÐr*   r-   F)Útotalc                  óF   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   dS )	ÚAuthHeadersz1Custom authentication headers for write replicas.r!   r"   r.   r0   ÚauthorizationÚcookieNr#   r)   r*   r+   r3   r3   ,   sI   € € € € € € Ø;Ð;à€L€L�LØÐÐÑØ€N€N�NØÐÐÑØ€K€K�K€K€Kr*   r3   c                  ó\   — e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   	 ded<   ded<   dS )ÚWriteReplicaz+Configuration for a write replica endpoint.úOptional[str]Úapi_urlr/   r"   r3   ÚauthÚproject_nameÚboolÚprimaryúOptional[dict]ÚupdatesúOptional[Client]ÚclientNr#   r)   r*   r+   r7   r7   6   st   € € € € € € Ø5Ð5àÐÐÑØÐÐÑØÐÐÑØÐÐÑØ€M€M�Mðð ÐÐÑØÐÐÑð
ð 
r*   r7   >   r=   r?   r;   úfrozenset[str]Ú_HEADER_SAFE_REPLICA_FIELDSÚrerootÚ_HEADER_REQUIRED_UPDATE_FIELDS>   ÚtagsrD   ÚmetadataÚ"_HEADER_SAFE_UPDATE_FIELDS_DEFAULTÚreturnc                 ó¨   — t          j        d¦  «        } | €t          S d„ |                      d¦  «        D ¦   «         }t	          t
          |z  ¦  «        S )zöAllow-list of replica ``updates`` keys accepted from a ``baggage`` header.

    Overridable via ``LANGSMITH_BAGGAGE_ALLOWED_UPDATE_FIELDS`` (comma-separated);
    replaces the default ``{reroot, metadata, tags}`` but always keeps ``reroot``.
    ÚBAGGAGE_ALLOWED_UPDATE_FIELDSNc                ó^   — h | ]*}|                      ¦   «         ¯|                      ¦   «         ’Œ+S r)   )Ústrip)Ú.0Úfields     r+   ú	<setcomp>z1_get_header_safe_update_fields.<locals>.<setcomp>g   s-   € ÐMÐMÐM E¸u¿{º{¹}¼}ÐM�%—+’+‘-”-ÐMÐMÐMr*   ú,)r   Úget_env_varrH   ÚsplitÚ	frozensetrE   )ÚrawÚ
configureds     r+   Ú_get_header_safe_update_fieldsrW   ^   sQ   € õ Ô
Ð;Ñ
<Ô
<€CØ
€{Ý1Ð1ØMÐM¨S¯YªY°s©^¬^ÐMÑMÔM€JÝÕ3°jÑ@ÑAÔAÐAr*   r?   r   c                ó  ‡— t          | t          ¦  «        s| S t          ¦   «         Šˆfd„|                      ¦   «         D ¦   «         }ˆfd„| D ¦   «         }|r6t                               dt          |¦  «        t          ‰¦  «        ¦  «         |S )z©Filter untrusted header-supplied ``updates`` to the allow-list (fail closed).

    Non-dict input passes through unchanged; dropped fields are logged, never raised.
    c                ó$   •— i | ]\  }}|‰v ¯	||“ŒS r)   r)   )rN   ÚkeyÚvalueÚalloweds      €r+   ú
<dictcomp>z,_sanitize_header_updates.<locals>.<dictcomp>s   s$   ø€ ÐPÐPÐP¡
  UÀÈÀÀ��eÀÀÀr*   c                ó   •— g | ]}|‰v¯|‘Œ	S r)   r)   )rN   rZ   r\   s     €r+   ú
<listcomp>z,_sanitize_header_updates.<locals>.<listcomp>t   s#   ø€ Ð<Ð<Ð<�s¨°GÐ);Ð);ˆsÐ);Ð);Ð);r*   aM  Ignored non-allow-listed field(s) %s in a distributed-tracing `baggage` replica `updates` payload; they are dropped for security reasons. If these come from a trusted upstream and are legitimate, add them to the allow-list via the LANGSMITH_BAGGAGE_ALLOWED_UPDATE_FIELDS environment variable (comma-separated). Currently allowed: %s.)Ú
isinstanceÚdictrW   ÚitemsÚloggerÚwarningÚsorted)r?   Ú	sanitizedÚdroppedr\   s      @r+   Ú_sanitize_header_updatesrh   k   s    ø€ õ
 �g�tÑ$Ô$ð ØˆÝ,Ñ.Ô.€GØPÐPÐPÐP¨g¯mªm©o¬oÐPÑPÔP€IØ<Ð<Ð<Ð<˜gÐ<Ñ<Ô<€GØð 

Ý�Šð8õ �7‰OŒOÝ�7‰OŒOñ		
ô 		
ð 		
ð Ðr*   Úreplicac                ó"  — d„ |                       ¦   «         D ¦   «         }d|v r0t          |d         t          ¦  «        s|                     d¦  «         d|v r%t	          |                     d¦  «        ¦  «        |d<   t          t          |¦  «        S )Nc                ó,   — i | ]\  }}|t           v ¯||“ŒS r)   )rC   )rN   rZ   r[   s      r+   r]   z/_filter_replica_for_headers.<locals>.<dictcomp>„   s4   € ð ð ð áˆC�ØÕ-Ð-Ð-ð 	ˆUà-Ð-Ð-r*   r=   r?   )rb   r`   r<   Úpoprh   Úgetr   r7   )ri   Úfiltereds     r+   Ú_filter_replica_for_headersro   ƒ   s”   € ðð à!Ÿ-š-™/œ/ðñ ô €Hð
 �HÐÐ¥Z°¸Ô0CÅTÑ%JÔ%JÐØ�Š�YÑÔÐØ�HÐÐÝ6°x·|²|ÀIÑ7NÔ7NÑOÔOˆ�ÑÝ•˜hÑ'Ô'Ð'r*   z
langsmith-Útraceúutf-8rG   rF   ÚprojectÚreplicasÚ__omit_auto_outputsÚ	_REPLICAS©ÚdefaultÚ_DISTRIBUTED_PARENT_IDc                óè   — t          | t          ¦  «        r| S t          | t          ¦  «        s8t          | d¦  «        r(t	          | j        ¦  «        r|                      ¦   «         S t          | ¦  «        S )NÚ
model_dump)r`   ra   ÚtypeÚhasattrÚcallablerz   )r[   s    r+   Ú_coerce_to_dictr~   §   sr   € Ý�%�ÑÔð Øˆå�u�dÑ#Ô#ð"å�E˜<Ñ(Ô(ð"õ �UÔ%Ñ&Ô&ð"ð
 ×ÒÑ!Ô!Ð!Ý�‰;Œ;Ðr*   é$   Úinit_kwargsr   c                 ó‚   — t           €2t          5  t           €t          di | ¤Ža d d d ¦  «         n# 1 swxY w Y   t           S )Nr)   )Ú_CLIENTÚ_LOCKr   )r€   s    r+   Úget_cached_clientr„   ·   s�   € å€Ýð 	0ð 	0ÝˆÝ Ð/Ð/ ;Ð/Ð/�ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0õ €Ns   �/¯3¶3rA   r@   ÚenabledúOptional[bool]r;   r8   úOptional[list[str]]úOptional[dict[str, Any]]c                óü  — t           5  | t          ur| a|t          ur+t          j                             |¦  «         |t          _        |t          ur+t          j                             |¦  «         |t          _        |t          ur+t          j	                             |¦  «         |t          _
        |t          ur+t          j                             |¦  «         |t          _        ddd¦  «         dS # 1 swxY w Y   dS )aó	  Configure global LangSmith tracing context.

    This function allows you to set global configuration options for LangSmith
    tracing that will be applied to all subsequent traced operations. It modifies
    context variables that control tracing behavior across your application.

    Do this once at startup to configure the global settings in code.

    If, instead, you wish to only configure tracing for a single invocation,
    use the `tracing_context` context manager instead.

    Args:
        client: A LangSmith Client instance to use for all tracing operations.

            If provided, this client will be used instead of creating new clients.

            Pass `None` to explicitly clear the global client.
        enabled: Whether tracing is enabled.

            Can be:

            - `True`: Enable tracing and send data to LangSmith
            - `False`: Disable tracing completely
            - `'local'`: Enable tracing but only store data locally
            - `None`: Clear the setting (falls back to environment variables)
        project_name: The LangSmith project name where traces will be sent.

            This determines which project dashboard will display your traces.

            Pass `None` to explicitly clear the project name.
        tags: A list of tags to be applied to all traced runs.

            Tags are useful for filtering and organizing runs in the LangSmith UI.

            Pass `None` to explicitly clear all global tags.
        metadata: A dictionary of metadata to attach to all traced runs.

            Metadata can store any additional context about your runs.

            Pass `None` to explicitly clear all global metadata.

    Examples:
        Basic configuration:
        >>> import langsmith as ls
        >>> # Enable tracing with a specific project
        >>> ls.configure(enabled=True, project_name="my-project")

        Set global trace masking:
        >>> def hide_keys(data):
        ...     if not data:
        ...         return {}
        ...     return {k: v for k, v in data.items() if k not in ["key1", "key2"]}
        >>> ls.configure(
        ...     client=ls.Client(
        ...         hide_inputs=hide_keys,
        ...         hide_outputs=hide_keys,
        ...     )
        ... )

        Adding global tags and metadata:
        >>> ls.configure(
        ...     tags=["production", "v1.0"],
        ...     metadata={"environment": "prod", "version": "1.0.0"},
        ... )

        Disabling tracing:
        >>> ls.configure(enabled=False)
    N)rƒ   Ú	_SENTINELr‚   Ú_contextÚ_TRACING_ENABLEDÚsetÚ_GLOBAL_TRACING_ENABLEDÚ_PROJECT_NAMEÚ_GLOBAL_PROJECT_NAMEÚ_TAGSÚ_GLOBAL_TAGSÚ	_METADATAÚ_GLOBAL_METADATA)rA   r…   r;   rF   rG   s        r+   Ú	configurer•   À   s&  € õX 
ð 1ð 1Ø�Ð"Ð"ØˆGØ�)Ð#Ð#ÝÔ%×)Ò)¨'Ñ2Ô2Ð2Ø/6�HÔ,Ø�yÐ(Ð(ÝÔ"×&Ò& |Ñ4Ô4Ð4Ø,8�HÔ)Ø•yÐ Ð ÝŒN×Ò˜tÑ$Ô$Ð$Ø$(�HÔ!Ø�9Ð$Ð$ÝÔ×"Ò" 8Ñ,Ô,Ð,Ø(0�HÔ%ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1s   ˆCC1Ã1C5Ã8C5Údataú!ls_schemas.ExtractedUsageMetadatac                ó~   — h d£}t          |                      ¦   «         ¦  «        |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: )r�   ÚkeysÚ
ValueError)r–   Úallowed_keysÚ
extra_keyss      r+   Ú!validate_extracted_usage_metadatar§     sT   € ðð ð €Lõ �T—Y’Y‘[”[Ñ!Ô! LÑ0€JØð MÝÐK¸zÐKÐKÑLÔLÐLØ€Kr*   c                  óp  ‡ — 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¬¦  «        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-d.¬)¦  «        Zd/ed0<    edd1¬)¦  «        Zd2ed3<    ed¬¦  «        Zded4<    eddd5¬6¦  «        Z ed7¬8¦  «        dƒd<„¦   «         Z ed=¬8¦  «        d„d>„¦   «         Ze d…d@„¦   «         Z!e d†dB„¦   «         Z"e#j$        d‡dC„¦   «         Z%ˆ fdD„Z&e'e'e'e'e'dEœdˆdN„Z(d‰dP„Z)dŠdQ„Z*d‹dR„Z+dŒdS„Z,d�dU„Z-ddddddVœdŽd]„Z.	 d�dddddddddddd^œd�df„Z/dg„ Z0d‘dj„Z1	 d’ddkœd“dn„Z2d”d•dq„Z3d-drœd–dt„Z4d—du„Z5d˜dv„Z6d˜dw„Z7e8d™dz„¦   «         Z9e8dšd|„¦   «         Z:e8d›d„¦   «         Z;dœd�„Z<d‚„ Z=ˆ xZ>S )�ÚRunTreez1Run Schema with back-references for posting runs.r!   Úname)Údefault_factoryr   ÚidÚchainrv   Úrun_typec                 ó>   — t          j        t          j        ¦  «        S ©N)r   Únowr   Úutcr)   r*   r+   ú<lambda>zRunTree.<lambda>:  s   € ½¼ÅhÄlÑ9SÔ9S€ r*   r   Ú
start_timeNT)rw   ÚexcludeúOptional[RunTree]Ú
parent_runr8   Úparent_dotted_order)r«   rµ   zlist[RunTree]Ú
child_runsc                 ó,   — t          j        ¦   «         pdS )Nrw   )r   Úget_tracer_projectr)   r*   r+   r³   zRunTree.<lambda>C  s   € ¥Ô 8Ñ :Ô :Ð G¸i€ r*   r;   )r«   ÚaliasÚsession_nameÚ
project_id)rw   r¼   úOptional[UUID]Ú
session_idra   Úextrar‡   rF   z
list[dict]ÚeventszOptional[Any]Ú	ls_clientÚ z!The order of the run in the tree.)rw   ÚdescriptionÚdotted_orderzThe trace id of the run.Útrace_idFz3Whether to allow filesystem access for attachments.r†   Údangerously_allow_filesystemz8Projects to replicate this run to with optional updates.ú Optional[Sequence[WriteReplica]]rs   Ú_cached_urlÚignore)Úarbitrary_types_allowedÚpopulate_by_namerÁ   Úbefore)ÚmodeÚvaluesúdict[str, Any]rI   c                ó4  — |                      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<   |j        |d<   d|vrZd|v r!|d         �t	          |d         ¦  «        |d<   n5t          j        t          j        ¦  «        }||d<   t	          |¦  «        |d<   d|vr|�|j	        |d<   n|d         |d<   t          t          |                     di ¦  «        ¦  «         |                      d¦  «        €g |d<   |                      d¦  «        €g |d<   |                      d¦  «        €i |d<   dD ]@}|                      |¦  «        }|�'t          |t          ¦  «        st          |¦  «        ||<   ŒA|                      d¦  «        €i |d<   |                      d¦  «        €t                                ¦   «         |d<   t!          |d         ¦  «        |d<   |S )zAssign name to the run.rª   NÚ
serializedr¬   éÿÿÿÿÚUnnamedrA   rÃ   Ú_clientr·   Úparent_run_idr¸   r´   rÇ   rÁ   rÂ   rF   Úoutputs)ÚinputsrØ   Úattachmentsrs   )rm   rl   r¬   rÆ   r   r   r±   r   r²   rÇ   r   ra   Ú
setdefaultr`   r~   ru   Ú_ensure_write_replicas)ÚclsrÐ   r·   r±   Ú_keyÚ_vals         r+   Úinfer_defaultszRunTree.infer_defaultsa  sÎ  € ð �:Š:�fÑÔÐ%¨&¯*ª*°\Ñ*BÔ*BÐ*NØ˜ Ô-Ð-Ð-Ø!'¨Ô!5°fÔ!=��v‘�Ø˜ Ô-Ð-Ð-Ø!'¨Ô!5°dÔ!;¸BÔ!?��v‘Ø�:Š:�fÑÔÐ%Ø&ˆF�6‰NØ�vÐÐØ"(§*¢*¨XÑ"6Ô"6ˆF�;ÑÐØ˜&Ð Ð Ø"(§*¢*¨YÑ"7Ô"7ˆF�;ÑØ�zŠz˜+Ñ&Ô&ð 	'Ø"&ˆF�;ÑØ—Z’Z ¨dÑ3Ô3ˆ
ØÐ!Ø&0¤mˆF�?Ñ#Ø,6Ô,CˆFÐ(Ñ)Ø�vÐÐà˜vÐ%Ð%¨&°Ô*>Ð*JÝ2°6¸,Ô3GÑHÔH��t‘�å”l¥8¤<Ñ0Ô0�Ø'*��|Ñ$Ý2°3Ñ7Ô7��t‘Ø˜VÐ#Ð#ØÐ%Ø%/Ô%8��zÑ"Ð"à%+¨D¤\��zÑ"Ý�T�6×$Ò$ W¨bÑ1Ô1Ñ2Ô2Ð2Ø�:Š:�hÑÔÐ'Ø!ˆF�8ÑØ�:Š:�fÑÔÐ%ØˆF�6‰NØ�:Š:�iÑ Ô Ð(Ø "ˆF�9ÑØ)ð 	5ð 	5ˆDØ—:’:˜dÑ#Ô#ˆDØÐ­
°4½Ñ(>Ô(>ÐÝ.¨tÑ4Ô4��t‘øØ�:Š:�mÑ$Ô$Ð,Ø$&ˆF�=Ñ!Ø�:Š:�jÑ!Ô!Ð)Ý!*§¢¡¤ˆF�:ÑÝ3°F¸:Ô4FÑGÔGˆˆzÑØˆr*   Úafterc                ó´   — | j         }|r|                     ¦   «         r| S t          | j        | j        ¦  «        }| j        }|�|dz   |z   | _         n|| _         | S )z#Ensure the dotted order of the run.Nú.)rÆ   rM   Ú_create_current_dotted_orderr´   r¬   r¸   )ÚselfÚcurrent_dotted_orderr¸   s      r+   Úensure_dotted_orderzRunTree.ensure_dotted_order”  st   € ð  $Ô0ÐØð 	Ð$8×$>Ò$>Ñ$@Ô$@ð 	ØˆKÝ;¸D¼OÈTÌWÑUÔUÐØ"Ô6ÐØÐ*Ø 3°cÑ 9Ð<PÑ PˆDÔÐà 4ˆDÔØˆr*   r   c                óD   — | j         €t          ¦   «         | _         | j         S )zReturn the client.)rÃ   r„   ©rå   s    r+   rA   zRunTree.client¢  s!   € ð
 Œ>Ð!Ý.Ñ0Ô0ˆDŒNØŒ~Ðr*   r@   c                ó   — | j         S r°   )rÃ   ré   s    r+   rÖ   zRunTree._client«  s   € ð Œ~Ðr*   c                ó‚   — t          | j        ¦  «        d         d         }|                     t          j        ¬¦  «        S )z.Return the start time of the trace (root run).r   )Útzinfo)Ú_parse_dotted_orderrÆ   Úreplacer   r²   )rå   Údts     r+   Útrace_start_timezRunTree.trace_start_time°  s4   € õ ! Ô!2Ñ3Ô3°AÔ6°qÔ9ˆØ�zŠz¥¤ˆzÑ.Ô.Ð.r*   c                óf   •— |dk    r	|| _         dS t          ¦   «                              ||¦  «        S )zSet the `_client` specially.rÖ   N)rÃ   ÚsuperÚ__setattr__)rå   rª   r[   Ú	__class__s      €r+   ró   zRunTree.__setattr__¶  s5   ø€ ð �9ÒÐØ"ˆDŒNˆNˆNå‘7”7×&Ò& t¨UÑ3Ô3Ð3r*   )rÙ   rØ   rF   rG   Úusage_metadatarÙ   úOptional[Mapping[str, Any]]rØ   úOptional[Sequence[str]]rG   rõ   ú+Optional[ls_schemas.ExtractedUsageMetadata]ÚNonec               óì  — |t           urt          |¦  «        | _        |t           ur0| j                             di ¦  «                             |pi ¦  «         |t           ur(d| j        d<   |€i | _        nt          |¦  «        | _        |t           ur-d| j        t          <   |€i | _	        nt          |¦  «        | _	        |t           ur-t          |¦  «        | j                             di ¦  «        d<   dS dS )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
        rG   FÚinputs_is_truthyNTrõ   )ÚNOT_PROVIDEDÚlistrF   rÁ   rÛ   ÚupdaterÙ   r~   ÚOVERRIDE_OUTPUTSrØ   r§   )rå   rÙ   rØ   rF   rG   rõ   s         r+   r�   zRunTree.set¾  sþ   € ð8 •|Ð#Ð#Ý˜T™
œ
ˆDŒIØ�<Ð'Ð'ØŒJ×!Ò! *¨bÑ1Ô1×8Ò8¸¸ÀRÑHÔHÐHØ�Ð%Ð%ð .3ˆDŒJÐ)Ñ*Øˆ~Ø �”�å-¨fÑ5Ô5�”Ø�,Ð&Ð&Ø+/ˆDŒJÕ'Ñ(ØˆØ!�”�å.¨wÑ7Ô7�”Ø¥Ð-Ð-å1°.ÑAÔAð ŒJ×!Ò! *¨bÑ1Ô1Ð2BÑCÐCÐCð .Ð-r*   úUnion[Sequence[str], str]c                ó†   — t          |t          ¦  «        r|g}| j        €g | _        | j                             |¦  «         dS )zAdd tags to the run.N)r`   r!   rF   Úextend)rå   rF   s     r+   Úadd_tagszRunTree.add_tagsñ  sF   € å�d�CÑ Ô ð 	Ø�6ˆDØŒ9ÐØˆDŒIØŒ	×Ò˜ÑÔÐÐÐr*   c                ó¨   — | j         €i | _         t          t          | j         ¦  «                             di ¦  «        }|                     |¦  «         dS )zAdd metadata to the run.NrG   )rÁ   r   ra   rÛ   rþ   )rå   rG   Ú	metadata_s      r+   Úadd_metadatazRunTree.add_metadataù  sL   € àŒ:ÐØˆDŒJÝ�t T¤ZÑ0Ô0×;Ò;¸JÈÑKÔKˆ	Ø×Ò˜Ñ"Ô"Ð"Ð"Ð"r*   c                óV   — | j         €i | _         | j                              |¦  «         dS )z„Upsert the given outputs into the run.

        Args:
            outputs: A dictionary containing the outputs to be added.
        N)rØ   rþ   )rå   rØ   s     r+   Úadd_outputszRunTree.add_outputs   s/   € ð Œ<ÐØˆDŒLØŒ×Ò˜GÑ$Ô$Ð$Ð$Ð$r*   c                ój   — | j         €i | _         | j                              |¦  «         d| j        d<   dS )z�Upsert the given inputs into the run.

        Args:
            inputs: A dictionary containing the inputs to be added.
        NFrû   )rÙ   rþ   rÁ   )rå   rÙ   s     r+   Ú
add_inputszRunTree.add_inputs
  s>   € ð Œ;ÐØˆDŒKØŒ×Ò˜6Ñ"Ô"Ð"ð */ˆŒ
Ð%Ñ&Ð&Ð&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: 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)rÂ   r`   ra   Úappendr!   r   r±   r   r²   Ú	isoformatr  )rå   rÂ   s     r+   Ú	add_eventzRunTree.add_event  sÀ   € ð& Œ;ÐØˆDŒKÝ�f�dÑ#Ô#ð 	'ØŒK×Ò˜vÑ&Ô&Ð&Ð&Ð&Ý˜¥Ñ$Ô$ð 		'ØŒK×Òà#Ý$œL­¬Ñ6Ô6×@Ò@ÑBÔBØ%ðð ñô ð ð ð ð ŒK×Ò˜vÑ&Ô&Ð&Ð&Ð&r*   )rØ   ÚerrorÚend_timerÂ   rG   r>   r  r  úOptional[datetime]ú'Optional[Sequence[ls_schemas.RunEvent]]rˆ   c               ót  — |pt          j        t          j        ¦  «        | _        | j                             t          ¦  «        s:|�8t          |¦  «        }| j	        s|| _	        n| j	         
                    |¦  «         |�|| _        |�|                      |¦  «         |�|                      |¦  «         dS dS )z/Set the end time of the run and all child runs.N)r   r±   r   r²   r  rÁ   rm   rÿ   r~   rØ   rþ   r  r  r  )rå   rØ   r  r  rÂ   rG   Údict_outputss          r+   ÚendzRunTree.end9  s¾   € ð !Ð>¥H¤Lµ´Ñ$>Ô$>ˆŒð Œz�~Š~Õ.Ñ/Ô/ð 	6ØÐ"Ý.¨wÑ7Ô7�Ø”|ð 6Ø#/�D”L�Là”L×'Ò'¨Ñ5Ô5Ð5ØÐØˆDŒJØÐØ�NŠN˜6Ñ"Ô"Ð"ØÐØ×Ò˜hÑ'Ô'Ð'Ð'Ð'ð  Ðr*   )Úrun_idrÓ   rÙ   rØ   r  Úreference_example_idr´   r  rF   rÁ   rÚ   r   r  úOptional[ID_TYPE]rÓ   r  rÚ   ú Optional[ls_schemas.Attachments]c               óþ  — |	�X| j         �Q|	| j         k     r1t                               d|› d|	› d| j         › d| j        › d�	¦  «         t	          |	| j         ¦  «        }	|pd|i}|r9t          |¦  «        }|                     d¦  «        pi                      ¦   «         }ni }i }| j        pi                      d¦  «        pi }i |¥|¥|d<   |	pt          j
        t          j        ¦  «        }t          |d	¬
¦  «        }|€t          |¦  «        }t          di d|“d|“d|“d|pi “d|pi “d|“d|“d|“d|“d|
“d|“d| “d| j        “d| j        “d| j        “d|“d|pi “d| j        “Ž}| j                             |¦  «         |S )z Add a child run to the run tree.NzAdjusting child run 'z' start_time from z to z- to maintain timestamp ordering with parent 'ú'rª   rG   T)Úaccept_nullr¬   rÓ   rÙ   rØ   r  r®   r  r´   r  rÁ   r·   r;   rs   rÃ   rF   rÚ   rÈ   r)   )r´   rc   Údebugrª   Úmaxra   rm   ÚcopyrÁ   r   r±   r   r²   r   r   r©   r½   rs   rÃ   rÈ   r¹   r  )rå   rª   r®   r  rÓ   rÙ   rØ   r  r  r´   r  rF   rÁ   rÚ   Úserialized_Úchild_extraÚ
child_metaÚparent_metaÚchild_start_timeÚrun_id_Úruns                        r+   Úcreate_childzRunTree.create_childT  sd  € ð( Ð! d¤oÐ&AØ˜DœOÒ+Ð+Ý—’ð,¨Dð ,ð ,ÀJð ,ð ,Øœ/ð,ð ,à#œyð,ð ,ð ,ñô ð õ
 ˜Z¨¬Ñ9Ô9ˆJà Ð2 V¨T NˆØð 	Ý˜u™+œ+ˆKØŸ)š) JÑ/Ô/Ð5°2×;Ò;Ñ=Ô=ˆJˆJàˆKØˆJØ”zÐ' R×,Ò,¨ZÑ8Ô8Ð>¸BˆØ"? [Ð"?°JÐ"?ˆ�JÑà%ÐC­¬µh´lÑ)CÔ)CÐõ ˜v°4Ð8Ñ8Ô8ˆØˆ?Ý)Ð*:Ñ;Ô;ˆGÝð 
ð 
ð 
Ø�ð
àˆwð
ð #�{ð
ð �<˜Røð	
ð
 �M˜røð
ð �%ð
ð �Xð
ð "6Ð!5ð
ð (Ð'ð
ð �Xð
ð �+ð
ð �tð
ð Ô*Ð*ð
ð ”]�]ð
ð ”n�nð
ð  �ð!
ð" $Ð) røð#
ð$ *.Ô)JÐ)Jð%
ˆð( 	Œ×Ò˜sÑ#Ô#Ð#Øˆ
r*   c                ó\  — |                       h d£d¬¦  «        }| j        �hi }|                     di ¦  «        }| j                             ¦   «         D ]*\  }}t	          |t
          j        ¦  «        r|||<   Œ%|||<   Œ+||d<   |r||d<   | j        �| j                             ¦   «         |d<   |S )N>   rÙ   rØ   r¹   T)rµ   Úexclude_nonerÚ   rÙ   rØ   )	rz   rÙ   rm   rb   r`   Ú
ls_schemasÚ
AttachmentrØ   r$  )rå   Ú	self_dictÚinputs_rÚ   ÚkÚvs         r+   Ú_get_dicts_safezRunTree._get_dicts_safe˜  sÕ   € à—O’OØ7Ð7Ð7Àdð $ñ 
ô 
ˆ	ð Œ;Ð"àˆGØ#Ÿ-š-¨°rÑ:Ô:ˆKØœ×)Ò)Ñ+Ô+ð #ð #‘��1Ý˜a¥Ô!6Ñ7Ô7ð #Ø%&�K ‘N�Nà!"�G˜A‘J�JØ")ˆI�hÑØð 7Ø+6�	˜-Ñ(ØŒ<Ð#à#'¤<×#4Ò#4Ñ#6Ô#6ˆI�iÑ ØÐr*   Ú	parent_idÚrun_dictc                ó*  — |                      d¦  «        x}r½|                     d¦  «        }d}t          |¦  «        }t          |¦  «        D ],\  }}|t           d…         }t          |¦  «        |k    r|} nŒ-|�Y||dz   d…         }	d                     |	¦  «        |d<   |	r't          |	d         t           d…         ¦  «        |d<   n|d         |d<   t          |                      d¦  «        ¦  «        |k    r|                     dd¦  «         dS dS )	zêSlice the parent id from dotted order.

        Additionally check if the current run is a child of the parent. If so, update
        the parent_run_id to None, and set the trace id to the new root id after
        parent_id.
        rÆ   rã   Né   r   rÇ   r¬   r×   )rm   rS   r!   Ú	enumerateÚTIMESTAMP_LENGTHÚjoinr   rl   )
rå   r6  r7  rÆ   ÚsegsÚ	start_idxÚidxÚpartÚseg_idÚtrimmed_segss
             r+   Ú_slice_parent_idzRunTree._slice_parent_id®  s<  € ð $Ÿ<š<¨Ñ7Ô7Ð7ˆ<ð 	:Ø×%Ò% cÑ*Ô*ˆDØˆIÝ˜I™œˆIå& t™_œ_ð ð ‘	��TØÕ/Ð/Ð0Ð0Ô1�Ý�v‘;”; )Ò+Ð+Ø #�IØ�Eð ,ð Ð$à# I°¡M O OÔ4�à+.¯8ª8°LÑ+AÔ+A�˜Ñ(Øð :Ý+/°¸Q´ÕAQÐ@QÐ@RÐ@RÔ0SÑ+TÔ+T�H˜ZÑ(Ð(à+3°D¬>�H˜ZÑ(Ýˆx�|Š|˜OÑ,Ô,Ñ-Ô-°Ò:Ð:à�LŠL˜¨$Ñ/Ô/Ð/Ð/Ð/ð ;Ð:r*   ©r=   r?   r=   c               ó&  — |                       ¦   «         }|€|| j        k    r|S |rG|                     dd¦  «        r1t                               ¦   «         }|r|                      ||¦  «         |r2t          j        |¦  «        }||d<   |r|                     |¦  «         |S |d         }t          t          t          |¦  «        ¦  «        |¦  «        }|                     d¦  «        }	|	r+t          t          t          |	¦  «        ¦  «        |¦  «        }
nd}
|                     d¦  «        }|r+t          t          t          |¦  «        ¦  «        |¦  «        }nd}|                     d¦  «        rÙ|d                              d	¦  «        }g }|dd
…         D ]b}t          |t           d…         ¦  «        }t          ||¦  «        }|                     |dt           …         t          |¦  «        z   ¦  «         Œc|                     |d
         dt           …         t          |¦  «        z   ¦  «         d	                     |¦  «        }nd}t          j        |¦  «        }|                     ||
|||dœ¦  «         |r|                     |¦  «         |S )zDRewrites ids/dotted_order for a given project with optional updates.NrD   Fr½   r¬   rÇ   r×   rÆ   rã   rÔ   )r¬   rÇ   r×   rÆ   r½   )r5  r½   rm   rx   rC  r   Údeepish_copyrþ   r   r   r!   rS   r;  r  r<  )rå   r;   r?   r=   r7  Údistributed_parent_idÚdupÚold_idÚnew_idÚ	old_traceÚ	new_traceÚparentÚ
new_parentr=  Úrebuiltr@  rA  ÚreplÚdotteds                      r+   Ú_remap_for_projectzRunTree._remap_for_projectÌ  sª  € ð ×'Ò'Ñ)Ô)ˆØˆ?˜|¨tÔ/@Ò@Ð@ØˆOàð 	G�w—{’{ 8¨UÑ3Ô3ð 	GÝ$:×$>Ò$>Ñ$@Ô$@Ð!Ø$ð GØ×%Ò%Ð&;¸XÑFÔFÐFàð 	ÝÔ$ XÑ.Ô.ˆCØ".ˆC�ÑØð $Ø—
’
˜7Ñ#Ô#Ð#ØˆJà˜$”ˆÝ$¥T­#¨f©+¬+Ñ%6Ô%6¸ÑEÔEˆà—L’L Ñ,Ô,ˆ	Øð 	Ý+­Dµ°Y±´Ñ,@Ô,@À,ÑOÔOˆIˆIàˆIà—’˜oÑ.Ô.ˆØð 	Ý,­Tµ#°f±+´+Ñ->Ô->ÀÑMÔMˆJˆJàˆJà�<Š<˜Ñ'Ô'ð 
	Ø˜NÔ+×1Ò1°#Ñ6Ô6ˆDØˆGØ˜S˜b˜Sœ	ð Eð E�Ý˜dÕ$4Ð#4Ð#5Ð#5Ô6Ñ7Ô7�Ý*¨6°<Ñ@Ô@�Ø—’˜tÐ$6Õ&6Ð%6Ð$6Ô7½#¸d¹)¼)ÑCÑDÔDÐDÐDØ�NŠN˜4 œ8Ð$6Õ&6Ð%6Ð$6Ô7½#¸f¹+¼+ÑEÑFÔFÐFØ—X’X˜gÑ&Ô&ˆFˆFàˆFÝÔ  Ñ*Ô*ˆØ�
Š
àØ%Ø!+Ø &Ø ,ðð ñ	
ô 	
ð 	
ð ð 	 Ø�JŠJ�wÑÔÐØˆ
r*   Úexclude_child_runsr<   c                óP  — | j         rã| j         D ]Ú}|                     d¦  «        p| j        }|                     d¦  «        }|                      |||                     d¦  «        ¬¦  «        }t	          |¦  «        \  }}}}	}
}|                     d¦  «        p| j        }t          |d¦  «        s$t          dt          |¦  «        j	        › �¦  «        ‚ |j
        di |¤||||	|
|dœ¤Ž ŒÛn&|                      ¦   «         } | j        j
        di |¤Ž | j        rjd	„ | j        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.r;   r?   r=   rD  rA   Ú
create_runú6WriteReplica 'client' must be a langsmith.Client, got )r"   r9   r.   r0   r4   r5   c                ó,   — g | ]}t          |¦  «        ‘ŒS r)   )r!   )rN   rª   s     r+   r_   z RunTree.post.<locals>.<listcomp>+  s   € Ð;Ð;Ð; $•C˜‘I”IÐ;Ð;Ð;r*   Úuploaded_attachmentr  F)rS  Nr)   )rs   rm   r½   rR  Ú_extract_replica_authrA   r|   Ú	TypeErrorr{   r$   rU  r5  rÚ   rÂ   r  r   r±   r   r²   r  r�   r¹   Úpost)rå   rS  ri   r;   r?   r7  r9   r"   r.   r0   r4   r5   Úreplica_clientÚkwargsr£   Ú	child_runs                   r+   r[  zRunTree.post  s  € àŒ=ð 	-Øœ=ð ð �Ø&Ÿ{š{¨>Ñ:Ô:ÐO¸dÔ>O�Ø!Ÿ+š+ iÑ0Ô0�Ø×2Ò2Ø  '°7·;²;¸yÑ3IÔ3Ið 3ñ ô �õ *¨'Ñ2Ô2ñ P�˜ +¨y¸-Èð ")§¢¨XÑ!6Ô!6Ð!E¸$¼+�Ý˜~¨|Ñ<Ô<ð Ý#ð?Ý# NÑ3Ô3Ô<ð?ð ?ñô ð ð *�Ô)ð ð Øðà#Ø#Ø +Ø'Ø"/Ø!ðð ð ð ð ð ðð2 ×)Ò)Ñ+Ô+ˆFØ"ˆDŒKÔ"Ð,Ð, VÐ,Ð,Ð,ØÔð 	Ø;Ð;¨$Ô*:Ð;Ñ;Ô;ˆDØŒK×Òà1Ý$œL­¬Ñ6Ô6×@Ò@ÑBÔBÝ" 4™yœyðð ñô ð ð "ð 	9Ø!œ_ð 9ð 9�	Ø—’°%�Ñ8Ô8Ð8Ð8ð	9ð 	9ð9ð 9r*   )Úexclude_inputsr_  c               ó  ‡— | j         s|                      ¦   «          d„ | j                             ¦   «         D ¦   «         }	 |rAt	          d„ | j        D ¦   «         d¦  «        Š‰r ˆfd„|                     ¦   «         D ¦   «         }n4# t          $ r'}t                               d|› �¦  «         Y d}~nd}~ww xY w| j	        �rü| j	        D �]ñ}| 
                    d¦  «        p| j        }| 
                    d¦  «        }|                      ||| 
                    d¦  «        ¬	¦  «        }t          |¦  «        \  }}	}
}}}| 
                    d
¦  «        p| j        }t          |d¦  «        s$t!          dt#          |¦  «        j        › �¦  «        ‚|                     |d         |d         | 
                    d¦  «        | 
                    d¦  «        |rdn|d         |d         | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        | 
                    d¦  «        ||	||
|||¬¦  «         �ŒódS | j                             | j        | j        t-          t.          | j        ¦  «        | j        |rdn!| j        r| j                             ¦   «         nd| j        r| j                             ¦   «         nd| j        | j        | j        | j        | j         | j         | j!        | j        | j"        | j#        |¬¦  «         dS )z›Patch the run tree to the API in a background thread.

        Args:
            exclude_inputs: Whether to exclude inputs from the patch request.
        c                óD   — i | ]\  }}t          |t          ¦  «        ¯||“ŒS r)   )r`   Útuple)rN   Úar4  s      r+   r]   z!RunTree.patch.<locals>.<dictcomp>?  s=   € ð 
ð 
ð 
Ù�Q˜½ÀAÅuÑ9MÔ9Mð
Øˆqð
ð 
ð 
r*   c              3  óL   K  — | ]}|                      d ¦  «        dk    ¯|V — Œ dS )rª   rX  N©rm   )rN   Úevs     r+   ú	<genexpr>z RunTree.patch.<locals>.<genexpr>F  sD   è è € ð ð àØŸ6š6 &™>œ>Ð-BÒBÐBð àBÐBÐBÐBðð r*   Nc                ó0   •— i | ]\  }}|‰d          v¯||“ŒS )r  r)   )rN   rc  r4  Úuploadeds      €r+   r]   z!RunTree.patch.<locals>.<dictcomp>N  s9   ø€ ð #ð #ð #á ˜A˜qØ H¨YÔ$7Ð7Ð7ð ˜1à7Ð7Ð7r*   z'Error filtering attachments to upload: r;   r?   r=   rD  rA   Ú
update_runrV  rª   r¬   r®   r´   rÙ   rØ   r  r×   r½   r  r  rÆ   rÇ   rÂ   rF   rÁ   )rª   r  r®   r´   rÙ   rØ   r  r×   r½   r  r  rÆ   rÇ   rÂ   rF   rÁ   rÚ   r"   r9   r.   r0   r4   r5   )rª   r  r®   r´   rÙ   rØ   r  r×   r½   r  r  rÆ   rÇ   rÂ   rF   rÁ   rÚ   )$r  r  rÚ   rb   ÚnextrÂ   Ú	Exceptionrc   rd   rs   rm   r½   rR  rY  rA   r|   rZ  r{   r$   rj  rª   r¬   r   r   r®   r´   rÙ   r$  rØ   r  r×   r  rÆ   rÇ   rF   rÁ   )rå   r_  rÚ   Úeri   r;   r?   r7  r9   r"   r.   r0   r4   r5   r\  ri  s                  @r+   ÚpatchzRunTree.patch7  sð  ø€ ð Œ}ð 	Ø�HŠH‰JŒJˆJð
ð 
Ø!Ô-×3Ò3Ñ5Ô5ð
ñ 
ô 
ˆð	Jàð Ýðð à"&¤+ðñ ô ð
 ñô �ð ð ð#ð #ð #ð #à$/×$5Ò$5Ñ$7Ô$7ð#ñ #ô #�Køøõ
 ð 	Jð 	Jð 	JÝ�NŠNÐHÀQÐHÐHÑIÔIÐIÐIÐIÐIÐIÐIøøøøð	JøøøàŒ=ñ @	Øœ=ð 'ñ '�Ø&Ÿ{š{¨>Ñ:Ô:ÐO¸dÔ>O�Ø!Ÿ+š+ iÑ0Ô0�Ø×2Ò2Ø  '°7·;²;¸yÑ3IÔ3Ið 3ñ ô �õ *¨'Ñ2Ô2ñ P�˜ +¨y¸-Èð ")§¢¨XÑ!6Ô!6Ð!E¸$¼+�Ý˜~¨|Ñ<Ô<ð Ý#ð?Ý# NÑ3Ô3Ô<ð?ð ?ñô ð ð ×)Ò)Ø! &Ô)Ø# Dœ>Ø%Ÿ\š\¨*Ñ5Ô5Ø'Ÿ|š|¨LÑ9Ô9Ø#1ÐI˜4˜4°xÀÔ7IØ$ YÔ/Ø"Ÿ,š, wÑ/Ô/Ø"*§,¢,¨Ñ"?Ô"?Ø!)§¢¨nÑ!=Ô!=Ø)1¯ªÐ6LÑ)MÔ)MØ%Ÿ\š\¨*Ñ5Ô5Ø!)§¢¨nÑ!=Ô!=Ø%Ÿ\š\¨*Ñ5Ô5Ø#Ÿ<š<¨Ñ1Ô1Ø!Ÿš fÑ-Ô-Ø"Ÿ,š, wÑ/Ô/Ø +Ø#Ø#Ø +Ø'Ø"/Ø!ð/ *ñ ô ð ñ ð'ð 'ðR ŒK×"Ò"Ø”YØ”wÝ�j¨$¬-Ñ8Ô8Øœ?ð &ðG�D�Dà04´ÐE˜$œ+×*Ò*Ñ,Ô,Ð,Àà/3¬|ÐE˜œ×)Ò)Ñ+Ô+Ð+ÀØ”jØ"Ô0Ø!Ô.Ø%)Ô%>ØœØ!Ô.ØœØ”{Ø”YØ”jØ'ð+ #ñ ô ð ð ð s   ÁAB Â
B6ÂB1Â1B6c                ó   — dS )z$Wait for all `_futures` to complete.Nr)   ré   s    r+   ÚwaitzRunTree.wait—  s   € àˆr*   c                óP   — | j         €|                      ¦   «         | _         | j         S )z™Return the URL of the run.

        The result is resolved once and then cached on the run, since callers
        often ask for it per log line.
        )rÊ   Ú_resolve_urlré   s    r+   Úget_urlzRunTree.get_url›  s*   € ð ÔÐ#Ø#×0Ò0Ñ2Ô2ˆDÔØÔÐr*   c                óö  — | j         }	 t          j        |j        j        ¦  «        }|t          j        j        k    r|                     | ¬¦  «        S | j        p2| 	                    | j
        pt          j        ¦   «         ¬¦  «        j        }|                     ¦   «         j                             t#          | j        ¦  «        t#          |¦  «        t#          | j        ¦  «        | j                             ¦   «         ¬¦  «        }|j        �|j        S t,                               d| j        ¦  «         n2# t0          $ r% t,                               d| j        d¬¦  «         Y nw xY w|                     | ¬¦  «        S )	zGAsk the backend for the run's URL, falling back to building it locally.)r+  )r;   )r¾   rÇ   r´   Nz8No URL returned for run %s; building it locally instead.z@Failed to fetch the URL for run %s; building it locally instead.T)Úexc_info)rA   r   Úget_query_backendÚinfoÚinstance_flagsÚQueryBackendÚCLICKHOUSE_ONLYÚ_construct_run_urlrÀ   Úread_projectr½   r   r»   r¬   Ú_get_langsmith_api_syncÚrunsrs  r!   rÇ   r´   r  Úurlrc   r"  rl  )rå   rA   ÚbackendrÀ   Úresponses        r+   rr  zRunTree._resolve_url¥  s†  € à”ˆð	Ý)Ô;¸F¼KÔ<VÑWÔWˆGØÕ-Ô:ÔJÒJÐJð ×0Ò0°TÐ0Ñ:Ô:Ð:Øœð Ø×#Ò#Ø!%Ô!2Ð!PµeÔ6NÑ6PÔ6Pð $ñ ô äð ð
 ×5Ò5Ñ7Ô7Ô<×DÒDÝ�D”G‘”Ý˜z™?œ?Ý˜Tœ]Ñ+Ô+Øœ?×4Ò4Ñ6Ô6ð	 Eñ ô ˆHð Œ|Ð'Ø”|Ð#Ý�LŠLØJÈDÌGñô ð ð øõ ð 	ð 	ð 	õ �LŠLØRØ”Øð ñ ô ð ð ð ð	øøøð ×(Ò(¨TÐ(Ñ2Ô2Ð2s   ‰AD3 ÁB?D3 Ä D3 Ä3,E"Å!E"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)rÝ   rÆ   r]  Úheaderss       r+   Úfrom_dotted_orderzRunTree.from_dotted_orderÈ  s8   € õ # Lð
ˆõ •GÐ-˜SÔ-¨gÐ@Ð@¸Ð@Ð@ÑAÔAÐAr*   Úconfigc           	     ó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}	�ršt          |	||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 )zÑCreate a new 'child' span from the provided runnable config.

        Requires `langchain` to be installed.

        Returns:
            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 r°   )r`   )rN   Útr�  s     €r+   rg  z/RunTree.from_runnable_config.<locals>.<genexpr>þ  s2   øè è € ÐNÐN˜1­z¸!¸_Ñ/MÔ/MÐN�QÐNÐNÐNÐNÐNÐNr*   r®   rÙ   rØ   r´   r  rF   rª   rÁ   rG   Ú	order_mapr9  rA   r;   )%Ú langchain_core.callbacks.managerr‰  rŠ  Úlangchain_core.runnablesr‹  rŒ  Ú langchain_core.tracers.langchainr�  ÚImportErrorr`   ra   r   rm   r×   rk  ÚhandlersÚrun_mapr!   rÆ   r®   rÙ   rØ   r´   r  re   r�   rF   rª   rÛ   rþ   rG   r|   r‘  rA   r;   r©   r†  )rÝ   r‡  r]  r‰  rŠ  r‹  rŒ  rm  Úconfig_ÚcbÚtracerr+  rÆ   Ú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ñô ð ðøøøøð	øøøð
 ˆ>Ø#�mÝ0:¸6Å4Ñ0HÔ0HÐR•�^ VÑ,Ô,Ð,Èdñô ˆGˆGõ ˜>¨6Ñ2Ô2ˆGð —;’;˜{Ñ+Ô+Ð+ˆRñ	Eå˜2 Ð1EÐFÑGÔGñ	Eð Ô ñ	Eõ
 ØNÐNÐNÐN ¤ÐNÑNÔNØñô ð �ñ	Eð ”~×)Ò)­#¨bÔ.>Ñ*?Ô*?Ñ@Ô@Ð@�ð ÀcÔFVð Ø"Ô/�Ø%(¤\��zÑ"Ø#&¤:��xÑ Ø$'¤K��yÑ!Ø'*¤~��|Ñ$Ø%(¤\��zÑ"Ý!'­¨C¬HÐ,S¸¸V¿ZºZÈÐPRÑ=SÔ=SÑ8SÑ(TÔ(TÑ!UÔ!U��v‘Ø!$¤��v‘Ø×*Ò*¨7°BÑ7Ô7�Ø"×-Ò-¨j¸"Ñ=Ô=�	Ø× Ò  ¤Ñ.Ô.Ð.Ð.Ý˜ Ñ-Ô-ð °"Ô2BÀfÔFVÐ2VÐ2VØ%Ô/°Ô0@ÔAÀ!ÔD��à�tØ%œ}ˆF�8ÑØ%+Ô%8ˆF�>Ñ"ÝÔ,¨\ÐDÐD¸VÐDÐDÐDØˆts   ƒ š
9¤4´9r…  ú-Mapping[Union[str, bytes], Union[str, bytes]]c           	     ó6  — |                      ¦   «         }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<   |	j        r
|	j        |d<   t3          di |¤Ž}t4                               t          |j        ¦  «        ¦  «         |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:
            The new span or `None` if no parent span information is found.
        Nrq   r   r9  rÇ   rÔ   r¬   rÆ   é   éþÿÿÿr×   r´   r®   r­   rª   rM  rÁ   rG   rF   r;   rs   r)   )r$  r   r
   r!   rm   rƒ  ÚbytesÚLANGSMITH_DOTTED_ORDER_BYTESÚdecoderM   rí   Úlenr   r±   r   r²   Ú_Baggager„  rG   rF   rÛ   re   r�   r;   rs   r©   rx   r¬   )rÝ   r…  r]  Ú	init_argsÚlangsmith_traceÚlangsmith_trace_bytesr¸   Úparsed_dotted_orderrÇ   ÚbaggagerG   rF   Úrun_trees                r+   r„  zRunTree.from_headers  sŸ  € ð —K’K‘M”Mˆ	å�x­œ}¨g¯kªkÕ:PÑ.QÔ.QÑRÔRˆØð 	DÝ$(Ý�” §¢Õ-IÑ!JÔ!Jñ%ô %Ð!ð )ð Ø�Ø3×:Ò:¸7ÑCÔCˆOà-×3Ò3Ñ5Ô5ÐÝ1Ð2EÑFÔFÐØ& qÔ)¨!Ô,ˆØ (ˆ	�*ÑØ-¨bÔ1°!Ô4ˆ	�$‰Ø$7ˆ	�.Ñ!ÝÐ"Ñ#Ô# qÒ(Ð(à)<¸RÔ)@ÀÔ)CˆI�oÑ&ð #,§-¢-°Ñ"=Ô"=ð #
ÅÄÝŒLñB
ô B
ˆ	�,Ñð !*§¢¨jÑ 9Ô 9Ð D¸Wˆ	�*ÑØ%ŸMšM¨&Ñ1Ô1Ð=°Xˆ	�&Ñå×'Ò'¨Ñ0Ô0ˆØÔð 	%˜wœ|ð 	%Ø!*×!5Ò!5°g¸rÑ!BÔ!BˆI�gÑØ-6°wÔ-?×-JÒ-JØ˜Bñ.ô .ˆI�gÔ˜zÑ*ð N˜'Ô*ÐM¨i¸Ô.@ÀÔ.LÐMˆHØ-5ˆI�gÔ˜zÑ*Ý�#˜gœl¨Y¯]ª]¸6À2Ñ-FÔ-FÑFÑGÔGÑHÔHˆDØ $ˆI�fÑØÔð 	=Ø(/Ô(<ˆI�nÑ%ØÔð 	5Ø$+Ô$4ˆI�jÑ!åÐ'Ð'˜YÐ'Ð'ˆõ 	×"Ò"¥3 x¤{Ñ#3Ô#3Ñ4Ô4Ð4àˆr*   údict[str, str]c                óÜ   — i }| j         r| j        |t          › <   t          | j                             di ¦  «        | j        | j        | j        ¬¦  «        }| 	                    ¦   «         |d<   |S )z0Return the `RunTree` as a dictionary of headers.rG   ©rG   rF   r;   rs   rª  )
rÇ   rÆ   rƒ  r¥  rÁ   rm   rF   r½   rs   Ú	to_header)rå   r…  rª  s      r+   Ú
to_headerszRunTree.to_headersY  sw   € àˆØŒ=ð 	EØ37Ô3DˆGÕ-Ð/Ñ0ÝØ”Z—^’^ J°Ñ3Ô3Ø”ØÔ*Ø”]ð	
ñ 
ô 
ˆð %×.Ò.Ñ0Ô0ˆ�	ÑØˆr*   c           	     óH   — d| j         › d| j        › d| j        › d| j        › d�	S )z7Return a string representation of the `RunTree` object.zRunTree(id=z, name='z', run_type='z', dotted_order='z'))r¬   rª   r®   rÆ   ré   s    r+   Ú__repr__zRunTree.__repr__g  sV   € ðO˜$œ'ð Oð O¨4¬9ð Oð OØœðOð OØ9=Ô9JðOð Oð Oð	
r*   )rÐ   rÑ   rI   rÑ   )rI   r©   )rI   r   )rI   r@   )rI   r   )rÙ   rö   rØ   rö   rF   r÷   rG   rö   rõ   rø   rI   rù   )rF   r   rI   rù   )rG   rÑ   rI   rù   )rØ   rÑ   rI   rù   )rÙ   rÑ   rI   rù   )rÂ   r  rI   rù   )rØ   r>   r  r8   r  r  rÂ   r  rG   rˆ   rI   rù   )r­   )rª   r!   r®   r   r  r  rÓ   r>   rÙ   r>   rØ   r>   r  r8   r  r¿   r´   r  r  r  rF   r‡   rÁ   r>   rÚ   r  rI   r©   )r6  r!   r7  ra   rI   rù   r°   )r;   r!   r?   r>   r=   r†   rI   ra   )T)rS  r<   rI   rù   )r_  r<   rI   rù   )rI   rù   ©rI   r!   )rÆ   r!   r]  r   rI   r©   )r‡  r>   r]  r   rI   r¶   )r…  r�  r]  r   rI   r¶   )rI   r¬  )?r$   r%   r&   r'   r(   r   r   r¬   r®   r´   r·   r¸   rý   r¹   r½   rÀ   ra   rÁ   rF   rÂ   rÃ   rÆ   rÇ   rÈ   rs   r   rÊ   r   Úmodel_configr   rà   rç   ÚpropertyrA   rÖ   Ú	functoolsÚcached_propertyrð   ró   rü   r�   r  r  r  r
  r  r  r,  r5  rC  rR  r[  rn  rp  rs  rr  Úclassmethodr†  rœ  r„  r°  r²  Ú__classcell__)rô   s   @r+   r©   r©   4  s  ø€ € € € € € Ø;Ð;à€I€I�IØˆu UÐ+Ñ+Ô+€BÐ+Ð+Ð+Ñ+Ø�E 'Ð*Ñ*Ô*€HÐ*Ð*Ð*Ñ*Ø ˜5Ð1SÐ1SÐTÑTÔT€JÐTÐTÐTÑTà$) E°$ÀÐ$EÑ$EÔ$E€JÐEÐEÐEÑEØ).¨°tÀTÐ)JÑ)JÔ)JÐÐJÐJÐJÑJØ % ØØð!ñ !ô !€Jð ð ð ñ ð ˜ØGÐGØðñ ô €Lð ð ð ñ ð "' ¨t¸<Ð!HÑ!HÔ!H€JÐHÐHÐHÑHØ�%¨Ð-Ñ-Ô-€EÐ-Ð-Ð-Ñ-Ø % °dÐ ;Ñ ;Ô ;€DÐ;Ð;Ð;Ñ;Ø˜¨tÐ4Ñ4Ô4€FÐ4Ð4Ð4Ñ4ðà$˜u¨T¸4Ð@Ñ@Ô@€IÐ@Ð@Ð@Ñ@Ø˜ØÐ Cðñ ô €Lð ð ð ñ ð �U 2Ð3MÐNÑNÔN€HÐNÐNÐNÑNØ38°5ØÐ#Xð4ñ 4ô 4Ð ð ð ð ñ ð 27°ØØNð2ñ 2ô 2€Hð ð ð ñ ð
 "- °TÐ!:Ñ!:Ô!:€KÐ:Ð:Ð:Ñ:à�:Ø $ØØðñ ô €Lð €_˜(Ð#Ñ#Ô#ð0ð 0ð 0ñ $Ô#ð0ðd €_˜'Ð"Ñ"Ô"ðð ð ñ #Ô"ðð ðð ð ñ „Xðð ðð ð ñ „Xðð Ôð/ð /ð /ñ Ôð/ð
4ð 4ð 4ð 4ð 4ð /;Ø/;Ø(4Ø0<ØFRð1ð 1ð 1ð 1ð 1ð 1ðfð ð ð ð#ð #ð #ð #ð%ð %ð %ð %ð/ð /ð /ð /ð 'ð  'ð  'ð  'ðJ #'Ø#Ø'+Ø:>Ø-1ð(ð (ð (ð (ð (ð (ð<  'ðBð
 %)Ø%)Ø!%Ø"&Ø#Ø/3Ø)-Ø'+Ø$(Ø $Ø8<ðBð Bð Bð Bð Bð BðHð ð ð,0ð 0ð 0ð 0ðB #'ð>ð
 #'ð>ð >ð >ð >ð >ð >ð@)9ð )9ð )9ð )9ð )9ðV /4ð ^ð ^ð ^ð ^ð ^ð ^ð@ð ð ð ð ð  ð  ð  ð!3ð !3ð !3ð !3ðF ðBð Bð Bñ „[ðBð ð=ð =ð =ñ „[ð=ð~ ð>ð >ð >ñ „[ð>ð@ð ð ð ð
ð 
ð 
ð 
ð 
ð 
ð 
r*   r©   c                  ó\   — 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.NrG   úOptional[dict[str, str]]rF   r‡   r;   r8   rs   rÉ   c                óJ   — |pi | _         |pg | _        || _        |pg | _        dS )zInitialize the Baggage object.Nr®  )rå   rG   rF   r;   rs   s        r+   Ú__init__z_Baggage.__init__r  s1   € ð !˜ BˆŒØ�J˜BˆŒ	Ø(ˆÔØ ˜ BˆŒˆˆr*   Úheader_valuerI   c                óæ  — |s
 | ¦   «         S i }g }d}d}	 |                      d¦  «        D �]}|                      dd¦  «        \  }}|t          k    r2t          j        t          j                             |¦  «        ¦  «        }ŒY|t          k    r3t          j                             |¦  «                              d¦  «        }Œ—|t          k    r t          j                             |¦  «        }ŒÂ|t          k    �r4t          j        t          j                             |¦  «        ¦  «        }	g }
|	D ]ü}t          |t          t          f¦  «        r_t          |¦  «        dk    rL|
                     t          dt!          |d         ¦  «        t#          |d         ¦  «        ¬¦  «        ¦  «         Œ}t          |t$          ¦  «        rMt'          t)          t          |¦  «        ¦  «        }|                     d¦  «        r|
                     |¦  «         Œßt,                               d	|› �¦  «         Œý|
}�Œn4# t0          $ r'}t,                               d
|› �¦  «         Y d}~nd}~ww xY w | ||||¬¦  «        S )z4Create a Baggage object from the given header value.NrQ   ú=r9  rŸ  r   )r9   r;   r?   r;   z#Unknown replica format in baggage: zError parsing baggage header: r®  )rS   ÚLANGSMITH_METADATAÚjsonÚloadsÚurllibÚparseÚunquoteÚLANGSMITH_TAGSÚLANGSMITH_PROJECTÚLANGSMITH_REPLICASr`   rb  rý   r¤  r  r7   r!   rh   ra   ro   r   rm   rc   rd   rl  )rÝ   r¾  rG   rF   r;   rs   ÚitemrZ   r[   Úreplicas_dataÚparsed_replicasÚreplica_itemÚfiltered_replicarm  s                 r+   Úfrom_headerz_Baggage.from_header  s¦  € ð ð 	Ø�3‘5”5ˆLØˆØˆØˆØ15ˆð&	AØ$×*Ò*¨3Ñ/Ô/ð #/ñ #/�Ø!ŸZšZ¨¨QÑ/Ô/‘
��UØÕ,Ò,Ð,Ý#œz­&¬,×*>Ò*>¸uÑ*EÔ*EÑFÔF�H�HØ�NÒ*Ð*Ý!œ<×/Ò/°Ñ6Ô6×<Ò<¸SÑAÔA�D�DØÕ-Ò-Ð-Ý#)¤<×#7Ò#7¸Ñ#>Ô#>�L�LØÕ.Ò.Ñ.Ý$(¤J­v¬|×/CÒ/CÀEÑ/JÔ/JÑ$KÔ$K�MØ:<�OØ(5ð %ð %˜å& |µe½T°]ÑCÔCð%å # LÑ 1Ô 1°QÒ 6Ð 6ð ,×2Ò2Ý ,Ø,0Ý14°\À!´_Ñ1EÔ1EÝ,DÀ\ÐRSÄ_Ñ,UÔ,Uð!"ñ !"ô !"ñô ð ð õ (¨µdÑ;Ô;ð 
%Ý/JÝ $¥\°<Ñ @Ô @ñ0ô 0Ð,ð  0×3Ò3°NÑCÔCð IØ /× 6Ò 6Ð7GÑ HÔ HÐ Høå"ŸNšNØ TÀlÐ TÐ Tñô ð ð %Ø.�HùðG#/øõH ð 	Að 	Að 	AÝ�NŠNÐ?¸AÐ?Ð?Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøð ˆsØ D°|Èhð
ñ 
ô 
ð 	
s   –HH0 È0
I!È:IÉI!r…  úMapping[Union[str, bytes], Any]c                óô   — d|v r|                       |d         ¦  «        S d|v rA|                       t          t          |d         ¦  «                             d¦  «        ¦  «        S |                       d ¦  «        S )Nrª  s   baggagerq   )rÏ  r   r¡  r£  )rÝ   r…  s     r+   r„  z_Baggage.from_headers´  sp   € à˜ÐÐØ—?’? 7¨9Ô#5Ñ6Ô6Ð6Ø˜7Ð"Ð"Ø—?’?¥4­¨w°zÔ/BÑ#CÔ#C×#JÒ#JÈ7Ñ#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=rQ   ztags=zproject=)
rG   r   r  ÚLANGSMITH_PREFIXrÄ  rÅ  ÚquoterF   r<  r;   )rå   rb   Úserialized_metadataÚserialized_tagss       r+   r¯  z_Baggage.to_header½  s  € àˆØŒ=ð 	Ý"-¨d¬mÑ"<Ô"<ÐØ�LŠLÝ#ÐWÐW­f¬l×.@Ò.@ÐATÑ.UÔ.UÐWÐWñô ð ð Œ9ð 	Ø!Ÿhšh t¤yÑ1Ô1ˆOØ�LŠLÝ#ÐOÐO­&¬,×*<Ò*<¸_Ñ*MÔ*MÐOÐOñô ð ð Ôð 	Ø�LŠLÝ#ÐTÐT­V¬\×-?Ò-?ÀÔ@QÑ-RÔ-RÐTÐTñô ð ð �xŠx˜‰ŒÐr*   )NNNN)rG   r»  rF   r‡   r;   r8   rs   rÉ   )r¾  r8   rI   r¥  )r…  rÐ  rI   r¥  r³  )	r$   r%   r&   r'   r½  r¸  rÏ  r„  r¯  r)   r*   r+   r¥  r¥  o  s–   € € € € € Ø%Ð%ð .2Ø$(Ø&*Ø59ð'ð 'ð 'ð 'ð 'ð ð2
ð 2
ð 2
ñ „[ð2
ðh ð)ð )ð )ñ „[ð)ðð ð ð ð ð r*   r¥  r9  )ÚmaxsizeÚenv_varúlist[WriteReplica]c           	     ó>  — | sg S 	 t          j        | ¦  «        }t          |t          ¦  «        �r&g }|D �]}t          |t          ¦  «        s0t
                               dt          |¦  «        j        › �¦  «         ŒH| 	                    d¦  «        }| 	                    d¦  «        }| 	                    d¦  «        }| 	                    d¦  «        }d|v }t          |t          ¦  «        s0t
                               dt          |¦  «        j        › �¦  «         Œåt          |t          ¦  «        s1t
                               dt          |¦  «        j        › �¦  «         �Œ+|�Ft          |t          ¦  «        s1t
                               d	t          |¦  «        j        › �¦  «         �Œs|rFt          |t          ¦  «        s1t
                               d
t          |¦  «        j        › �¦  «         �Œ»t          |                     d¦  «        t          |¬¦  «        |d¬¦  «        }	|rt          t          |¦  «        |	d<   |                     |	¦  «         �Œ |S t          |t          ¦  «        r¾t#          |¦  «         g }|                     ¦   «         D ]–\  }
}|
                     d¦  «        }
t          |t          ¦  «        r5|                     t          |
t          |¬¦  «        dd¬¦  «        ¦  «         Œdt
                               d|
› dt          |¦  «        j        › �¦  «         Œ—|S t
                               dt          |¦  «        j        › �¦  «         g S # t&          j        $ r ‚ t*          $ r)}t
                               d|› �¦  «         g cY d}~S d}~ww xY w)z·Parse write replicas from LANGSMITH_RUNS_ENDPOINTS environment variable value.

    Supports array format [{"api_url": "x", "api_key": "y"}] and object format
    {"url": "key"}.
    zBInvalid item type in LANGSMITH_RUNS_ENDPOINTS: expected dict, got r9   r"   r;   r=   zGInvalid api_url type in LANGSMITH_RUNS_ENDPOINTS: expected string, got zGInvalid api_key type in LANGSMITH_RUNS_ENDPOINTS: expected string, got NzLInvalid project_name type in LANGSMITH_RUNS_ENDPOINTS: expected string, got zHInvalid primary type in LANGSMITH_RUNS_ENDPOINTS: expected boolean, got ú/)r"   )r9   r:   r;   r?   z7Invalid value type in LANGSMITH_RUNS_ENDPOINTS for URL z: expected string, got u�   Invalid LANGSMITH_RUNS_ENDPOINTS â€“ must be valid JSON list of objects with api_url and api_key properties, or object mapping url->apiKey, got uŒ   Invalid LANGSMITH_RUNS_ENDPOINTS â€“ must be valid JSON list of objects with api_url and api_key properties, or object mapping url->apiKey: )rÂ  rÃ  r`   rý   ra   rc   rd   r{   r$   rm   r!   r<   r7   Úrstripr3   r   r  Ú_check_endpoint_env_unsetrb   r   ÚLangSmithUserErrorrl  )rØ  Úparsedrs   rÊ  r9   r"   r;   r=   Úhas_primaryri   r  rZ   rm  s                r+   Ú"_parse_write_replicas_from_env_varrá  Ñ  s)  € ð ð Øˆ	ð`Ý”˜GÑ$Ô$ˆå�f�dÑ#Ô#ñ T	ØˆHØð 2)ñ 2)�Ý! $­Ñ-Ô-ð Ý—N’NðDÝ.2°4©j¬jÔ.AðDð Dñô ð ð àŸ(š( 9Ñ-Ô-�ØŸ(š( 9Ñ-Ô-�Ø#Ÿxšx¨Ñ7Ô7�ØŸ(š( 9Ñ-Ô-�Ø'¨4Ð/�å! '­3Ñ/Ô/ð Ý—N’NðIÝ04°W±´Ô0FðIð Iñô ð ð å! '­3Ñ/Ô/ð Ý—N’NðIÝ04°W±´Ô0FðIð Iñô ð ñ àÐ+µJ¸|ÍSÑ4QÔ4QÐ+Ý—N’NðNÝ04°\Ñ0BÔ0BÔ0KðNð Nñô ð ñ àð ¥z°'½4Ñ'@Ô'@ð Ý—N’NðJÝ15°g±´Ô1GðJð Jñô ð ñ å&Ø#ŸNšN¨3Ñ/Ô/Ý$¨WÐ5Ñ5Ô5Ø!-Ø ð	ñ ô �ð ð =Ý)-­d°GÑ)<Ô)<�G˜IÑ&Ø—’ Ñ(Ô(Ð(Ñ(ØˆOÝ˜¥Ñ%Ô%ð 	Ý% fÑ-Ô-Ð-àˆHØ"ŸLšL™NœNð ð ‘��SØ—j’j ‘o”o�å˜c¥3Ñ'Ô'ð Ø—O’OÝ$Ø$'Ý!,°SÐ!9Ñ!9Ô!9Ø)-Ø$(ð	ñ ô ñô ð ð õ —N’NðEØðEð Eå04°S±	´	Ô0BðEð Eñô ð ð
 ØˆOå�NŠNð<å$(¨¡L¤LÔ$9ð<ð <ñô ð ð
 ˆIøÝÔ#ð ð ð ØÝð ð ð Ý�Šð!àð!ð !ñ	
ô 	
ð 	
ð
 ˆ	ˆ	ˆ	ˆ	ˆ	ˆ	øøøøðøøøs+   †IM ÉCM Ì)0M ÍNÍ3NÎNÎNc                 óH   — t          j        d¦  «        } t          | ¦  «        S )zFGet write replicas from LANGSMITH_RUNS_ENDPOINTS environment variable.ÚRUNS_ENDPOINTS)r   rR   rá  )rØ  s    r+   Ú_get_write_replicas_from_envrä  >  s!   € åÔÐ 0Ñ1Ô1€Gå-¨gÑ6Ô6Ð6r*   rß  r¬  rù   c                ó’   — ddl }| r>|                     d¦  «        s|                     d¦  «        rt          j        d¦  «        ‚dS dS )zECheck if endpoint environment variables conflict with runs endpoints.r   NÚLANGSMITH_ENDPOINTÚLANGCHAIN_ENDPOINTz]You cannot provide both LANGSMITH_ENDPOINT / LANGCHAIN_ENDPOINT and LANGSMITH_RUNS_ENDPOINTS.)ÚosÚgetenvr   rÞ  )rß  rè  s     r+   rÝ  rÝ  E  si   € à€I€I€Iàð 
�2—9’9Ð1Ñ2Ô2ð 
°b·i²iÐ@TÑ6UÔ6Uð 
ÝÔ&ð,ñ
ô 
ð 	
ð
ð 
ð 
ð 
r*   rÉ   c                óœ   — | €t          ¦   «         nt          | ¦  «        }t          d„ |D ¦   «         ¦  «        dk    rt          d¦  «        ‚|S )z(Convert replicas to WriteReplica format.Nc              3  óD   K  — | ]}|                      d ¦  «        du V — ŒdS )r=   TNre  )rN   ri   s     r+   rg  z)_ensure_write_replicas.<locals>.<genexpr>U  s3   è è € Ð
AÐ
A¨gˆ7�;Š;�yÑ!Ô! TÐ)Ð
AÐ
AÐ
AÐ
AÐ
AÐ
Ar*   r9  z*Only one replica can be marked as primary.)rä  rý   Úsumr¤   )rs   Úensureds     r+   rÜ   rÜ   P  sV   € ð 19Ð0@Õ*Ñ,Ô,Ð,ÅdÈ8ÁnÄn€GÝ
Ð
AÐ
A¸Ð
AÑ
AÔ
AÑAÔAÀAÒEÐEÝÐEÑFÔFÐFØ€Nr*   rÆ   r!   úlist[tuple[datetime, UUID]]c                óD   — |                       d¦  «        }d„ |D ¦   «         S )zParse the dotted order string.rã   c                óŽ   — g | ]B}t          j        |d t           …         d¦  «        t          |t           d …         ¦  «        f‘ŒCS )Nú%Y%m%dT%H%M%S%fZ)r   Ústrptimer;  r   )rN   r@  s     r+   r_   z'_parse_dotted_order.<locals>.<listcomp>]  sf   € ð ð ð ð
 õ Ô˜dÐ#5Õ%5Ð$5Ð#5Ô6Ð8JÑKÔKÝ�Õ'Ð'Ð(Ð(Ô)Ñ*Ô*ð	
ðð ð r*   )rS   )rÆ   Úpartss     r+   rí   rí   Z  s8   € à×Ò˜sÑ#Ô#€Eðð ð
 ðñ ô ð r*   r‚   r´   r  r  r¿   c                ó®   — | pt          j        t          j        ¦  «        }|pt	          |¦  «        }|                     d¦  «        t          |¦  «        z   S )z Create the current dotted order.rñ  )r   r±   r   r²   r   Ústrftimer!   )r´   r  ÚstÚid_s       r+   rä   rä   j  sK   € ð 
Ð	1•x”|¥H¤LÑ1Ô1€BØ
Ð
+Õ'¨Ñ+Ô+€CØ�;Š;Ð)Ñ*Ô*­S°©X¬XÑ5Ð5r*   c                  óL   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   dS )	ÚReplicaAuthz
str | Noner9   r"   r.   r0   r4   r5   N)r$   r%   r&   r(   r)   r*   r+   rù  rù  s  sZ   € € € € € € ØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑÐÐr*   rù  c           
     óº  — |                       d¦  «        }d| v r�t          t          | d         ¦  «        }t          ||                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        |                      d¦  «        ¬¦  «        S d| v rt          || d         d d d d ¬¦  «        S t          |d d d d d ¬¦  «        S )	Nr9   r:   r"   r.   r0   r4   r5   )r9   r"   r.   r0   r4   r5   )rm   r   r3   rù  )ri   r9   r:   s      r+   rY  rY  |  sþ   € ð �kŠk˜)Ñ$Ô$€GØ�ÐÐÝ•K ¨¤Ñ1Ô1ˆÝØØ—H’H˜YÑ'Ô'ØŸš Ñ/Ô/Ø—h’h˜{Ñ+Ô+ØŸ(š( ?Ñ3Ô3Ø—8’8˜HÑ%Ô%ð
ñ 
ô 
ð 	
ð �GÐÐÝØØ˜IÔ&ØØØØð
ñ 
ô 
ð 	
õ ØØØØØØðñ ô ð r*   )rI   rB   )r?   r   rI   r   )ri   r7   rI   r7   )r€   r   rI   r   )
rA   r@   r…   r†   r;   r8   rF   r‡   rG   rˆ   )r–   r—   rI   r—   )rØ  r8   rI   rÙ  )rI   rÙ  )rß  r¬  rI   rù   )rs   rÉ   rI   rÙ  )rÆ   r!   rI   rî  )r´   r  r  r¿   rI   r!   )ri   r7   rI   rù  )jr'   Ú
__future__r   Úcontextvarsr¶  rÂ  ÚloggingÚsysÚ	threadingÚurllib.parserÄ  Úcollections.abcr   r   r   r   Útypingr   r	   r
   r   r   Úuuidr   Úpydanticr   r   r   r   Útyping_extensionsr   r   Úlangsmith._internal._contextÚ	_internalr‹   Ú	langsmithr   r/  r   Úlangsmith._internalr   Úlangsmith._internal._uuidr   r   Úlangsmith.clientr   r   r   r   r   Úlangsmith.uuidr   Ú	getLoggerr$   rc   r    r-   r3   r7   rT   rC   r(   rE   rH   rW   rh   ro   rÓ  Úinternrƒ  Úencoder¢  rÁ  rÇ  rÈ  rÉ  rÿ   Úobjectrü   ÚLockrƒ   Ú
ContextVarru   r!   rx   rŠ   r~   r;  r„   r•   r§   ÚRunBaser©   r¥  Ú	lru_cacherá  rä  rÝ  rÜ   rí   Ú_GLOBAL_CLIENTr‚   Ú__all__rä   rù  rY  r)   r*   r+   ú<module>r     sr  ðØ $Ð $Ð $à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ð Ð à DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ .Ð .Ð .Ð .Ð .Ð .à	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð �ñ ô ð ð ð  ð  ð  ð  �) 5ð  ñ  ô  ð  ðð ð ð ð �) 5ð ñ ô ð ðð ð ð ð �9 Eð ñ ô ð ð6 /8¨iØ*Ð*Ð*ñ/ô /Ð ð ð ð ñ ð 2;°¸H¸:Ñ1FÔ1FÐ Ð FÐ FÐ FÑ FØ5>°YØ"Ð"Ð"ñ6ô 6Ð "ð ð ð ñ ð

Bð 
Bð 
Bð 
Bðð ð ð ð0
(ð 
(ð 
(ð 
(ð  Ð Ø#˜œÐ'7Ð$>Ð$>Ð$>Ñ?Ô?Ð Ø5×<Ò<¸WÑEÔEÐ Ø�S”ZÐ#3Ð =Ð =Ð =Ñ>Ô>Ð Ø�”Ð/Ð5Ð5Ð5Ñ6Ô6€Ø�C”JÐ"2Ð;Ð;Ð;Ñ<Ô<Ð Ø�S”ZÐ#3Ð =Ð =Ð =Ñ>Ô>Ð Ø�3”:Ð3Ñ4Ô4Ð Øˆt�D˜&˜&™(œ(Ñ#Ô#€Øˆ	ŒÑÔ€ð EˆKÔ" 8¨H°\Ô,BÔ#CÔDØ˜ðñ ô €	ð ?˜Ô/°¸´Ô>Ø dðñ ô Ð ð ˆD��v�v‘x”xÑ Ô €	ð	ð 	ð 	ð Ð ðð ð ð ð  )Ø'Ø"+Ø )Ø)2ðZ1ð Z1ð Z1ð Z1ð Z1ðzð ð ð ð.x
ð x
ð x
ð x
ð x
ˆjÔ ñ x
ô x
ð x
ðv_ð _ð _ð _ð _ñ _ô _ð _ðD €Ô˜QÐÑÔðið ið iñ  ÔðiðX7ð 7ð 7ð 7ð
ð 
ð 
ð 
ðð ð ð ð	ð 	ð 	ð 	ð %Ô3€Ð 3Ð 3Ð 3Ñ 3Ø�iÐ
 €ð6ð 6ð 6ð 6ðð ð ð ð �*ñ ô ð ðð ð ð ð ð r*   