ó
    üÞ jŠÈ  ã                  ó†  • S r SSKJr  SSKrSSKrSSKrSSKrSSKJrJ	r	  SSK
JrJrJrJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJrJrJrJrJr  SSK J!r!J"r"J#r#J$r$J%r%  SSK&J'r'J(r(J)r)J*r*J+r+  SSK,J-r-J.r.J/r/J0r0J1r1J2r2  SSK3J4r4J5r5  SSK6J7r7  SSK8J9r9  \(       a  SSK:J;r;  SS jr<SS jr=\\	\>\>4      r? " S S5      r@g)zFAsync SandboxClient class for interacting with the sandbox server API.é    )ÚannotationsN)ÚCallableÚMapping)ÚTYPE_CHECKINGÚAnyÚOptionalÚUnion)Úutils)ÚAsyncLangsmith)Úhttpx)ÚAsyncSandbox)ÚSandboxClientÚ_box_urlÚ_make_docker_context_tarÚ_make_dockerfile_build_commandÚ_quote_path_segmentÚ_quote_reference_segmentÚ_resolve_dockerfile_context)ÚResourceCreationErrorÚResourceNameConflictErrorÚResourceNotFoundErrorÚResourceTimeoutErrorÚSandboxAPIError)Úhandle_client_http_errorÚhandle_sandbox_creation_errorÚmerge_headersÚvalidate_service_paramsÚvalidate_ttl)ÚAsyncServiceURLÚDownloadContentDispositionÚDownloadURLÚResourceStatusÚSnapshotÚSnapshotTag)ÚSandboxMountConfigÚ"validate_mount_config_proxy_config)ÚSandboxProxyConfig)ÚAsyncRetryTransport)ÚAsyncRegistriesResourcec                 óT   • [         R                  " SSS9n U R                  S5       S3$ )z~Get the default sandbox API endpoint from environment.

Derives the endpoint from LANGSMITH_ENDPOINT (or LANGCHAIN_ENDPOINT).
ÚENDPOINTzhttps://api.smith.langchain.com)ÚdefaultÚ/ú/v2/sandboxes)Úls_utilsÚget_env_varÚrstrip)Úbases    ÚY/var/www/html/gaurav/venv/lib/python3.13/site-packages/langsmith/sandbox/_async_client.pyÚ_get_default_api_endpointr4   <   s.   € ô
 ×Ò 
Ð4UÑV€DØ�k‰k˜#ÓÐ˜}Ð-Ð-ó    c                 ó.   • [         R                  " S5      $ )z)Get the default API key from environment.ÚAPI_KEY)r/   r0   © r5   r3   Ú_get_default_api_keyr9   E   s   € ä×Ò 	Ó*Ð*r5   c                  óF  • \ rS rSrSrSSSSSS.         S<S jjrS=S jr\S>S	 j5       rS?S
 jr	S?S jr
S@S jrSAS jrSAS jrSBS jr        SCS jrS=S jr SDSSSSSSSSSSSSS.                           SES jjjr SDSSSSSSSSSSSSSS.                             SFS jjjrSS.     SGS jjrSS.   SHS jjrSSSSS.           SIS jjrSS.     SJS jjrSS.     SKS jjrSSS .         SLS! jjrSSSSS".             SMS# jjrS$S%SS&.         SNS' jjrS$SS(.       SOS) jjrSS.SJS* jjrSSS+SS,.               SPS- jjr SDS.SSSSSS+SS/.                       SQS0 jjjrSSSS+SS1.               SRS2 jjrSS.     SSS3 jjr SS.     STS4 jjr!SSSSS5.         SUS6 jjr"SS.     SVS7 jjr#S8S9SS&.         SWS: jjr$S;r%g)XÚAsyncSandboxClientéM   aÞ  Async client for interacting with the Sandbox Server API.

This client provides an async interface for managing sandboxes and snapshots.

Example:
    # Uses LANGSMITH_ENDPOINT and LANGSMITH_API_KEY from environment
    async with AsyncSandboxClient() as client:
        # Create a sandbox with the default runtime and run commands
        async with await client.sandbox() as sandbox:
            result = await sandbox.run("python --version")
            print(result.stdout)
Ng      $@é   ©Úapi_endpointÚtimeoutÚapi_keyÚmax_retriesÚheadersc               óˆ  • U=(       d
    [        5       R                  S5      U l        U=(       d
    [        5       nX`l        X l        X@l        U(       a  [        U5      O0 U l        0 nU(       a  XgS'   U R                  (       a  [        XpR                  5      n[        US9n[        R                  " X‚US9U l        SU l        g)a>  Initialize the AsyncSandboxClient.

Args:
    api_endpoint: Full URL of the sandbox API endpoint. If not provided,
                  derived from LANGSMITH_ENDPOINT environment variable.
    timeout: Default HTTP timeout in seconds.
    api_key: API key for authentication. If not provided, uses
             LANGSMITH_API_KEY environment variable.
    max_retries: Maximum number of retries for transient errors (502, 503,
                 504), rate limits (429), and connection failures. Set to 0
                 to disable retries. Default: 3.
    headers: Optional default headers attached to every request on this
             client, including the data-plane ``/execute`` HTTP endpoint
             and the ``/execute/ws`` WebSocket upgrade. Use this to pass
             additional auth headers (e.g. ``X-Service-Key``).
r-   z	X-Api-Key)rB   )Ú	transportr@   rC   N)r4   r1   Ú	_base_urlr9   Ú_api_keyÚ_timeoutÚ_max_retriesÚdictÚ_default_headersr   r(   r   ÚAsyncClientÚ_httpÚ_registries_client)	Úselfr?   r@   rA   rB   rC   Úresolved_api_keyÚclient_headersrE   s	            r3   Ú__init__ÚAsyncSandboxClient.__init__[   s£   € ð2 '×EÔ*CÓ*E×MÑMÈcÓRˆŒØ"×<Ô&:Ó&<ÐØ(ŒØŒØ'ÔÞAH´°W´ÈbˆÔØ)+ˆÞØ*:˜;Ñ'Ø× × Ü*¨>×;PÑ;PÓQˆNÜ'°KÑ@ˆ	Ü×&Ò&Ø¸.ñ
ˆŒ
ð =AˆÕr5   c                ó�   • SnU R                   R                  U5      (       a  U R                   S[        U5      *  $ U R                   $ )z>Return the API root URL, without the ``/v2/sandboxes`` suffix.r.   N)rF   ÚendswithÚlen)rO   Úsuffixs     r3   Ú	_api_rootÚAsyncSandboxClient._api_root…   s=   € à ˆØ�>‰>×"Ñ" 6×*Ñ*Ø—>‘> .¤S¨£[ LÐ1Ð1Ø�~‰~Ðr5   c                óÒ   • U R                   c;  [        U R                  U R                  5       U R                  =(       d    SS9U l         U R                   R
                  R                  $ )ar  Manage sandbox image registries: create, list, retrieve, update, delete.

A registry stores credentials for pulling private images. Create one,
then pass its ``id`` as ``registry_id`` when building a snapshot.

Example:
    registry = await client.registries.create(
        name="internal",
        url="registry.example.com",
        username="robot",
        password=os.environ["REGISTRY_PASSWORD"],
    )
    snapshot = await client.create_snapshot(
        "internal-python",
        docker_image="registry.example.com/internal/python:3.12",
        fs_capacity_bytes=2 * 1024**3,
        registry_id=registry.id,
    )
N)rA   Úbase_urlÚdefault_headers)rN   r   rG   rX   rK   Ú	sandboxesÚ
registries©rO   s    r3   r^   ÚAsyncSandboxClient.registriesŒ   sV   € ð* ×"Ñ"Ñ*Ü&4ØŸ™ØŸ™Ó)Ø $× 5Ñ 5× =¸ñ'ˆDÔ#ð
 ×&Ñ&×0Ñ0×;Ñ;Ð;r5   c                óJ   • Uc  g[        U R                  R                  U5      $ )z8Merge default client headers with per-request overrides.N)r   rM   rC   ©rO   rC   s     r3   Ú_request_headersÚ#AsyncSandboxClient._request_headers©   s!   € à‰?ØÜ˜TŸZ™Z×/Ñ/°Ó9Ð9r5   c                óX   • U R                   (       d  Uc  g[        U R                   U5      $ )zÄMerge constructor-supplied default headers with per-request overrides.

Used by the WebSocket exec path so headers like ``X-Service-Key``
set on the client are attached to the WS upgrade request.
N)rK   r   rb   s     r3   Ú_ws_default_headersÚ&AsyncSandboxClient._ws_default_headers¯   s'   € ð ×$×$¨©ØÜ˜T×2Ñ2°GÓ<Ð<r5   c                ó’   • [        U R                  U R                  U R                  U R                  U R
                  =(       d    SS9$ )a  Create a SandboxClient with the same configuration.

The returned client has its own HTTP connection pool; close it
independently (``client.close()`` or ``with``).

Returns:
    SandboxClient with the same endpoint, credentials, timeout,
    retry, and header configuration.
Nr>   )r   rF   rH   rG   rI   rK   r_   s    r3   Úto_syncÚAsyncSandboxClient.to_sync¹   s=   € ô ØŸ™Ø—M‘MØ—M‘MØ×)Ñ)Ø×)Ñ)×1¨Tñ
ð 	
r5   c              ƒ  ó¸   #   • U R                   R                  5       I Sh  v•N   U R                  b#  U R                  R                  5       I Sh  v•N   gg N5 N7f)zClose the async HTTP client.N)rM   ÚacloserN   Úcloser_   s    r3   rl   ÚAsyncSandboxClient.acloseË   sL   é € à�j‰j×ÑÓ!×!Ð!Ø×"Ñ"Ñ.Ø×)Ñ)×/Ñ/Ó1×1Ñ1ð /ñ 	"á1ùs!   ‚A A¡.AÁAÁAÁAc                ó  •  U R                   R                  (       dL   [        R                  " 5       nUR                  5       (       d   UR	                  U R                  5       5        ggg! [         a     gf = f! [         a     gf = f)a  Best-effort cleanup of the async HTTP client on garbage collection.

If an event loop is running, schedules ``aclose()`` as a task.
Otherwise the underlying sockets will be closed by the GC.
For deterministic cleanup, use ``async with`` or ``await aclose()``.
N)rM   Ú	is_closedÚasyncioÚget_running_loopÚcreate_taskrl   ÚRuntimeErrorÚ	Exception)rO   Úloops     r3   Ú__del__ÚAsyncSandboxClient.__del__Ñ   sw   € ð		Ø—:‘:×'×'ðÜ"×3Ò3Ó5�DØŸ>™>×+Ñ+Ø×(Ñ(¨¯©«Õ7ð ,ð (øô
 $ó Ùðûäó 	Ùð	ús/   ‚A: žA	A* Á*
A7Á4A: Á6A7Á7A: Á:
BÂBc              ƒ  ó   #   • U $ 7f)zEnter async context manager.r8   r_   s    r3   Ú
__aenter__ÚAsyncSandboxClient.__aenter__ã   s
   é € àˆùs   ‚c              ƒ  ó@   #   • U R                  5       I Sh  v•N   g N7f)zExit async context manager.N)rl   )rO   Úexc_typeÚexc_valÚexc_tbs       r3   Ú	__aexit__ÚAsyncSandboxClient.__aexit__ç   s   é € ð �k‰k‹m×Óùs   ‚–—c                ó"   • SU R                    S3$ )ziReturn a string representation of the instance.

Returns:
    The string representation of the instance.
zAsyncSandboxClient (API URL: Ú))rF   r_   s    r3   Ú__repr__ÚAsyncSandboxClient.__repr__ð   s   € ð /¨t¯~©~Ð.>¸aÐ@Ð@r5   é   ©ÚsnapshotÚsnapshot_nameÚnamer@   Úidle_ttl_secondsÚdelete_after_stop_secondsÚvcpusÚ	mem_bytesÚfs_capacity_bytesÚmount_configÚproxy_configrC   c             ƒ  óf   #   • U R                  UUUUUUUUU	U
UUUS9I Sh  v•N nSUl        U$  N7f)ad  Create a sandbox and return an AsyncSandbox instance.

This is the primary method for creating sandboxes. Use it as an
async context manager for automatic cleanup:

    async with await client.sandbox(snapshot_id="<uuid>") as sandbox:
        result = await sandbox.run("echo hello")

    # Resolve by snapshot name instead of ID:
    async with await client.sandbox(snapshot_name="my-snap") as sandbox:
        result = await sandbox.run("echo hello")

The sandbox is automatically deleted when exiting the context manager.
For sandboxes with manual lifecycle management, use create_sandbox().

Args:
    snapshot_id: Optional snapshot ID to boot from. Mutually exclusive
        with ``snapshot`` and ``snapshot_name``.
    snapshot: Snapshot to boot from, as a UUID, ``name:tag``, or a bare
        ``name`` (which means ``name:latest``). Prefer this over
        ``snapshot_id`` and ``snapshot_name``: it covers all three forms.
    snapshot_name: Deprecated synonym for ``snapshot``, kept for callers
        that predate it.
    name: Optional sandbox name (auto-generated if not provided).
    timeout: Timeout in seconds when waiting for ready.
    idle_ttl_seconds: Idle timeout in seconds. The launcher
        automatically stops the sandbox after this duration of
        inactivity. Must be a multiple of 60. ``0`` explicitly
        disables the idle stop. When omitted (``None``), the server
        applies a default of ``600`` seconds (10 minutes).
    delete_after_stop_seconds: Seconds after the sandbox enters the
        ``stopped`` state before it (and its filesystem clone) are
        permanently deleted. Must be a multiple of 60. ``0`` disables
        stop-anchored deletion (manual cleanup required). When
        omitted (``None``), the server applies its configured default.
    vcpus: Number of vCPUs.
    mem_bytes: Memory in bytes.
    fs_capacity_bytes: Root filesystem capacity in bytes.
    mount_config: Mount configuration forwarded to the server as
        ``mount_config``. The backend expands mount auth into runtime
        proxy rules. Explicit AWS/GCP proxy rules in ``proxy_config``
        conflict with mount auth for the same provider.
    proxy_config: Per-sandbox proxy configuration forwarded to the
        server as-is. Shape matches the backend `proxy_config` field:
        ``{"rules": [...], "no_proxy": [...], "access_control":
        {"allow_list": [...]}}`` or ``{"access_control":
        {"deny_list": [...]}}``. Use ``access_control.allow_list`` to
        restrict outbound HTTPS to a set of host patterns (exact
        domains, globs like ``*.example.com``, IPs, CIDRs, or
        ``~regex``). Use ``proxy_config`` with provider rule helpers
        such as ``aws_auth`` to let the proxy sign supported
        AWS HTTPS requests on the sandbox's behalf.

Returns:
    AsyncSandbox instance.

Raises:
    ResourceTimeoutError: If timeout waiting for sandbox to be ready.
    ResourceCreationError: If sandbox creation fails.
    SandboxClientError: For other errors.
    ValueError: If TTL values are invalid, or if more than one of
        ``snapshot_id``, ``snapshot`` and ``snapshot_name`` is provided.
r‡   NT)Úcreate_sandboxÚ_auto_delete)rO   Úsnapshot_idrˆ   r‰   rŠ   r@   r‹   rŒ   r�   rŽ   r�   r�   r‘   rC   Úsbs                  r3   ÚsandboxÚAsyncSandboxClient.sandboxü   s\   é € ð` ×&Ñ&ØØØ'ØØØ-Ø&?ØØØ/Ø%Ø%Øð 'ð 
÷ 
ˆð ˆŒØˆ	ñ!
ùs   ‚1¡/¢1T)rˆ   r‰   rŠ   r@   Úwait_for_readyr‹   rŒ   r�   rŽ   r�   r�   r‘   rC   c             ƒ  ó$  #   • U=(       d    UnU(       a  U(       a  X#:w  a  [        S5      eU(       a  U(       a  [        S5      e[        US5        [        US5        U R                   S3nSU0nU(       a  UUS'   U(       a  UUS'   OU(       a  UUS	'   U(       a  UUS
'   U(       a  UUS'   Ub  UUS'   Ub  UUS'   U	b  U	US'   U
b  U
US'   Ub  UUS'   Ub  [        XÍ5        UUS'   Ub  UUS'   U(       a  US-   OSn U R                  R                  UUUU R                  U5      S9I Sh  v•N nUR                  5         [        R                  " UR                  5       U SS9$  N8! [        R                   a  n[        U5        e SnAff = f7f)a  Create a new Sandbox.

The sandbox is NOT automatically deleted. Use delete_sandbox() for cleanup,
or use sandbox() for automatic cleanup with a context manager.

Args:
    snapshot_id: Optional snapshot ID to boot from. Mutually exclusive
        with ``snapshot`` and ``snapshot_name``.
    snapshot: Snapshot to boot from, as a UUID, ``name:tag``, or a bare
        ``name`` (which means ``name:latest``). Prefer this over
        ``snapshot_id`` and ``snapshot_name``: it covers all three forms.
    snapshot_name: Deprecated synonym for ``snapshot``, kept for callers
        that predate it.
    name: Optional sandbox name (auto-generated if not provided).
    timeout: Timeout in seconds when waiting for ready (only used when
        wait_for_ready=True).
    wait_for_ready: If True (default), block until sandbox is ready.
        If False, return immediately with status "provisioning". Use
        get_sandbox_status() or wait_for_sandbox() to poll for readiness.
    idle_ttl_seconds: Idle timeout in seconds. The launcher
        automatically stops the sandbox after this duration of
        inactivity. Must be a multiple of 60. ``0`` explicitly
        disables the idle stop. When omitted (``None``), the server
        applies a default of ``600`` seconds (10 minutes).
    delete_after_stop_seconds: Seconds after the sandbox enters the
        ``stopped`` state before it (and its filesystem clone) are
        permanently deleted. Must be a multiple of 60. ``0`` disables
        stop-anchored deletion (manual cleanup required). When
        omitted (``None``), the server applies its configured default.
    vcpus: Number of vCPUs.
    mem_bytes: Memory in bytes.
    fs_capacity_bytes: Root filesystem capacity in bytes.
    mount_config: Mount configuration forwarded to the server as
        ``mount_config``. The backend expands mount auth into runtime
        proxy rules. Explicit AWS/GCP proxy rules in ``proxy_config``
        conflict with mount auth for the same provider.
    proxy_config: Per-sandbox proxy configuration forwarded to the
        server as-is. Shape matches the backend `proxy_config` field:
        ``{"rules": [...], "no_proxy": [...], "access_control":
        {"allow_list": [...]}}`` or ``{"access_control":
        {"deny_list": [...]}}``. Use ``access_control.allow_list`` to
        restrict outbound HTTPS to a set of host patterns (exact
        domains, globs like ``*.example.com``, IPs, CIDRs, or
        ``~regex``). Use ``proxy_config`` with provider rule helpers
        such as ``aws_auth`` to let the proxy sign supported
        AWS HTTPS requests on the sandbox's behalf.

Returns:
    Created AsyncSandbox. When wait_for_ready=False, the sandbox will have
    status="provisioning" and cannot be used for operations until ready.

Raises:
    ResourceTimeoutError: If timeout waiting for sandbox to be ready.
    ResourceCreationError: If sandbox creation fails.
    SandboxClientError: For other errors.
    ValueError: If TTL values are invalid, or if both ``snapshot_id`` and
        ``snapshot_name`` are provided.
z,snapshot and snapshot_name must not disagreez@At most one of snapshot_id, snapshot or snapshot_name may be setr‹   rŒ   ú/boxesr™   r•   rˆ   r‰   r@   rŠ   Nr�   rŽ   r�   r�   r‘   r†   )Újsonr@   rC   F©ÚclientÚauto_delete)Ú
ValueErrorr   rF   r&   rM   Úpostrc   Úraise_for_statusr   Ú	from_dictrœ   r   ÚHTTPStatusErrorr   )rO   r•   rˆ   r‰   rŠ   r@   r™   r‹   rŒ   r�   rŽ   r�   r�   r‘   rC   Ú	referenceÚurlÚpayloadÚhttp_timeoutÚresponseÚes                        r3   r“   Ú!AsyncSandboxClient.create_sandbox^  sÍ  é € ðX ×- ˆ	Þž¨(Ó*CÜÐKÓLÐLÞž9ÜØRóð ô 	Ð%Ð'9Ô:ÜÐ.Ð0KÔLà—‘Ð  Ð'ˆð ˜nð#
ˆö Ø%0ˆG�MÑ"ÞØ"*ˆG�JÒÞØ'4ˆG�OÑ$ÞØ!(ˆG�IÑÞØ"ˆG�F‰OØÑ'Ø*:ˆGÐ&Ñ'Ø$Ñ0Ø3LˆGÐ/Ñ0ØÑØ$ˆG�GÑØÑ Ø#,ˆG�KÑ ØÑ(Ø+<ˆGÐ'Ñ(ØÑ#Ü.¨|ÔJØ&2ˆG�NÑ#ØÑ#Ø&2ˆG�NÑ#æ)7˜ "š¸Rˆð	Ø!ŸZ™ZŸ_™_ØØØ$Ø×-Ñ-¨gÓ6ð	 -ð ÷ ˆHð ×%Ñ%Ô'Ü×)Ò)Ø—‘“¨¸%ñð ñøô ×$Ñ$ó 	Ü)¨!Ô,Øûð	üs<   ‚C<FÃ?.E( Ä-E&Ä.7E( Å%FÅ&E( Å(FÅ<FÆFÆF©rC   c             ƒ  ó¦  #   • [        U R                  U5      n U R                  R                  X0R	                  U5      S9I Sh  v•N nUR                  5         [        R                  " UR                  5       U SS9$  N8! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS	9Ue[        U5        e SnAff = f7f)
a  Get a Sandbox by name.

The sandbox is NOT automatically deleted. Use delete_sandbox() for cleanup.

Args:
    name: Sandbox name.

Returns:
    AsyncSandbox.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
r¬   NFr�   é”  ú	Sandbox 'ú' not foundr—   ©Úresource_type)r   rF   rM   Úgetrc   r¢   r   r£   rœ   r   r¤   r©   Ústatus_coder   r   ©rO   rŠ   rC   r¦   r©   rª   s         r3   Úget_sandboxÚAsyncSandboxClient.get_sandboxä  sÄ   é € ô" �t—~‘~ tÓ,ˆð	Ø!ŸZ™ZŸ^™^¨C×9NÑ9NÈwÓ9W˜^ÐX×XˆHØ×%Ñ%Ô'Ü×)Ò)Ø—‘“¨¸%ñð ñ Yøô
 ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	üs:   ‚Cš+B  ÁA>Á7B  Á=CÁ>B  Â CÂ5C	Ã	CÃCc          	   ƒ  óæ  #   • U R                    S3n U R                  R                  X R                  U5      S9I Sh  v•N nUR	                  5         UR                  5       nUR                  S/ 5       Vs/ sH  n[        R                  " XPSS9PM     sn$  NYs  snf ! [        R                   a;  nUR                  R                  S:X  a  [        SU S	35      Ue[        U5        e SnAff = f7f)
z:List all Sandboxes.

Returns:
    List of AsyncSandboxes.
r›   r¬   Nr]   Fr�   r®   úAPI endpoint not found: ú%. Check that api_endpoint is correct.)rF   rM   r³   rc   r¢   rœ   r   r£   r   r¤   r©   r´   r   r   )rO   rC   r¦   r©   ÚdataÚcrª   s          r3   Úlist_sandboxesÚ!AsyncSandboxClient.list_sandboxes  sô   é € ð —‘Ð  Ð'ˆð	Ø!ŸZ™ZŸ^™^¨C×9NÑ9NÈwÓ9W˜^ÐX×XˆHØ×%Ñ%Ô'Ø—=‘=“?ˆDð Ÿ™ +¨rÔ2óá2�Aô ×&Ò& qÀ5ÔIÙ2ñð ñ Yùòøô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü%Ø.¨s¨eð 4:ð ;óð ðô % QÔ'Øûð	üsJ   ‚C1“+B ¾B¿8B Á7BÂB ÂC1ÂB ÂB ÂC.Â36C)Ã)C.Ã.C1)Únew_namer‹   rŒ   rC   c             ƒ  óX  #   • [        US5        [        US5        [        U R                  U5      n0 nUb  X'S'   Ub  X7S'   Ub  XGS'    U R                  R	                  XgU R                  U5      S9I Sh  v•N nUR                  5         [        R                  " UR                  5       U SS9$  N8! [        R                   ac  n	U	R                  R                  S:X  a  [        S	U S
3SS9U	eU	R                  R                  S:X  a  [        SU S3SS9U	e[!        U	5        e Sn	A	ff = f7f)aÒ  Update a sandbox's properties.

Args:
    name: Current sandbox name.
    new_name: New display name.
    idle_ttl_seconds: Idle timeout in seconds. Must be a multiple of
        60. ``0`` disables idle-stop. ``None`` leaves the existing
        value unchanged.
    delete_after_stop_seconds: Seconds after entering ``stopped``
        before deletion. Must be a multiple of 60. ``0`` disables
        stop-anchored deletion. ``None`` leaves the existing value
        unchanged.

Returns:
    Updated AsyncSandbox.

Raises:
    ResourceNotFoundError: If sandbox not found.
    ResourceNameConflictError: If new_name is already in use.
    SandboxClientError: For other errors.
    ValueError: If TTL values are invalid.
r‹   rŒ   NrŠ   ©rœ   rC   Fr�   r®   r¯   r°   r—   r±   i™  zSandbox name 'z' already in use)r   r   rF   rM   Úpatchrc   r¢   r   r£   rœ   r   r¤   r©   r´   r   r   r   )
rO   rŠ   r¿   r‹   rŒ   rC   r¦   r§   r©   rª   s
             r3   Úupdate_sandboxÚ!AsyncSandboxClient.update_sandbox   sO  é € ô> 	Ð%Ð'9Ô:ÜÐ.Ð0KÔLä�t—~‘~ tÓ,ˆØ"$ˆØÑØ&�F‰OØÑ'Ø*:Ð&Ñ'Ø$Ñ0Ø3LÐ/Ñ0ð	Ø!ŸZ™Z×-Ñ-Ø¨4×+@Ñ+@ÀÓ+Ið .ð ÷ ˆHð ×%Ñ%Ô'Ü×)Ò)Ø—‘“¨¸%ñð ñ	øô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðð �z‰z×%Ñ%¨Ó,Ü/Ø$ X JÐ.>Ð?Ø"+ñð ðô % QÔ'Øûð	üs=   ‚AD*Á	,B0 Á5B.Á67B0 Â-D*Â.B0 Â0D'ÃAD"Ä"D'Ä'D*c             ƒ  óh  #   • [        U R                  U5      n U R                  R                  X0R	                  U5      S9I Sh  v•N nUR                  5         g N! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnAgSnAff = f7f)z•Delete a Sandbox.

Args:
    name: Sandbox name.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
r¬   Nr®   r¯   r°   r—   r±   )r   rF   rM   Údeleterc   r¢   r   r¤   r©   r´   r   r   rµ   s         r3   Údelete_sandboxÚ!AsyncSandboxClient.delete_sandbox`  s¯   é € ô �t—~‘~ tÓ,ˆð
	(Ø!ŸZ™Z×.Ñ.Ø×2Ñ2°7Ó;ð /ð ÷ ˆHð ×%Ñ%Õ'ñøô ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % Q×'Ñ'ûð	(üs@   ‚B2š+A ÁAÁA ÁB2ÁA ÁB/Á14B*Â%B2Â*B/Â/B2c             ƒ  ó¨  #   • [        U R                  US5      n U R                  R                  X0R	                  U5      S9I Sh  v•N nUR                  5         [        R                  " UR                  5       5      $  N8! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5        e SnAff = f7f)	aˆ  Get the provisioning status of a sandbox.

This is a lightweight endpoint designed for high-frequency polling
during sandbox provisioning. It returns only the status fields
without full sandbox data.

Args:
    name: Sandbox name.

Returns:
    ResourceStatus with status and status_message.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
Ústatusr¬   Nr®   r¯   r°   r—   r±   )r   rF   rM   r³   rc   r¢   r"   r£   rœ   r   r¤   r©   r´   r   r   rµ   s         r3   Úget_sandbox_statusÚ%AsyncSandboxClient.get_sandbox_statusz  s½   é € ô& �t—~‘~ t¨XÓ6ˆð
	Ø!ŸZ™ZŸ^™^¨C×9NÑ9NÈwÓ9W˜^ÐX×XˆHØ×%Ñ%Ô'Ü!×+Ò+¨H¯M©M«OÓ<Ð<ñ Yøô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	üs:   ‚C›+B ÁA?Á7B Á>CÁ?B ÂCÂ5C
Ã
CÃCiX  ©Úexpires_in_secondsrC   c             ƒ  óì  ^ ^^^^#   • [        TT5        [        T R                  TS5      nTTS.nSUUUUU 4S jjn T R                  R	                  XVT R                  T5      S9I Sh  v•N nUR                  5         [        R                  " UR                  5       US9$  N7! [        R                   a:  n	U	R                  R                  S:X  a  [        ST S	3S
S9U	e[        U	5        e Sn	A	ff = f7f)aÿ  Get an authenticated URL for a service running inside a sandbox.

Returns an :class:`AsyncServiceURL` whose async accessors
auto-refresh the token transparently before it expires.  The
object also provides async HTTP helper methods (``.get``,
``.post``, etc.) that inject the authentication header
automatically.

Args:
    name: Sandbox name.
    port: Port the service is listening on inside the sandbox.
    expires_in_seconds: Token TTL in seconds (1--86400, default 600).
    headers: Optional per-request header overrides.

Returns:
    AsyncServiceURL with auto-refreshing token and HTTP helpers.

Raises:
    ResourceNotFoundError: If sandbox not found.
    ValueError: If port or expires_in_seconds is out of range.
    SandboxClientError: For other errors.
zservice-url)ÚportrÎ   c               “  óD   >#   • TR                  TTT TS9I S h  v•N $  N7f)NrÍ   )Úservice)rÎ   rC   rŠ   rÐ   rO   s   €€€€€r3   Ú
_refresherÚ.AsyncSandboxClient.service.<locals>._refresher½  s2   øé € ØŸ™ØØØ#5Øð	 &ð ÷ ð ñ ùs   ƒ ™š rÁ   N)rÓ   r®   r¯   r°   r—   r±   )Úreturnr   )r   r   rF   rM   r¡   rc   r¢   r   r£   rœ   r   r¤   r©   r´   r   r   )
rO   rŠ   rÐ   rÎ   rC   r¦   r§   rÓ   r©   rª   s
   `````     r3   rÒ   ÚAsyncSandboxClient.service›  së   üé € ô< 	  Ð&8Ô9Ü�t—~‘~ t¨]Ó;ˆØÐ7IÑJˆ÷	ó 	ð	Ø!ŸZ™ZŸ_™_Ø¨4×+@Ñ+@ÀÓ+Ið -ð ÷ ˆHð ×%Ñ%Ô'Ü"×,Ò,¨X¯]©]«_ÈÑTÐTñ	øô
 ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	üs:   ‡5C4½,B# Á)B!Á*6B# Â C4Â!B# Â#C1Â75C,Ã,C1Ã1C4)rÎ   Úcontent_typeÚcontent_dispositionrC   c             ƒ  ó  #   • Ub  US:  a  [        SU S35      e[        U R                  US5      nSU0nUb  X8S'   Ub  XHS'   Ub  XXS	'    U R                  R	                  XxU R                  U5      S
9I Sh  v•N n	U	R                  5         [        R                  " U	R                  5       5      $  N8! [        R                   a:  n
U
R                  R                  S:X  a  [        SU S3SS9U
e[        U
5        e Sn
A
ff = f7f)a…  Create a link that downloads one file from a sandbox.

The link carries its own token, so anyone holding the URL can fetch
that one file without a LangSmith credential. It is pinned to the
sandbox and the exact path and cannot be repointed at another file.
Fetching wakes a stopped sandbox.

Do not modify the file after minting a link for it. The link is
pinned to a path, not to a snapshot of the contents, so a later
write to that path may or may not be reflected in what the link
serves. Write a new file and mint a new link when the contents
change.

Args:
    name: Sandbox name.
    path: File path inside the sandbox.
    expires_in_seconds: Link TTL in seconds. Omit for a link that
        never expires.
    content_type: Content-Type to serve the file as.
    content_disposition: Content-Disposition to serve the file with,
        either ``"attachment"`` or ``"inline"``.
    headers: Optional per-request header overrides.

Returns:
    DownloadURL with the link and its expiry, if any.

Raises:
    ResourceNotFoundError: If sandbox not found.
    ValueError: If expires_in_seconds is not positive.
    SandboxClientError: For other errors.
Né   z/expires_in_seconds must be greater than 0 (got z(); omit it for a link that never expireszdownload-urlÚpathrÎ   r×   rØ   rÁ   r®   r¯   r°   r—   r±   )r    r   rF   rM   r¡   rc   r¢   r!   r£   rœ   r   r¤   r©   r´   r   r   )rO   rŠ   rÛ   rÎ   r×   rØ   rC   r¦   r§   r©   rª   s              r3   Úgenerate_download_urlÚ(AsyncSandboxClient.generate_download_urlÓ  s/  é € ðR Ñ)Ð.@À1Ó.DÜðØ*Ð+Ð+SðUóð ô �t—~‘~ t¨^Ó<ˆØ#)¨4 .ˆØÑ)Ø,>Ð(Ñ)ØÑ#Ø&2�NÑ#ØÑ*Ø-@Ð)Ñ*ð	Ø!ŸZ™ZŸ_™_Ø¨4×+@Ñ+@ÀÓ+Ið -ð ÷ ˆHð ×%Ñ%Ô'Ü×(Ò(¨¯©«Ó9Ð9ñ	øô
 ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % QÔ'Øûð	üs<   ‚A	DÁ,B3 Á8B1Á97B3 Â0DÂ1B3 Â3DÃ5C<Ã<DÄDéx   g      ð?)r@   Úpoll_intervalrC   c             ƒ  óÖ  #   • SSK nUR                  5       U-   n U R                  XS9I Sh  v•N nUR                  S:X  a  U R	                  XS9I Sh  v•N $ UR                  S:X  a  [        UR                  =(       d    SSS9eXeR                  5       -
  nUS::  a  [        S	U S
U S3SUR                  S9e[        R                  " [        X85      5      I Sh  v•N   MÈ   Nµ N� N
7f)a<  Poll until a sandbox reaches "ready" or "failed" status.

Uses the lightweight status endpoint for polling, then fetches the
full sandbox data once ready.

Args:
    name: Sandbox name.
    timeout: Maximum time to wait in seconds.
    poll_interval: Time between status checks in seconds.

Returns:
    AsyncSandbox in "ready" status.

Raises:
    ResourceCreationError: If sandbox status becomes "failed".
    ResourceTimeoutError: If timeout expires while still "provisioning".
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
r   Nr¬   ÚreadyÚfailedzSandbox provisioning failedr—   r±   r¯   ú' not ready after Ús©r²   Úlast_status)ÚtimeÚ	monotonicrË   rÊ   r¶   r   Ústatus_messager   rq   ÚsleepÚmin)	rO   rŠ   r@   rß   rC   rç   ÚdeadlinerÊ   Ú	remainings	            r3   Úwait_for_sandboxÚ#AsyncSandboxClient.wait_for_sandbox  sí   é € ó6 	à—>‘>Ó# gÑ-ˆØØ×2Ñ2°4Ð2ÐI×IˆFØ�}‰} Ó'Ø!×-Ñ-¨dÐ-ÐD×DÐDØ�}‰} Ó(Ü+Ø×)Ñ)×JÐ-JØ"+ñð ð !§>¡>Ó#3Ñ3ˆIØ˜A‹~Ü*Ø ˜vÐ%7¸°yÀÐBØ"+Ø &§¡ñð ô
 —-’-¤ MÓ =Ó>×>Ð>ñ! ÙIáDñ ?ùs4   ‚+C)­C#®&C)ÁC%ÁBC)ÃC'ÃC)Ã%C)Ã'C)©r@   rC   c             ƒ  ó   #   • [        U R                  US5      n U R                  R                  U0 U R	                  U5      S9I Sh  v•N nUR                  5         U R                  XUS	9I Sh  v•N $  N,! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnANgSnAff = f N[7f)
a�  Start a stopped sandbox and wait until ready.

Args:
    name: Sandbox name.
    timeout: Timeout in seconds when waiting for ready.

Returns:
    AsyncSandbox in "ready" status.

Raises:
    ResourceNotFoundError: If sandbox not found.
    ResourceCreationError: If sandbox fails during startup.
    ResourceTimeoutError: If sandbox doesn't become ready within timeout.
    SandboxClientError: For other errors.
ÚstartrÁ   Nr®   r¯   r°   r—   r±   rð   )r   rF   rM   r¡   rc   r¢   r   r¤   r©   r´   r   r   rî   )rO   rŠ   r@   rC   r¦   r©   rª   s          r3   Ústart_sandboxÚ AsyncSandboxClient.start_sandboxH  sÕ   é € ô, �t—~‘~ t¨WÓ5ˆð
	(Ø!ŸZ™ZŸ_™_Ø˜" d×&;Ñ&;¸GÓ&Dð -ð ÷ ˆHð ×%Ñ%Ô'ð ×*Ñ*¨4È'Ð*ÐR×RÐRñøô ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % Q×'Ñ'ûð	(úñ SùsL   ‚C›-A7 ÁA5Á	A7 ÁCÁ0CÁ1CÁ5A7 Á7C	Â4CÂ?CÃC	Ã	Cc             ƒ  ón  #   • [        U R                  US5      n U R                  R                  U0 U R	                  U5      S9I Sh  v•N nUR                  5         g N! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnAgSnAff = f7f)	zÇStop a running sandbox (preserves sandbox files for later restart).

Args:
    name: Sandbox name.

Raises:
    ResourceNotFoundError: If sandbox not found.
    SandboxClientError: For other errors.
ÚstoprÁ   Nr®   r¯   r°   r—   r±   )r   rF   rM   r¡   rc   r¢   r   r¤   r©   r´   r   r   rµ   s         r3   Ústop_sandboxÚAsyncSandboxClient.stop_sandboxn  s³   é € ô �t—~‘~ t¨VÓ4ˆð
	(Ø!ŸZ™ZŸ_™_Ø˜" d×&;Ñ&;¸GÓ&Dð -ð ÷ ˆHð ×%Ñ%Õ'ñøô ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜v [Ð1Àñàðô % Q×'Ñ'ûð	(üs@   ‚B5›-A  ÁAÁ	A  ÁB5ÁA  Á B2Á44B-Â(B5Â-B2Â2B5é<   )ÚtagÚregistry_idr@   rC   c             ƒ  ó¸  #   • U R                    S3nUUUS.n	Ub  XIS'   Ub  XYS'    U R                  R                  X‰U R                  U5      S9I Sh  v•N n
U
R	                  5         [
        R                  " U
R                  5       5      nU R                  UR                  XgS9I Sh  v•N $  NZ! [        R                   a  n[        U5        e SnAff = f N.7f)a<  Build a snapshot from a Docker image.

Blocks until the snapshot is ready (polls with 2s interval).

Args:
    name: Snapshot name.
    docker_image: Docker image to build from (e.g., "python:3.12-slim").
    fs_capacity_bytes: Filesystem capacity in bytes.
    registry_id: Private registry ID.
    timeout: Timeout in seconds when waiting for ready.

Returns:
    Snapshot in "ready" status.

Raises:
    ResourceTimeoutError: If snapshot doesn't become ready within timeout.
    ResourceCreationError: If snapshot build fails.
    SandboxClientError: For other errors.
ú
/snapshots)rŠ   Údocker_imager�   Nrú   rû   rÁ   rð   )rF   rM   r¡   rc   r¢   r#   r£   rœ   r   r¤   r   Úwait_for_snapshotÚid)rO   rŠ   rþ   r�   rú   rû   r@   rC   r¦   r§   r©   rˆ   rª   s                r3   Úcreate_snapshotÚ"AsyncSandboxClient.create_snapshotŠ  sð   é € ð< —‘Ð  
Ð+ˆð Ø(Ø!2ñ#
ˆð
 ‰?Ø �E‰NØÑ"Ø%0�MÑ"ð	Ø!ŸZ™ZŸ_™_Ø¨4×+@Ñ+@ÀÓ+Ið -ð ÷ ˆHð ×%Ñ%Ô'Ü×)Ò)¨(¯-©-«/Ó:ˆHð
 ×+Ñ+Ø�K‰K ð ,ð 
÷ 
ð 	
ñøô
 ×$Ñ$ó 	Ü$ QÔ'Øûð	úñ
ùsF   ‚$C§,B0 ÁB.Á8B0 ÂCÂ)CÂ*CÂ.B0 Â0CÃCÃCÃCÚ.)ÚcontextÚ
build_argsÚtargetÚon_build_logr�   rŽ   r@   rC   c             ƒ  ó  #   • [        X$5      u  pÍS[        R                  " 5       R                  SS  3nS[        R                  " 5       R                  SS  3n[        R
                  " US5      n[        R
                  " US5      nS[        R                  " 5       R                   3n[        R
                  " US5      n[        R
                  " US	5      nU R                  UU
UU	UUS
9I Sh  v•N  ISh  v•N nUR                  U[        R                  " [        U5      I Sh  v•N U
US9I Sh  v•N   UR                  SU-   S-   U-   S-   U-   S-   U-   U
US9I Sh  v•N   UR                  [        UUUUUUUS9U
UUUS9I Sh  v•N nUR                  S:w  a
  [        SSS9eU R                  UR                   UUUU
US9I Sh  v•N sSSS5      ISh  v•N   $  Nï Nè N» N± N… N_ N! N! , ISh  v•N  (       d  f       g= f7f)aˆ  Build a snapshot from a local Dockerfile context.

When ``fs_capacity_bytes`` is omitted, the server applies its default.
``vcpus`` and ``mem_bytes`` size the temporary builder sandbox. The
build runs BuildKit plus the native snapshotter's layer copies inside
it, which contend for a single core by default, so giving the builder
an extra vCPU can cut a cold build's wall time substantially.
zsnapshot-builder-Né   z/var/lib/langsmith-build/r  zcontext.tarzlangsmith-snapshot-build:zbuildkit-rootzbuildkit-run)rŠ   r@   r�   rŽ   r�   rC   rð   zrm -rf z && mkdir -p z && tar -xf z -C )Úremote_contextÚdockerfile_relÚ	image_refÚbuildkit_rootÚbuildkit_runr  r  )r@   Ú	on_stdoutÚ	on_stderrrC   r   z Dockerfile snapshot build failedrˆ   r±   )rþ   r�   r@   rC   )r   ÚuuidÚuuid4ÚhexÚ	posixpathÚjoinr—   Úwriterq   Ú	to_threadr   Úrunr   Ú	exit_coder   Úcapture_snapshotrŠ   )rO   rŠ   Ú
dockerfiler�   r  r  r  r  r�   rŽ   r@   rC   Úcontext_pathr  Úbuilder_nameÚ
build_rootr
  Ú
remote_tarr  r  r  r—   Úresults                          r3   Úcreate_snapshot_from_dockerfileÚ2AsyncSandboxClient.create_snapshot_from_dockerfileÂ  s`  é € ô. (CÀ:Ó'WÑ$ˆà*¬4¯:ª:«<×+;Ñ+;¸C¸RÐ+@Ð*AÐBˆð 1´·²³×1AÑ1AÀ#À2Ð1FÐ0GÐHˆ
Ü"Ÿš¨
°IÓ>ˆÜ—^’^ J°Ó>ˆ
Ø/´·
²
³×0@Ñ0@Ð/AÐBˆ	Ü!Ÿš z°?ÓCˆÜ —~’~ j°.ÓAˆàŸ™ØØØØØ/Øð &ð 
÷ 
÷ 
ð 
ð Ø—-‘-ØÜ×'Ò'Ô(@À,ÓO×OØØð	  ð ÷ ð ð —+‘+ØØ ñ!à!ñ"ð !ñ!ð !ñ	!ð
 ñð ñð !ñ!ð  Øð ð ÷ ð ð #Ÿ;™;Ü.Ø#1Ø#1Ø'Ø"/Ø!-Ø)Ø!ñð  Ø&Ø&Øð 'ð ÷ ˆFð ×Ñ 1Ó$Ü+Ø6Ø",ñð ð ×.Ñ.Ø—‘ØØ&Ø"3ØØð /ð ÷ ÷_
÷ 
õ 
ñ Pññññ(÷_
÷ 
÷ 
ð 
üs´   ‚C-H	Ã/GÃ0H	Ã8G!Ã9H	Ã<+G/Ä'G#Ä(G/Ä3G%Ä4-G/Å!G'Å"'G/Æ	G)Æ
?G/Ç	G+Ç
G/ÇH	ÇG-ÇH	Ç!H	Ç#G/Ç%G/Ç'G/Ç)G/Ç+G/Ç-H	Ç/HÇ5G8Ç6HÈH	)rú   rþ   r�   r@   rC   c             ƒ  ó$  #   • [        U R                  US5      nSU0n	Ub  X9S'   Ub  XIS'   Ub  XYS'    U R                  R                  X‰U R	                  U5      S9I Sh  v•N n
U
R                  5         [        R                  " U
R                  5       5      nU R                  UR                   XgS9I Sh  v•N $  NZ! [        R                   a:  nUR                  R                  S:X  a  [        S	U S
3SS9Ue[        U5        e SnAff = f NW7f)aÑ  Capture a snapshot from a running sandbox.

Blocks until the snapshot is ready (polls with 2s interval).

Args:
    sandbox_name: Name of the sandbox to capture from.
    name: Snapshot name.
    tag: Tag to publish the snapshot under, within ``name``. Re-using a
        tag moves it to the new snapshot, leaving the previous one
        addressable by id. Defaults server-side to ``latest``.
    timeout: Timeout in seconds when waiting for ready.

Returns:
    Snapshot in "ready" status.

Raises:
    ResourceNotFoundError: If sandbox not found.
    ResourceTimeoutError: If snapshot doesn't become ready within timeout.
    ResourceCreationError: If snapshot capture fails.
    SandboxClientError: For other errors.
rˆ   rŠ   Nrú   rþ   r�   rÁ   r®   r¯   r°   r—   r±   rð   )r   rF   rM   r¡   rc   r¢   r#   r£   rœ   r   r¤   r©   r´   r   r   rÿ   r   )rO   Úsandbox_namerŠ   rú   rþ   r�   r@   rC   r¦   r§   r©   rˆ   rª   s                r3   r  Ú#AsyncSandboxClient.capture_snapshot   s(  é € ô@ �t—~‘~ |°ZÓ@ˆà#)¨4 .ˆØ‰?Ø �E‰NØÑ#Ø&2�NÑ#ØÑ(Ø+<Ð'Ñ(ð	Ø!ŸZ™ZŸ_™_Ø¨4×+@Ñ+@ÀÓ+Ið -ð ÷ ˆHð ×%Ñ%Ô'Ü×)Ò)¨(¯-©-«/Ó:ˆHð ×+Ñ+Ø�K‰K ð ,ð 
÷ 
ð 	
ñøô
 ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø ˜~¨[Ð9Èñàðô % QÔ'Øûð	úñ
ùsF   ‚1D´,B= Á B;Á!8B= ÂDÂ6DÂ7DÂ;B= Â=DÃ5DÄDÄDc             ƒ  ó®  #   • U R                    S[        U5       3n U R                  R                  X0R	                  U5      S9I Sh  v•N nUR                  5         [        R                  " UR                  5       5      $  N8! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5        e SnAff = f7f)	ao  Get a snapshot by ID or by a Docker-style reference.

Args:
    snapshot_id: Snapshot UUID, ``name:tag``, or a bare ``name``. A bare
        name means ``name:latest``, falling back to the newest ready
        untagged snapshot of that name.

Returns:
    Snapshot.

Raises:
    ResourceNotFoundError: If snapshot not found.
    SandboxClientError: For other errors.
ú/snapshots/r¬   Nr®   ú
Snapshot 'r°   rˆ   r±   )rF   r   rM   r³   rc   r¢   r#   r£   rœ   r   r¤   r©   r´   r   r   ©rO   r•   rC   r¦   r©   rª   s         r3   Úget_snapshotÚAsyncSandboxClient.get_snapshot\  sÇ   é € ð" —‘Ð  Ô,DÀ[Ó,QÐ+RÐSˆð
	Ø!ŸZ™ZŸ^™^¨C×9NÑ9NÈwÓ9W˜^ÐX×XˆHØ×%Ñ%Ô'Ü×%Ò% h§m¡m£oÓ6Ð6ñ Yøô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø   ¨[Ð9Èñàðô % QÔ'Øûð	üs:   ‚Cž+B Á	BÁ
7B ÂCÂB ÂCÂ5CÃCÃCc             ƒ  ó  #   • U R                    S[        U5       3n U R                  R                  X0R	                  U5      S9I Sh  v•N nUR                  5         UR                  5       R                  S5      =(       d    /  Vs/ sH  n[        R                  " U5      PM     sn$  N`s  snf ! [        R                   a:  nUR                  R                  S:X  a  [        SU S3SS	9Ue[        U5        e SnAff = f7f)
a|  List every tag published under a snapshot name.

Args:
    name: Snapshot name, without a tag.

Returns:
    Each tag under the name with the snapshot it resolves to. Empty when
    the name exists but currently carries no tags.

Raises:
    ResourceNotFoundError: If nobody has published under the name.
    SandboxClientError: For other errors, including a name carrying a tag.
z/snapshots-by-name/r¬   NÚtagsr®   zSnapshot name 'r°   rˆ   r±   )rF   r   rM   r³   rc   r¢   rœ   r$   r£   r   r¤   r©   r´   r   r   )rO   rŠ   rC   r¦   r©   rú   rª   s          r3   Úlist_snapshot_tagsÚ%AsyncSandboxClient.list_snapshot_tags{  sø   é € ð  —‘Ð Ð 3Ô4GÈÓ4MÐ3NÐOˆð	Ø!ŸZ™ZŸ^™^¨C×9NÑ9NÈwÓ9W˜^ÐX×XˆHØ×%Ñ%Ô'à6>·m±m³o×6IÑ6IÈ&Ó6Q×6WÐUWÐ6WóÙ6W¨s”×%Ò% cÖ*Ñ6Wñð ñ Yùòøô ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü+Ø% d V¨;Ð7Àzñàðô % QÔ'Øûð	üsL   ‚Dž+B1 Á	B*Á
>B1 ÂB,Â'B1 Â)DÂ*B1 Â,B1 Â1C?Ã5C:Ã:C?Ã?D)Úname_containsÚlimitÚoffsetrC   c             ƒ  ó,  #   • U R                    S3n0 nUb  XS'   Ub  X&S'   Ub  X6S'    U R                  R                  UU=(       d    SU R                  U5      S9I Sh  v•N nUR	                  5         UR                  5       nUR                  S/ 5       V	s/ sH  n	[        R                  " U	5      PM     sn	$  NZs  sn	f ! [        R                   a;  n
U
R                  R                  S:X  a  [        S	U S
35      U
e[        U
5        e Sn
A
ff = f7f)aÆ  List snapshots.

The backend always paginates this endpoint. When ``limit`` is omitted
the server applies a default page size (currently 50), so a single
call is not guaranteed to return every snapshot. To iterate through
all results, repeat the call with increasing ``offset`` values (or an
explicit ``limit``) until fewer than ``limit`` snapshots come back.

Args:
    name_contains: Optional case-insensitive substring filter applied
        to snapshot names server-side.
    limit: Optional maximum number of snapshots to return for a single
        request. Must be between 1 and 500 (inclusive); the server
        rejects values outside that range. Defaults to 50 server-side
        when omitted.
    offset: Optional number of snapshots to skip before returning
        results. Must be ``>= 0``. Useful for paginating through
        large result sets in combination with ``limit``.

Returns:
    A single page of Snapshots matching the provided filters.
rý   Nr0  r1  r2  )ÚparamsrC   Ú	snapshotsr®   r¹   rº   )rF   rM   r³   rc   r¢   rœ   r#   r£   r   r¤   r©   r´   r   r   )rO   r0  r1  r2  rC   r¦   r4  r©   r»   rä   rª   s              r3   Úlist_snapshotsÚ!AsyncSandboxClient.list_snapshots›  s'  é € ð< —‘Ð  
Ð+ˆà!#ˆØÑ$Ø&3�?Ñ#ØÑØ#�7‰OØÑØ%�8Ñð	Ø!ŸZ™ZŸ^™^ØØ—~ Ø×-Ñ-¨gÓ6ð ,ð ÷ ˆHð
 ×%Ñ%Ô'Ø—=‘=“?ˆDØ37·8±8¸KÈÔ3LÓMÑ3L¨a”H×&Ò& qÖ)Ñ3LÑMÐMñùò NøÜ×$Ñ$ó 	Ø�z‰z×%Ñ%¨Ó,Ü%Ø.¨s¨eð 4:ð ;óð ðô % QÔ'Øûð	üsL   ‚'Dª6C Á B;Á!8C ÂB=Â8C Â:DÂ;C Â=C ÃDÃ6DÄDÄDc             ƒ  óp  #   • U R                    S[        U5       3n U R                  R                  X0R	                  U5      S9I Sh  v•N nUR                  5         g N! [        R                   a>  nUR                  R                  S:X  a  [        SU S3SS9Ue[        U5         SnAgSnAff = f7f)	zŸDelete a snapshot.

Args:
    snapshot_id: Snapshot UUID.

Raises:
    ResourceNotFoundError: If snapshot not found.
    SandboxClientError: For other errors.
r'  r¬   Nr®   r(  r°   rˆ   r±   )rF   r   rM   rÆ   rc   r¢   r   r¤   r©   r´   r   r   r)  s         r3   Údelete_snapshotÚ"AsyncSandboxClient.delete_snapshotÕ  s»   é € ð —‘Ð  Ô,?ÀÓ,LÐ+MÐNˆð
	(Ø!ŸZ™Z×.Ñ.Ø×2Ñ2°7Ó;ð /ð ÷ ˆHð ×%Ñ%Õ'ñøô ×$Ñ$ó 	(Ø�z‰z×%Ñ%¨Ó,Ü+Ø   ¨[Ð9Èñàðô % Q×'Ñ'ûð	(üs@   ‚B6ž+A! Á	AÁ
A! ÁB6ÁA! Á!B3Á54B.Â)B6Â.B3Â3B6i,  g       @c             ƒ  ó¨  #   • SSK nUR                  5       U-   n U R                  XS9I Sh  v•N nUR                  S:X  a  U$ UR                  S:X  a  [	        UR
                  =(       d    SSS9eXeR                  5       -
  nUS::  a  [        S	U S
U S3SUR                  S9e[        R                  " [        X85      5      I Sh  v•N   M³   N  N7f)aÆ  Poll until a snapshot reaches "ready" or "failed" status.

Args:
    snapshot_id: Snapshot UUID.
    timeout: Maximum time to wait in seconds.
    poll_interval: Time between status checks in seconds.

Returns:
    Snapshot in "ready" status.

Raises:
    ResourceCreationError: If snapshot status becomes "failed".
    ResourceTimeoutError: If timeout expires.
    ResourceNotFoundError: If snapshot not found.
    SandboxClientError: For other errors.
r   Nr¬   rá   râ   zSnapshot build failedrˆ   r±   r(  rã   rä   rå   )
rç   rè   r*  rÊ   r   ré   r   rq   rê   rë   )	rO   r•   r@   rß   rC   rç   rì   rˆ   rí   s	            r3   rÿ   Ú$AsyncSandboxClient.wait_for_snapshotï  sØ   é € ó0 	à—>‘>Ó# gÑ-ˆØØ!×.Ñ.¨{Ð.ÐL×LˆHØ�‰ 'Ó)Ø�Ø�‰ (Ó*Ü+Ø×+Ñ+×FÐ/FØ",ñð ð !§>¡>Ó#3Ñ3ˆIØ˜A‹~Ü*Ø   Ð-?À¸yÈÐJØ",Ø (§¡ñð ô
 —-’-¤ MÓ =Ó>×>Ð>ñ! ÙLñ ?ùs"   ‚+C­C®BCÃCÃCÃC)rG   rF   rK   rM   rI   rN   rH   )
r?   úOptional[str]r@   ÚfloatrA   r=  rB   ÚintrC   úOptional[Mapping[str, str]]©rÕ   Ústr)rÕ   r)   )rC   ÚRequestHeadersrÕ   zOptional[dict[str, str]])rÕ   r   )rÕ   ÚNone)rÕ   r;   )r}   zOptional[type]r~   zOptional[BaseException]r   zOptional[Any]rÕ   rD  )N)r•   r=  rˆ   r=  r‰   r=  rŠ   r=  r@   r?  r‹   úOptional[int]rŒ   rE  r�   rE  rŽ   rE  r�   rE  r�   úOptional[SandboxMountConfig]r‘   úOptional[SandboxProxyConfig]rC   rC  rÕ   r   )r•   r=  rˆ   r=  r‰   r=  rŠ   r=  r@   r?  r™   Úboolr‹   rE  rŒ   rE  r�   rE  rŽ   rE  r�   rE  r�   rF  r‘   rG  rC   rC  rÕ   r   )rŠ   rB  rC   rC  rÕ   r   )rC   rC  rÕ   zlist[AsyncSandbox])rŠ   rB  r¿   r=  r‹   rE  rŒ   rE  rC   rC  rÕ   r   )rŠ   rB  rC   rC  rÕ   rD  )rŠ   rB  rC   rC  rÕ   r"   )
rŠ   rB  rÐ   r?  rÎ   r?  rC   rC  rÕ   r   )rŠ   rB  rÛ   rB  rÎ   rE  r×   r=  rØ   z$Optional[DownloadContentDisposition]rC   rC  rÕ   r!   )
rŠ   rB  r@   r?  rß   r>  rC   rC  rÕ   r   )rŠ   rB  r@   r?  rC   rC  rÕ   r   )rŠ   rB  rþ   rB  r�   r?  rú   r=  rû   r=  r@   r?  rC   rC  rÕ   r#   )rŠ   rB  r  úUnion[str, os.PathLike[str]]r�   rE  r  rI  r  r@  r  r=  r  zOptional[Callable[[str], Any]]r�   rE  rŽ   rE  r@   r?  rC   rC  rÕ   r#   )r$  rB  rŠ   rB  rú   r=  rþ   r=  r�   rE  r@   r?  rC   rC  rÕ   r#   )r•   rB  rC   rC  rÕ   r#   )rŠ   rB  rC   rC  rÕ   zlist[SnapshotTag])
r0  r=  r1  rE  r2  rE  rC   rC  rÕ   zlist[Snapshot])r•   rB  rC   rC  rÕ   rD  )
r•   rB  r@   r?  rß   r>  rC   rC  rÕ   r#   )&Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rR   rX   Úpropertyr^   rc   rf   ri   rl   rw   rz   r€   r„   r—   r“   r¶   r½   rÃ   rÇ   rË   rÒ   rÜ   rî   ró   r÷   r  r!  r  r*  r.  r6  r9  rÿ   Ú__static_attributes__r8   r5   r3   r;   r;   M   sÌ  † ñð  '+ØØ!%ØØ/3ñ(Að $ð(Að ð	(Að
 ð(Að ð(Að -õ(AôTð ó<ó ð<ô8:ô=ô
ô$2ôô$ðà ðð )ðð ð	ð
 
ôôAð &*ð`ð #'Ø'+Ø"ØØ*.Ø37Ø#Ø#'Ø+/Ø59Ø59Ø"&ñ`à"ð`ð  ð	`ð
 %ð`ð ð`ð ð`ð (ð`ð $1ð`ð ð`ð !ð`ð )ð`ð 3ð`ð 3ð`ð  ð`ð  
ö!`ðH &*ðDð #'Ø'+Ø"ØØ#Ø*.Ø37Ø#Ø#'Ø+/Ø59Ø59Ø"&ñ!Dà"ðDð  ð	Dð
 %ðDð ðDð ðDð ðDð (ðDð $1ðDð ðDð !ðDð )ðDð 3ðDð 3ðDð   ð!Dð" 
ö#DðN 7;ñØðØ%3ðà	õðD ,0ñØ(ðà	õð> #'Ø*.Ø37Ø"&ñ>àð>ð  ð	>ð
 (ð>ð $1ð>ð  ð>ð 
õ>ðB 7;ñ(Øð(Ø%3ð(à	õ(ð6 7;ñØðØ%3ðà	õðL #&Ø"&ñ6àð6ð ð6ð
  ð6ð  ð6ð 
õ6ðz -1Ø&*ØDHØ"&ñCàðCð ðCð
 *ðCð $ðCð BðCð  ðCð 
õCðR Ø"Ø"&ñ.?àð.?ð ð	.?ð
 ð.?ð  ð.?ð 
õ.?ðh Ø"&ñ$Sàð$Sð ð	$Sð
  ð$Sð 
õ$SðL JN÷ (ðD "Ø%)ØØ"&ñ6
àð6
ð ð6
ð ð	6
ð ð6
ð #ð6
ð ð6
ð  ð6
ð 
õ6
ðx ,0ð	\ð 14Ø26Ø $Ø7;Ø#Ø#'ØØ"&ñ\àð\ð 1ð\ð )ð	\ð .ð\ð 0ð\ð ð\ð 5ð\ð ð\ð !ð\ð ð\ð  ð\ð 
ö\ðF "Ø&*Ø+/ØØ"&ñ:
àð:
ð ð:
ð
 ð:
ð $ð:
ð )ð:
ð ð:
ð  ð:
ð 
õ:
ðz >BñØðØ,:ðà	õð@ 7;ñØðØ%3ðà	õðF (,Ø#Ø $Ø"&ñ8ð %ð8ð ð	8ð
 ð8ð  ð8ð 
õ8ðv >Bñ(Øð(Ø,:ð(à	õ(ð< Ø"Ø"&ñ+?àð+?ð ð	+?ð
 ð+?ð  ð+?ð 
÷+?ð +?r5   r;   rA  )rÕ   r=  )ArN  Ú
__future__r   rq   Úosr  r  Úcollections.abcr   r   Útypingr   r   r   r	   Ú	langsmithr
   r/   Úlangsmith._openapi_clientr   Ú langsmith._openapi_client._httpxr   Ú langsmith.sandbox._async_sandboxr   Úlangsmith.sandbox._clientr   r   r   r   r   r   r   Úlangsmith.sandbox._exceptionsr   r   r   r   r   Úlangsmith.sandbox._helpersr   r   r   r   r   Úlangsmith.sandbox._modelsr   r    r!   r"   r#   r$   Úlangsmith.sandbox._mountsr%   r&   Úlangsmith.sandbox._proxy_configr'   Úlangsmith.sandbox._transportr(   Ú8langsmith._openapi_client.resources.sandboxes.registriesr)   r4   r9   rB  rC  r;   r8   r5   r3   Ú<module>ra     s™   ðÙ Lå "ã Û 	Û Û ß -ß 6Ó 6å 'Ý 4Ý 2Ý 9÷÷ ñ ÷õ ÷õ ÷÷ ÷õ ?Ý <æõô
.ô+ð
 ˜' # s (Ñ+Ñ,€÷M?ò M?r5   