§
    ™ŠtjM ã                  ó†  — U d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-  G d„ de¦  «        Z.e G d„ d¦  «        ¦   «         Z/e G d„ d¦  «        ¦   «         Z0g d¢Z1de2d<   d\d„Z3d]d„Z4 e5d d!h¦  «        Z6d^d$„Z7 G d%„ d&¦  «        Z8 G d'„ d(¦  «        Z9d)d*œd_d0„Z: G d1„ d2¦  «        Z; G d3„ d4¦  «        Z< G d5„ d6¦  «        Z=d`d:„Z>dadbd=„Z?ed>         Z@dcdA„ZAdddC„ZBdedF„ZCdfdG„ZD G dH„ dI¦  «        ZE G dJ„ dK¦  «        ZF G dL„ dM¦  «        ZG G dN„ dO¦  «        ZH G dP„ dQ¦  «        ZI G dR„ dS¦  «        ZJ G dT„ dU¦  «        ZK G dV„ dW¦  «        ZL G dX„ dY¦  «        ZM G dZ„ d[¦  «        ZNdS )ga%  Async thread-centric streaming surface for the v3 protocol.

`AsyncThreadStream` is an async context manager that owns a
`ProtocolSseTransport` for one thread, dispatches commands (`run.start`,
`run.respond`), exposes typed subscriptions over a single shared SSE
(`subscribe`, `events`), surfaces lifecycle state (`interrupted`,
`interrupts`) via an always-on lifecycle watcher SSE, and provides typed
projections (`thread.values`, `thread.messages`, `thread.tool_calls`,
`thread.extensions`).

Direct port of `libs/sdk/src/client/stream/index.ts`.
é    )ÚannotationsN)ÚAsyncGeneratorÚAsyncIteratorÚ	GeneratorÚMapping)Ú	dataclassÚfield)ÚAnyÚLiteralÚ	TypedDictÚcast©ÚAsyncChatModelStream)ÚEventÚSubscribeParams)Ú
HttpClient)ÚQueryParamTypes)Ú_SeenEventIds)ÚDataDecoderÚDecoderÚExtensionsDecoderÚMessagesDecoderÚSubgraphsDecoderÚToolCallsDecoderÚvalidate_interleave_channels)Úcompute_union_filterÚinfer_channel)ÚAsyncProtocolTransportÚEventStreamHandleÚProtocolSseTransportÚProtocolWebSocketTransportc                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )	ÚInterruptPayloadzCPayload surfaced when the server requests human input for a thread.ÚstrÚinterrupt_idr
   Úvalueú	list[str]Ú	namespaceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    úY/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langgraph_sdk/_async/stream.pyr#   r#   /   s9   € € € € € € ØMÐMàÐÐÑØ€J€J�JØÐÐÑÐÐr/   r#   c                  ó,   — e Zd ZU dZded<   dZded<   dS )Ú_RunTerminalzHTerminal state record resolved into `_run_done` on lifecycle completion.zLiteral['completed', 'errored']ÚstatusNzBaseException | NoneÚerror)r)   r*   r+   r,   r-   r4   r.   r/   r0   r2   r2   7   s5   € € € € € € àRÐRà+Ð+Ð+Ñ+Ø"&€EÐ&Ð&Ð&Ñ&Ð&Ð&r/   r2   c                  óT   — e Zd ZU dZded<   ded<    eej        ¬¦  «        Zded<   d	S )
Ú_SubscriptionzFInternal record for one active subscription on an `AsyncThreadStream`.ÚintÚidr   Úparams)Údefault_factoryzasyncio.QueueÚqueueN)	r)   r*   r+   r,   r-   r	   ÚasyncioÚQueuer;   r.   r/   r0   r6   r6   ?   sM   € € € € € € àPÐPà€G€G�GØÐÐÑØ ˜5°´Ð?Ñ?Ô?€EÐ?Ð?Ð?Ñ?Ð?Ð?r/   r6   )	ÚvaluesÚupdatesÚmessagesÚtoolsÚ	lifecycleÚinputÚcheckpointsÚtasksÚcustomr'   Ú_ALL_CHANNELSÚchannelsr(   Úreturnr   c                ó*   — | t          |¦  «        gddœS )Nr   )rH   Ú
namespacesÚdepth©Úlist)rH   r(   s     r0   Ú_exact_namespace_paramsrO   Y   s%   € ð
 Ý˜I‘”Ð'Øðð ð r/   Úparams_fieldr
   c                óª   — t          | t          ¦  «        sg S |                      d¦  «        pg }t          |t          ¦  «        rt          |¦  «        ng S )Nr(   )Ú
isinstanceÚdictÚgetrN   )rP   r(   s     r0   Ú_event_namespacerU   d   sP   € Ý�l¥DÑ)Ô)ð Øˆ	Ø× Ò  Ñ-Ô-Ð3°€IÝ(¨µDÑ9Ô9ÐA�4�	‰?Œ?ˆ?¸rÐAr/   Ú	completedÚfailedÚeventÚboolc                óˆ  — t          | t          ¦  «        sdS |                      d¦  «        dk    rdS |                      d¦  «        pi }t          |t          ¦  «        sdS |                     d¦  «        sg rdS |                     d¦  «        pi }t          |t          ¦  «        sdS |                     d¦  «        t          v S )a  Return True for a root-namespace lifecycle event marking run end.

    Matches the wire shape ``{method: "lifecycle", params: {namespace: [],
    data: {event: "completed" | "failed"}}}``. Subgraph lifecycle events
    (non-empty namespace) do not terminate the parent run.
    FÚmethodrB   r9   r(   ÚdatarX   )rR   rS   rT   Ú_ROOT_TERMINAL_LIFECYCLE_EVENTS)rX   r9   r\   s      r0   Ú_is_root_terminal_lifecycler^   n   sÉ   € õ �e�TÑ"Ô"ð ØˆuØ‡y‚y�ÑÔ˜kÒ)Ð)ØˆuØ�YŠY�xÑ Ô Ð& B€FÝ�f�dÑ#Ô#ð ØˆuØ‡z‚z�+ÑÔð  "ð ØˆuØ�:Š:�fÑÔÐ# €DÝ�d�DÑ!Ô!ð ØˆuØ�8Š8�GÑÔÕ ?Ð?Ð?r/   c                  ó,   — e Zd ZdZdd„Zdddd	œdd„ZdS )Ú_AgentModulez4Assistant graph helpers scoped to one thread stream.ÚownerÚAsyncThreadStreamrI   ÚNonec                ó   — || _         d S ©N©Ú_owner©Úselfra   s     r0   Ú__init__z_AgentModule.__init__‡   ó   € ØˆŒˆˆr/   FN)ÚxrayÚheadersr9   rl   ú
int | boolrm   úMapping[str, str] | Noner9   úQueryParamTypes | Noneúdict[str, list[dict[str, Any]]]c             ƒ  óD  K  — | j         j        rt          d¦  «        ‚i }|r||d<   |r"|                     t	          |¦  «        ¦  «         i | j         j        ¥t	          |pi ¦  «        ¥}| j         j                             d| j         j        › d�||pd ¬¦  «        ƒ d {V —†S )NzAsyncThreadStream is closed.rl   z/assistants/z/graph)r9   rm   )	rg   Ú_closedÚRuntimeErrorÚupdaterS   Ú_headersÚ_httprT   Úassistant_id)ri   rl   rm   r9   Úquery_paramsÚrequest_headerss         r0   Úget_treez_AgentModule.get_treeŠ   sÛ   è è € ð Œ;Ôð 	?ÝÐ=Ñ>Ô>Ð>Ø')ˆØð 	(Ø#'ˆL˜Ñ Øð 	.Ø×Ò¥ V¡¤Ñ-Ô-Ð-ØI˜Tœ[Ô1ÐIµT¸'¸-ÀRÑ5HÔ5HÐIˆØ”[Ô&×*Ò*Ø;˜4œ;Ô3Ð;Ð;Ð;ØØ#Ð+ tð +ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r/   ©ra   rb   rI   rc   )rl   rn   rm   ro   r9   rp   rI   rq   )r)   r*   r+   r,   rj   r{   r.   r/   r0   r`   r`   „   sW   € € € € € Ø>Ð>ðð ð ð ð !Ø,0Ø)-ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r/   r`   c                  ó:   — e Zd ZdZdd„Zddddœdd„Zddœdd„ZdS )Ú	RunModulezxCommand dispatcher for `run.start`.

    Bound to one `AsyncThreadStream`; accesses its transport and id allocator.
    ra   rb   rI   rc   c                ó   — || _         d S re   rf   rh   s     r0   rj   zRunModule.__init__¦   rk   r/   N)rC   ÚconfigÚmetadatarC   r
   r€   údict[str, Any] | Noner�   údict[str, Any]c             ƒ  óF  K  — d| j         j        i}|�||d<   |�||d<   |�||d<   t          j        ¦   «         }|                     ¦   «         }|| j         _        	 | j                              d|¦  «        ƒ d{V —†}|                     ¦   «         s|                     d¦  «         d| j         _	        || j         j        |u rd| j         _        |                     ¦   «         r)| 
                    ¦   «         s|                     ¦   «          S S S # t          $ r/}|                     ¦   «         s|                     |¦  «         ‚ d}~ww xY w# | j         j        |u rd| j         _        |                     ¦   «         r)| 
                    ¦   «         s|                     ¦   «          w w w xY w)zGSend `run.start` to the server. Returns the result (`{"run_id": ...}`).rx   NrC   r€   r�   z	run.startT)rg   rx   r<   Úget_running_loopÚcreate_futureÚ_run_start_readyÚ_send_commandÚdoneÚ
set_resultÚ	_run_seenÚ	cancelledÚ	exceptionÚBaseExceptionÚset_exception)	ri   rC   r€   r�   r9   ÚloopÚgateÚresultÚerrs	            r0   ÚstartzRunModule.start©   sÒ  è è € ð #1°$´+Ô2JÐ!KˆØÐØ#ˆF�7‰OØÐØ%ˆF�8ÑØÐØ!)ˆF�:ÑÝÔ'Ñ)Ô)ˆØ%)×%7Ò%7Ñ%9Ô%9ˆØ'+ˆŒÔ$ð	!Øœ;×4Ò4°[À&ÑIÔIÐIÐIÐIÐIÐIÐIˆFØ—9’9‘;”;ð &Ø—’ Ñ%Ô%Ð%Ø$(ˆDŒKÔ!Øð Œ{Ô+¨tÐ3Ð3Ø/3�”Ô,ð �yŠy‰{Œ{ð ! 4§>¢>Ñ#3Ô#3ð !Ø—’Ñ Ô Ð Ð ð!ð !øõ ð 	ð 	ð 	ð —9’9‘;”;ð (Ø×"Ò" 3Ñ'Ô'Ð'Øøøøøð	øøøøð Œ{Ô+¨tÐ3Ð3Ø/3�”Ô,ð �yŠy‰{Œ{ð ! 4§>¢>Ñ#3Ô#3ð !Ø—’Ñ Ô Ð Ð ð!ð !øøøs&   ÁAD
 Ä

EÄ*D>Ä>EÅE ÅAF ©r%   Úresponser%   ú
str | Nonec             ƒ  óP  ‡K  — | j         j        4 ƒd{V —† t          | j         j        ¦  «        }‰€mt	          |¦  «        dk    rt          d¦  «        ‚t	          |¦  «        dk    r/d„ |D ¦   «         }t          dt	          |¦  «        › d|›d�¦  «        ‚|d         }n1t          ˆfd	„|D ¦   «         d¦  «        }|€t          d
‰›d�¦  «        ‚|d         |d         |dœ}| j                              d|¦  «        ƒ d{V —†cddd¦  «        ƒd{V —† S # 1 ƒd{V —†swxY w Y   dS )a?  Reply to a server-side interrupt and resume the run.

        Args:
            response: the response value forwarded as `params.response` on the
                wire (protocol field name).
            interrupt_id: optional explicit id. When omitted, requires exactly
                one outstanding interrupt and uses its id.

        Raises:
            RuntimeError: no outstanding interrupts; `interrupt_id` is None but
                multiple interrupts are outstanding; or the explicit
                `interrupt_id` doesn't match any outstanding interrupt.
        Nr   zrthread.run.respond: no outstanding interrupt. Provide an explicit `interrupt_id` or wait for `thread.interrupted`.é   c                ó   — g | ]
}|d          ‘ŒS r•   r.   )Ú.0Úps     r0   ú
<listcomp>z%RunModule.respond.<locals>.<listcomp>ó   s   € ÐBÐBÐB°˜1˜^Ô,ÐBÐBÐBr/   u"   thread.run.respond: ambiguous â€” z outstanding interrupts (z&). Provide an explicit `interrupt_id`.c              3  ó4   •K  — | ]}|d          ‰k    ¯|V — ŒdS )r%   Nr.   )r›   rœ   r%   s     €r0   ú	<genexpr>z$RunModule.respond.<locals>.<genexpr>ü   s2   øè è € ÐQÐQ˜1¨q°Ô/@ÀLÒ/PÐ/P�QÐ/PÐ/PÐ/PÐ/PÐQÐQr/   z!thread.run.respond: interrupt_id zA does not match any outstanding interrupt in `thread.interrupts`.r%   r(   )r%   r(   r–   zinput.respond)rg   Ú_interrupts_lockrN   Ú
interruptsÚlenrt   Únextrˆ   )ri   r–   r%   ÚoutstandingÚidsÚmatchr9   s     `    r0   ÚrespondzRunModule.respondÓ   sO  øè è € ð, ”;Ô/ð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	LÝ˜tœ{Ô5Ñ6Ô6ˆKØÐ#Ý�{Ñ#Ô# qÒ(Ð(Ý&ð0ñô ð õ
 �{Ñ#Ô# aÒ'Ð'ØBÐB°kÐBÑBÔB�CÝ&ð*½SÀÑ=MÔ=Mð *ð *Ø36ð*ð *ð *ñô ð ð
 $ Aœ��åØQÐQÐQÐQ ÐQÑQÔQØñô �ð �=Ý&ð/¸Lð /ð /ð /ñô ð ð !& nÔ 5Ø" ;Ô/Ø$ðð ˆFð
 œ×2Ò2°?ÀFÑKÔKÐKÐKÐKÐKÐKÐKðC!	Lð !	Lð !	Lð !	Lñ !	Lô !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Lð !	Løøøð !	Lð !	Lð !	Lð !	Lð !	Lð !	Ls   –C,DÄ
DÄ"Dr|   )rC   r
   r€   r‚   r�   r‚   rI   rƒ   )r–   r
   r%   r—   rI   rƒ   )r)   r*   r+   r,   rj   r”   r§   r.   r/   r0   r~   r~       s‡   € € € € € ðð ð
ð ð ð ð Ø(,Ø*.ð(!ð (!ð (!ð (!ð (!ð (!ð\ $(ð	7Lð 7Lð 7Lð 7Lð 7Lð 7Lð 7Lð 7Lr/   r~   g        )ÚdelayÚhandler   r¨   Úfloatrc   c             ƒ  óv   K  — |rt          j        |¦  «        ƒ d{V —† |                      ¦   «         ƒ d{V —† dS )zÅClose a handle, optionally after a brief delay. Used to detach
    closing the old stream from the synchronous rotation step so the new
    stream can absorb server-side replayed events first.
    N)r<   ÚsleepÚclose)r©   r¨   s     r0   Ú_close_afterr®     sX   è è € ð
 ð #ÝŒm˜EÑ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø
�,Š,‰.Œ.ÐÐÐÐÐÐÐÐÐr/   c                  ó8   — e Zd ZdZdd„Zd„ Zdd
„Zdd„Zdd„ZdS )Ú_OutputAwaitablezïAwaitable that waits for lifecycle completion then fetches durable thread state.

    Multiple awaiters share one underlying task (idempotent task caching).
    Call `with_timeout(seconds)` to bound the wait on the lifecycle terminal.
    Úthreadrb   rI   rc   c                ó0   — || _         d | _        d | _        d S re   )Ú_threadÚ_taskÚ_timeout©ri   r±   s     r0   rj   z_OutputAwaitable.__init__  s   € ØˆŒØ/3ˆŒ
Ø&*ˆŒˆˆr/   c                óN   — |                       ¦   «                              ¦   «         S re   )Ú	_get_taskÚ	__await__©ri   s    r0   r¹   z_OutputAwaitable.__await__#  s   € Ø�~Š~ÑÔ×)Ò)Ñ+Ô+Ð+r/   Útimeoutrª   c                ó<   — t          | j        ¦  «        }||_        |S )aB  Return a new awaitable that raises `asyncio.TimeoutError` after `timeout` seconds.

        Bounds the wait for the lifecycle terminal (and only that wait); the
        subsequent REST GET for terminal state is not bounded. Returns a
        fresh `_OutputAwaitable` so the original `thread.output` is unaffected.
        )r°   r³   rµ   )ri   r»   Úboundeds      r0   Úwith_timeoutz_OutputAwaitable.with_timeout&  s    € õ # 4¤<Ñ0Ô0ˆØ"ˆÔØˆr/   úasyncio.Task[Any]c                ót   — | j         €+t          j        |                      ¦   «         ¦  «        | _         | j         S )a¬  Return the shared fetch task, creating it on first call.

        A cancelled task is intentionally NOT respawned: subsequent awaiters
        receive `asyncio.CancelledError` from the shared task instead of
        triggering a fresh REST GET. This preserves "one fetch per
        `thread.output`" semantics even when callers wrap awaits with
        `asyncio.wait_for` (which cancels the underlying task on timeout).
        )r´   r<   Úcreate_taskÚ_fetchrº   s    r0   r¸   z_OutputAwaitable._get_task1  s.   € ð Œ:ÐÝ Ô,¨T¯[ª[©]¬]Ñ;Ô;ˆDŒJØŒzÐr/   r
   c              ƒ  óâ  K  — | j                              ¦   «         rA| j                              ¦   «         ƒ d{V —†}| j                              |¦  «        r|d         S | j        �9t          j        | j                              ¦   «         | j        ¬¦  «        ƒ d{V —†}n| j                              ¦   «         ƒ d{V —†}|j        �|j        ‚| j                              ¦   «         ƒ d{V —†}|d         S )zAFetch terminal thread state, waiting for the lifecycle if needed.Nr>   ©r»   )	r³   Ú&_can_return_existing_state_immediatelyÚ_fetch_stateÚ_state_is_terminalrµ   r<   Úwait_forÚ_wait_for_run_doner4   )ri   ÚstateÚterminals      r0   rÂ   z_OutputAwaitable._fetch>  s!  è è € ð Œ<×>Ò>Ñ@Ô@ð 	'Øœ,×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5ˆEØŒ|×.Ò.¨uÑ5Ô5ð 'Ø˜X”Ð&ð Œ=Ð$Ý$Ô-Ø”×/Ò/Ñ1Ô1¸4¼=ðñ ô ð ð ð ð ð ð ˆHˆHð "œ\×<Ò<Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>ˆHØŒ>Ð%Ø”.Ð Ø”l×/Ò/Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1ˆØ�XŒÐr/   N©r±   rb   rI   rc   )r»   rª   rI   r°   )rI   r¿   )rI   r
   )	r)   r*   r+   r,   rj   r¹   r¾   r¸   rÂ   r.   r/   r0   r°   r°     s}   € € € € € ðð ð+ð +ð +ð +ð
,ð ,ð ,ð	ð 	ð 	ð 	ðð ð ð ðð ð ð ð ð r/   r°   c                  ó2   — e Zd ZdZdd„Zdd„Zdd
„Zdd„ZdS )Ú_ValuesProjectionuá   Typed projection for `thread.values` â€” yields state snapshots as they arrive.

    Supports both `async for` (live stream of state snapshots) and `await`
    (delegates to `thread.output` for the terminal state value).
    r±   rb   rI   rc   c                ó   — || _         d S re   )r³   r¶   s     r0   rj   z_ValuesProjection.__init__[  ó   € ØˆŒˆˆr/   úGenerator[Any, None, Any]c                ó>   — | j         j                             ¦   «         S re   )r³   Úoutputr¹   rº   s    r0   r¹   z_ValuesProjection.__await__^  s   € ØŒ|Ô"×,Ò,Ñ.Ô.Ð.r/   úAsyncIterator[Any]c                ó*   — |                       ¦   «         S re   )Ú_values_iterrº   s    r0   Ú	__aiter__z_ValuesProjection.__aiter__a  s   € Ø× Ò Ñ"Ô"Ð"r/   úAsyncGenerator[Any, None]c               ól  K  — | j         j        €t          d¦  «        ‚ddgi}| j                              |¦  «        }t	          d¦  «        }	 | j                              |¦  «        ƒ d {V —† | j                              ¦   «          | j                              ¦   «         ƒ d {V —†}|d         W V — 	 |j         	                    ¦   «         ƒ d {V —†}|€"	 | j          
                    |j        ¦  «         d S |                     |¦  «        D ]}|W V — ŒŒa# | j          
                    |j        ¦  «         w xY w)Nõ3   AsyncThreadStream not entered â€” use `async with`.rH   r>   )r³   Ú
_transportrt   Ú_register_subscriptionr   Ú_reconcile_streamÚ_ensure_fanout_runningrÆ   r;   rT   Ú_unregister_subscriptionr8   Úfeed)ri   r9   ÚsubÚdecoderrÊ   ÚitemÚouts          r0   rÖ   z_ValuesProjection._values_iterd  se  è è € ØŒ<Ô"Ð*ÝÐTÑUÔUÐUØ#-°¨zÐ":ˆØŒl×1Ò1°&Ñ9Ô9ˆÝ˜hÑ'Ô'ˆð	:Ø”,×0Ò0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØŒL×/Ò/Ñ1Ô1Ð1Øœ,×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5ˆEØ˜”/Ð!Ð!Ð!Ð!ðØ œYŸ]š]™_œ_Ð,Ð,Ð,Ð,Ð,Ð,�Ø�<Øð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð #Ÿ<š<¨Ñ-Ô-ð ð �CØ�I�I�I�I�Iðøð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøs   ÁBD Ã4D Ä!D3NrÌ   )rI   rÑ   ©rI   rÔ   ©rI   rØ   )r)   r*   r+   r,   rj   r¹   r×   rÖ   r.   r/   r0   rÎ   rÎ   T  sn   € € € € € ðð ðð ð ð ð/ð /ð /ð /ð#ð #ð #ð #ð:ð :ð :ð :ð :ð :r/   rÎ   c                  ó6   — e Zd ZdZ	 ddd	„Zdd„Zdd„Zdd„ZdS )Ú_MessagesProjectionzìTyped projection for root-scope `thread.messages`.

    Iterating yields one `AsyncChatModelStream` per message-start event.
    Each iterator owns its own `messages` subscription and routes events
    from the root namespace only.
    Nr±   rb   r(   úlist[str] | NonerI   rc   c                ó@   — || _         t          |pg ¦  «        | _        d S re   ©r³   rN   Ú
_namespace©ri   r±   r(   s      r0   rj   z_MessagesProjection.__init__�  ó"   € ð ˆŒÝ˜y˜¨BÑ/Ô/ˆŒˆˆr/   ú#AsyncIterator[AsyncChatModelStream]c                ó*   — |                       ¦   «         S re   ©Ú_messages_iterrº   s    r0   r×   z_MessagesProjection.__aiter__‡  ó   € Ø×"Ò"Ñ$Ô$Ð$r/   ú*AsyncGenerator[AsyncChatModelStream, None]c               ó   K  — | j         j        €t          d¦  «        ‚| j        s| j         j        nd }|�%|                      |¦  «        2 3 d {V —†}|W V — Œ6 d S t          dg| j        ¦  «        }| j                              |¦  «        }t          | j        d„ ¬¦  «        }g }	 | j          	                    |¦  «        ƒ d {V —† | j          
                    ¦   «          	 |j                             ¦   «         ƒ d {V —†}|€A	 |D ]}| j                              |¦  «         Œ| j                              |j        ¦  «         d S |                     |¦  «        D ]6}| j                              |¦  «         |                     |¦  «         |W V — Œ7Œ¯# |D ]}| j                              |¦  «         Œ| j                              |j        ¦  «         w xY w)NrÚ   r@   c                ó&   — t          | ||¬¦  «        S ©N©r(   ÚnodeÚ
message_idr   rø   s      r0   ú<lambda>z4_MessagesProjection._messages_iter.<locals>.<lambda>™  s    € ÕBVØ#¨$¸:ðCñ Cô C€ r/   ©r(   Ústream_factory)r³   rÛ   rt   rì   Ú_root_messages_inboxÚ_drain_inboxrO   rÜ   r   rÝ   rÞ   r;   rT   Ú!_unregister_active_message_streamrß   r8   rà   Ú_register_active_message_streamÚappend)ri   Ú
root_inboxÚstreamr9   rá   râ   Ú
registeredrã   s           r0   rò   z"_MessagesProjection._messages_iterŠ  s<  è è € ØŒ<Ô"Ð*ÝÐTÑUÔUÐUð ?C¼oÐW�T”\Ô6Ð6ÐSWˆ
ØÐ!Ø $× 1Ò 1°*Ñ =Ô =ð ð ð ð ð ð ð �fØ�����ð !>àˆFÝ(¨*¨°t´ÑGÔGˆØŒl×1Ò1°&Ñ9Ô9ˆÝ!Ø”oðð ð
ñ 
ô 
ˆð 24ˆ
ð	:Ø”,×0Ò0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØŒL×/Ò/Ñ1Ô1Ð1ð!Ø œYŸ]š]™_œ_Ð,Ð,Ð,Ð,Ð,Ð,�Ø�<Øð %ð Gð G�Ø”×>Ò>¸vÑFÔFÐFÐFØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð &Ÿlšl¨4Ñ0Ô0ð !ð !�FØ”L×@Ò@ÀÑHÔHÐHØ×%Ò% fÑ-Ô-Ð-Ø �L�L�L�L�Lð!øð %ð Gð G�Ø”×>Ò>¸vÑFÔFÐFÐFØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøs   Á
AÂ$AF Å AF ÆA GÚinboxúasyncio.Queue[Event | None]c               óJ  K  — ddl m} i }	 	 |                     ¦   «         ƒ d{V —†}|€4	 |                     ¦   «         D ]}| j                             |¦  «         ŒdS |                     d¦  «        pi }t          |t          ¦  «        r|                     d¦  «        nd}t          |t          ¦  «        sŒª|                     d¦  «        }|dk    rÐt          |¦  «        }	t          ||	¬	¦  «        }
t          |                     d
¦  «        t          ¦  «        r|                     d
¦  «        ni } |t          | j        ¦  «        |r|                     d¦  «        nd|	¬¦  «        }|||
<   | j                             |¦  «         |                     |¦  «         |W V — nÌt          |¦  «        }
|                     |
¦  «        }|€At          |¦  «        dk    r.t          t!          |                     ¦   «         ¦  «        ¦  «        }|€�Œ |                     |¦  «         |dv rH| j                             |¦  «         t          |                     ¦   «         ¦  «        D ]\  }}||u r||= Œ�Œb# |                     ¦   «         D ]}| j                             |¦  «         Œw xY w)zMDrain a pre-filled inbox of messages events, yielding one stream per message.r   r   TNr9   r\   rX   úmessage-start©Úfallbackr�   Úlanggraph_noderø   r™   ©zmessage-finishr4   )Ú0langchain_core.language_models.chat_model_streamr   rT   r>   r³   r   rR   rS   Ú_message_event_idÚ_message_route_keyrN   rì   r  Údispatchr¢   r£   ÚiterÚitems)ri   r  r   Úactiverã   r  rP   r\   Ú
event_typerú   Úkeyr�   Ú	route_keyÚ	candidates                 r0   rÿ   z _MessagesProjection._drain_inbox®  s÷  è è € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 35ˆð,	Gð(6Ø"ŸYšY™[œ[Ð(Ð(Ð(Ð(Ð(Ð(�Ø�<ØðN !Ÿ-š-™/œ/ð Gð G�Ø”×>Ò>¸vÑFÔFÐFÐFðGð GðM  $Ÿxšx¨Ñ1Ô1Ð7°R�å0:¸<ÍÑ0NÔ0NÐX�L×$Ò$ VÑ,Ô,Ð,ÐTXð õ " $­Ñ-Ô-ð ØØ!ŸXšX gÑ.Ô.�
Ø Ò0Ð0Ý!2°4Ñ!8Ô!8�JÝ,¨T¸JÐGÑGÔG�Cõ & d§h¢h¨zÑ&:Ô&:½DÑAÔAð ˜Ÿš Ñ,Ô,Ð,àð ð
 2Ð1Ý"& t¤Ñ"7Ô"7Ø?GÐQ˜XŸ\š\Ð*:Ñ;Ô;Ð;ÈTØ#-ðñ ô �Fð
 #)�F˜3‘KØ”L×@Ò@ÀÑHÔHÐHØ—O’O DÑ)Ô)Ð)Ø �L�L�L�L�Lå,¨TÑ2Ô2�CØ#ŸZšZ¨™_œ_�FØ�~­#¨f©+¬+¸Ò*:Ð*:Ý!%¥d¨6¯=ª=©?¬?Ñ&;Ô&;Ñ!<Ô!<˜Ø�~Ù Ø—O’O DÑ)Ô)Ð)Ø!Ð%@Ð@Ð@Øœ×FÒFÀvÑNÔNÐNÝ48¸¿º¹¼Ñ4HÔ4Hð 6ð 6Ñ0˜I yØ(¨FÐ2Ð2Ø$*¨9Ð$5øñQ(6øðT !Ÿ-š-™/œ/ð Gð G�Ø”×>Ò>¸vÑFÔFÐFÐFðGøøøs   ŒI/ ÁHI/ É/3J"re   ©r±   rb   r(   ré   rI   rc   )rI   rï   )rI   rô   )r  r  rI   rô   )r)   r*   r+   r,   rj   r×   rò   rÿ   r.   r/   r0   rè   rè   y  s�   € € € € € ðð ð HLð0ð 0ð 0ð 0ð 0ð%ð %ð %ð %ð":ð ":ð ":ð ":ðH5Gð 5Gð 5Gð 5Gð 5Gð 5Gr/   rè   r\   rƒ   r—   c                ó|   — |                       d¦  «        p|                       d¦  «        }|�t          |¦  «        nd S )Nr8   rú   ©rT   r$   )r\   rú   s     r0   r  r  æ  s7   € Ø—’˜$‘”Ð9 4§8¢8¨LÑ#9Ô#9€JØ(Ð4�3ˆz‰?Œ?ˆ?¸$Ð>r/   r  r$   c                ó@   — t          | ¦  «        }|�d|› �S |�d|› �S dS )a  Return the routing key for a message-channel event in `active`.

    Keys on `message_id` when available so concurrent messages that share the
    same `run_id` (two AI turns in one agent step) route to independent streams
    rather than colliding on a shared `run:<run_id>` slot.
    Nzmessage:Ú
__single__)r  )r\   r  rú   s      r0   r  r  ë  s>   € õ # 4Ñ(Ô(€JØÐØ&˜*Ð&Ð&Ð&ØÐØ$˜(Ð$Ð$Ð$Øˆ<r/   )ÚstartedrV   rW   ÚinterruptedÚsegmentútuple[str, str | None]c                óD   — |                       d¦  «        \  }}}||r|nd fS )Nú:)Ú	partition)r   ÚnameÚsepÚtask_ids       r0   Ú_parse_namespace_segmentr(  ý  s0   € Ø ×*Ò*¨3Ñ/Ô/Ñ€Dˆ#ˆwØ˜CÐ)�� TÐ)Ð)r/   ú!tuple[SubgraphStatus, str | None]c                ó„   — |                       d¦  «        rdS |                       d¦  «        }|rdt          |¦  «        fS dS )Nr¡   )r  Nr4   rW   )rV   Nr  )r\   r4   s     r0   Ú_terminal_from_tasks_resultr+    sN   € ð ‡x‚x�ÑÔð #Ø"Ð"Ø�HŠH�WÑÔ€EØð $Ø�˜U™œÐ#Ð#ØÐr/   Úscopeútuple[str, ...]c                ó˜   — t          | ¦  «        t          |¦  «        dz   k    o't          | d t          |¦  «        …         ¦  «        |k    S )Nr™   )r¢   Útuple)r(   r,  s     r0   Ú_is_direct_childr0    s?   € Ýˆy‰>Œ>�S ™ZœZ¨!™^Ò+ÐWµ°iÀÅ#ÀeÁ*Ä*ÀÔ6MÑ0NÔ0NÐRWÒ0WÐWr/   c                ó,   — g d¢t          | ¦  «        gdœS )N)r@   rE   rA   rB   )rH   rK   rM   ©r,  s    r0   Ú_subgraph_subscription_paramsr3    s(   € ð @Ð?Ð?Ý˜E‘{”{�mðð ð r/   c                  óR   — e Zd ZdZddœdd„Zd d„Zd!d„Zd"d„Zd#d„Zd$d„Z	d%d&d„Z
dS )'ÚScopedStreamHandlez<Scoped streaming handle for one discovered child invocation.r   )Úmax_queue_sizer±   rb   Úpathr-  Ú
graph_namer—   Útrigger_call_idr6  r7   rI   rc   c               ó6  — || _         || _        t          |¦  «        | _        || _        || _        d| _        d | _        || _        t          j
        |¬¦  «        | _        t          j
        |¬¦  «        | _        t          j
        |¬¦  «        | _        i | _        t          ¦   «         | _        t#          | ¦  «        | _        t'          | ¦  «        | _        t+          | ¦  «        | _        | j        | _        t1          |t          |¦  «        ¬¦  «        | _        d S )Nr  ©Úmaxsize©r(   )r³   r7  rN   r(   r8  r9  r3   r4   Ú_max_queue_sizer<   r=   Ú_messages_inboxÚ_tools_inboxÚ_tasks_inboxÚ_descendant_handlesÚsetÚ_iterated_inboxesÚ_HandleMessagesProjectionr@   Ú_HandleToolCallsProjectionÚ
tool_callsÚ_HandleSubgraphsProjectionÚ	subgraphsÚ	subagentsÚ_ExtensionsProjectionÚ
extensions)ri   r±   r7  r8  r9  r6  s         r0   rj   zScopedStreamHandle.__init__#  s  € ð ˆŒØˆŒ	Ý˜d™œˆŒØ$ˆŒØ.ˆÔØ&/ˆŒØ!%ˆŒ
Ø-ˆÔõ =D¼MØ"ð=
ñ =
ô =
ˆÔõ :A¼Ø"ð:
ñ :
ô :
ˆÔõ :A¼Ø"ð:
ñ :
ô :
ˆÔð OQˆÔ õ ,/©5¬5ˆÔÝ1°$Ñ7Ô7ˆŒÝ4°TÑ:Ô:ˆŒÝ3°DÑ9Ô9ˆŒØœˆŒÝ/°Å$ÀtÁ*Ä*ÐMÑMÔMˆŒˆˆr/   rX   r   c                ó*  — |                      d¦  «        }|dk    r| j                             |¦  «         nA|dk    r| j                             |¦  «         n |dk    r| j                             |¦  «         |dv r•t          t          |                      d¦  «        pi ¦  «        ¦  «        }| j                             ¦   «         D ]L\  }}t          |¦  «        }t          |¦  «        |k    r#|d|…         |k    r| 
                    |¦  «         ŒKdS dS )a  Route a descendant event into the appropriate channel inbox.

        Also fans out to any registered descendant handles whose path is a
        prefix of the event namespace, so grandchild events are delivered at
        push time rather than via a post-hoc drain-and-replay.
        r[   r@   rA   rE   ©r@   rA   rE   r9   N)rT   r?  Ú
put_nowaitr@  rA  r/  rU   rB  r  r¢   Ú_push_event)ri   rX   r[   Úns_tupleÚ	desc_pathÚdesc_handleÚdesc_lens          r0   rP  zScopedStreamHandle._push_eventO  s/  € ð —’˜8Ñ$Ô$ˆØ�ZÒÐØÔ ×+Ò+¨EÑ2Ô2Ð2Ð2Ø�wÒÐØÔ×(Ò(¨Ñ/Ô/Ð/Ð/Ø�wÒÐØÔ×(Ò(¨Ñ/Ô/Ð/ð Ð3Ð3Ð3ÝÕ-¨e¯iªi¸Ñ.AÔ.AÐ.GÀRÑHÔHÑIÔIˆHØ*.Ô*B×*HÒ*HÑ*JÔ*Jð 3ð 3Ñ&�	˜;Ý˜y™>œ>�Ý�x‘=”= HÒ,Ð,°¸)¸8¸)Ô1DÈ	Ò1QÐ1QØ×+Ò+¨EÑ2Ô2Ð2øð 4Ð3ð3ð 3r/   r©   c           	     óF  — || j         |j        <   t          |j        ¦  «        }dD ]ú}t          | |¦  «        }g }|                     ¦   «         s;|                     |                     ¦   «         ¦  «         |                     ¦   «         ¯;|D ]”}|                     |¦  «         |€Œt          t          | 
                    d¦  «        pi ¦  «        ¦  «        }t          |¦  «        |k    r6|d|…         |j        k    r#t          ||¦  «                             |¦  «         Œ•ŒûdS )a.  Register a newly-discovered grandchild so future events are fanned out.

        Also drains any events already buffered in this handle's inboxes whose
        namespace matches the grandchild, so events that arrived before the
        grandchild was discovered are forwarded in arrival order.
        )r?  r@  rA  Nr9   )rB  r7  r¢   ÚgetattrÚemptyr  Ú
get_nowaitrO  r/  rU   rT   )ri   r©   rT  Ú
inbox_attrr  ÚstagingrX   rQ  s           r0   Ú_register_descendantz'ScopedStreamHandle._register_descendantf  s6  € ð 17ˆÔ  ¤Ñ-Ý�v”{Ñ#Ô#ˆð
ð 	Bð 	BˆJõ
 29¸¸zÑ1JÔ1JˆEØ*,ˆGØ—k’k‘m”mð 3Ø—’˜u×/Ò/Ñ1Ô1Ñ2Ô2Ð2ð —k’k‘m”mð 3à ð Bð B�Ø× Ò  Ñ'Ô'Ð'Ø�=ØÝ Õ!1°%·)²)¸HÑ2EÔ2EÐ2KÈÑ!LÔ!LÑMÔM�Ý�x‘=”= HÒ,Ð,°¸)¸8¸)Ô1DÈÌÒ1SÐ1SÝ˜F JÑ/Ô/×:Ò:¸5ÑAÔAÐAøðBð	Bð 	Br/   c                ó<   — | j                              |d¦  «         dS )z6Remove a grandchild after it reaches a terminal state.N)rB  Úpop)ri   r7  s     r0   Ú_unregister_descendantz)ScopedStreamHandle._unregister_descendant€  s!   € àÔ ×$Ò$ T¨4Ñ0Ô0Ð0Ð0Ð0r/   Úkindr$   c                ó¢   — | j                              |¦  «         | j        dk    r)t          | d|› d�¦  «                             d¦  «         dS dS )ab  Record that an inbox has an active consumer.

        If the handle is already closed (status != 'started'), immediately
        enqueue a sentinel so the consumer's `await get()` terminates. This
        handles sequential consumption (iterate after the handle is finished).

        Must be called by each projection at the start of iteration.
        r  Ú_Ú_inboxN)rD  Úaddr3   rV  rO  ©ri   r_  s     r0   Ú_mark_iteratedz!ScopedStreamHandle._mark_iterated„  sb   € ð 	Ô×"Ò" 4Ñ(Ô(Ð(ØŒ;˜)Ò#Ð#õ �DÐ*˜dÐ*Ð*Ð*Ñ+Ô+×6Ò6°tÑ<Ô<Ð<Ð<Ð<ð $Ð#r/   c                óp   — dD ]2}|| j         v r't          | d|› d�¦  «                             d¦  «         Œ3dS )a,  Signal EOF only on channel inboxes that have an active consumer.

        Inboxes without a consumer would accumulate a leaked None sentinel
        that is never drained, so we skip them. For inboxes whose consumer
        starts after this call, `_mark_iterated` sends the sentinel lazily.
        rN  ra  rb  N)rD  rV  rO  rd  s     r0   Ú_close_inboxesz!ScopedStreamHandle._close_inboxes“  sZ   € ð 3ð 	Að 	AˆDØ�tÔ-Ð-Ð-Ý˜Ð. $Ð.Ð.Ð.Ñ/Ô/×:Ò:¸4Ñ@Ô@Ð@øð	Að 	Ar/   Nr3   ÚSubgraphStatusr4   c                ód   — | j         dk    rd S || _         || _        |                      ¦   «          d S )Nr  )r3   r4   rg  )ri   r3   r4   s      r0   Ú_finishzScopedStreamHandle._finishž  s:   € ØŒ;˜)Ò#Ð#ØˆFØˆŒØˆŒ
Ø×ÒÑÔÐÐÐr/   )r±   rb   r7  r-  r8  r—   r9  r—   r6  r7   rI   rc   ©rX   r   rI   rc   ©r©   r5  rI   rc   )r7  r-  rI   rc   )r_  r$   rI   rc   ©rI   rc   re   )r3   rh  r4   r—   rI   rc   )r)   r*   r+   r,   rj   rP  r[  r^  re  rg  rj  r.   r/   r0   r5  r5     sÉ   € € € € € ØFÐFð  ð*Nð *Nð *Nð *Nð *Nð *NðX3ð 3ð 3ð 3ð.Bð Bð Bð Bð41ð 1ð 1ð 1ð=ð =ð =ð =ð	Að 	Að 	Að 	Aðð ð ð ð ð ð r/   r5  c                  ó*   — e Zd ZdZdd„Zdd„Zdd
„ZdS )rE  zHMessages projection that drains a `ScopedStreamHandle`'s messages inbox.r©   r5  rI   rc   c                ó   — || _         d S re   ©Ú_handle©ri   r©   s     r0   rj   z"_HandleMessagesProjection.__init__©  rÐ   r/   rÔ   c                ó*   — |                       ¦   «         S re   rñ   rº   s    r0   r×   z#_HandleMessagesProjection.__aiter__¬  ró   r/   rØ   c               ó¢  K  — ddl m} | j                             d¦  «         i }	 | j        j                             ¦   «         ƒ d {V —†}|€d S |                     d¦  «        pi }t          |¦  «        }|| j        j        k    rŒ`t          |t          ¦  «        r|                     d¦  «        nd }t          |t          ¦  «        sŒ¢|                     d¦  «        }|dk    r»t          |¦  «        }t          ||¬	¦  «        }	t          |                     d
¦  «        t          ¦  «        r|                     d
¦  «        ni }
 |t          | j        j        ¦  «        |
r|
                     d¦  «        nd |¬¦  «        }|||	<   |                     |¦  «         |W V — n²t          |¦  «        }	|                     |	¦  «        }|€At          |¦  «        dk    r.t          t!          |                     ¦   «         ¦  «        ¦  «        }|€�Œã|                     |¦  «         |dv r.t          |                     ¦   «         ¦  «        D ]\  }}||u r||= Œ�Œ+)Nr   r   r@   Tr9   r\   rX   r	  r
  r�   r  rø   r™   r  )r  r   rq  re  r?  rT   rU   r(   rR   rS   r  r  rN   r  r¢   r£   r  r>   r  )ri   r   r  rã   rP   Únsr\   r  rú   r  r�   r  r  r  s                 r0   rò   z(_HandleMessagesProjection._messages_iter¯  s�  è è € ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	Œ×#Ò# JÑ/Ô/Ð/Ø24ˆð'	2ØœÔ5×9Ò9Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;ˆDØˆ|Ø�ØŸ8š8 HÑ-Ô-Ð3°ˆLÝ! ,Ñ/Ô/ˆBØ�T”\Ô+Ò+Ð+ØÝ/9¸,ÍÑ/MÔ/MÐW�<×#Ò# FÑ+Ô+Ð+ÐSWˆDÝ˜d¥DÑ)Ô)ð ØØŸš 'Ñ*Ô*ˆJØ˜_Ò,Ð,Ý.¨tÑ4Ô4�
Ý(¨¸
ÐCÑCÔC�õ " $§(¢(¨:Ñ"6Ô"6½Ñ=Ô=ð�D—H’H˜ZÑ(Ô(Ð(àð ð
 .Ð-Ý" 4¤<Ô#9Ñ:Ô:Ø;CÐM˜ŸšÐ&6Ñ7Ô7Ð7ÈØ)ðñ ô �ð
 %��s‘Ø—’ Ñ%Ô%Ð%Ø�����å(¨Ñ.Ô.�ØŸš C™œ�Ø�>¥c¨&¡k¤k°QÒ&6Ð&6Ý!¥$ v§}¢}¡¤Ñ"7Ô"7Ñ8Ô8�FØ�>ÙØ—’ Ñ%Ô%Ð%ØÐ!<Ð<Ð<Ý04°V·\²\±^´^Ñ0DÔ0Dð 2ð 2Ñ,˜	 9Ø$¨Ð.Ð.Ø & yÐ 1øñO'	2r/   Nrl  rå   ræ   )r)   r*   r+   r,   rj   r×   rò   r.   r/   r0   rE  rE  ¦  sV   € € € € € ØRÐRðð ð ð ð%ð %ð %ð %ð.2ð .2ð .2ð .2ð .2ð .2r/   rE  c                  ó*   — e Zd ZdZdd„Zdd„Zdd
„ZdS )rF  zGTool calls projection that drains a `ScopedStreamHandle`'s tools inbox.r©   r5  rI   rc   c                ó   — || _         d S re   rp  rr  s     r0   rj   z#_HandleToolCallsProjection.__init__ã  rÐ   r/   rÔ   c                ó*   — |                       ¦   «         S re   ©Ú_tool_calls_iterrº   s    r0   r×   z$_HandleToolCallsProjection.__aiter__æ  ó   € Ø×$Ò$Ñ&Ô&Ð&r/   rØ   c               óˆ  K  — | j                              d¦  «         i }	 | j         j                             ¦   «         ƒ d {V —†}|€=t	          d¦  «        }|                     ¦   «         D ]}|                     |¦  «         Œd S |                     d¦  «        pi }t          |¦  «        }|| j         j        k    rŒ›t          |t          ¦  «        r|                     d¦  «        nd }t          |t          ¦  «        sŒÝ|                     d¦  «        }|                     d¦  «        }	t          |	t          ¦  «        s�Œ|dk    ru|                     d	¦  «        }
t          |
t          ¦  «        sd
}
t          |	|
|                     d¦  «        t          | j         j        ¦  «        ¬¦  «        }|||	<   |W V — �n
|dk    rW|                     |	¦  «        }|                     d¦  «        }|�*t          |t          ¦  «        r|                     |¦  «         n­|dk    rA|                     |	d ¦  «        }|�(|                     |                     d¦  «        ¦  «         nf|dk    r`|                     |	d ¦  «        }|�H|                     d¦  «        }|                     t	          |rt          |¦  «        nd¦  «        ¦  «         �Œ¤)NrA   Tú3Tool call stream closed before terminal tool event.r9   r\   rX   Útool_call_idztool-startedÚ	tool_nameÚ rC   ©r~  r%  rC   r(   ztool-output-deltaÚdeltaztool-finishedrÓ   z
tool-errorÚmessagezTool call errored)rq  re  r@  rT   rt   r>   Ú_failrU   r(   rR   rS   r$   ÚToolCallHandlerN   Ú_push_deltar]  rj  )ri   r  rã   r“   r©   rP   ru  r\   r  r~  r  r‚  rƒ  s                r0   rz  z+_HandleToolCallsProjection._tool_calls_iteré  sÎ  è è € ØŒ×#Ò# GÑ,Ô,Ð,Ø,.ˆð/	ØœÔ2×6Ò6Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆDØˆ|Ý"ØIñô �ð %Ÿmšm™oœoð &ð &�FØ—L’L Ñ%Ô%Ð%Ð%Ø�ØŸ8š8 HÑ-Ô-Ð3°ˆLÝ! ,Ñ/Ô/ˆBØ�T”\Ô+Ò+Ð+ØÝ/9¸,ÍÑ/MÔ/MÐW�<×#Ò# FÑ+Ô+Ð+ÐSWˆDÝ˜d¥DÑ)Ô)ð ØØŸš 'Ñ*Ô*ˆJØŸ8š8 NÑ3Ô3ˆLÝ˜l­CÑ0Ô0ð ÙØ˜^Ò+Ð+Ø ŸHšH [Ñ1Ô1�	Ý! )­SÑ1Ô1ð #Ø "�IÝ'Ø!-Ø"ØŸ(š( 7Ñ+Ô+Ý" 4¤<Ô#9Ñ:Ô:ð	ñ ô �ð (.��|Ñ$Ø����‘ØÐ2Ò2Ð2ØŸš LÑ1Ô1�ØŸš Ñ)Ô)�ØÐ%­*°U½CÑ*@Ô*@Ð%Ø×&Ò& uÑ-Ô-Ð-øØ˜Ò.Ð.ØŸš L°$Ñ7Ô7�ØÐ%Ø—N’N 4§8¢8¨HÑ#5Ô#5Ñ6Ô6Ð6øØ˜|Ò+Ð+ØŸš L°$Ñ7Ô7�ØÐ%Ø"Ÿhšh yÑ1Ô1�GØ—L’LÝ$°WÐ%U¥S¨¡\¤\ \ÐBUÑVÔVñô ð ñ[/	r/   Nrl  rå   ræ   ©r)   r*   r+   r,   rj   r×   rz  r.   r/   r0   rF  rF  à  sV   € € € € € ØQÐQðð ð ð ð'ð 'ð 'ð 'ð2ð 2ð 2ð 2ð 2ð 2r/   rF  c                  ó2   — e Zd ZdZdd„Zdd„Zdd„Zdd„ZdS )rH  zFSubgraphs projection that drains a `ScopedStreamHandle`'s tasks inbox.r©   r5  rI   rc   c                ó   — || _         d S re   rp  rr  s     r0   rj   z#_HandleSubgraphsProjection.__init__!  rÐ   r/   ú!AsyncIterator[ScopedStreamHandle]c                ó*   — |                       ¦   «         S re   ©Ú_subgraphs_iterrº   s    r0   r×   z$_HandleSubgraphsProjection.__aiter__$  ó   € Ø×#Ò#Ñ%Ô%Ð%r/   r  ú)dict[tuple[str, ...], ScopedStreamHandle]c                ó¶  — | j         }dD �]M\  }}t          ||¦  «        }g }|                     ¦   «         s;|                     |                     ¦   «         ¦  «         |                     ¦   «         ¯;|D ]ã}|€|                     d¦  «         Œ|                     d¦  «        pi }t          t          |¦  «        ¦  «        }	d}
| 	                    ¦   «         D ]h\  }}t          |j        ¦  «        }t          |	¦  «        |k    r<|	d|…         |j        k    r)t          ||¦  «        }|                     |¦  «         d}
 nŒi|
s|                     |¦  «         Œä�ŒOdS )a  Drain non-blocking events from parent's messages/tools inboxes to grandchildren.

        Called after each tasks event so grandchild handles receive events that
        were enqueued in the parent handle's inboxes before (or just after) the
        grandchild was discovered.
        ))r?  r?  )r@  r@  Nr9   FT)rq  rV  rW  r  rX  rO  rT   r/  rU   r  r¢   r7  )ri   r  ÚparentrY  Úgrandchild_attrr  rZ  rX   Úevent_paramsrQ  ÚroutedÚ_child_pathÚ
grandchildÚgrandchild_lenÚgc_inboxs                  r0   Ú'_route_sibling_inboxes_to_grandchildrenzB_HandleSubgraphsProjection._route_sibling_inboxes_to_grandchildren'  sˆ  € ð ”ˆð,
ð 	,ñ 	,Ñ'ˆJ˜õ 29¸ÀÑ1LÔ1LˆEØ*,ˆGà—k’k‘m”mð 3Ø—’˜u×/Ò/Ñ1Ô1Ñ2Ô2Ð2ð —k’k‘m”mð 3à ð ,ð ,�Ø�=à×$Ò$ TÑ*Ô*Ð*ØØ$Ÿyšy¨Ñ2Ô2Ð8°b�Ý Õ!1°,Ñ!?Ô!?Ñ@Ô@�Ø�Ø/5¯|ª|©~¬~ð ð Ñ+�K Ý%(¨¬Ñ%9Ô%9�Nå˜H™œ¨Ò7Ð7Ø$ _ n _Ô5¸¼ÒHÐHå@GØ&¨ñAô A˜ð !×+Ò+¨EÑ2Ô2Ð2Ø!%˜Ø˜øØð ,à×$Ò$ UÑ+Ô+Ð+øñ-,ð	,ð 	,r/   ú(AsyncGenerator[ScopedStreamHandle, None]c               ó²  K  — | j                              d¦  «         t          ¦   «         }i }| j         j        }	 | j         j                             ¦   «         ƒ d {V —†}|€9|                     ¦   «         D ]"}|j        dk    r|                     d¦  «         Œ#d S |                     d¦  «        pi }t          |¦  «        }t          |t          ¦  «        r|                     d¦  «        nd }t          |t          ¦  «        sŒÈd|v r°|                     d¦  «        }	|	sŒät          |¦  «        }
t          |                     ¦   «         ¦  «        D ]e\  }}|d d	…         |
k    rŒ|j        |	k    rŒ t!          |¦  «        \  }}|                     ||¦  «         ||= | j                              |¦  «         Œf�Œ|t%          ||¦  «        s�ŒŽt          |¦  «        }||v r�Œ£|                     |¦  «         t)          |d	         ¦  «        \  }}t+          | j         j        ||pd || j         j        ¬
¦  «        }|||<   | j                              |¦  «         |W V — �Œ)NrE   Tr  rV   r9   r\   r’   r8   éÿÿÿÿ)r±   r7  r8  r9  r6  )rq  re  rC  r7  rA  rT   r>   r3   rj  rU   rR   rS   r/  rN   r  r9  r+  r^  r0  rc  r(  r5  r³   r>  r[  )ri   Úseenr  r,  rã   ÚchildrP   r(   r\   Ú	result_idÚparent_pathÚ
child_pathÚchild_handler3   r4   r7  r8  r9  s                     r0   r�  z*_HandleSubgraphsProjection._subgraphs_iterS  s‰  è è € ØŒ×#Ò# GÑ,Ô,Ð,Ý%(¡U¤UˆØ<>ˆØ”Ô!ˆð-	ØœÔ2×6Ò6Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆDØˆ|Ø#Ÿ]š]™_œ_ð 3ð 3�EØ”| yÒ0Ð0ØŸš kÑ2Ô2Ð2øØ�ØŸ8š8 HÑ-Ô-Ð3°ˆLÝ(¨Ñ6Ô6ˆIÝ/9¸,ÍÑ/MÔ/MÐW�<×#Ò# FÑ+Ô+Ð+ÐSWˆDÝ˜d¥DÑ)Ô)ð ØØ˜4ÐÐØ ŸHšH T™NœN�	Ø ð ØÝ# IÑ.Ô.�Ý04°V·\²\±^´^Ñ0DÔ0Dð Dð DÑ,�J Ø! # 2 #”¨+Ò5Ð5Ø Ø#Ô3°yÒ@Ð@Ø Ý$?ÀÑ$EÔ$E‘M�F˜EØ ×(Ò(¨°Ñ7Ô7Ð7Ø˜zÐ*Ø”L×7Ò7¸
ÑCÔCÐCÐCÙÝ# I¨uÑ5Ô5ð ÙÝ˜Ñ#Ô#ˆDØ�tˆ|ˆ|ÙØ�HŠH�T‰NŒNˆNÝ*BÀ4ÈÄ8Ñ*LÔ*LÑ'ˆJ˜Ý-Ø”|Ô+ØØ%Ð-¨Ø /Ø#œ|Ô;ðñ ô ˆLð (ˆF�4‰Lð ŒL×-Ò-¨lÑ;Ô;Ð;ØÐÐÐÐñ[-	r/   Nrl  ©rI   rŠ  )r  r�  rI   rc   ©rI   rš  )r)   r*   r+   r,   rj   r×   r™  r�  r.   r/   r0   rH  rH    sk   € € € € € ØPÐPðð ð ð ð&ð &ð &ð &ð*,ð *,ð *,ð *,ðX2ð 2ð 2ð 2ð 2ð 2r/   rH  c                  ó,   — e Zd ZdZddd	„Zdd„Zdd„ZdS )Ú_SubgraphsProjectionz8Discover direct child invocations for a namespace scope.r.   r±   rb   r,  r-  rI   rc   c                ó"   — || _         || _        d S re   )r³   Ú_scope)ri   r±   r,  s      r0   rj   z_SubgraphsProjection.__init__‹  s   € ØˆŒØˆŒˆˆr/   rŠ  c                ó*   — |                       ¦   «         S re   rŒ  rº   s    r0   r×   z_SubgraphsProjection.__aiter__�  rŽ  r/   rš  c               ót  ‡ K  — ‰ j         j        €t          d¦  «        ‚t          ‰ j        ¦  «        }‰ j                              |¦  «        }t          ‰ j        ˆ fd„¬¦  «        }‰ j        s‰ j                              ¦   «         nd }	 ‰ j                              |¦  «        ƒ d {V —† ‰ j          	                    ¦   «          	 |j
                             ¦   «         ƒ d {V —†}|€å	 d}‰ j         j        }|�^|                     ¦   «         rJ|                     ¦   «         s6|                     ¦   «         }t!          |t"          ¦  «        r|j        dk    rd}|j                             ¦   «         D ]"}	|	j        dk    r|	                     |¦  «         Œ#‰ j                              |j        ¦  «         |�|                     d ¦  «         d S d S |                     d	¦  «        pi }
|�S|                     d
¦  «        dk    r:t3          t5          |
¦  «        ¦  «        ‰ j        k    r|                     |¦  «         |                     |¦  «        D ]}	|	W V — Œ�Œ‘# d}‰ j         j        }|�^|                     ¦   «         rJ|                     ¦   «         s6|                     ¦   «         }t!          |t"          ¦  «        r|j        dk    rd}|j                             ¦   «         D ]"}	|	j        dk    r|	                     |¦  «         Œ#‰ j                              |j        ¦  «         |�|                     d ¦  «         w w xY w)Nú1AsyncThreadStream not entered - use `async with`.c                ó4   •— t          ‰j        | ||¬¦  «        S ©N)r±   r7  r8  r9  )r5  r³   ©r7  r8  r9  ri   s      €r0   rû   z6_SubgraphsProjection._subgraphs_iter.<locals>.<lambda>™  s(   ø€ Ý"Øœ<ØØ)Ø$3ð	ñ ô ð r/   ©r,  Úhandle_factoryTrV   ÚerroredrW   r  r9   r[   r@   )r³   rÛ   rt   r3  r¨  rÜ   r   Ú_activate_root_messages_inboxrÝ   rÞ   r;   rT   Ú	_run_doner‰   rŒ   r’   rR   r2   r3   Ú_activer>   rj  rß   r8   rO  r/  rU   rà   )ri   r9   rá   râ   r  rã   Úterminal_statusÚrun_doner’   r©   rP   s   `          r0   r�  z$_SubgraphsProjection._subgraphs_iter’  sb  øè è € ØŒ<Ô"Ð*ÝÐRÑSÔSÐSÝ.¨t¬{Ñ;Ô;ˆØŒl×1Ò1°&Ñ9Ô9ˆÝ"Ø”+ðð ð ð ð

ñ 

ô 

ˆð AEÄÐUˆDŒL×6Ò6Ñ8Ô8Ð8ÐQUð 	ð	,Ø”,×0Ò0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØŒL×/Ò/Ñ1Ô1Ð1ð!Ø œYŸ]š]™_œ_Ð,Ð,Ð,Ð,Ð,Ð,�Ø�<Øð /:ˆOØ”|Ô-ˆHØÐ#¨¯ª©¬Ð#À×@RÒ@RÑ@TÔ@TÐ#Ø!ŸšÑ*Ô*�Ý˜f¥lÑ3Ô3ð /¸¼ÈÒ8RÐ8RØ&.�OØ!œ/×0Ò0Ñ2Ô2ð 4ð 4�Ø”= IÒ-Ð-Ø—N’N ?Ñ3Ô3Ð3øØŒL×1Ò1°#´&Ñ9Ô9Ð9ØÐ%Ø×%Ò% dÑ+Ô+Ð+Ð+Ð+ð &Ð%ð/  $Ÿxšx¨Ñ1Ô1Ð7°R�àÐ*ØŸš Ñ*Ô*¨jÒ8Ð8ÝÕ.¨|Ñ<Ô<Ñ=Ô=ÀÄÒLÐLà×)Ò)¨$Ñ/Ô/Ð/Ø%Ÿlšl¨4Ñ0Ô0ð !ð !�FØ �L�L�L�L�Lñ!øð" /:ˆOØ”|Ô-ˆHØÐ#¨¯ª©¬Ð#À×@RÒ@RÑ@TÔ@TÐ#Ø!ŸšÑ*Ô*�Ý˜f¥lÑ3Ô3ð /¸¼ÈÒ8RÐ8RØ&.�OØ!œ/×0Ò0Ñ2Ô2ð 4ð 4�Ø”= IÒ-Ð-Ø—N’N ?Ñ3Ô3Ð3øØŒL×1Ò1°#´&Ñ9Ô9Ð9ØÐ%Ø×%Ò% dÑ+Ô+Ð+Ð+ð &øøøs   Â	AI Ç	BI ÉC#L7N)r.   )r±   rb   r,  r-  rI   rc   r£  r¤  )r)   r*   r+   r,   rj   r×   r�  r.   r/   r0   r¦  r¦  ˆ  s[   € € € € € ØBÐBðð ð ð ð ð&ð &ð &ð &ð2,ð 2,ð 2,ð 2,ð 2,ð 2,r/   r¦  c                  ó\   — e Zd ZdZddddœdd„Zedd„¦   «         Zdd„Zdd„Zd d„Z	d!d„Z
dS )"r…  z*Async handle for one root-scope tool call.Né   )rC   r(   r6  r~  r$   r%  rC   r
   r(   ré   r6  r7   rI   rc   c               ó  — || _         || _        || _        t          |pg ¦  «        | _        d| _        d | _        t          j        ¦   «         }| 	                    ¦   «         | _
        t          j        |¬¦  «        | _        d| _        d S )NFr;  )r~  r%  rC   rN   r(   r‰   r4   r<   r…   r†   rÓ   r=   Ú_deltasÚ_deltas_consumed)ri   r~  r%  rC   r(   r6  r�   s          r0   rj   zToolCallHandle.__init__Ê  s~   € ð )ˆÔØˆŒ	ØˆŒ
Ý˜i˜o¨2Ñ.Ô.ˆŒØˆŒ	Ø+/ˆŒ
ÝÔ'Ñ)Ô)ˆØ+/×+=Ò+=Ñ+?Ô+?ˆŒÝ29´-ÈÐ2WÑ2WÔ2WˆŒØ %ˆÔÐÐr/   úAsyncIterator[str]c                ód   — | j         rt          d¦  «        ‚d| _         |                      ¦   «         S )uæ   Stream tool output deltas emitted before the terminal event.

        Raises:
            RuntimeError: if called more than once â€” the underlying queue is
                single-consumer and cannot be fanned out safely.
        z@ToolCallHandle.deltas can only be iterated by a single consumer.T)r»  rt   Ú_delta_iterrº   s    r0   ÚdeltaszToolCallHandle.deltasÞ  s@   € ð Ô ð 	ÝØRñô ð ð !%ˆÔØ×ÒÑ!Ô!Ð!r/   úAsyncGenerator[str, None]c               óZ   K  — 	 | j                              ¦   «         ƒ d {V —†}|€d S |W V — Œ)re   )rº  rT   )ri   rã   s     r0   r¾  zToolCallHandle._delta_iterí  sJ   è è € ð	Øœ×)Ò)Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+ˆDØˆ|Ø�ØˆJˆJˆJˆJð		r/   r‚  c                óL   — | j         rd S | j                             |¦  «         d S re   )r‰   rº  rO  )ri   r‚  s     r0   r†  zToolCallHandle._push_deltaô  s-   € ØŒ9ð 	ØˆFØŒ×Ò Ñ&Ô&Ð&Ð&Ð&r/   rÓ   c                óÀ   — | j         rd S d| _         | j                              ¦   «         s| j                             |¦  «         | j                             d ¦  «         d S ©NT)r‰   rÓ   rŠ   rº  rO  )ri   rÓ   s     r0   rj  zToolCallHandle._finishù  s`   € ØŒ9ð 	ØˆFØˆŒ	ØŒ{×ÒÑ!Ô!ð 	+ØŒK×"Ò" 6Ñ*Ô*Ð*ØŒ×Ò Ñ%Ô%Ð%Ð%Ð%r/   r“   rŽ   c                óÎ   — | j         rd S d| _         || _        | j                              ¦   «         s| j                             |¦  «         | j                             d ¦  «         d S rÄ  )r‰   r4   rÓ   r�   rº  rO  )ri   r“   s     r0   r„  zToolCallHandle._fail  sg   € ØŒ9ð 	ØˆFØˆŒ	ØˆŒ
ØŒ{×ÒÑ!Ô!ð 	+ØŒK×%Ò% cÑ*Ô*Ð*ØŒ×Ò Ñ%Ô%Ð%Ð%Ð%r/   )r~  r$   r%  r$   rC   r
   r(   ré   r6  r7   rI   rc   )rI   r¼  )rI   rÀ  )r‚  r$   rI   rc   )rÓ   r
   rI   rc   ©r“   rŽ   rI   rc   )r)   r*   r+   r,   rj   Úpropertyr¿  r¾  r†  rj  r„  r.   r/   r0   r…  r…  Ç  s³   € € € € € Ø4Ð4ð Ø&*Ø"ð&ð &ð &ð &ð &ð &ð( ð"ð "ð "ñ „Xð"ðð ð ð ð'ð 'ð 'ð 'ð
&ð &ð &ð &ð&ð &ð &ð &ð &ð &r/   r…  c                  ó.   — e Zd ZdZ	 ddd	„Zdd„Zdd„ZdS )Ú_ToolCallsProjectionz4Typed projection for root-scope `thread.tool_calls`.Nr±   rb   r(   ré   rI   rc   c                ó@   — || _         t          |pg ¦  «        | _        d S re   rë   rí   s      r0   rj   z_ToolCallsProjection.__init__  rî   r/   úAsyncIterator[ToolCallHandle]c                ó*   — |                       ¦   «         S re   ry  rº   s    r0   r×   z_ToolCallsProjection.__aiter__  r{  r/   ú$AsyncGenerator[ToolCallHandle, None]c               óº  K  — | j         j        €t          d¦  «        ‚t          dg| j        ¦  «        }| j                              |¦  «        }t          | j        d„ ¬¦  «        }g }	 | j                              |¦  «        ƒ d {V —† | j                              ¦   «          	 |j	         
                    ¦   «         ƒ d {V —†}|€å	 | j         j        }d }|�C|                     ¦   «         r/|                     ¦   «         s|                     ¦   «         }|j        }|�|nt          d¦  «        }	t!          |j                             ¦   «         ¦  «        D ]}
|
                     |	¦  «         Œ|D ]}
| j                              |
¦  «         Œ| j                              |j        ¦  «         d S |                     |¦  «        D ]6}
| j                              |
¦  «         |                     |
¦  «         |
W V — Œ7�ŒT# | j         j        }d }|�C|                     ¦   «         r/|                     ¦   «         s|                     ¦   «         }|j        }|�|nt          d¦  «        }	t!          |j                             ¦   «         ¦  «        D ]}
|
                     |	¦  «         Œ|D ]}
| j                              |
¦  «         Œ| j                              |j        ¦  «         w xY w)Nr«  rA   c                ó(   — t          | |||¬¦  «        S ©Nr�  ©r…  r�  s       r0   rû   z7_ToolCallsProjection._tool_calls_iter.<locals>.<lambda>  s%   € ÝØ!-ØØØ'ð	ñ ô ð r/   ©r(   r°  Tr}  )r³   rÛ   rt   rO   rì   rÜ   r   rÝ   rÞ   r;   rT   r³  r‰   rŒ   r’   r4   rN   r´  r>   r„  Ú_unregister_active_tool_callrß   r8   rà   Ú_register_active_tool_callr  )ri   r9   rá   râ   r  rã   r¶  Úterminal_errrË   r“   r©   s              r0   rz  z%_ToolCallsProjection._tool_calls_iter  s  è è € ØŒ<Ô"Ð*ÝÐRÑSÔSÐSÝ(¨'¨°D´OÑDÔDˆØŒl×1Ò1°&Ñ9Ô9ˆÝ"Ø”oðð ð

ñ 

ô 

ˆð ,.ˆ
ð	:Ø”,×0Ò0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØŒL×/Ò/Ñ1Ô1Ð1ð!Ø œYŸ]š]™_œ_Ð,Ð,Ð,Ð,Ð,Ð,�Ø�<Øð ”|Ô-ˆHØ15ˆLØÐ#¨¯ª©¬Ð#À×@RÒ@RÑ@TÔ@TÐ#Ø#Ÿ?š?Ñ,Ô,�Ø'œ~�ð  Ð+ð �å!Ð"WÑXÔXð õ
 ˜wœ×5Ò5Ñ7Ô7Ñ8Ô8ð "ð "�Ø—’˜SÑ!Ô!Ð!Ð!Ø$ð Bð B�Ø”×9Ò9¸&ÑAÔAÐAÐAØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð1 &Ÿlšl¨4Ñ0Ô0ð !ð !�FØ”L×;Ò;¸FÑCÔCÐCØ×%Ò% fÑ-Ô-Ð-Ø �L�L�L�L�Lñ!øð ”|Ô-ˆHØ15ˆLØÐ#¨¯ª©¬Ð#À×@RÒ@RÑ@TÔ@TÐ#Ø#Ÿ?š?Ñ,Ô,�Ø'œ~�ð  Ð+ð �å!Ð"WÑXÔXð õ
 ˜wœ×5Ò5Ñ7Ô7Ñ8Ô8ð "ð "�Ø—’˜SÑ!Ô!Ð!Ð!Ø$ð Bð B�Ø”×9Ò9¸&ÑAÔAÐAÐAØŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøs   Á(AG6 Æ(AG6 Ç6C$Kre   r  )rI   rË  )rI   rÍ  r‡  r.   r/   r0   rÉ  rÉ    sb   € € € € € Ø>Ð>ð HLð0ð 0ð 0ð 0ð 0ð'ð 'ð 'ð 'ð0:ð 0:ð 0:ð 0:ð 0:ð 0:r/   rÉ  c                  ó"   — e Zd ZdZdd„Zdd„ZdS )rK  a  Mapping from extension name to custom event payload stream.

    Repeated access for the same `name` returns the cached projection so that
    callers receive the same subscription handle across multiple references to
    `thread.extensions["foo"]` within one session.
    r±   rb   r(   r'   rI   rc   c                ó0   — || _         || _        i | _        d S re   )r³   rì   Ú_cacherí   s      r0   rj   z_ExtensionsProjection.__init__R  s   € ØˆŒØ#ˆŒØ79ˆŒˆˆr/   r%  r$   Ú_ExtensionProjectionc                ó˜   — |st          d¦  «        ‚|| j        vr$t          | j        || j        ¬¦  «        | j        |<   | j        |         S )Nz!extension name must be non-empty.)r%  r(   )Ú
ValueErrorrØ  rÙ  r³   rì   )ri   r%  s     r0   Ú__getitem__z!_ExtensionsProjection.__getitem__W  s\   € Øð 	BÝÐ@ÑAÔAÐAØ�t”{Ð"Ð"Ý 4Ø” 4°4´?ð!ñ !ô !ˆDŒK˜Ñð Œ{˜4Ô Ð r/   N)r±   rb   r(   r'   rI   rc   )r%  r$   rI   rÙ  )r)   r*   r+   r,   rj   rÜ  r.   r/   r0   rK  rK  J  sF   € € € € € ðð ð:ð :ð :ð :ð
!ð !ð !ð !ð !ð !r/   rK  c                  ó&   — e Zd Zdd	„Zdd„Zdd„ZdS )rÙ  r±   rb   r%  r$   r(   r'   rI   rc   c               ó0   — || _         || _        || _        d S re   )r³   Ú_namerì   )ri   r±   r%  r(   s       r0   rj   z_ExtensionProjection.__init__b  s   € ð ˆŒØˆŒ
Ø#ˆŒˆˆr/   úAsyncIterator[dict[str, Any]]c                ó*   — |                       ¦   «         S re   )Ú_iterrº   s    r0   r×   z_ExtensionProjection.__aiter__m  s   € Ø�zŠz‰|Œ|Ðr/   ú$AsyncGenerator[dict[str, Any], None]c               ó~  K  — dd| j         › �gi}| j        r| j        g|d<   | j                             |¦  «        }t	          | j         ¬¦  «        }	 | j        j        r"	 | j                             |j        ¦  «         d S | j                             |¦  «        ƒ d {V —† | j         	                    ¦   «          	 |j
                             ¦   «         ƒ d {V —†}|€"	 | j                             |j        ¦  «         d S |                     |¦  «        D ]}|W V — ŒŒa# | j                             |j        ¦  «         w xY w)NrH   úcustom:rK   ©r%  )rß  rì   r³   rÜ   r   rs   rß   r8   rÝ   rÞ   r;   rT   rà   )ri   r9   rá   râ   rã   rä   s         r0   râ  z_ExtensionProjection._iterp  so  è è € Ø#-Ð0F¸$¼*Ð0FÐ0FÐ/GÐ"HˆØŒ?ð 	5Ø$(¤OÐ#4ˆF�<Ñ ØŒl×1Ò1°&Ñ9Ô9ˆÝ#¨¬Ð4Ñ4Ô4ˆð	:ØŒ|Ô#ð Øð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð ”,×0Ò0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØŒL×/Ò/Ñ1Ô1Ð1ðØ œYŸ]š]™_œ_Ð,Ð,Ð,Ð,Ð,Ð,�Ø�<Øð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9Ð9ð #Ÿ<š<¨Ñ-Ô-ð ð �CØ�I�I�I�I�Iðøð ŒL×1Ò1°#´&Ñ9Ô9Ð9Ð9øøøs   ÁD Â AD Ã=D Ä!D<N)r±   rb   r%  r$   r(   r'   rI   rc   )rI   rà  )rI   rã  )r)   r*   r+   rj   r×   râ  r.   r/   r0   rÙ  rÙ  a  sP   € € € € € ð	$ð 	$ð 	$ð 	$ðð ð ð ð:ð :ð :ð :ð :ð :r/   rÙ  c                  óª  — e Zd ZdZddddddœdqd„Zedrd„¦   «         Zdrd„Zdsd„Zedtd!„¦   «         Z	dud"„Z
dvd&„Zdwd(„Zdxd*„Zdyd-„Zdyd.„Zdzd1„Zd{d4„Zd{d5„Zdzd6„Zdud7„Zd|d9„Zd}d<„Zddd=œd~dD„ZddF„Zed€dI„¦   «         Zd�dQ„Zd‚dS„ZdudT„ZdudU„ZdƒdW„Zd„dX„Z d…dZ„Z!	 d†d‡d^„Z"dˆd`„Z#d‰db„Z$ddcœdŠde„Z%dudf„Z&d}dg„Z'd‹dh„Z(dudi„Z)d‹dj„Z*dŒdl„Z+d„dm„Z,d�do„Z-d}dp„Z.dS )Žrb   zºAsync context manager for one thread's v3 streaming session.

    Construct via `client.threads.stream(thread_id=None, *, assistant_id, ...)`
    rather than instantiating directly.
    Nr¸  FÚsse)rm   r6  Úrun_start_timeoutÚexplicit_thread_idÚtransport_kindÚhttpr   Ú	thread_idr$   rx   rm   ro   r6  r7   ré  úfloat | Nonerê  rY   rë  úLiteral['sse', 'websocket']rI   rc   c               óà  — || _         t          |pi ¦  «        | _        || _        || _        || _        || _        || _        || _        d| _	        d | _
        g | _        d| _        d| _        i | _        t          ¦   «         | _        d | _        d | _        d | _        d| _        g | _        t-          j        ¦   «         | _        d | _        d | _        d | _        d| _        d| _        d| _        d| _        d | _         d| _!        d | _"        d | _#        tI          ¦   «         | _%        tI          ¦   «         | _&        d | _'        tQ          | ¦  «        | _)        tU          | ¦  «        | _+        tY          | ¦  «        | _-        t]          | ¦  «        | _/        ta          | g ¬¦  «        | _1        te          | g ¬¦  «        | _3        ti          | d¬¦  «        | _5        | j5        | _6        to          | g ¬¦  «        | _8        d S )	NFr™   é   gš™™™™™¹?g       @r=  r.   r2  )9rw   rS   rv   rí  rx   r>  Ú_run_start_timeoutÚ_explicit_thread_idÚ_transport_kindrs   rÛ   Ú_open_handlesÚ_next_command_idÚ_next_subscription_idÚ_subscriptionsr   Ú_seen_event_idsÚ_shared_streamÚ_shared_stream_filterÚ_fanout_taskr  r¡   r<   ÚLockr    Ú_lifecycle_watcher_taskÚ_lifecycle_watcher_handleÚ_lifecycle_cursorÚ!_lifecycle_max_reconnect_attemptsÚ_shared_max_reconnect_attemptsÚ_shared_reconnect_backoff_baseÚ_shared_reconnect_backoff_capr‡   r‹   r³  Ú_cursorrC  Ú_active_message_streamsÚ_active_tool_callsrþ   r~   Úrunr`   Úagentr°   rÓ   rÎ   r>   rè   r@   rÉ  rG  r¦  rI  rJ  rK  rL  )	ri   rì  rí  rx   rm   r6  ré  rê  rë  s	            r0   rj   zAsyncThreadStream.__init__Œ  sÐ  € ð ˆŒ
Ý˜W˜]¨Ñ+Ô+ˆŒØ"ˆŒØ(ˆÔØ-ˆÔØ"3ˆÔØ#5ˆÔ Ø-ˆÔØˆŒØ9=ˆŒØ68ˆÔØ !ˆÔØ%&ˆÔ"Ø8:ˆÔÝ,™œˆÔØ8<ˆÔØ<@ˆÔ"Ø7;ˆÔØ!&ˆÔØ24ˆŒõ
 !(¤¡¤ˆÔØBFˆÔ$ØCGˆÔ&Ø-1ˆÔØ12ˆÔ.ð /0ˆÔ+Ø.1ˆÔ+Ø-0ˆÔ*Ø=AˆÔØ$ˆŒØ>BˆŒØ#'ˆŒÝBEÁ%Ä%ˆÔ$Ý7:±u´uˆÔð IMˆÔ!Ý˜T‘?”?ˆŒÝ! $Ñ'Ô'ˆŒ
Ý& tÑ,Ô,ˆŒÝ'¨Ñ-Ô-ˆŒÝ+¨D¸BÐ?Ñ?Ô?ˆŒÝ.¨t¸rÐBÑBÔBˆŒÝ-¨d¸"Ð=Ñ=Ô=ˆŒØœˆŒÝ/°ÀÐCÑCÔCˆŒˆˆr/   c                ó   — | S )a  Return self as the subscription controller (duck-type compatible with StreamController).

        Exposes `_subscriptions` so tests can verify subscription counts via
        `thread._controller._subscriptions` without requiring a separate controller object.
        r.   rº   s    r0   Ú_controllerzAsyncThreadStream._controllerÒ  s	   € ð ˆr/   c              ƒ  ó>  K  — | j         rt          d¦  «        ‚| j        dk    rt          nt          } || j        j        | j        | j        | j	        ¬¦  «        | _
        t          j        ¦   «                              ¦   «         | _        |                      ¦   «          | S )Nz5AsyncThreadStream is closed and cannot be re-entered.Ú	websocket)Úclientrí  rm   r6  )rs   rt   rô  r!   r    rw   r  rí  rv   r>  rÛ   r<   r…   r†   r³  Ú!_ensure_lifecycle_watcher_running)ri   Útransport_clss     r0   Ú
__aenter__zAsyncThreadStream.__aenter__Û  s©   è è € ØŒ<ð 	XÝÐVÑWÔWÐWð Ô# {Ò2Ð2õ 'Ð&å%ð 	ð
 (˜-Ø”:Ô$Ø”nØ”MØÔ/ð	
ñ 
ô 
ˆŒõ !Ô1Ñ3Ô3×AÒAÑCÔCˆŒð 	×.Ò.Ñ0Ô0Ð0Øˆr/   Úexc_typer
   ÚexcÚtbc              ƒ  ó„   K  — 	 |                       ¦   «         ƒ d {V —† d S # t          $ r}|€‚ ||_        Y d }~d S d }~ww xY wre   )r­   rŽ   Ú__context__)ri   r  r  r  Ú	close_errs        r0   Ú	__aexit__zAsyncThreadStream.__aexit__ð  sr   è è € ð	(Ø—*’*‘,”,ÐÐÐÐÐÐÐÐÐøÝð 	(ð 	(ð 	(Øˆ{Øà$'ˆIÔ!Ð!Ð!Ð!Ð!Ð!Ð!øøøøð		(øøøs   „   
?ª
:º?úAsyncIterator[Event]c                ó²   — | j         €t          d¦  «        ‚| j                              dt          i¦  «        }| j                             |¦  «         |j        S )aC  Return a fresh subscription to ALL channels.

        Each property access opens a new subscription; callers iterating twice
        will see two independent streams (both filtered by the same channel union).
        Terminates when the stream closes (server hangup, `__aexit__`, or
        transport-level close).
        NrÚ   rH   )rÛ   rt   Úopen_event_streamrG   rõ  r  Úeventsrr  s     r0   r  zAsyncThreadStream.eventsù  sT   € ð Œ?Ð"ÝÐTÑUÔUÐUØ”×2Ò2°JÅÐ3NÑOÔOˆØÔ×!Ò! &Ñ)Ô)Ð)ØŒ}Ðr/   c              ƒ  óø  K  — | j         rdS d| _         | j        D ]}|                     ¦   «         ƒ d{V —† Œ| j        }|�(|                     ¦   «         s|                     ¦   «          | j        �b| j                             ¦   «          t          j        t          t          j        ¦  «        5  | j        ƒ d{V —† ddd¦  «         n# 1 swxY w Y   | j        �| j                             ¦   «         ƒ d{V —† |                      t          j        ¦   «         ¦  «         |                      t          j        ¦   «         ¦  «         | j        �b| j                             ¦   «          t          j        t          t          j        ¦  «        5  | j        ƒ d{V —† ddd¦  «         n# 1 swxY w Y   | j        �| j                             ¦   «         ƒ d{V —† | j        �!| j                             ¦   «         ƒ d{V —† dS dS )z(Tear down the thread stream. Idempotent.NT)rs   rõ  r­   r³  r‰   Úcancelrþ  Ú
contextlibÚsuppressÚ	Exceptionr<   ÚCancelledErrorrÿ  Ú_fail_active_message_streamsÚ_fail_active_tool_callsrü  rú  rÛ   )ri   r©   r¶  s      r0   r­   zAsyncThreadStream.close  s™  è è € àŒ<ð 	ØˆFØˆŒØÔ(ð 	!ð 	!ˆFØ—,’,‘.”.Ð Ð Ð Ð Ð Ð Ð Ð à”>ˆØÐ¨¯ª©¬ÐØ�OŠOÑÔÐØÔ'Ð3ØÔ(×/Ò/Ñ1Ô1Ð1ÝÔ$¥YµÔ0FÑGÔGð 3ð 3ØÔ2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3àÔ)Ð5ØÔ0×6Ò6Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø×)Ò)­'Ô*@Ñ*BÔ*BÑCÔCÐCØ×$Ò$¥WÔ%;Ñ%=Ô%=Ñ>Ô>Ð>ØÔÐ(ØÔ×$Ò$Ñ&Ô&Ð&ÝÔ$¥YµÔ0FÑGÔGð (ð (ØÔ'Ð'Ð'Ð'Ð'Ð'Ð'Ð'ð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (àÔÐ*ØÔ%×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØŒ?Ð&Ø”/×'Ò'Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ð 'Ð&s$   Â,CÃC
ÃC
ÆF!Æ!F%Æ(F%r9   r   r6   c                ó¢   — t          | j        |t          j        | j        ¬¦  «        ¬¦  «        }| xj        dz  c_        || j        |j        <   |S )z6Allocate a subscription id and add it to the registry.r;  )r8   r9   r;   r™   )r6   r÷  r<   r=   r>  rø  r8   )ri   r9   rá   s      r0   rÜ   z(AsyncThreadStream._register_subscription$  s\   € åØÔ)ØÝ”-¨Ô(<Ð=Ñ=Ô=ð
ñ 
ô 
ˆð
 	Ð"Ô" aÑ'Ð"Ô"Ø&)ˆÔ˜CœFÑ#Øˆ
r/   Úsubscription_idc                ó<   — | j                              |d¦  «         dS )zARemove a subscription from the registry. No-op if already absent.N)rø  r]  )ri   r&  s     r0   rß   z*AsyncThreadStream._unregister_subscription/  s!   € àÔ×Ò °Ñ6Ô6Ð6Ð6Ð6r/   r  c                óN   — | j         €t          j        ¦   «         | _         | j         S )zôCreate the root-scope messages inbox if not already active and return it.

        Called by `_SubgraphsProjection` at scope `()` to capture messages events
        that arrive at namespace `[]` before `thread.messages` has subscribed.
        )rþ   r<   r=   rº   s    r0   r²  z/AsyncThreadStream._activate_root_messages_inbox3  s$   € ð Ô$Ð,Ý(/¬©¬ˆDÔ%ØÔ(Ð(r/   r  r   c                ó:   — | j                              |¦  «         d S re   )r  rc  ©ri   r  s     r0   r  z1AsyncThreadStream._register_active_message_stream=  s   € ØÔ$×(Ò(¨Ñ0Ô0Ð0Ð0Ð0r/   c                ó:   — | j                              |¦  «         d S re   )r  Údiscardr*  s     r0   r   z3AsyncThreadStream._unregister_active_message_stream@  s   € ØÔ$×,Ò,¨VÑ4Ô4Ð4Ð4Ð4r/   r“   rŽ   c                ó�   — t          | j        ¦  «        D ]}|                     |¦  «         Œ| j                             ¦   «          d S re   )rN   r  ÚfailÚclear)ri   r“   r  s      r0   r#  z.AsyncThreadStream._fail_active_message_streamsC  sL   € Ý˜4Ô7Ñ8Ô8ð 	ð 	ˆFØ�KŠK˜ÑÔÐÐØÔ$×*Ò*Ñ,Ô,Ð,Ð,Ð,r/   r©   r…  c                ó:   — | j                              |¦  «         d S re   )r  rc  rr  s     r0   rÔ  z,AsyncThreadStream._register_active_tool_callH  s   € ØÔ×#Ò# FÑ+Ô+Ð+Ð+Ð+r/   c                ó:   — | j                              |¦  «         d S re   )r  r,  rr  s     r0   rÓ  z.AsyncThreadStream._unregister_active_tool_callK  s   € ØÔ×'Ò'¨Ñ/Ô/Ð/Ð/Ð/r/   c                ó�   — t          | j        ¦  «        D ]}|                     |¦  «         Œ| j                             ¦   «          d S re   )rN   r  r„  r/  )ri   r“   r©   s      r0   r$  z)AsyncThreadStream._fail_active_tool_callsN  sL   € Ý˜4Ô2Ñ3Ô3ð 	ð 	ˆFØ�LŠL˜ÑÔÐÐØÔ×%Ò%Ñ'Ô'Ð'Ð'Ð'r/   c                óø   — t          | j                             ¦   «         ¦  «        D ]R}t          j        t
          j        ¦  «        5  |j                             d¦  «         ddd¦  «         n# 1 swxY w Y   ŒSdS )a¹  Wake every active projection iterator on interrupt / run end.

        Pushes the terminal sentinel (`None`) into every subscription
        queue. Iterators see `None` and return; the shared SSE keeps
        running so re-iteration after `run.respond(...)` registers a
        fresh subscription and resumes.

        `root_messages_inbox` is intentionally NOT signaled here: the
        subgraphs projection that populates it is responsible for
        pushing the terminal `None` in its own `finally` block, so any
        message events it redirected to the inbox land before the
        sentinel. Signaling root_inbox here would race the redirection
        and could drop messages.
        N)	rN   rø  r>   r  r   r<   Ú	QueueFullr;   rO  )ri   rá   s     r0   Ú_signal_pausedz AsyncThreadStream._signal_pausedS  s´   € õ" ˜Ô+×2Ò2Ñ4Ô4Ñ5Ô5ð 	+ð 	+ˆCÝÔ$¥WÔ%6Ñ7Ô7ð +ð +Ø”	×$Ò$ TÑ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +øð	+ð 	+s   ÁA.Á.A2	Á5A2	Úseqc                ój   — t          |t          ¦  «        r| j        �|| j        k    r|| _        dS dS dS )zCAdvance the reconnect cursor from a command response meta sequence.N)rR   r7   r  )ri   r6  s     r0   Úobserve_applied_through_seqz-AsyncThreadStream.observe_applied_through_seqh  sB   € å�c�3ÑÔð 	 T¤\Ð%9¸SÀ4Ä<Ò=OÐ=OØˆDŒLˆLˆLð	ð 	Ð=OÐ=Or/   rX   r   c                ó”   — |                      d¦  «        }t          |t          ¦  «        r| j        �|| j        k    r|| _        d S d S d S ©Nr6  )rT   rR   r7   r  ©ri   rX   r6  s      r0   Ú_observe_eventz AsyncThreadStream._observe_eventm  sS   € Ø�iŠi˜ÑÔˆÝ�c�3ÑÔð 	 T¤\Ð%9¸SÀ4Ä<Ò=OÐ=OØˆDŒLˆLˆLð	ð 	Ð=OÐ=Or/   )rK   rL   rH   r'   rK   úlist[list[str]] | NonerL   ú
int | Nonec               ó–   — | j         €t          d¦  «        ‚dt          |¦  «        i}|�||d<   |�||d<   |                      |¦  «        S )a  Open a typed subscription against the shared SSE.

        Returns an async iterator that yields raw `Event` dicts matching the
        given filter. Multiple concurrent subscribes share one HTTP connection
        whose union expands or rotates as subscriptions come and go.
        NrÚ   rH   rK   rL   )rÛ   rt   rN   Ú_subscription_iter)ri   rH   rK   rL   r9   s        r0   Ú	subscribezAsyncThreadStream.subscriber  s^   € ð Œ?Ð"ÝÐTÑUÔUÐUØ#-­t°H©~¬~Ð">ˆØÐ!Ø#-ˆF�<Ñ ØÐØ#ˆF�7‰OØ×&Ò& vÑ.Ô.Ð.r/   úAsyncIterator[tuple[str, Any]]c               óÂ  ‡ K  — t          |¦  «         ‰ j        €t          d¦  «        ‚i }g }|D �]`}|dk    r+t          d¦  «        ||<   |                     ddgi¦  «         Œ4|dv r9t          |g ¬¦  «        ||<   |                     t          |gg ¦  «        ¦  «         Œq|dk    r:t          g d„ ¬	¦  «        ||<   |                     t          dgg ¦  «        ¦  «         Œ±|d
k    r:t          g d„ ¬¦  «        ||<   |                     t          dgg ¦  «        ¦  «         Œñ|dk    r;t          dˆ fd„¬¦  «        ||<   |                     t          d¦  «        ¦  «         �Œ2t          |¬¦  «        ||<   |                     dd|› �gi¦  «         �Œb|sdS t          t          t          t          t          t          t           t"          f                  |¦  «        ¦  «        ¦  «        }|                     d¦  «        }g }g }	 ‰                      |¦  «        2 3 d{V —†}	|�|                     |	¦  «        D ]	}
d|
fW V — Œ
t+          |	¦  «        }‰                      |¦  «        }|��|dk    r—|                     |¦  «        }|�€|                     |	¦  «        D ]j}
|d
k    r+‰                      |
¦  «         |                     |
¦  «         n0|dk    r*‰                      |
¦  «         |                     |
¦  «         ||
fW V — ŒkŒì6 	 ‰                      |                     d
¦  «        |||¦  «         dS # ‰                      |                     d
¦  «        |||¦  «         w xY w)aª  Yield `(channel_name, item)` tuples across multiple projections.

        One shared subscription drives all per-channel decoders; items arrive
        in server-emit order (the SDK analog of `GraphRunStream.interleave`).

        Args:
            channels: Flat list of `"values"`, `"messages"`, `"tool_calls"`,
                `"subgraphs"`, and/or extension names. Built-ins yield their
                typed item (snapshot dict / `AsyncChatModelStream` /
                `ToolCallHandle` / `ScopedStreamHandle`); an extension yields
                its payload dict, keyed by the bare extension name.

        Note:
            Handles and streams are yielded eagerly (before their sub-stream
            completes), so items arrive interleaved in real time. To receive a
            fully-resolved handle (output already populated), use the dedicated
            `thread.tool_calls` / `thread.messages` projections instead.
        NrÚ   r>   rH   )r?   rD   rE   r=  r@   c                ó&   — t          | ||¬¦  «        S r÷   r   rø   s      r0   rû   z:AsyncThreadStream.interleave_projections.<locals>.<lambda>°  s    € Ý,Ø&/°dÀzðñ ô ð r/   rü   rG  c                ó(   — t          | |||¬¦  «        S rÐ  rÑ  r�  s       r0   rû   z:AsyncThreadStream.interleave_projections.<locals>.<lambda>º  s%   € Ý&Ø)5Ø!%Ø"'Ø&/ð	ñ ô ð r/   rÒ  rA   rI  r.   c                ó*   •— t          ‰| ||¬¦  «        S r­  )r5  r®  s      €r0   rû   z:AsyncThreadStream.interleave_projections.<locals>.<lambda>Ç  s&   ø€ Ý*Ø#'Ø!%Ø'1Ø,;ð	ñ ô ð r/   r¯  ræ  rå  )r   rÛ   rt   r   r  rO   r   r   r   r3  r   r   r   r   rN   rS   r$   r
   rT   r@  rà   r   Ú_interleave_public_namerÔ  r  Ú_finalize_interleave_decoders)ri   rH   ÚdecodersÚ
sub_paramsÚchÚmergedrI  Úregistered_tool_callsÚregistered_message_streamsrX   rã   ÚwireÚpublicrâ   s   `             r0   Úinterleave_projectionsz(AsyncThreadStream.interleave_projectionsˆ  s=  øè è € õ* 	% XÑ.Ô.Ð.ØŒ?Ð"ÝÐTÑUÔUÐUØ')ˆØ,.ˆ
Øð 1	Bñ 1	BˆBØ�XŠ~ˆ~Ý*¨8Ñ4Ô4�˜‘Ø×!Ò! :°¨zÐ":Ñ;Ô;Ð;Ð;ØÐ:Ð:Ð:õ
  +¨2¸Ð<Ñ<Ô<�˜‘Ø×!Ò!Õ"9¸2¸$ÀÑ"CÔ"CÑDÔDÐDÐDØ�zÒ!Ð!Ý.Ø ð$ð $ð ñ  ô  �˜‘ð ×!Ò!Õ"9¸:¸,ÈÑ"KÔ"KÑLÔLÐLÐLØ�|Ò#Ð#Ý/Ø ð$ð $ð
 ñ 
 ô 
 �˜‘ð ×!Ò!Õ"9¸7¸)ÀRÑ"HÔ"HÑIÔIÐIÐIØ�{Ò"Ð"Ý/Øð$ð $ð $ð $ð
 ñ 
 ô 
 �˜‘ð ×!Ò!Õ"?ÀÑ"CÔ"CÑDÔDÐDÑDå0°bÐ9Ñ9Ô9�˜‘Ø×!Ò! :°¸"°°Ð/?Ð"@ÑAÔAÐAÑAØð 	ØˆFÝÝÝ ¥¥d­4µµS°¬>Ô&:¸JÑ!GÔ!GÑHÔHñ
ô 
ˆð —L’L Ñ-Ô-ˆ	ð 79ÐØACÐ"ð	Ø#×6Ò6°vÑ>Ô>ð 1ð 1ð 1ð 1ð 1ð 1ð 1�eØÐ(Ø )§¢¨uÑ 5Ô 5ð 2ð 2˜Ø*¨DÐ1Ð1Ð1Ð1Ð1Ð1Ý$ UÑ+Ô+�Ø×5Ò5°dÑ;Ô;�àÐ%¨&°KÒ*?Ð*?Ø&Ÿlšl¨6Ñ2Ô2�GØÐ*Ø$+§L¢L°Ñ$7Ô$7ð 1ð 1˜DØ%¨Ò5Ð5Ø $× ?Ò ?ÀÑ EÔ EÐ EØ 5× <Ò <¸TÑ BÔ BÐ BÐ BØ!'¨:Ò!5Ð!5Ø $× DÒ DÀTÑ JÔ JÐ JØ :× AÒ AÀ$Ñ GÔ GÐ GØ#)¨4 .Ð0Ð0Ð0Ð0Ð0øð#  ?Ð>ð& ×.Ò.Ø—’˜\Ñ*Ô*ØØ%Ø*ñ	ô ð ð ð øˆD×.Ò.Ø—’˜\Ñ*Ô*ØØ%Ø*ñ	ô ð ð øøøs   ÈL1 ÈLÈC'L1 Ì1-MrO  r—   c                óv   — | €dS | dk    rdS |                       d¦  «        r| t          d¦  «        d…         S | S )zMMap a wire channel name to the public channel name used in interleave tuples.NrA   rG  rå  )Ú
startswithr¢   )rO  s    r0   rG  z)AsyncThreadStream._interleave_public_nameû  sL   € ð ˆ<Ø�4Ø�7Š?ˆ?Ø�<Ø�?Š?˜9Ñ%Ô%ð 	*Ø�˜I™œÐ(Ð(Ô)Ð)Øˆr/   rG  úDecoder | NonerI  rM  úlist[ToolCallHandle]rN  úlist[AsyncChatModelStream]c                óÎ  — | j         }|�<|                     ¦   «         r(|                     ¦   «         s|                     ¦   «         nd}t	          |t
          ¦  «        r]|�|j        �|j        nt          d¦  «        }t          |j	         
                    ¦   «         ¦  «        D ]}|                     |¦  «         Œ|D ]}|                      |¦  «         Œ|D ]}	|                      |	¦  «         Œt	          |t          ¦  «        r`t	          |t          ¦  «        r|j        dk    rdnd}
|j	         
                    ¦   «         D ]$}|j        dk    r|                     |
¦  «         Œ#dS dS )al  Finalize in-flight handles when `interleave_projections` tears down.

        Mirrors the terminal handling of the dedicated `_ToolCallsProjection` /
        `_SubgraphsProjection`: in-flight tool calls are failed (so awaiting
        `handle.output` can't hang) and discovered subgraph children are
        force-completed with the run's terminal status.
        Nr}  r±  rW   rV   r  )r³  r‰   rŒ   r’   rR   r   r4   rt   rN   r´  r>   r„  rÓ  r   r   r2   r3   rj  )ri   rG  rI  rM  rN  r¶  Úresolvedr“   r©   r  rµ  rž  s               r0   rH  z/AsyncThreadStream._finalize_interleave_decoders  s©  € ð ”>ˆð Ð#¨¯ª©¬Ð#À×@RÒ@RÑ@TÔ@TÐ#ð �OŠOÑÔÐàð 	õ
 �jÕ"2Ñ3Ô3ð 	"ð Ð'¨H¬NÐ,Fð ”�å!Ð"WÑXÔXð õ
 ˜zÔ1×8Ò8Ñ:Ô:Ñ;Ô;ð "ð "�Ø—’˜SÑ!Ô!Ð!Ð!Ø+ð 	6ð 	6ˆFØ×-Ò-¨fÑ5Ô5Ð5Ð5Ø0ð 	;ð 	;ˆFØ×2Ò2°6Ñ:Ô:Ð:Ð:Ý�iÕ!1Ñ2Ô2ð 	3õ ˜h­Ñ5Ô5ð!Ø:B¼/ÈYÒ:VÐ:Vð �à ð ð
 #Ô*×1Ò1Ñ3Ô3ð 3ð 3�Ø”< 9Ò,Ð,Ø—M’M /Ñ2Ô2Ð2øð	3ð 	3ð3ð 3r/   úAsyncGenerator[Event, None]c               ó   K  — |                       |¦  «        }	 | j        r	 |                      |j        ¦  «         d S |                      |¦  «        ƒ d {V —† |                      ¦   «          	 |j                             ¦   «         ƒ d {V —†}|€	 |                      |j        ¦  «         d S |W V — ŒD# |                      |j        ¦  «         w xY wre   )rÜ   rs   rß   r8   rÝ   rÞ   r;   rT   )ri   r9   rá   rã   s       r0   r@  z$AsyncThreadStream._subscription_iter0  s  è è € ð ×)Ò)¨&Ñ1Ô1ˆð	2ØŒ|ð Øð ×)Ò)¨#¬&Ñ1Ô1Ð1Ð1Ð1ð ×(Ò(¨Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø×'Ò'Ñ)Ô)Ð)ðØ œYŸ]š]™_œ_Ð,Ð,Ð,Ð,Ð,Ð,�Ø�<Øð ×)Ò)¨#¬&Ñ1Ô1Ð1Ð1Ð1ð �
�
�
�
ð	øð ×)Ò)¨#¬&Ñ1Ô1Ð1Ð1øøøs   ™B1 ½AB1 Â+B1 Â1Cc                ó    — | j         �| j                              ¦   «         r-t          j        |                      ¦   «         ¦  «        | _         d S d S re   )rü  r‰   r<   rÁ   Ú_fanoutrº   s    r0   rÞ   z(AsyncThreadStream._ensure_fanout_runningA  sH   € ØÔÐ$¨Ô(9×(>Ò(>Ñ(@Ô(@Ð$Ý 'Ô 3°D·L²L±N´NÑ CÔ CˆDÔÐÐð %Ð$r/   c              ƒ  óŽ  K  — ddl m} | j        �s~| j        }|€dS 	 |                      |j        ¦  «        2 3 d{V —†}| j        r nŽ|                      |¦  «         t          | j         	                    ¦   «         ¦  «        D ]-} |||j
        ¦  «        r|j                             |¦  «         Œ.t          |¦  «        r|                      ¦   «          Œ�6 n# t          $ r Y nw xY w| j        |u r˜|j        ƒ d{V —†}|�ˆt#          |t$          j        ¦  «        sn| j        sgt)          j        t          ¦  «        5  |                     ¦   «         ƒ d{V —† ddd¦  «         n# 1 swxY w Y   |                      ¦   «         ƒ d{V —†r�Œ}n| j        �¯~| j         	                    ¦   «         D ]}|j                             d¦  «         ŒdS )aÍ  Single consumer of the shared SSE; routes events to subscriptions.

        Why: rotation in `_reconcile_stream` replaces `_shared_stream` mid-loop.
        Re-read `self._shared_stream` on each outer iteration so we always
        consume from the current handle. The old handle's iterator exhausts
        naturally after `_close_after` closes it.

        On a post-ready transport drop (non-cancelled error in `shared.done`),
        attempts to reconnect up to `_shared_max_reconnect_attempts` times so
        scoped projections (subgraph child handles, message streams) survive
        without losing buffered events. The reconnect replays `since=<cursor>`
        and `_dedup_iter` drops any overlap.
        r   )Úmatches_subscriptionN)Ú!langgraph_sdk.stream.subscriptionr^  rs   rú  Ú_dedup_iterr  r<  rN   rø  r>   r9   r;   rO  r^   r5  r!  r‰   rR   r<   r"  r  r   r­   Ú_reconnect_shared_stream)ri   r^  ÚsharedrX   rá   r“   s         r0   r\  zAsyncThreadStream._fanoutE  s�  è è € ð 	KÐJÐJÐJÐJÐJà”,ñ '	ØÔ(ˆFØˆ~Ø�ðØ#'×#3Ò#3°F´MÑ#BÔ#Bð .ð .ð .ð .ð .ð .ð .˜%Ø”|ð Ø˜Ø×'Ò'¨Ñ.Ô.Ð.Ý# DÔ$7×$>Ò$>Ñ$@Ô$@ÑAÔAð 8ð 8˜Ø/Ð/°°s´zÑBÔBð 8ØœI×0Ò0°Ñ7Ô7Ð7øõ 3°5Ñ9Ô9ð .Ø×+Ò+Ñ-Ô-Ð-øð $Cøøõ  ð ð ð à�ðøøøð Ô" fÐ,Ð,ð
 #œKÐ'Ð'Ð'Ð'Ð'Ð'�à�OÝ& s­GÔ,BÑCÔCð $à œLð $õ $Ô,­YÑ7Ô7ð -ð -Ø$Ÿlšl™nœnÐ,Ð,Ð,Ð,Ð,Ð,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -à!×:Ò:Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<ð !Ù ØðO ”,ñ '	ðV Ô&×-Ò-Ñ/Ô/ð 	'ð 	'ˆCØŒI× Ò  Ñ&Ô&Ð&Ð&ð	'ð 	's.   �C ·C½BC Ã
C#Ã"C#Ä8EÅE#Å&E#Úattemptc              ƒ  ó¼   K  — | j         }| j        }t          ||d|z  z  ¦  «        }t          j        d|dz  ¦  «        }t          j        ||z   ¦  «        ƒ d{V —† dS )zJSleep with exponential backoff and jitter for reconnect attempt `attempt`.é   r   g      Ð?N)r  r  ÚminÚrandomÚuniformr<   r¬   )ri   rc  ÚbaseÚcapr¨   Újitters         r0   Ú_reconnect_sleepz"AsyncThreadStream._reconnect_sleepƒ  so   è è € àÔ2ˆØÔ0ˆÝ�C˜  G¡Ñ,Ñ-Ô-ˆÝ”  5¨4¡<Ñ0Ô0ˆÝŒm˜E F™NÑ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+r/   c              ƒ  óŒ  K  — | j         €dS | j        }|€dS t          | j        ¦  «        D ]˜}| j        r dS t          |¦  «        }| j        �
| j        |d<   	 | j                              |¦  «        }|j        ƒ d{V —† n:# t          j
        $ r ‚ t          $ r |                      |¦  «        ƒ d{V —† Y Œ‹w xY w|| _         dS dS )a%  Attempt to reopen the shared stream after a post-ready transport drop.

        Returns:
            `True` if a new stream was opened (caller should resume fanout),
            `False` if all reconnect attempts were exhausted or the controller
            was closed in the meantime.
        NFÚsinceT)rÛ   rû  Úranger  rs   rS   r  r  Úreadyr<   r"  r!  rl  rú  )ri   Úbase_filterrc  Ústream_paramsÚ
new_streams        r0   ra  z*AsyncThreadStream._reconnect_shared_stream‹  s"  è è € ð Œ?Ð"Ø�5ð Ô0ˆØÐØ�5Ý˜TÔ@ÑAÔAð 	ð 	ˆGØŒ|ð Ø�u�uÝ,0°Ñ,=Ô,=ˆMØŒ|Ð'Ø)-¬�˜gÑ&ðØ!œ_×>Ò>¸}ÑMÔM�
Ø Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&øÝÔ)ð ð ð ØÝð ð ð Ø×+Ò+¨GÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø�ðøøøð #-ˆDÔØ�4�4Øˆus   Á'B Â 4B7Â6B7Úcandidate_filterc              ƒ  ó  K  — |                       | j        ¬¦  «        ƒ d{V —† ddlm} | j        €t          d¦  «        ‚| j        �'| j        �  || j        t          |¦  «        ¦  «        rdS |  	                    |¬¦  «        }t          |¦  «        }| j
        �
| j
        |d<   | j                             |¦  «        }| j        }|| _        || _        |j        ƒ d{V —† |�#t          j        t          |¦  «        ¦  «         dS dS )a  Ensure the shared SSE covers `candidate_filter`. Rotate if not.

        Open-new-before-close-old: any events buffered server-side between
        the two opens are replayed on the new SSE, and the per-thread
        `_seen_event_ids` set dedupes the overlap. Awaits `new_stream.ready`
        so the HTTP connection is established before returning, guaranteeing
        that both old and new streams are simultaneously connected during
        rotation (enabling correct peak-count tracking and dedup correctness).
        rÄ   Nr   )Úfilter_coversrÚ   )Úextrarn  )Ú_await_run_start_gaterò  r_  rv  rÛ   rt   rú  rû  rS   Ú_compute_current_unionr  r  rp  r<   rÁ   r®   )ri   rt  rv  Ú
new_filterrr  rs  Ú
old_streams          r0   rÝ   z#AsyncThreadStream._reconcile_stream¬  sI  è è € ð ×(Ò(°Ô1HÐ(ÑIÔIÐIÐIÐIÐIÐIÐIÐIØCÐCÐCÐCÐCÐCàŒ?Ð"ÝÐTÑUÔUÐUð ÔÐ+ØÔ*Ð6Ø�˜dÔ8½$Ð?OÑ:PÔ:PÑQÔQð 7ð ˆFà×0Ò0Ð7GÐ0ÑHÔHˆ
Ý(,¨ZÑ(8Ô(8ˆØŒ<Ð#Ø%)¤\ˆM˜'Ñ"Ø”_×6Ò6°}ÑEÔEˆ
ØÔ(ˆ
Ø(ˆÔØ%/ˆÔ"ð ÔÐÐÐÐÐÐÐØÐ!õ Ô¥¨ZÑ 8Ô 8Ñ9Ô9Ð9Ð9Ð9ð "Ð!r/   rw  úSubscribeParams | Nonerƒ   c                óâ   — ddl m} d„ | j                             ¦   «         D ¦   «         }|�"|                     t          |¦  «        ¦  «         |                     ddgi¦  «          ||¦  «        S )Nr   )r   c                ó6   — g | ]}t          |j        ¦  «        ‘ŒS r.   )rS   r9   )r›   rá   s     r0   r�   z<AsyncThreadStream._compute_current_union.<locals>.<listcomp>Ù  s/   € ð )
ð )
ð )
Ø!$�D�”ÑÔð)
ð )
ð )
r/   rH   rB   )r_  r   rø  r>   r  rS   )ri   rw  r   Úfilterss       r0   ry  z(AsyncThreadStream._compute_current_unionÔ  s�   € ð 	KÐJÐJÐJÐJÐJð)
ð )
Ø(,Ô(;×(BÒ(BÑ(DÔ(Dð)
ñ )
ô )
ˆð ÐØ�NŠN�4 ™;œ;Ñ'Ô'Ð'ð 	�Š˜
 [ MÐ2Ñ3Ô3Ð3Ø#Ð# GÑ,Ô,Ð,r/   Úsourcec               ó    K  — |2 3 d {V —†}|                      d¦  «        }|�$|| j        v rŒ(| j                             |¦  «         |W V — ŒH6 d S )NÚevent_id)rT   rù  rc  )ri   r€  rX   r‚  s       r0   r`  zAsyncThreadStream._dedup_iterê  sƒ   è è € Ø!ð 	ð 	ð 	ð 	ð 	ð 	ð 	�%Ø—y’y Ñ,Ô,ˆHØÐ#Ø˜tÔ3Ð3Ð3ØØÔ$×(Ò(¨Ñ2Ô2Ð2ØˆKˆKˆKˆKˆKð "˜6˜6s   …Ar[   c              ƒ  óP  K  — | j         €t          d¦  «        ‚| j        }| xj        dz  c_        | j                              |||dœ¦  «        ƒ d{V —†}|€i S |                     d¦  «        dk    rA|                     dd¦  «        }|                     dd	¦  «        }t          d
|› d|› �¦  «        ‚|                     d¦  «        }t          |t          ¦  «        r6|                     d¦  «        }| j        �| j                             |¦  «         |                     di ¦  «        S )a  Send a protocol command and return the `result` payload.

        Returns `{}` for 202/204 responses (no body). Raises `RuntimeError`
        with the protocol code/message when the server returns an error
        envelope (`{"type": "error", ...}`).
        NrÚ   r™   )r8   r[   r9   Útyper4   Úunknownrƒ  r€  zProtocol error [z]: ÚmetaÚapplied_through_seqr’   )	rÛ   rt   rö  Úsend_commandrT   rR   rS   r  r8  )	ri   r[   r9   Ú
command_idr–   Úcoderƒ  r†  r‡  s	            r0   rˆ   zAsyncThreadStream._send_commandó  sR  è è € ð Œ?Ð"ÝÐTÑUÔUÐUØÔ*ˆ
ØÐÔ Ñ"ÐÔØœ×5Ò5Ø¨¸6ÐBÐBñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ÐàˆIØ�<Š<˜ÑÔ 7Ò*Ð*Ø—<’< ¨Ñ3Ô3ˆDØ—l’l 9¨bÑ1Ô1ˆGÝÐD°$ÐDÐD¸7ÐDÐDÑEÔEÐEØ�|Š|˜FÑ#Ô#ˆÝ�d�DÑ!Ô!ð 	RØ"&§(¢(Ð+@Ñ"AÔ"AÐØÔÐ+ØÔ ×<Ò<Ð=PÑQÔQÐQØ�|Š|˜H bÑ)Ô)Ð)r/   rÄ   r»   c             ƒ  ó¼   K  — | j         }|�|                     ¦   «         rdS |€
|ƒ d{V —† dS t          j        t          j        |¦  «        |¬¦  «        ƒ d{V —† dS )a2  Wait for the current run.start to commit the thread server-side.

        No-op when no run.start is in flight. Re-raises if run.start failed.
        Raises `asyncio.TimeoutError` if `timeout` is set and the gate does
        not resolve in time; the gate itself is left intact for later callers.
        NrÄ   )r‡   r‰   r<   rÈ   Úshield)ri   r»   r‘   s      r0   rx  z'AsyncThreadStream._await_run_start_gate  sx   è è € ð Ô$ˆØˆ<˜4Ÿ9š9™;œ;ˆ<ØˆFØˆ?ØˆJˆJˆJˆJˆJˆJˆJˆJˆJåÔ"¥7¤>°$Ñ#7Ô#7ÀÐIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIr/   c                ón   — | j         �d S t          j        |                      ¦   «         ¦  «        | _         d S re   )rþ  r<   rÁ   Ú_run_lifecycle_watcherrº   s    r0   r  z3AsyncThreadStream._ensure_lifecycle_watcher_running   s:   € ØÔ'Ð3ØˆFÝ'.Ô':Ø×'Ò'Ñ)Ô)ñ(
ô (
ˆÔ$Ð$Ð$r/   c                ó”   — |                      d¦  «        }t          |t          ¦  «        r| j        �|| j        k    r|| _        d S d S d S r:  )rT   rR   r7   r   r;  s      r0   Ú_observe_lifecycle_eventz*AsyncThreadStream._observe_lifecycle_event'  sY   € Ø�iŠi˜ÑÔˆÝ�c�3ÑÔð 	)ØÔ"Ð*¨c°DÔ4JÒ.JÐ.Jà%(ˆDÔ"Ð"Ð"ð	)ð 	)Ø.JÐ.Jr/   c                ó4   — dddgi}| j         �
| j         |d<   |S )NrH   rB   rC   rn  )r   )ri   r9   s     r0   Ú_lifecycle_stream_paramsz*AsyncThreadStream._lifecycle_stream_params.  s+   € Ø",¨{¸GÐ.DÐ!EˆØÔ!Ð-Ø"Ô4ˆF�7‰OØˆr/   c           
   ƒ  ó"  K  — | j         €dS d}| j        �sù	 | j                              |                      ¦   «         ¦  «        }|| _        t          j        |j        d¬¦  «        ƒ d{V —† |j        2 3 d{V —†}| j        r dS |  	                    |¦  «         |  
                    |¦  «        ƒ d{V —† ŒB6 |j        ƒ d{V —†}|�t          |t
          j        ¦  «        rR|€N| j        }|�E|                     ¦   «         s1|                     t!          dt#          d¦  «        ¬¦  «        ¦  «         dS |dz  }|| j        k    r|‚t          j        d	¦  «        ƒ d{V —† n¨# t
          j        $ r ‚ t(          $ rŒ}|dz  }|| j        k    r t          j        d	¦  «        ƒ d{V —† Y d}~�Œ˜| j        }|�H|                     ¦   «         s4|                     t!          dt#          d
|› �¦  «        ¬¦  «        ¦  «         Y d}~dS d}~ww xY w| j        �¯÷dS dS )z3Always-on SSE consuming lifecycle + input channels.Nr   g      @rÄ   r±  z,lifecycle stream ended before terminal event©r3   r4   r™   gš™™™™™©?zLifecycle transport failed: )rÛ   rs   r  r’  rÿ  r<   rÈ   rp  r  r�  Ú_apply_lifecycle_eventr‰   rR   r"  r³  rŠ   r2   rt   r  r¬   r!  )ri   Úreconnect_attemptsr©   rX   r“   r¶  r  s          r0   rŽ  z(AsyncThreadStream._run_lifecycle_watcher4  sà  è è € àŒ?Ð"ØˆFØÐØ”,ñ 0	ð/Øœ×:Ò:Ø×1Ò1Ñ3Ô3ñô �ð 28�Ô.ÝÔ& v¤|¸SÐAÑAÔAÐAÐAÐAÐAÐAÐAÐAØ#)¤=ð =ð =ð =ð =ð =ð =ð =˜%Ø”|ð Ø˜˜Ø×1Ò1°%Ñ8Ô8Ð8Ø×5Ò5°eÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð	 $1ð
 #œKÐ'Ð'Ð'Ð'Ð'Ð'�Ø�;¥*¨Sµ'Ô2HÑ"IÔ"I�;ð �{Ø#'¤>˜Ø#Ð/¸¿º¹¼Ð/Ø$×/Ò/Ý ,Ø+4Ý*6Ø(Vñ+&ô +&ð!"ñ !"ô !"ñô ð ð �FØ" aÑ'Ð"Ø%¨Ô(NÒNÐNØ�IÝ”m DÑ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)øÝÔ)ð ð ð ØÝð ð ð Ø" aÑ'Ð"Ø%¨Ô)OÒOÐOÝ!œ-¨Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø�H�H�H‘HØœ>�ØÐ'°·²±´Ð'Ø×'Ò'Ý$Ø#,Ý".Ð/SÈcÐ/SÐ/SÑ"TÔ"Tðñ ô ñô ð ð �����øøøøðøøøðG ”,ñ 0	ð 0	ð 0	ð 0	ð 0	s8   —AE Á2B4Á8	E ÂB+E Ä0,E ÅHÅ6*G=Æ&AG=Ç=Hc              ƒ  ój   K  — | j                              d| j        › d�| j        pd¬¦  «        ƒ d{V —†S )z6Fetch the current thread state from the REST endpoint.z	/threads/z/stateN)rm   )rw   rT   rí  rv   rº   s    r0   rÆ   zAsyncThreadStream._fetch_statek  s[   è è € à”Z—^’^Ø.˜œÐ.Ð.Ð.Ø”MÐ) Tð $ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ð 	
r/   rÊ   c                óZ   — |                      d¦  «         o|                      d¦  «         S )zEReturn `True` if the thread state has no pending tasks or next nodes.r£   rE   )rT   )ri   rÊ   s     r0   rÇ   z$AsyncThreadStream._state_is_terminalr  s+   € à—9’9˜VÑ$Ô$Ð$Ð?¨U¯YªY°wÑ-?Ô-?Ð)?Ð?r/   c                ó    — | j         o| j         S )a  Return `True` if we can try the REST state before waiting on the lifecycle.

        True only when the caller passed an explicit `thread_id` (not a minted
        UUID) and no run has been seen yet, indicating a potential reattach to
        an already-terminal thread.
        )ró  r‹   rº   s    r0   rÅ   z8AsyncThreadStream._can_return_existing_state_immediatelyv  s   € ð Ô'Ð>°´Ð,>Ð>r/   r2   c              ƒ  ó†   K  — | j         €t          d¦  «        ‚| j        s| j        st          d¦  «        ‚| j         ƒ d{V —†S )zÞAwait `_run_done`, raising if the stream was never entered or no run exists.

        Raises:
            RuntimeError: stream not entered, or no run started and no explicit
                thread_id was provided.
        Nu0   AsyncThreadStream not entered â€” use async withzmthread.output: no run has been started and no explicit thread_id was provided. Call thread.run.start() first.)r³  rt   r‹   ró  rº   s    r0   rÉ   z$AsyncThreadStream._wait_for_run_done  sf   è è € ð Œ>Ð!ÝÐQÑRÔRÐRØŒ~ð 	 dÔ&>ð 	Ýð?ñô ð ð ”^Ð#Ð#Ð#Ð#Ð#Ð#Ð#r/   c              ƒ  ó:  K  — |                      d¦  «        }|dk    �rU|                      d¦  «        pi }t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        rÍ|t          |t          ¦  «        r|                      d¦  «        ndt          |t          ¦  «        r|                      d¦  «        pg ng d	œ}| j        4 ƒd{V —† | j        }| j                             |¦  «         d
| _        ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   |s|                      ¦   «          dS dS dS |dk    �rš|                      d¦  «        pi }t          |t          ¦  «        r|                      d¦  «        nd}t          |t          ¦  «        r|                      d¦  «        nd}|dv r	d
| _	        dS |dv �r| j        4 ƒd{V —† d| _        g | _        ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   | j
        }	|	�Õ|	                     ¦   «         sÃ|dk    r’t          |t          ¦  «        r|                      d¦  «        nd}
t          |
rd|
› �nd¦  «        }|                      |¦  «         |                      |¦  «         |	                     t!          d|¬¦  «        ¦  «         dS |	                     t!          d¬¦  «        ¦  «         dS dS dS dS dS )zRUpdate `interrupted` / `interrupts` / `_run_done` from a lifecycle or input event.r[   zinput.requestedr9   r\   Nr%   r&   r(   )r%   r&   r(   TrB   rX   )r  Úrunning)rV   rW   FrW   r4   zRun errored: zRun erroredr±  r”  rV   )r3   )rT   rR   rS   r$   r    r  r¡   r  r5  r‹   r³  r‰   rt   r#  r$  rŠ   r2   )ri   rX   r[   r9   r\   r%   ÚpayloadÚwas_interruptedÚphaser¶  Ú	error_msgr4   s               r0   r•  z(AsyncThreadStream._apply_lifecycle_event�  sk  è è € à—’˜8Ñ$Ô$ˆØÐ&Ò&Ñ&Ø—Y’Y˜xÑ(Ô(Ð.¨BˆFÝ)3°F½DÑ)AÔ)AÐK�6—:’:˜fÑ%Ô%Ð%ÀtˆDÝ7AÀ$ÍÑ7MÔ7MÐW˜4Ÿ8š8 NÑ3Ô3Ð3ÐSWˆLÝ˜,­Ñ,Ô,ð *à$0Ý2<¸TÅ4Ñ2HÔ2HÐR˜TŸXšX gÑ.Ô.Ð.Èdå! &­$Ñ/Ô/ð" §¢¨KÑ!8Ô!8Ð!>¸Bøàð-ð -�ð  Ô0ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,Ø&*Ô&6�OØ”O×*Ò*¨7Ñ3Ô3Ð3Ø'+�DÔ$ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð 'ð *Ø×'Ò'Ñ)Ô)Ð)Ð)Ð)ð)*ð *ð&*ð *à�{Ò"Ñ"Ø—Y’Y˜xÑ(Ô(Ð.¨BˆFÝ)3°F½DÑ)AÔ)AÐK�6—:’:˜fÑ%Ô%Ð%ÀtˆDÝ)3°D½$Ñ)?Ô)?ÐI�D—H’H˜WÑ%Ô%Ð%ÀTˆEØÐ.Ð.Ð.ð "&�”��ØÐ1Ð1Ñ1ð  Ô0ð )ð )ð )ð )ð )ð )ð )ð )Ø',�DÔ$Ø&(�D”Oð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )ð  œ>�ØÐ'°·²±´Ð'Ø Ò(Ð(å1;¸DÅ$Ñ1GÔ1GÐQ˜DŸHšH WÑ-Ô-Ð-ÈTð "õ !-Ø;DÐWÐ7¨IÐ7Ð7Ð7È-ñ!ô !˜ð ×9Ò9¸%Ñ@Ô@Ð@Ø×4Ò4°UÑ;Ô;Ð;Ø ×+Ò+­LÀ	ÐQVÐ,WÑ,WÔ,WÑXÔXÐXÐXÐXà ×+Ò+­LÀÐ,LÑ,LÔ,LÑMÔMÐMÐMÐMð= #Ð"ð 2Ð1ð (Ð'Ð'Ð's$   Ä)EÅ
EÅEÈ	H*È*
H4È7H4)rì  r   rí  r$   rx   r$   rm   ro   r6  r7   ré  rî  rê  rY   rë  rï  rI   rc   )rI   rb   )r  r
   r  r
   r  r
   rI   rc   )rI   r  rm  )r9   r   rI   r6   )r&  r7   rI   rc   )rI   r  )r  r   rI   rc   rÆ  )r©   r…  rI   rc   )r6  r
   rI   rc   rk  )rH   r'   rK   r=  rL   r>  rI   r  )rH   r'   rI   rB  )rO  r—   rI   r—   )
rG  rT  rI  rT  rM  rU  rN  rV  rI   rc   )r9   r   rI   rY  )rc  r7   rI   rc   )rI   rY   )rt  r   rI   rc   re   )rw  r|  rI   rƒ   )r€  r  rI   r  )r[   r$   r9   rƒ   rI   rƒ   )r»   rî  rI   rc   )rI   rƒ   )rÊ   rƒ   rI   rY   )rI   r2   )/r)   r*   r+   r,   rj   rÇ  r  r  r  r  r­   rÜ   rß   r²  r  r   r#  rÔ  rÓ  r$  r5  r8  r<  rA  rQ  ÚstaticmethodrG  rH  r@  rÞ   r\  rl  ra  rÝ   ry  r`  rˆ   rx  r  r�  r’  rŽ  rÆ   rÇ   rÅ   rÉ   r•  r.   r/   r0   rb   rb   …  sé  € € € € € ðð ð -1Ø"Ø*.Ø#(Ø6;ðDDð DDð DDð DDð DDð DDðL ðð ð ñ „Xððð ð ð ð*(ð (ð (ð (ð ðð ð ñ „Xðð*ð *ð *ð *ð8	ð 	ð 	ð 	ð7ð 7ð 7ð 7ð)ð )ð )ð )ð1ð 1ð 1ð 1ð5ð 5ð 5ð 5ð-ð -ð -ð -ð
,ð ,ð ,ð ,ð0ð 0ð 0ð 0ð(ð (ð (ð (ð
+ð +ð +ð +ð*ð ð ð ð
ð ð ð ð .2Ø ð/ð /ð /ð /ð /ð /ð,qð qð qð qðf ðð ð ñ „\ðð(3ð (3ð (3ð (3ðT2ð 2ð 2ð 2ð"Dð Dð Dð Dð<'ð <'ð <'ð <'ð|,ð ,ð ,ð ,ðð ð ð ðB&:ð &:ð &:ð &:ðR /3ð-ð -ð -ð -ð -ð,ð ð ð ð*ð *ð *ð *ð< FJð Jð Jð Jð Jð Jð Jð
ð 
ð 
ð 
ð)ð )ð )ð )ðð ð ð ð5ð 5ð 5ð 5ðn
ð 
ð 
ð 
ð@ð @ð @ð @ð?ð ?ð ?ð ?ð$ð $ð $ð $ð :Nð :Nð :Nð :Nð :Nð :Nr/   rb   )rH   r'   r(   r'   rI   r   )rP   r
   rI   r'   )rX   r
   rI   rY   )r©   r   r¨   rª   rI   rc   )r\   rƒ   rI   r—   re   )r\   rƒ   r  r—   rI   r$   )r   r$   rI   r!  )r\   rƒ   rI   r)  )r(   r'   r,  r-  rI   rY   )r,  r-  rI   r   )Or,   Ú
__future__r   r<   r  rg  Úcollections.abcr   r   r   r   Údataclassesr   r	   Útypingr
   r   r   r   r  r   Úlangchain_protocolr   r   Úlanggraph_sdk._async.httpr   Úlanggraph_sdk.schemar   Úlanggraph_sdk.stream.controllerr   Úlanggraph_sdk.stream.decodersr   r   r   r   r   r   r   r_  r   r   Úlanggraph_sdk.stream.transportr   r   r    r!   r#   r2   r6   rG   r-   rO   rU   Ú	frozensetr]   r^   r`   r~   r®   r°   rÎ   rè   r  r  rh  r(  r+  r0  r3  r5  rE  rF  rH  r¦  r…  rÉ  rK  rÙ  rb   r.   r/   r0   ú<module>r­     s>  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø €€€Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à QÐ QÐ QÐ QÐ QÐ QØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð RÐ QÐ QÐ QÐ QÐ QÐ QÐ Qðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð �yñ ô ð ð ð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ „ð'ð ð@ð @ð @ð @ð @ñ @ô @ñ „ð@ð
ð 
ð 
€ð 
ð 
ð 
ñ 
ðð ð ð ðBð Bð Bð Bð #, )¨[¸(Ð,CÑ"DÔ"DÐ ð@ð @ð @ð @ð,
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð8jLð jLð jLð jLð jLñ jLô jLð jLðZ EHð ð ð ð ð ð ð:ð :ð :ð :ð :ñ :ô :ð :ðz":ð ":ð ":ð ":ð ":ñ ":ô ":ð ":ðJjGð jGð jGð jGð jGñ jGô jGð jGðZ?ð ?ð ?ð ?ð
ð ð ð ð ð ÐHÔI€ð*ð *ð *ð *ð
ð ð ð ðXð Xð Xð Xðð ð ð ðCð Cð Cð Cð Cñ Cô Cð CðL72ð 72ð 72ð 72ð 72ñ 72ô 72ð 72ðt;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð|gð gð gð gð gñ gô gð gðT<,ð <,ð <,ð <,ð <,ñ <,ô <,ð <,ð~A&ð A&ð A&ð A&ð A&ñ A&ô A&ð A&ðH<:ð <:ð <:ð <:ð <:ñ <:ô <:ð <:ð~!ð !ð !ð !ð !ñ !ô !ð !ð.!:ð !:ð !:ð !:ð !:ñ !:ô !:ð !:ðHDNð DNð DNð DNð DNñ DNô DNð DNð DNð DNr/   