§
    šŠtji#  ã                  ó$  — U d dl mZ d dlmZmZmZ d dlmZmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ 	 d d
lmZ n# e$ r eZY nw xY w ed¦  «        Zee
gdf         Z	  edd¬¦  «        Zded<   	  G d„ dee¦  «        ZdS )é    )Ú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                  óœ   — e Zd ZdZdZddœd0d„Zd1d„Zd2d„Zd3d„Zd4d!„Z	d5d#„Z
d6d%„Zed7d(„¦   «         Zddddd)œd8d,„Zdd-œd9d.„Zdd-œd:d/„ZdS );ÚStreamToolCallHandleraØ  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_nsÚstreamúCallable[[StreamChunk], None]Ú	subgraphsÚboolr   útuple[str, ...] | NoneÚreturnÚNonec               ó>   — || _         || _        || _        i | _        dS )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)r   r   r   Ú_run_to_call)Úselfr   r   r   s       úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langgraph/pregel/_tools.pyÚ__init__zStreamToolCallHandler.__init__7   s,   € ð, ˆŒØ"ˆŒØ"ˆŒð ð 	ÔÐÐó    Úmetadataúdict[str, Any] | NoneÚtagsúlist[str] | Nonec                ó.  — |sdS |rt           |v rdS |                     d¦  «        }|sd}nBt          t          t          |¦  «                             t          ¦  «        ¦  «        dd…         }| j        s t          |¦  «        dk    r|| j	        k    rdS |S )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"   r&   r(   ÚnskeyÚnss        r#   Ú_ns_for_emitz"StreamToolCallHandler._ns_for_emitW   s¥   € ð* ð 	Ø�4Øð 	•L DÐ(Ð(Ø�4Ø—’Ð6Ñ7Ô7ˆØð 	<Ø"$ˆBˆBå•t�C Ñ'Ô'×-Ò-­fÑ5Ô5Ñ6Ô6°s¸°sÔ;ˆBØŒ~ð 	¥# b¡'¤'¨A¢+ +°"¸¼Ò2FÐ2FØ�4Øˆ	r%   Ú
serializedÚ	input_strr0   Úrun_idr   ÚinputsÚkwargsúdict[str, Any]c               óÄ  ‡ ‡‡— ‰                       ||¦  «        Š‰€d S t          d|                     d¦  «        ¦  «        pt          |¦  «        Š|pi                      d¦  «        p$t          d|                     d¦  «        ¦  «        pd}dˆˆ ˆfd	„}	t                               |	¦  «        }
‰‰|
f‰ j        |<   d
‰|dœ}|�||d<   ‰                      ‰d|f¦  «         d S )Nz
str | NoneÚtool_call_idÚnameÚ Údeltar	   r   r   c                ó@   •— ‰                      ‰dd‰| dœf¦  «         d S )NÚtoolsztool-output-delta)Úeventr=   r@   )r   )r@   r4   r"   r=   s    €€€r#   Úwriterz,StreamToolCallHandler._start.<locals>.writerŽ   sA   ø€ Ø�KŠKàØà!4Ø(4Ø!&ðð ðñ
ô 
ð 
ð 
ð 
r%   ztool-started)rC   r=   Ú	tool_nameÚinputrB   )r@   r	   r   r   )r5   r   r.   r0   r   Úsetr!   r   )r"   r6   r7   r8   r&   r(   r9   r:   rE   rD   ÚtokenÚpayloadr4   r=   s   `           @@r#   Ú_startzStreamToolCallHandler._starty   s&  øøø€ ð ×Ò˜x¨Ñ.Ô.ˆØˆ:ØˆFÝ˜L¨&¯*ª*°^Ñ*DÔ*DÑEÔEÐTÍÈVÉÌˆàÐ˜2×"Ò" 6Ñ*Ô*ð Ý�L &§*¢*¨VÑ"4Ô"4Ñ5Ô5ðàð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ "×%Ò% fÑ-Ô-ˆØ%'¨°uÐ$=ˆÔ˜&Ñ!ð $Ø(Ø"ð#
ð #
ˆð
 ÐØ%ˆG�GÑØ�Š�R˜ 'Ð*Ñ+Ô+Ð+Ð+Ð+r%   Úoutputr	   c               ó²   — | j                              |d ¦  «        }|€d S |\  }}}|                      |¦  «         |                      |dd||dœf¦  «         d S )NrB   ztool-finished)rC   r=   rK   )r!   ÚpopÚ_reset_writerr   )r"   rK   r8   Úinfor4   r=   rH   s          r#   Ú_endzStreamToolCallHandler._end§   s‚   € ØÔ ×$Ò$ V¨TÑ2Ô2ˆØˆ<ØˆFØ"&ÑˆˆL˜%Ø×Ò˜5Ñ!Ô!Ð!Ø�ŠàØà,Ø$0Ø$ðð ðñ
	
ô 
	
ð 
	
ð 
	
ð 
	
r%   ÚerrorÚBaseExceptionc          	     óÌ   — | j                              |d ¦  «        }|€d S |\  }}}|                      |¦  «         |                      |dd|t	          |¦  «        dœf¦  «         d S )NrB   z
tool-error)rC   r=   Úmessage)r!   rM   rN   r   r0   )r"   rQ   r8   rO   r4   r=   rH   s          r#   Ú_errorzStreamToolCallHandler._error¹   sˆ   € ØÔ ×$Ò$ V¨TÑ2Ô2ˆØˆ<ØˆFØ"&ÑˆˆL˜%Ø×Ò˜5Ñ!Ô!Ð!Ø�ŠàØà)Ø$0Ý" 5™zœzðð ðñ
	
ô 
	
ð 
	
ð 
	
ð 
	
r%   úAsyncIterator[T]c                ó   — |S )uF   Pass-through â€” required by the `_StreamingCallbackHandler` protocol.r,   ©r"   r8   rK   s      r#   Útap_output_aiterz&StreamToolCallHandler.tap_output_aiterË   s	   € ð ˆr%   úIterator[T]c                ó   — |S )u8   Pass-through â€” sync counterpart to `tap_output_aiter`.r,   rX   s      r#   Útap_output_iterz%StreamToolCallHandler.tap_output_iterÑ   s   € àˆr%   rH   úToken[ToolCallWriter | None]c                ó^   — 	 t                                | ¦  «         d S # t          $ r Y d S w xY w)N)r   ÚresetÚ
ValueError)rH   s    r#   rN   z#StreamToolCallHandler._reset_writerÕ   sC   € ð	Ý×#Ò# EÑ*Ô*Ð*Ð*Ð*øÝð 	ð 	ð 	ØˆDˆDð	øøøs   ‚ ž
,«,)Úparent_run_idr(   r&   r9   ra   úUUID | Nonec          	     ó>   — |                       |||||||¬¦  «         d S )N)r8   r&   r(   r9   r:   )rJ   )	r"   r6   r7   r8   ra   r(   r&   r9   r:   s	            r#   Úon_tool_startz#StreamToolCallHandler.on_tool_startä   s>   € ð 	�ŠØØØØØØØð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r%   )ra   c               ó4   — |                       ||¬¦  «         d S ©N)r8   )rP   )r"   rK   r8   ra   r:   s        r#   Úon_tool_endz!StreamToolCallHandler.on_tool_endú   s    € ð 	�	Š	�& ˆ	Ñ(Ô(Ð(Ð(Ð(r%   c               ó4   — |                       ||¬¦  «         d S rf   )rU   )r"   rQ   r8   ra   r:   s        r#   Úon_tool_errorz#StreamToolCallHandler.on_tool_error  s    € ð 	�Š�E &ˆÑ)Ô)Ð)Ð)Ð)r%   )r   r   r   r   r   r   r   r   )r&   r'   r(   r)   r   r   )r6   r'   r7   r0   r8   r   r&   r'   r(   r)   r9   r'   r:   r;   r   r   )rK   r	   r8   r   r   r   )rQ   rR   r8   r   r   r   )r8   r   rK   rV   r   rV   )r8   r   rK   rZ   r   rZ   )rH   r]   r   r   )r6   r;   r7   r0   r8   r   ra   rb   r(   r)   r&   r'   r9   r'   r:   r	   r   r	   )
rK   r	   r8   r   ra   rb   r:   r	   r   r	   )
rQ   rR   r8   r   ra   rb   r:   r	   r   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
run_inliner$   r5   rJ   rP   rU   rY   r\   ÚstaticmethodrN   rd   rg   ri   r,   r%   r#   r   r   #   sU  € € € € € ðð ð" €Jð -1ðð ð ð ð ð ð@ ð  ð  ð  ðD,,ð ,,ð ,,ð ,,ð\
ð 
ð 
ð 
ð$
ð 
ð 
ð 
ð$ð ð ð ðð ð ð ð ðð ð ñ „\ðð( &*Ø!%Ø*.Ø(,ð
ð 
ð 
ð 
ð 
ð 
ð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Ð 8Ð 8Ð 8Ð 8Ð 8à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ð'ØKÐKÐKÐKÐKÐKÐKøØð 'ð 'ð 'Ø &ÐÐÐð'øøøð €GˆC�L„L€à˜3˜% ˜+Ô&€Ø Rà7A°zØ ¨$ð8ñ 8ô 8Ð ð ð ð ñ ðði*ð i*ð i*ð i*ð i*Ð/Ð1Jñ i*ô i*ð i*ð i*ð i*s   ÁA
 Á
AÁA