ó
    ýÞ ji#  ã                  ó  • % S SK Jr  S SKJrJrJr  S SKJrJr  S SK	J
r
JrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr   S S
KJr  \" S5      r\\
/S4   r \" SSS9rS\S'     " S S\\5      rg! \ a    \r N5f = f)é    )Úannotations)ÚAsyncIteratorÚCallableÚIterator)Ú
ContextVarÚToken)ÚAnyÚTypeVarÚcast)ÚUUID)ÚBaseCallbackHandler)ÚNS_SEP)ÚTAG_NOSTREAM)ÚStreamChunk)Ú_StreamingCallbackHandlerÚTNÚlanggraph_tool_call_writer)Údefaultz!ContextVar[ToolCallWriter | None]Ú_tool_call_writerc                  óF  • \ rS rSrSrSrSS.       SS jjr      SS jr                SS jrSS	 jr	SS
 jr
      SS jrSS jr\SS j5       rSSSSS.                 SS jjrSS.         SS jjrSS.         SS jjrSrg)ÚStreamToolCallHandleré#   a¨  Callback handler that emits tool-call lifecycle events on the stream.

Fires on LangChain's `on_tool_*` callbacks and pushes to the `tools`
stream mode. Emits `tool-started` / `tool-output-delta` /
`tool-finished` / `tool-error` payloads keyed by `tool_call_id`.

While a tool is executing, this handler sets `_tool_call_writer` to a
closure bound to that call's namespace and `tool_call_id`.
`ToolRuntime.emit_output_delta` reads that ContextVar so tool bodies
can stream partial output without threading the writer through their
own signature.

Attached by `Pregel.stream` / `astream` when `"tools"` is in
`stream_modes`. `run_inline = True` keeps event ordering
deterministic.
TN)Ú	parent_nsc               ó6   • Xl         X l        X0l        0 U l        g)a™  Configure the handler to stream tool-call events.

Args:
    stream: Callable that accepts a `StreamChunk` tuple
        `(namespace, mode, payload)` and enqueues it.
    subgraphs: Whether to emit events from tools called inside
        nested subgraphs. When False, only tools at the
        handler's own scope (`parent_ns`) emit.
    parent_ns: Namespace where the handler was attached.
        Mirrors the `StreamMessagesHandler` escape hatch:
        tools whose containing namespace equals `parent_ns`
        still emit even with `subgraphs=False`, so a node that
        explicitly streams a subgraph with `stream_mode="tools"`
        sees its own tools.
N)ÚstreamÚ	subgraphsr   Ú_run_to_call)Úselfr   r   r   s       ÚQ/var/www/html/gaurav/venv/lib/python3.13/site-packages/langgraph/pregel/_tools.pyÚ__init__ÚStreamToolCallHandler.__init__7   s    € ð, ŒØ"ŒØ"Œð ð 	Õó    c                ó.  • U(       d  gU(       a  [         U;   a  gUR                  S5      nU(       d  SnO/[        [        [        U5      R                  [        5      5      SS nU R                  (       d  [        U5      S:”  a  X@R                  :w  a  gU$ )uÂ  Resolve the namespace this tool call should emit at, or `None` to skip.

Mirrors `StreamMessagesHandler.on_chat_model_start`'s namespace
derivation: parses `langgraph_checkpoint_ns` (which ends with
the `node_name:task_id` of the calling node), drops that
trailing segment, and returns the containing subgraph's own
namespace. Returns `None` when the call should be silently
suppressed:

- `metadata` is missing â€” handler is attached to a context
  without Pregel routing info.
- `TAG_NOSTREAM` is in `tags` â€” caller explicitly opted out.
- Tool runs in a subgraph (`len(ns) > 0`) and the handler was
  attached with `subgraphs=False` and a different `parent_ns`
  than the call's containing subgraph.
NÚlanggraph_checkpoint_ns© éÿÿÿÿr   )
r   ÚgetÚtupler   ÚstrÚsplitr   r   Úlenr   )r   ÚmetadataÚtagsÚnskeyÚnss        r   Ú_ns_for_emitÚ"StreamToolCallHandler._ns_for_emitW   ss   € ö* ØÞ”L DÓ(ØØ—‘Ð6Ó7ˆÞØ"$‰Bä”tœC Ó'×-Ñ-¬fÓ5Ó6°s¸Ð;ˆBØ�~�~¤# b£'¨A£+°"¿¹Ó2FØØˆ	r"   c               ó¼  ^ ^^• T R                  XE5      mTc  g [        SUR                  S5      5      =(       d    [        U5      mU=(       d    0 R                  S5      =(       d$    [        SUR                  S5      5      =(       d    SnS
UU U4S jjn	[        R                  U	5      n
TTU
4T R                  U'   STUS.nUb  XkS'   T R                  TS	U45        g )Nz
str | NoneÚtool_call_idÚnameÚ c                ó6   >• TR                  TSSTU S.45        g )NÚtoolsztool-output-delta)Úeventr3   Údelta)r   )r9   r/   r   r3   s    €€€r   ÚwriterÚ,StreamToolCallHandler._start.<locals>.writerŽ   s(   ø€ Ø�K‰KàØà!4Ø(4Ø!&ñðõ
r"   ztool-started)r8   r3   Ú	tool_nameÚinputr7   )r9   r	   ÚreturnÚNone)r0   r   r'   r)   r   Úsetr   r   )r   Ú
serializedÚ	input_strÚrun_idr,   r-   ÚinputsÚkwargsr<   r:   ÚtokenÚpayloadr/   r3   s   `           @@r   Ú_startÚStreamToolCallHandler._starty   sÛ   ú€ ð ×Ñ˜xÓ.ˆØ‰:ØÜ˜L¨&¯*©*°^Ó*DÓE×TÌÈVËˆà×˜2×"Ñ" 6Ó*÷ Ü�L &§*¡*¨VÓ"4Ó5÷àð 	÷	ñ 	ô "×%Ñ% fÓ-ˆØ%'¨°uÐ$=ˆ×Ñ˜&Ñ!ð $Ø(Ø"ñ#
ˆð
 ÑØ%�GÑØ�‰�R˜ 'Ð*Õ+r"   c               ó    • U R                   R                  US 5      nUc  g Uu  pEnU R                  U5        U R                  USSUUS.45        g )Nr7   ztool-finished)r8   r3   Úoutput)r   ÚpopÚ_reset_writerr   )r   rK   rC   Úinfor/   r3   rF   s          r   Ú_endÚStreamToolCallHandler._end§   s_   € Ø× Ñ ×$Ñ$ V¨TÓ2ˆØ‰<ØØ"&Ñˆ˜%Ø×Ñ˜5Ô!Ø�‰àØà,Ø$0Ø$ñðõ
	
r"   c          	     ó²   • U R                   R                  US 5      nUc  g Uu  pEnU R                  U5        U R                  USSU[	        U5      S.45        g )Nr7   z
tool-error)r8   r3   Úmessage)r   rL   rM   r   r)   )r   ÚerrorrC   rN   r/   r3   rF   s          r   Ú_errorÚStreamToolCallHandler._error¹   sc   € Ø× Ñ ×$Ñ$ V¨TÓ2ˆØ‰<ØØ"&Ñˆ˜%Ø×Ñ˜5Ô!Ø�‰àØà)Ø$0Ü" 5›zñðõ
	
r"   c                ó   • U$ )uF   Pass-through â€” required by the `_StreamingCallbackHandler` protocol.r%   ©r   rC   rK   s      r   Útap_output_aiterÚ&StreamToolCallHandler.tap_output_aiterË   s	   € ð ˆr"   c                ó   • U$ )u8   Pass-through â€” sync counterpart to `tap_output_aiter`.r%   rW   s      r   Útap_output_iterÚ%StreamToolCallHandler.tap_output_iterÑ   s   € àˆr"   c                óP   •  [         R                  U 5        g ! [         a     g f = f)N)r   ÚresetÚ
ValueError)rF   s    r   rM   Ú#StreamToolCallHandler._reset_writerÕ   s'   € ð	Ü×#Ñ# EÕ*øÜó 	Ùð	ús   ‚ ˜
%¤%)Úparent_run_idr-   r,   rD   c          
     ó.   • U R                  UUUUUUUS9  g )N)rC   r,   r-   rD   rE   )rH   )	r   rA   rB   rC   ra   r-   r,   rD   rE   s	            r   Úon_tool_startÚ#StreamToolCallHandler.on_tool_startä   s*   € ð 	�‰ØØØØØØØð 	ò 	
r"   )ra   c               ó"   • U R                  XS9  g ©N)rC   )rO   )r   rK   rC   ra   rE   s        r   Úon_tool_endÚ!StreamToolCallHandler.on_tool_endú   s   € ð 	�	‰	�&ˆ	Ò(r"   c               ó"   • U R                  XS9  g rf   )rT   )r   rS   rC   ra   rE   s        r   Úon_tool_errorÚ#StreamToolCallHandler.on_tool_error  s   € ð 	�‰�EˆÒ)r"   )r   r   r   r   )r   zCallable[[StreamChunk], None]r   Úboolr   útuple[str, ...] | Noner>   r?   )r,   údict[str, Any] | Noner-   úlist[str] | Noner>   rm   )rA   rn   rB   r)   rC   r   r,   rn   r-   ro   rD   rn   rE   údict[str, Any]r>   r?   )rK   r	   rC   r   r>   r?   )rS   ÚBaseExceptionrC   r   r>   r?   )rC   r   rK   úAsyncIterator[T]r>   rr   )rC   r   rK   úIterator[T]r>   rs   )rF   zToken[ToolCallWriter | None]r>   r?   )rA   rp   rB   r)   rC   r   ra   úUUID | Noner-   ro   r,   rn   rD   rn   rE   r	   r>   r	   )
rK   r	   rC   r   ra   rt   rE   r	   r>   r	   )
rS   rq   rC   r   ra   rt   rE   r	   r>   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú
run_inliner    r0   rH   rO   rT   rX   r[   ÚstaticmethodrM   rc   rg   rj   Ú__static_attributes__r%   r"   r   r   r   #   sÙ  † ñð" €Jð -1ñà-ðð ðð
 *ðð 
õð@ à'ð ð ð ð 
 ô	 ðD,,à)ð,,ð ð,,ð
 ð,,ð (ð,,ð ð,,ð &ð,,ð ð,,ð 
ô,,ô\
ô$
ð$ØðØ$4ðà	ôôð óó ðð( &*Ø!%Ø*.Ø(,ñ
à"ð
ð ð
ð
 ð
ð #ð
ð ð
ð (ð
ð &ð
ð ð
ð 
õ
ð6 &*ñ)àð)ð ð	)ð
 #ð)ð ð)ð 
õ)ð &*ñ*àð*ð ð	*ð
 #ð*ð ð*ð 
÷*ð *r"   r   ) Ú
__future__r   Úcollections.abcr   r   r   Úcontextvarsr   r   Útypingr	   r
   r   Úuuidr   Úlangchain_core.callbacksr   Úlanggraph._internal._constantsr   Úlanggraph.constantsr   Úlanggraph.pregel.protocolr   Ú!langchain_core.tracers._streamingr   ÚImportErrorÚobjectr   ÚToolCallWriterr   Ú__annotations__r   r%   r"   r   Ú<module>r‹      s’   ðÞ "ç =Ñ =ß )ß %Ñ %Ý å 8å 1Ý ,Ý 1ð'ÝKñ
 ˆCƒL€à˜3˜% ˜+Ñ&€Ø Rá7AØ ¨$ñ8Ð Ð4ó ðôi*Ð/Ð1Jõ i*øð' ó 'Ø &Òð'ús   ÁA4 Á4A?Á>A?