
    f3fi'M             	      J   d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	 ddl
mZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZmZmZ dd
lmZ ddlmZmZ ddlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: er<ddl
m;Z;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZDmEZE ddlFmGZG ddlHmIZImJZJmKZK ddlLmMZM ddlNmOZO  ej                  eQ      ZRdTdZSe	 dUddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dVd       ZTe	 dUddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dWd        ZU ed!e"      ZVdXd#ZW	 	 	 	 	 	 	 	 	 	 	 	 dYd$ZXdZd%ZY	 	 	 	 	 	 	 	 	 	 	 	 d[d&ZZ	 	 	 	 	 	 	 	 	 	 	 	 dYd'Z[ G d( d)e$      Z\ G d* d+e\      Z] G d, d-e]      Z^ G d. d/e\e      Z_ G d0 d1e_      Z` G d2 d3e]e"      Za G d4 d5e_e"      Zb G d6 d7e^e!      Zc G d8 d9e`e!      Zd G d: d;e^e%      Ze G d< d=e`e%      Zf G d> d?e^e#      Zg G d@ dAe`e#      Zh G dB dCe      Zi G dD dEei      Zj G dF dGe      Zk G dH dIek      Zl edJeiek      Zm	 	 	 	 	 	 d\dKdL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d]dMZnddN	 	 	 	 	 	 	 d^dOZoddN	 	 	 	 	 	 	 d^dPZp ej                  dQR      d_dS       Zry)`zRun managers.    )annotationsN)ABCabstractmethod)Callable)ThreadPoolExecutor)asynccontextmanagercontextmanager)copy_context)TYPE_CHECKINGAnyTypeVarcast)get_tracing_context)Selfoverride)BaseCallbackHandlerBaseCallbackManager	CallbacksChainManagerMixinLLMManagerMixinRetrieverManagerMixinRunManagerMixinToolManagerMixin)StdOutCallbackHandler	get_debug)BaseMessageget_buffer_string)_configure_hooks_get_trace_callbacks_get_tracer_project_tracing_v2_is_enabledtracing_v2_callback_var)LangChainTracer)ConsoleCallbackHandler)env_var_is_setuuid7)AsyncGenerator	Coroutine	GeneratorSequence)UUID)RetryCallState)AgentActionAgentFinish)Document)ChatGenerationChunkGenerationChunk	LLMResult)RunnableConfig)Runc                     t               S Nr        ^/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_core/callbacks/manager.py
_get_debugr<   ;   s
    ;r:   )inputsproject_name
example_idrun_idtagsmetadatac          
   #    K   t        |||      }t        j                  |||      }	|	j                  d| i|xs i |      }
|
j	                         }t        |j                  |j                  |j                  |
|j                  |j                  |j                  |j                        }	 | |j                  s|
j                  i        yy# t        $ r#}|j                  s|
j!                  |        d}~ww xY ww)aC  Get a callback manager for a chain group in a context manager.

    Useful for grouping different calls together as a single run even if
    they aren't composed in a single chain.

    Args:
        group_name: The name of the chain group.
        callback_manager: The callback manager to use.
        inputs: The inputs to the chain group.
        project_name: The name of the project.
        example_id: The ID of the example.
        run_id: The ID of the run.
        tags: The inheritable tags to apply to all runs.
        metadata: The metadata to apply to all runs.

    !!! note
        Must have `LANGCHAIN_TRACING_V2` env var set to true to see the trace in
        LangSmith.

    Yields:
        The callback manager for the chain group.

    Example:
        ```python
        llm_input = "Foo"
        with trace_as_chain_group("group_name", inputs={"input": llm_input}) as manager:
            # Use the callback manager for the chain group
            res = llm.invoke(llm_input, {"callbacks": manager})
            manager.on_chain_end({"output": res})
        ```
    callback_managerinheritable_callbacksinheritable_tagsinheritable_metadatanamer@   parent_run_managerrA   rH   rB   rI   N)r    CallbackManager	configureon_chain_start	get_childCallbackManagerForChainGrouphandlersinheritable_handlersparent_run_idrA   rH   rB   rI   endedon_chain_end	Exceptionon_chain_error
group_namerE   r=   r>   r?   r@   rA   rB   cbcmrun_managerchild_cmgroup_cmes                 r;   trace_as_chain_grouprb   ?   s    V 
j3C
B 
	"	" % 
# 
B ##VZ$8&,Bv#VK$$&H+%%&]]!22""%::	H) ~~$$R(   ~~&&q)s*   B*C?-C 1C?	C<C77C<<C?c          
    >  K   t        |||      }t        j                  |||      }	|	j                  d| i|xs i |       d{   }
|
j	                         }t        |j                  |j                  |j                  |
|j                  |j                  |j                  |j                        }	 | |j                  s|
j                  i        d{    yy7 7 # t        $ r,}|j                  s|
j!                  |       d{  7    d}~ww xY ww)a  Get an async callback manager for a chain group in a context manager.

    Useful for grouping different async calls together as a single run even if
    they aren't composed in a single chain.

    Args:
        group_name: The name of the chain group.
        callback_manager: The async callback manager to use,
            which manages tracing and other callback behavior.
        inputs: The inputs to the chain group.
        project_name: The name of the project.
        example_id: The ID of the example.
        run_id: The ID of the run.
        tags: The inheritable tags to apply to all runs.
        metadata: The metadata to apply to all runs.

    Yields:
        The async callback manager for the chain group.

    !!! note
        Must have `LANGCHAIN_TRACING_V2` env var set to true to see the trace in
        LangSmith.

    Example:
        ```python
        llm_input = "Foo"
        async with atrace_as_chain_group(
            "group_name", inputs={"input": llm_input}
        ) as manager:
            # Use the async callback manager for the chain group
            res = await llm.ainvoke(llm_input, {"callbacks": manager})
            await manager.on_chain_end({"output": res})
        ```
    rD   rF   rJ   rK   NrL   )r    AsyncCallbackManagerrO   rP   rQ   !AsyncCallbackManagerForChainGrouprS   rT   rU   rA   rH   rB   rI   rV   rW   rX   rY   rZ   s                 r;   atrace_as_chain_grouprf      s%    \ 
j3C
B 
	'	' 4h 
( 
B ))	fl6 *  K $$&H0%%&]]!22""%::	H/ ~~**2... +, /  ~~,,Q///sU   ADC!A-D5C% : DC#D#D%	D. DDDDDFunc)boundc                X     t        j                         d fd       }t        d|      S )zMakes so an awaitable method is always shielded from cancellation.

    Args:
        func: The function to shield.

    Returns:
        The shielded function

    c                 "  K   t               } | i |}	 t        j                  ||      }t        j                  |       d {   S 7 # t        $ r6 t        j                  |      }t        j                  |       d {  7  cY S w xY ww)N)context)r
   asynciocreate_taskshield	TypeError)argskwargsctxcorotaskfuncs        r;   wrappedzshielded.<locals>.wrapped   s      n T$V$		.&&tS9D ---- 	. &&t,D ----		.sF   B/A AA 
BA 6BBB	BBBrg   )rp   r   rq   r   returnr   )	functoolswrapsr   )ru   rv   s   ` r;   shieldedrz      s/     __T. .(   r:   c           
        g }	 d}| D ]I  }	 |t        ||      s8 t        ||      |i |}t        j                  |      r|j                  |       K 	 |ro	 t        j                          d
}|rJt!               j#                  t%        dt'               j(                        t*        |      j-                          yt+        |       yy# t        $ r}	|dk(  r>|!|d   D 
cg c]  }
t        |
       nc c}
w }}
t        |gdd|d   |g|dd i | n7|j                  j                  }t        j                  d||t        |	             Y d}	~	Hd}	~	wt        $ rM}	t        j                  d	|j                  j                  |t        |	             |j                  r Y d}	~	d}	~	ww xY w# t        $ r d}Y Lw xY w# |r	 t        j                          d
}n# t        $ r d}Y nw xY w|rJt!               j#                  t%        dt'               j(                        t*        |      j-                          w t+        |       w w xY w)a*  Generic event handler for CallbackManager.

    !!! note
        This function is used by `LangServe` to handle events.

    Args:
        handlers: The list of handlers that will handle the event.
        event_name: The name of the event (e.g., `'on_llm_start'`).
        ignore_condition_name: Name of the attribute defined on handler
            that if True will cause the handler to be skipped for the given event.
        *args: The arguments to pass to the event handler.
        **kwargs: The keyword arguments to pass to the event handler

    Non_chat_model_start   on_llm_start
ignore_llmr      )NotImplementedError in %s.%s callback: %sError in %s.%s callback: %sTFr   )getattrrl   iscoroutineappendNotImplementedErrorr   handle_event	__class____name__loggerwarningreprrX   raise_errorget_running_loopRuntimeError	_executorsubmitr   r
   run
_run_corosresult)rS   
event_nameignore_condition_namerp   rq   corosmessage_stringshandlereventra   mhandler_nameloop_runnings                r;   r   r      sD   * -/E<",0 %	G$(029 9GGZ8$I&IE**51U+%	N %((*#  ""\^%7%78*e&( 5!' ? ' !66&.IMa*QA+<Q+?*Q*Q*Q  	&$Q' ab ! $+#4#4#=#=LNNC$"Q	  1%%..G	 && '   %$% %((*# %$%  ""\^%7%78*e&( 5!' s   F> ACF> F, 	F)EC10AE
F> F)AF$F> $F))F> ,F;:F;>IGIG'$I&G''AIc           	        t        t        d      rt        j                         5 }| D ]  }	 |j                  |        t        j                  |j                               x}rJ|j                  t        j                  |             t        j                  |j                               x}rJd d d        y | D ]  }	 t        j                  |        y # t        $ r)}t
        j                  dt        |             Y d }~d }~ww xY w# 1 sw Y   y xY w# t        $ r)}t
        j                  dt        |             Y d }~d }~ww xY w)NRunnerzError in callback coroutine: %s)hasattrrl   r   r   rX   r   r   r   	all_tasksget_loopwait)r   runnerrs   ra   pendings        r;   r   r   T  s"   w! ^^ 
	2 OOJJt$O %..v/@AA'A

7<<01 %..v/@AA'A
	2 
	2  	KDKD!	K ! ONN#Dd1gNNO
	2 
	2"  K@$q'JJKsL   D
CA0D
=D	DD=D
DD

D	EEEc                Z  K   	 |t        | |      st        | |      }t        j                  |      r ||i | d {    y | j                  r	 ||i | y t        j                         j                  d t        dt        j                  t               j                  |g|i |             d {    y y 7 |7 # t        $ r}|dk(  rD|d   D cg c]  }t        |       nc c}w }}t        | dd|d   |g|dd  i | d {  7   n:t        j                  d| j                   j"                  |t%        |             Y d }~y Y d }~y d }~wt&        $ rL}t        j                  d	| j                   j"                  |t%        |             | j(                  r Y d }~y d }~ww xY ww)
Nr   r|   r}   r~   r   r   r   r   r   )r   rl   iscoroutinefunction
run_inlineget_event_looprun_in_executorr   rx   partialr
   r   r   r   _ahandle_event_for_handlerr   r   r   r   r   rX   r   )	r   r   r   rp   rq   r   ra   r   r   s	            r;   r   r   q  s    * (AV0WGZ0E**51T,V,,,##t&v&,,.>>"!)),.*<*<eUdUfU   1X -  ..=A!WE03EEOE,Q ab    NN;!!**Q	    )&&G		
  s   F+:B? B;B? F+B? F+AB? 4B=5B? 9F+;B? =B? ?	F(EC'&$E
D;E
F+F(AF#F+#F((F+c                   K   | D cg c]  }|j                   s| c}D ]  }t        |gi  d{     t        j                  fd| D          d{    yc c}w 7 27 w)a8  Async generic event handler for `AsyncCallbackManager`.

    !!! note
        This function is used by `LangServe` to handle events.

    Args:
        handlers: The list of handlers that will handle the event.
        event_name: The name of the event (e.g., `'on_llm_start'`).
        ignore_condition_name: Name of the attribute defined on handler
            that if True will cause the handler to be skipped for the given event.
        *args: The arguments to pass to the event handler.
        **kwargs: The keyword arguments to pass to the event handler.

    Nc              3  X   K   | ]!  }|j                   st        |gi  # y wr8   )r   r   ).0r   rp   r   r   rq   s     r;   	<genexpr>z ahandle_event.<locals>.<genexpr>  sF      


 %% '% 	
 


s   '*)r   r   rl   gather)rS   r   r   rp   rq   hr   s    ````  r;   ahandle_eventr     s     *  (8!1<<A8 
(Z!6
9=
AG
 	
 	

 ..


 $


  	 9	
s0   A2A)A)A2A.'A2#A0$A20A2c                  Z    e Zd ZdZdddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       Zy)BaseRunManagerz6Base class for run manager (a bound callback manager).N)rU   rA   rH   rB   rI   c                   || _         || _        || _        || _        |xs g | _        |xs g | _        |xs i | _        |xs i | _        y)a  Initialize the run manager.

        Args:
            run_id: The ID of the run.
            handlers: The list of handlers.
            inheritable_handlers: The list of inheritable handlers.
            parent_run_id: The ID of the parent run.
            tags: The list of tags.
            inheritable_tags: The list of inheritable tags.
            metadata: The metadata.
            inheritable_metadata: The inheritable metadata.

        Nr@   rS   rT   rU   rA   rH   rB   rI   )	selfr@   rS   rT   rU   rA   rH   rB   rI   s	            r;   __init__zBaseRunManager.__init__  sR    2  $8!*JB	 0 6B B$8$>B!r:   c           	     0     | t               g g g g i i       S )zoReturn a manager that doesn't perform any operations.

        Returns:
            The noop manager.

        )r@   rS   rT   rA   rH   rB   rI   r'   )clss    r;   get_noop_managerzBaseRunManager.get_noop_manager  s(     7!#!#
 	
r:   )r@   r-   rS   list[BaseCallbackHandler]rT   r   rU   UUID | NonerA   list[str] | NonerH   r   rB   dict[str, Any] | NonerI   r   rw   None)rw   r   )r   
__module____qualname____doc__r   classmethodr   r9   r:   r;   r   r     s    @ &*!%-1*.6: ?  ? ,	 ?
 8 ? # ?  ? + ? ( ? 4 ? 
 ?D 
 
r:   r   c                  8    e Zd ZdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)
RunManagerzSync Run Manager.c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| yzRun when a text is received.

        Args:
            text: The received text.
            **kwargs: Additional keyword arguments.
        Non_textr@   rU   rA   rS   r   r@   rU   rA   r   textrq   s      r;   r   zRunManager.on_text  sN     }}MM			

 ;;,,		
 		
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| y)zRun when a retry is received.

        Args:
            retry_state: The retry state.
            **kwargs: Additional keyword arguments.

        Non_retryignore_retryr   r   r   retry_staterq   s      r;   r   zRunManager.on_retry   sN     }}MM			

 ;;,,		
 		
r:   Nr   strrq   r   rw   r   r   r.   rq   r   rw   r   )r   r   r   r   r   r   r9   r:   r;   r   r     sG    

 
 
	
0
#
 
 
	
r:   r   c                      e Zd ZdZdddZy)ParentRunManagerzSync Parent Run Manager.Nc                   t        g | j                        }|j                  | j                         |j	                  | j
                         |j                  | j                         ||j	                  |gd       |S zGet a child callback manager.

        Args:
            tag: The tag for the child callback manager.

        Returns:
            The child callback manager.

        rS   rU   Finherit)rN   r@   set_handlersrT   add_tagsrH   add_metadatarI   r   tagmanagers      r;   rQ   zParentRunManager.get_child=  so     "2T[[IT667../T667?cUE2r:   r8   )r   
str | Nonerw   rN   r   r   r   r   rQ   r9   r:   r;   r   r   :  s
    "r:   r   c                  J    e Zd ZdZedd       Z	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)	AsyncRunManagerzAsync Run Manager.c                     y)`Get the equivalent sync RunManager.

        Returns:
            The sync RunManager.

        Nr9   r   s    r;   get_synczAsyncRunManager.get_syncS  s    r:   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 wr   rS   r   r@   rU   rA   r   s      r;   r   zAsyncRunManager.on_text\  s\      }}MM		

 ;;,,	
 	
 		
 		
   AAAAc                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 w)zAsync run when a retry is received.

        Args:
            retry_state: The retry state.
            **kwargs: Additional keyword arguments.

        Nr   r   r   r   r   s      r;   r   zAsyncRunManager.on_retryt  s\      }}MM		

 ;;,,	
 	
 		
 		
r   N)rw   r   r   r   )r   r   r   r   r   r   r   r   r9   r:   r;   r   r   P  sY     

 
 
	
0
#
 
 
	
r:   r   c                      e Zd ZdZdddZy)AsyncParentRunManagerzAsync Parent Run Manager.Nc                   t        g | j                        }|j                  | j                         |j	                  | j
                         |j                  | j                         ||j	                  |gd       |S r   )rd   r@   r   rT   r   rH   r   rI   r   s      r;   rQ   zAsyncParentRunManager.get_child  so     '$++NT667../T667?cUE2r:   r8   )r   r   rw   rd   r   r9   r:   r;   r   r     s
    #r:   r   c                  H    e Zd ZdZdd	 	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 d	dZy)
CallbackManagerForLLMRunzCallback manager for LLM run.Nchunkc          	         | j                   syt        | j                   ddf|| j                  | j                  | j                  |d| y)Run when LLM generates a new token.

        Args:
            token: The new token.
            chunk: The chunk.
            **kwargs: Additional keyword arguments.

        Non_llm_new_tokenr   )tokenr@   rU   rA   r   r   r   r   r   rq   s       r;   r   z)CallbackManagerForLLMRun.on_llm_new_token  sQ     }}MM
	
 ;;,,
	
 
	
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| yzRun when LLM ends running.

        Args:
            response: The LLM result.
            **kwargs: Additional keyword arguments.

        N
on_llm_endr   r   r   r   responserq   s      r;   r   z#CallbackManagerForLLMRun.on_llm_end  sN     }}MM			

 ;;,,		
 		
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| y)zRun when LLM errors.

        Args:
            error: The error.
            **kwargs: Additional keyword arguments.
                - response (LLMResult): The response which was generated before
                    the error occurred.
        Non_llm_errorr   r   r   r   errorrq   s      r;   r  z%CallbackManagerForLLMRun.on_llm_error  sN     }}MM			

 ;;,,		
 		
r:   r   r   r   z,GenerationChunk | ChatGenerationChunk | Nonerq   r   rw   r   r   r4   rq   r   rw   r   r  BaseExceptionrq   r   rw   r   )r   r   r   r   r   r   r  r9   r:   r;   r   r     s\    ' ?C	

 <	

 
 

:
*

 
 
	
r:   r   c                  d    e Zd ZdZddZdd	 	 	 	 	 	 	 d	dZed
d       Ze	 	 	 	 	 	 dd       Zy)AsyncCallbackManagerForLLMRunz#Async callback manager for LLM run.c           
         t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                        S r   r   )	r   r@   rS   rT   rU   rA   rH   rB   rI   r   s    r;   r   z&AsyncCallbackManagerForLLMRun.get_sync  sQ     (;;]]!%!:!:,,!22]]!%!:!:	
 		
r:   Nr   c                  K   | j                   syt        | j                   dd|f|| j                  | j                  | j                  d| d{    y7 w)r   Nr   r   )r   r@   rU   rA   r   r   s       r;   r   z.AsyncCallbackManagerForLLMRun.on_llm_new_token	  s_      }}MM	


 ;;,,

 

 
	
 
	
s   AAAAc                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 wr   r   r   s      r;   r   z(AsyncCallbackManagerForLLMRun.on_llm_end&  s\      }}MM		

 ;;,,	
 	
 		
 		
r   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 w)zRun when LLM errors.

        Args:
            error: The error.
            **kwargs: Additional keyword arguments.
                - response (LLMResult): The response which was generated before
                    the error occurred.



        Nr  r   r   r   r  s      r;   r  z*AsyncCallbackManagerForLLMRun.on_llm_error<  s\     " }}MM		

 ;;,,	
 	
 		
 		
r   )rw   r   r  r  r  )	r   r   r   r   r   r   rz   r   r  r9   r:   r;   r
  r
    s    -
, ?C	

 <	

 
 

: 
 
* 

 
 
	
 
r:   r
  c                  <    e Zd ZdZddZ	 	 	 	 	 	 ddZd	dZd
dZy)CallbackManagerForChainRunzCallback manager for chain run.c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| y)zRun when chain ends running.

        Args:
            outputs: The outputs of the chain.
            **kwargs: Additional keyword arguments.

        NrW   ignore_chainr   r   r   outputsrq   s      r;   rW   z'CallbackManagerForChainRun.on_chain_end^  sN     }}MM			

 ;;,,		
 		
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| yRun when chain errors.

        Args:
            error: The error.
            **kwargs: Additional keyword arguments.

        NrY   r  r   r   r  s      r;   rY   z)CallbackManagerForChainRun.on_chain_errors  sN     }}MM			

 ;;,,		
 		
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| yzRun when agent action is received.

        Args:
            action: The agent action.
            **kwargs: Additional keyword arguments.
        Non_agent_actionignore_agentr   r   r   actionrq   s      r;   r  z*CallbackManagerForChainRun.on_agent_action  N     }}MM			

 ;;,,		
 		
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| yzRun when agent finish is received.

        Args:
            finish: The agent finish.
            **kwargs: Additional keyword arguments.
        Non_agent_finishr  r   r   r   finishrq   s      r;   r"  z*CallbackManagerForChainRun.on_agent_finish  r  r:   Nr  dict[str, Any] | Anyrq   r   rw   r   r  r  r/   rq   r   rw   r   r$  r0   rq   r   rw   r   )r   r   r   r   rW   rY   r  r"  r9   r:   r;   r  r  [  s5    )
*

 
 
	
2
(
r:   r  c                  X    e Zd ZdZddZed	d       Ze	 	 	 	 	 	 d
d       ZddZddZ	y)AsyncCallbackManagerForChainRunz%Async callback manager for chain run.c           
         t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                        S z_Get the equivalent sync RunManager.

        Returns:
            The sync RunManager.
        r   )	r  r@   rS   rT   rU   rA   rH   rB   rI   r   s    r;   r   z(AsyncCallbackManagerForChainRun.get_sync  sQ     *;;]]!%!:!:,,!22]]!%!:!:	
 		
r:   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 w)zRun when a chain ends running.

        Args:
            outputs: The outputs of the chain.
            **kwargs: Additional keyword arguments.

        NrW   r  r   r   r  s      r;   rW   z,AsyncCallbackManagerForChainRun.on_chain_end  s\      }}MM		

 ;;,,	
 	
 		
 		
r   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 wr  r   r  s      r;   rY   z.AsyncCallbackManagerForChainRun.on_chain_error  s\      }}MM		

 ;;,,	
 	
 		
 		
r   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 wr  r   r  s      r;   r  z/AsyncCallbackManagerForChainRun.on_agent_action  \      }}MM		

 ;;,,	
 	
 		
 		
r   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 wr!  r   r#  s      r;   r"  z/AsyncCallbackManagerForChainRun.on_agent_finish  r0  r   N)rw   r  r%  r  r'  r(  )
r   r   r   r   r   rz   rW   rY   r  r"  r9   r:   r;   r*  r*    sX    /
" 
 
* 

 
 
	
 
2
(
r:   r*  c                  8    e Zd ZdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)CallbackManagerForToolRunzCallback manager for tool run.c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| y)zRun when the tool ends running.

        Args:
            output: The output of the tool.
            **kwargs: The keyword arguments to pass to the event handler

        Non_tool_endr  r   r   r   outputrq   s      r;   r5  z%CallbackManagerForToolRun.on_tool_end%  sN     }}MM			

 ;;,,		
 		
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| yzRun when tool errors.

        Args:
            error: The error.
            **kwargs: Additional keyword arguments.

        Non_tool_errorr  r   r   r  s      r;   r:  z'CallbackManagerForToolRun.on_tool_error>  sN     }}MM			

 ;;,,		
 		
r:   Nr7  r   rq   r   rw   r   r  )r   r   r   r   r5  r:  r9   r:   r;   r3  r3  "  sG    (

 
 
	
2

 
 
	
r:   r3  c                  4    e Zd ZdZddZddZ	 	 	 	 	 	 ddZy)	AsyncCallbackManagerForToolRunz$Async callback manager for tool run.c           
         t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                        S r,  )	r3  r@   rS   rT   rU   rA   rH   rB   rI   r   s    r;   r   z'AsyncCallbackManagerForToolRun.get_sync[  sQ     );;]]!%!:!:,,!22]]!%!:!:	
 		
r:   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 w)zAsync run when the tool ends running.

        Args:
            output: The output of the tool.
            **kwargs: Additional keyword arguments.

        Nr5  r  r   r   r6  s      r;   r5  z*AsyncCallbackManagerForToolRun.on_tool_endl  s\      }}MM		

 ;;,,	
 	
 		
 		
r   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 wr9  r   r  s      r;   r:  z,AsyncCallbackManagerForToolRun.on_tool_error  s\      }}MM		

 ;;,,	
 	
 		
 		
r   N)rw   r3  r;  r  )r   r   r   r   r   r5  r:  r9   r:   r;   r=  r=  X  s0    .
"
*

 
 
	
r:   r=  c                  8    e Zd ZdZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)CallbackManagerForRetrieverRunz#Callback manager for retriever run.c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| y)zRun when retriever ends running.

        Args:
            documents: The retrieved documents.
            **kwargs: Additional keyword arguments.

        Non_retriever_endignore_retrieverr   r   r   	documentsrq   s      r;   rD  z/CallbackManagerForRetrieverRun.on_retriever_end  sN     }}MM			

 ;;,,		
 		
r:   c                    | j                   syt        | j                   dd|f| j                  | j                  | j                  d| yzRun when retriever errors.

        Args:
            error: The error.
            **kwargs: Additional keyword arguments.

        Non_retriever_errorrE  r   r   r  s      r;   rJ  z1CallbackManagerForRetrieverRun.on_retriever_error  sN     }}MM 			

 ;;,,		
 		
r:   NrG  zSequence[Document]rq   r   rw   r   r  )r   r   r   r   rD  rJ  r9   r:   r;   rB  rB    sG    -
%
 
 
	
2

 
 
	
r:   rB  c                  T    e Zd ZdZddZe	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Zy)	#AsyncCallbackManagerForRetrieverRunz)Async callback manager for retriever run.c           
         t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                        S r  )	rB  r@   rS   rT   rU   rA   rH   rB   rI   r   s    r;   r   z,AsyncCallbackManagerForRetrieverRun.get_sync  sQ     .;;]]!%!:!:,,!22]]!%!:!:	
 		
r:   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 w)zRun when the retriever ends running.

        Args:
            documents: The retrieved documents.
            **kwargs: Additional keyword arguments.

        NrD  rE  r   r   rF  s      r;   rD  z4AsyncCallbackManagerForRetrieverRun.on_retriever_end  s\      }}MM		

 ;;,,	
 	
 		
 		
r   c                   K   | j                   syt        | j                   dd|f| j                  | j                  | j                  d| d{    y7 wrI  r   r  s      r;   rJ  z6AsyncCallbackManagerForRetrieverRun.on_retriever_error  s\      }}MM 		

 ;;,,	
 	
 		
 		
r   N)rw   rB  rK  r  )r   r   r   r   r   rz   rD  rJ  r9   r:   r;   rM  rM    sh     4
$ 
+
7:
	
 
. 

 
 
	
 
r:   rM  c                  *   e Zd ZdZ	 d
	 	 	 	 	 	 	 	 	 ddZ	 d
	 	 	 	 	 	 	 	 	 ddZ	 d
	 	 	 	 	 	 	 	 	 ddZe	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 d	 	 	 	 	 	 	 	 	 	 	 dd       Z		 d
	 	 	 	 	 	 	 	 	 ddZ
e	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	       Zy)rN   zCallback manager for LangChain.Nc                   g }t        |      D ]  \  }}|dk(  r||n	t               }t        | j                  dd||gf|| j                  | j
                  | j                  d| |j                  t        || j                  | j                  | j                  | j
                  | j                  | j                  | j                                |S )a6  Run when LLM starts running.

        Args:
            serialized: The serialized LLM.
            prompts: The list of prompts.
            run_id: The ID of the run.
            **kwargs: Additional keyword arguments.

        Returns:
            A callback manager for each prompt as an LLM run.

        r   r~   r   r@   rU   rA   rB   r   )	enumerater(   r   rS   rU   rA   rB   r   r   rT   rH   rI   )	r   
serializedpromptsr@   rq   managersipromptrun_id_s	            r;   r~   zCallbackManager.on_llm_start  s    & "7+ 	IAv !Q6+=f57G "00YY  OO("!]])-)B)B"&"4"4%)%:%:!]])-)B)B	!	: r:   c                   g }|D ]  }||}d}n
t               }t        | j                  dd||gf|| j                  | j                  | j
                  d| |j                  t        || j                  | j                  | j                  | j                  | j                  | j
                  | j                                |S )aI  Run when chat model starts running.

        Args:
            serialized: The serialized LLM.
            messages: The list of messages.
            run_id: The ID of the run.
            **kwargs: Additional keyword arguments.

        Returns:
            A callback manager for each list of messages as an LLM run.

        Nr|   ignore_chat_modelrS  r   )r(   r   rS   rU   rA   rB   r   r   rT   rH   rI   )r   rU  messagesr@   rq   rW  message_listrZ  s           r;   r|   z#CallbackManager.on_chat_model_startR  s    & $ 	L! '%# "00YY  OO("!]])-)B)B"&"4"4%)%:%:!]])-)B)B	'	@ r:   c           
     F   |
t               }t        | j                  dd||f|| j                  | j                  | j
                  d| t        || j                  | j                  | j                  | j                  | j                  | j
                  | j                        S )a3  Run when chain starts running.

        Args:
            serialized: The serialized chain.
            inputs: The inputs to the chain.
            run_id: The ID of the run.
            **kwargs: Additional keyword arguments.

        Returns:
            The callback manager for the chain run.

        rP   r  rS  r   )
r(   r   rS   rU   rA   rB   r  rT   rH   rI   r   rU  r=   r@   rq   s        r;   rP   zCallbackManager.on_chain_start  s    & >WFMM	
 ,,]]	
 	
 *]]!%!:!:,,!22]]!%!:!:	
 		
r:   c           
     H   |
t               }t        | j                  dd||f|| j                  | j                  | j
                  |d| t        || j                  | j                  | j                  | j                  | j                  | j
                  | j                        S )a  Run when tool starts running.

        Args:
            serialized: Serialized representation of the tool.
            input_str: The  input to the tool as a string.
                Non-string inputs are cast to strings.
            run_id: ID for the run.
            parent_run_id: The ID of the parent run.
            inputs: The original input to the tool if provided.
                Recommended for usage instead of input_str when the original
                input is needed.
                If provided, the inputs are expected to be formatted as a dict.
                The keys will correspond to the named-arguments in the tool.
            **kwargs: The keyword arguments to pass to the event handler

        Returns:
            The callback manager for the tool run.

        on_tool_startr  )r@   rU   rA   rB   r=   r   )
r(   r   rS   rU   rA   rB   r3  rT   rH   rI   )r   rU  	input_strr@   rU   r=   rq   s          r;   rb  zCallbackManager.on_tool_start  s    : >WFMM	
 ,,]]	
 	
 )]]!%!:!:,,!22]]!%!:!:	
 		
r:   c           
     F   |
t               }t        | j                  dd||f|| j                  | j                  | j
                  d| t        || j                  | j                  | j                  | j                  | j                  | j
                  | j                        S )ah  Run when the retriever starts running.

        Args:
            serialized: The serialized retriever.
            query: The query.
            run_id: The ID of the run.
            parent_run_id: The ID of the parent run.
            **kwargs: Additional keyword arguments.

        Returns:
            The callback manager for the retriever run.
        on_retriever_startrE  rS  r   )
r(   r   rS   rU   rA   rB   rB  rT   rH   rI   r   rU  queryr@   rU   rq   s         r;   re  z"CallbackManager.on_retriever_start  s    * >WFMM 	
 ,,]]	
 	
 .]]!%!:!:,,!22]]!%!:!:	
 		
r:   c           
         | j                   sy|rd}t        |      |
t               }t        | j                   dd|||| j                  | j
                         ya  Dispatch an adhoc event to the handlers (async version).

        This event should NOT be used in any internal LangChain code. The event
        is meant specifically for users of the library to dispatch custom
        events that are tailored to their application.

        Args:
            name: The name of the adhoc event.
            data: The data for the adhoc event.
            run_id: The ID of the run.

        Raises:
            ValueError: If additional keyword arguments are passed.
        NzThe dispatcher API does not accept additional keyword arguments.Please do not pass any additional keyword arguments, instead include them in the data field.on_custom_eventignore_custom_event)r@   rA   rB   )rS   
ValueErrorr(   r   rA   rB   r   rJ   datar@   rq   msgs         r;   rj  zCallbackManager.on_custom_event  s_    * }}2 
 S/!>WFMM!]]		
r:   c           
     (    t        | |||||||      S )a  Configure the callback manager.

        Args:
            inheritable_callbacks: The inheritable callbacks.
            local_callbacks: The local callbacks.
            verbose: Whether to enable verbose mode.
            inheritable_tags: The inheritable tags.
            local_tags: The local tags.
            inheritable_metadata: The inheritable metadata.
            local_metadata: The local metadata.

        Returns:
            The configured callback manager.
        verbose
_configurer   rG   local_callbacksrr  rH   
local_tagsrI   local_metadatas           r;   rO   zCallbackManager.configureJ  )    2 ! 	
 		
r:   r8   )
rU  dict[str, Any]rV  	list[str]r@   r   rq   r   rw   list[CallbackManagerForLLMRun])
rU  rz  r]  list[list[BaseMessage]]r@   r   rq   r   rw   r|  )
rU  r   r=   r&  r@   r   rq   r   rw   r  )NNN)rU  r   rc  r   r@   r   rU   r   r=   r   rq   r   rw   r3  NN)rU  r   rg  r   r@   r   rU   r   rq   r   rw   rB  
rJ   r   rn  r   r@   r   rq   r   rw   r   NNFNNNN)rG   r   rv  r   rr  boolrH   r   rw  r   rI   r   rx  r   rw   rN   )r   r   r   r   r~   r|   rP   r   rb  re  rj  r   rO   r9   r:   r;   rN   rN     s%   ) #	1"1 1 	1
 1 
(1n #	4"4 *4 	4
 4 
(4t #	+
)+
 %+
 	+

 +
 
$+
Z 
 #%)(,6
)6
 6
 	6

 #6
 &6
 6
 
#6
 6
p 
 #%)-
)-
 -
 	-

 #-
 -
 
(-
 -
f #	*
*
 *
 	*

 *
 
*
X  ,0%)-1'+6:04!
(!
 #!
 	!

 +!
 %!
 4!
 .!
 
!
 !
r:   rN   c                       e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 	 	 d fdZed	d       Z	 	 	 	 	 	 d
dZddZ	 	 	 	 	 	 ddZ	 xZ
S )rR   z%Callback manager for the chain group.c               F    t        |   |||fi | || _        d| _        y)aJ  Initialize the callback manager.

        Args:
            handlers: The list of handlers.
            inheritable_handlers: The list of inheritable handlers.
            parent_run_id: The ID of the parent run.
            parent_run_manager: The parent run manager.
            **kwargs: Additional keyword arguments.

        FNsuperr   rM   rV   r   rS   rT   rU   rM   rq   r   s         r;   r   z%CallbackManagerForChainGroup.__init__r  s6    & 	 	
 		
 #5
r:   c           
     |   | j                  | j                  j                         | j                  j                         | j                  | j
                  j                         | j                  j                         | j                  j                         | j                  j                         | j                        S )NrS   rT   rU   rA   rH   rB   rI   rM   
r   rS   copyrT   rU   rA   rH   rB   rI   rM   r   s    r;   r  z!CallbackManagerForChainGroup.copy      ~~]]'')!%!:!:!?!?!A,,!!22779]]'')!%!:!:!?!?!A#66  	
 		
r:   c                   | j                  | j                  xs |j                  g g t        t        | j                  |j                  z               t        t        | j
                  |j
                  z               i | j                  |j                  | j                        }| j                  |j                  z   }| j                  |j                  z   }|D ]  }|j                  |        |D ]  }|j                  |d        |S )a  Merge the group callback manager with another callback manager.

        Overwrites the merge method in the base class to ensure that the
        parent run manager is preserved. Keeps the parent_run_manager
        from the current object.

        Returns:
            A copy of the current object with the handlers, tags, and other attributes
            merged from the other object.

        Example: Merging two callback managers.

            ```python
            from langchain_core.callbacks.manager import (
                CallbackManager,
                trace_as_chain_group,
            )
            from langchain_core.callbacks.stdout import StdOutCallbackHandler

            manager = CallbackManager(handlers=[StdOutCallbackHandler()], tags=["tag2"])
            with trace_as_chain_group("My Group Name", tags=["tag1"]) as group_manager:
                merged_manager = group_manager.merge(manager)
                print(type(merged_manager))
                # <class 'langchain_core.callbacks.manager.CallbackManagerForChainGroup'>

                print(merged_manager.handlers)
                # [
                #    <langchain_core.callbacks.stdout.LangChainTracer object at ...>,
                #    <langchain_core.callbacks.streaming_stdout.StdOutCallbackHandler object at ...>,
                # ]

                print(merged_manager.tags)
                #    ['tag2', 'tag1']
            ```
        rU   rS   rT   rA   rH   rB   rM   Tr   r   rU   listsetrA   rH   rB   rM   rS   rT   add_handlerr   otherr   rS   rT   r   s         r;   mergez"CallbackManagerForChainGroup.merge  s   L ..,,C0C0C!#c$))ejj012!#d&;&;e>T>T&T"UV--..  $66 ! 
 ==5>>1#885;U;UU 	)G(	) , 	7G6	7r:   c                J    d| _          | j                  j                  |fi |S )zRun when traced chain group ends.

        Args:
            outputs: The outputs of the chain.
            **kwargs: Additional keyword arguments.

        TrV   rM   rW   r  s      r;   rW   z)CallbackManagerForChainGroup.on_chain_end  s)     
3t&&33GFvFFr:   c                J    d| _          | j                  j                  |fi |S )r  TrV   rM   rY   r  s      r;   rY   z+CallbackManagerForChainGroup.on_chain_error  s)     
5t&&55eFvFFr:   r~  )rS   r   rT    list[BaseCallbackHandler] | NonerU   r   rM   r  rq   r   rw   r   )rw   rR   )r   rR   r  r   rw   rR   r%  r  )r   r   r   r   r   r   r  r  rW   rY   __classcell__r   s   @r;   rR   rR   o  s    /
 BF%)	+ ? #	 7  
8 

 

;*;3F;	%;z	GGG G 
	Gr:   rR   c                  6   e Zd ZdZedd       Z	 d	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZe		 	 d	 	 	 	 	 	 	 	 	 	 	 dd       Z
	 d	 	 	 	 	 	 	 	 	 ddZe		 	 d	 	 	 	 	 	 	 	 	 	 	 dd	       Ze	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
       Zy)rd   z=Async callback manager that handles callbacks from LangChain.c                     y)z$Return whether the handler is async.Tr9   r   s    r;   is_asynczAsyncCallbackManager.is_async  s     r:   Nc                >  K   g }g }| j                   D cg c]  }|j                  s| }}| j                   D cg c]  }|j                  r| }	}g }
|D ]  }||}d}n
t               }|rD|j                  t	        |dd||gf|| j
                  | j                  | j                  d|       nC|j                  t	        |	dd||gf|| j
                  | j                  | j                  d|       |
j                  t        || j                   | j                  | j
                  | j                  | j                  | j                  | j                                |D ]  }| d{     |rt        j                  |  d{    |
S c c}w c c}w 7 .7 w)ag  Run when LLM starts running.

        Args:
            serialized: The serialized LLM.
            prompts: The list of prompts.
            run_id: The ID of the run.
            **kwargs: Additional keyword arguments.

        Returns:
            The list of async callback managers, one for each LLM Run corresponding to
            each prompt.
        Nr~   r   rS  r   )rS   r   r(   r   r   rU   rA   rB   r
  rT   rH   rI   rl   r   )r   rU  rV  r@   rq   inline_tasksnon_inline_tasksr   inline_handlersnon_inline_handlersrW  rY  rZ  inline_tasks                 r;   r~   z!AsyncCallbackManager.on_llm_start  s    & 26--Vw7CUCU7VV#'==
8J8JG
 
  1	F! '##!'&$"  '&*&8&8!YY!% ! !''!+&$"  '&*&8&8!YY!% ! OO-"!]])-)B)B"&"4"4%)%:%:!]])-)B)B	M1	h ( 	K	 .."2333C W
t  4sD   FFFFFFDF*F+FF	FFc                f  K   g }g }g }|D ]  }||}	d}n
t               }	| j                  D ]f  }
t        |
gdd||gf|	| j                  | j                  | j
                  d|}|
j                  r|j                  |       V|j                  |       h |j                  t        |	| j                  | j                  | j                  | j                  | j                  | j
                  | j                                |D ]  }| d{     |rt        j                  |  d{    |S 7 $7 w)a|  Async run when LLM starts running.

        Args:
            serialized: The serialized LLM.
            messages: The list of messages.
            run_id: The ID of the run.
            **kwargs: Additional keyword arguments.

        Returns:
            The list of async callback managers, one for each LLM Run corresponding to
            each inner  message list.
        Nr|   r\  rS  r   )r(   rS   r   rU   rA   rB   r   r   r
  rT   rH   rI   rl   r   )r   rU  r]  r@   rq   r  r  rW  r^  rZ  r   rt   s               r;   r|   z(AsyncCallbackManager.on_chat_model_startS  sS    & $ $	L! '== 2$I)'!N #"&"4"4!]]  %% ''-$++D1!2$ OO-"!]])-)B)B"&"4"4%)%:%:!]])-)B)B	3$	N ! 	DJJ	 .."2333  4s$   DD1D-	D1&D/'D1/D1c           
     b  K   |
t               }t        | j                  dd||f|| j                  | j                  | j
                  d| d{    t        || j                  | j                  | j                  | j                  | j                  | j
                  | j                        S 7 ]w)a>  Async run when chain starts running.

        Args:
            serialized: The serialized chain.
            inputs: The inputs to the chain.
            run_id: The ID of the run.
            **kwargs: Additional keyword arguments.

        Returns:
            The async callback manager for the chain run.
        NrP   r  rS  r   )
r(   r   rS   rU   rA   rB   r*  rT   rH   rI   r`  s        r;   rP   z#AsyncCallbackManager.on_chain_start  s     $ >WFMM
 ,,]]
 
 	
 	
 /]]!%!:!:,,!22]]!%!:!:	
 		
	
   AB/B-AB/c           
     b  K   |
t               }t        | j                  dd||f|| j                  | j                  | j
                  d| d{    t        || j                  | j                  | j                  | j                  | j                  | j
                  | j                        S 7 ]w)ao  Run when the tool starts running.

        Args:
            serialized: The serialized tool.
            input_str: The input to the tool.
            run_id: The ID of the run.
            parent_run_id: The ID of the parent run.
            **kwargs: Additional keyword arguments.

        Returns:
            The async callback manager for the tool run.
        Nrb  r  rS  r   )
r(   r   rS   rU   rA   rB   r=  rT   rH   rI   )r   rU  rc  r@   rU   rq   s         r;   rb  z"AsyncCallbackManager.on_tool_start  s     * >WFMM
 ,,]]
 
 	
 	
 .]]!%!:!:,,!22]]!%!:!:	
 		
	
r  c           
        K   | j                   sy|
t               }|rd}t        |      t        | j                   dd|||| j                  | j
                         d{    y7 wri  )rS   r(   rl  r   rA   rB   rm  s         r;   rj  z$AsyncCallbackManager.on_custom_event  sm     * }}>WF2 
 S/!MM!]]	
 		
 		
s   AA'A% A'c           
     b  K   |
t               }t        | j                  dd||f|| j                  | j                  | j
                  d| d{    t        || j                  | j                  | j                  | j                  | j                  | j
                  | j                        S 7 ]w)an  Run when the retriever starts running.

        Args:
            serialized: The serialized retriever.
            query: The query.
            run_id: The ID of the run.
            parent_run_id: The ID of the parent run.
            **kwargs: Additional keyword arguments.

        Returns:
            The async callback manager for the retriever run.
        Nre  rE  rS  r   )
r(   r   rS   rU   rA   rB   rM  rT   rH   rI   rf  s         r;   re  z'AsyncCallbackManager.on_retriever_start#  s     * >WFMM 
 ,,]]
 
 	
 	
 3]]!%!:!:,,!22]]!%!:!:	
 		
	
r  c           
     (    t        | |||||||      S )a  Configure the async callback manager.

        Args:
            inheritable_callbacks: The inheritable callbacks.
            local_callbacks: The local callbacks.
            verbose: Whether to enable verbose mode.
            inheritable_tags: The inheritable tags.
            local_tags: The local tags.
            inheritable_metadata: The inheritable metadata.
            local_metadata: The local metadata.

        Returns:
            The configured async callback manager.
        rq  rs  ru  s           r;   rO   zAsyncCallbackManager.configureS  ry  r:   rw   r  r8   )
rU  rz  rV  r{  r@   r   rq   r   rw   #list[AsyncCallbackManagerForLLMRun])
rU  rz  r]  r}  r@   r   rq   r   rw   r  )
rU  r   r=   r&  r@   r   rq   r   rw   r*  r~  )rU  r   rc  r   r@   r   rU   r   rq   r   rw   r=  r  )rU  r   rg  r   r@   r   rU   r   rq   r   rw   rM  r  )rG   r   rv  r   rr  r  rH   r   rw  r   rI   r   rx  r   rw   rd   )r   r   r   r   propertyr  r~   r|   rP   r   rb  rj  re  r   rO   r9   r:   r;   rd   rd     s6   G  #	V"V V 	V
 V 
-Vx #	E"E *E 	E
 E 
-EV #	+
)+
 %+
 	+

 +
 
)+
Z 
 #%)-
)-
 -
 	-

 #-
 -
 
(-
 -
f #	*
*
 *
 	*

 *
 
*
X 
 #%)-
)-
 -
 	-

 #-
 -
 
--
 -
^  ,0%)-1'+6:04!
(!
 #!
 	!

 +!
 %!
 4!
 .!
 
!
 !
r:   rd   c                  x     e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 	 	 d fdZd	dZ	 	 	 	 	 	 d
dZddZ	 	 	 	 	 	 ddZ xZ	S )re   z+Async callback manager for the chain group.c               F    t        |   |||fi | || _        d| _        y)aO  Initialize the async callback manager.

        Args:
            handlers: The list of handlers.
            inheritable_handlers: The list of inheritable handlers.
            parent_run_id: The ID of the parent run.
            parent_run_manager: The parent run manager.
            **kwargs: Additional keyword arguments.
        FNr  r  s         r;   r   z*AsyncCallbackManagerForChainGroup.__init__{  s6    $ 	 	
 		
 #5
r:   c           
     |   | j                  | j                  j                         | j                  j                         | j                  | j
                  j                         | j                  j                         | j                  j                         | j                  j                         | j                        S )z)Return a copy the async callback manager.r  r  r   s    r;   r  z&AsyncCallbackManagerForChainGroup.copy  r  r:   c                   | j                  | j                  xs |j                  g g t        t        | j                  |j                  z               t        t        | j
                  |j
                  z               i | j                  |j                  | j                        }| j                  |j                  z   }| j                  |j                  z   }|D ]  }|j                  |        |D ]  }|j                  |d        |S )a  Merge the group callback manager with another callback manager.

        Overwrites the merge method in the base class to ensure that the
        parent run manager is preserved. Keeps the parent_run_manager
        from the current object.

        Returns:
            A copy of the current AsyncCallbackManagerForChainGroup
            with the handlers, tags, etc. of the other callback manager merged in.

        Example: Merging two callback managers.

            ```python
            from langchain_core.callbacks.manager import (
                CallbackManager,
                atrace_as_chain_group,
            )
            from langchain_core.callbacks.stdout import StdOutCallbackHandler

            manager = CallbackManager(handlers=[StdOutCallbackHandler()], tags=["tag2"])
            async with atrace_as_chain_group(
                "My Group Name", tags=["tag1"]
            ) as group_manager:
                merged_manager = group_manager.merge(manager)
                print(type(merged_manager))
                # <class 'langchain_core.callbacks.manager.AsyncCallbackManagerForChainGroup'>

                print(merged_manager.handlers)
                # [
                #    <langchain_core.callbacks.stdout.LangChainTracer object at ...>,
                #    <langchain_core.callbacks.streaming_stdout.StdOutCallbackHandler object at ...>,
                # ]

                print(merged_manager.tags)
                #    ['tag2', 'tag1']
            ```
        r  Tr   r  r  s         r;   r  z'AsyncCallbackManagerForChainGroup.merge  s   P ..,,C0C0C!#c$))ejj012!#d&;&;e>T>T&T"UV--..  $66 ! 
 ==5>>1#885;U;UU 	)G(	) , 	7G6	7r:   c                h   K   d| _          | j                  j                  |fi | d{    y7 w)zRun when traced chain group ends.

        Args:
            outputs: The outputs of the chain.
            **kwargs: Additional keyword arguments.
        TNr  r  s      r;   rW   z.AsyncCallbackManagerForChainGroup.on_chain_end  s0      
2d%%227EfEEE   (202c                h   K   d| _          | j                  j                  |fi | d{    y7 w)zRun when chain errors.

        Args:
            error: The error.
            **kwargs: Additional keyword arguments.
        TNr  r  s      r;   rY   z0AsyncCallbackManagerForChainGroup.on_chain_error  s0      
4d%%44UEfEEEr  r~  )rS   r   rT   r  rU   r   rM   r*  rq   r   rw   r   )rw   re   )r   re   r  r   rw   re   r%  r  )
r   r   r   r   r   r  r  rW   rY   r  r  s   @r;   re   re   x  s    5
 BF%)	+ ? #	 <  
6
=/=8K=	*=~FFF F 
	Fr:   re   TFrq  c          
     	   t               }|d   }	|d   }
|d   }|dn|j                  } | g |      }|s|rFt        |t              s|.|xs g } | |j	                         |j	                         |      }n|j
                  }|||rt        |      |j                  v r|} | |j                  j	                         |j                  j	                         ||j                  j	                         |j                  j	                         |j                  j	                         |j                  j	                               }t        |t              r|n|r|j                  ng }|D ]  }|j                  |d	        |s|r,|j                  |xs g        |j                  |xs g d	       |s|r,|j!                  |xs i        |j!                  |xs i d	       |	r|j!                  |	j	                                |
r|j                  |
j	                                t#        d
      xs t#        d      }t%        j&                         }t)               }|r|sd}t+        |      t-               }t/               }|s|s|rK|r:t1        d |j                  D              s|rn|j                  t3               d	       |r5t1        d |j                  D              s|j                  t5                      |rat1        d |j                  D              sE|r|j                  |       n1	 t7        |||j8                  n|d   |
      }|j                  |       |s|j                  D ]d  }t        |t6              s|jB                  |j                  f|jD                  |j                  <   ||jF                  t        |j                        <   f tH        D ]  \  }}}|duxr t#        |      xr du}|j'                         |s2|j'                         xs  tK        d             2t1        fd|j                  D              rv|j                  |       t1        fd|j                  D              r|j                  |        |S # t:        $ r*}t<        j?                  dtA        |             Y d}~gd}~ww xY w)aU  Configure the callback manager.

    Args:
        callback_manager_cls: The callback manager class.
        inheritable_callbacks: The inheritable callbacks.
        local_callbacks: The local callbacks.
        inheritable_tags: The inheritable tags.
        local_tags: The local tags.
        inheritable_metadata: The inheritable metadata.
        local_metadata: The local metadata.
        verbose: Whether to enable verbose mode.

    Raises:
        RuntimeError: If `LANGCHAIN_TRACING` is set but `LANGCHAIN_TRACING_V2` is not.

    Returns:
        The configured callback manager.
    rB   rA   parentNr   )rS   rT   rU   )rS   rT   rU   rA   rH   rB   rI   Fr   LANGCHAIN_TRACINGLANGCHAIN_HANDLERzTracing using LangChainTracerV1 is no longer supported. Please set the LANGCHAIN_TRACING_V2 environment variable to enable tracing instead.c              3  <   K   | ]  }t        |t                y wr8   )
isinstancer   r   r   s     r;   r   z_configure.<locals>.<genexpr>g	  s       
 w 56
   c              3  <   K   | ]  }t        |t                y wr8   )r  r%   r  s     r;   r   z_configure.<locals>.<genexpr>o	  s       
 w 67
r  c              3  <   K   | ]  }t        |t                y wr8   )r  r$   r  s     r;   r   z_configure.<locals>.<genexpr>t	  s      +
 w0+
r  client)r>   r  rA   z{Unable to load requested LangChainTracer. To disable this warning, unset the LANGCHAIN_TRACING_V2 environment variables.
%sztype[BaseCallbackHandler]c              3  &   K   | ]  }|u  
 y wr8   r9   )r   r   var_handlers     r;   r   z_configure.<locals>.<genexpr>	  s       {*s   c              3  6   K   | ]  }t        |        y wr8   )r  )r   r   handler_classs     r;   r   z_configure.<locals>.<genexpr>	  s        7M2s   )&r   idr  r  r  rU   r   dotted_orderrS   rT   rA   rH   rB   rI   r  r   r   r&   r#   getr"   r   r!   r<   anyr   r%   r$   r  rX   r   r   r   trace_id	order_maprun_mapr   r   )callback_manager_clsrG   rv  rH   rw  rI   rx  rr  tracing_contexttracing_metadatatracing_tagsrun_treerU   rE   inheritable_callbacks_parent_run_id_local_handlers_r   v1_tracing_enabled_	tracer_v2tracing_v2_enabled_ro  tracer_projectdebugra   varinheritableenv_var
create_oner  r  s                                @@r;   rt  rt    s   : *+O&z2"6*L*84H$,D(++M+# +T26K6S%:%@b"3/446%;%@%@%B+  3@@N(& ^!48M8M!M!.  4.77<<>%:%O%O%T%T%V,*//446!6!G!G!L!L!N.77<<>%:%O%O%T%T%V  /40 .=/**2 	
 ' 	AG((%(@	A:!!"2"8b9!!*"2E!B~%%&:&@bA%%n&:E%J%%&6&;&;&=>!!,"3"3"56()<= B (++-I02#6 	
 3(*NLE%.3 
+44
 
  ,,-B-De,T 
+44
 
 (()?)ABs +
+44+
 (
  ,,Y7-%3  (3 %OO!0!:)G %009 +44 Ag7 )) --6G%%hkk2 9AGOOC$45A 5E G0[-4 *w'*T) 	
 779 J	OMT"=}MO  $ #3#<#<  %00kJ /88  !,,[+F)G* K ! NN Q s   +0R 	SSS)configc                  K   ddl m}m}  ||      } ||      }|j                  d}t	        |      |j                  | ||j                         d{    y7 w)a  Dispatch an adhoc event to the handlers.

    Args:
        name: The name of the adhoc event.
        data: The data for the adhoc event. Free form data. Ideally should be
            JSON serializable to avoid serialization issues downstream, but
            this is not enforced.
        config: Optional config object. Mirrors the async API but not strictly needed.

    Raises:
        RuntimeError: If there is no parent run ID available to associate
            the event with.

    Example:
        ```python
        from langchain_core.callbacks import (
            AsyncCallbackHandler,
            adispatch_custom_event
        )
        from langchain_core.runnable import RunnableLambda

        class CustomCallbackManager(AsyncCallbackHandler):
            async def on_custom_event(
                self,
                name: str,
                data: Any,
                *,
                run_id: UUID,
                tags: list[str] | None = None,
                metadata: dict[str, Any] | None = None,
                **kwargs: Any,
            ) -> None:
                print(f"Received custom event: {name} with data: {data}")

        callback = CustomCallbackManager()

        async def foo(inputs):
            await adispatch_custom_event("my_event", {"bar": "buzz})
            return inputs

        foo_ = RunnableLambda(foo)
        await foo_.ainvoke({"a": "1"}, {"callbacks": [CustomCallbackManager()]})
        ```

    Example: Use with astream events

        ```python
        from langchain_core.callbacks import (
            AsyncCallbackHandler,
            adispatch_custom_event
        )
        from langchain_core.runnable import RunnableLambda

        class CustomCallbackManager(AsyncCallbackHandler):
            async def on_custom_event(
                self,
                name: str,
                data: Any,
                *,
                run_id: UUID,
                tags: list[str] | None = None,
                metadata: dict[str, Any] | None = None,
                **kwargs: Any,
            ) -> None:
                print(f"Received custom event: {name} with data: {data}")

        callback = CustomCallbackManager()

        async def foo(inputs):
            await adispatch_custom_event("event_type_1", {"bar": "buzz})
            await adispatch_custom_event("event_type_2", 5)
            return inputs

        foo_ = RunnableLambda(foo)

        async for event in foo_.ainvoke_stream(
            {"a": "1"},
            version="v2",
            config={"callbacks": [CustomCallbackManager()]}
        ):
            print(event)
        ```

    !!! warning
        If using python <= 3.10 and async, you MUST
        specify the `config` parameter or the function will raise an error.
        This is due to a limitation in asyncio for python <= 3.10 that prevents
        LangChain from automatically propagating the config object on the user's
        behalf.
    r   )ensure_config%get_async_callback_manager_for_configN&  Unable to dispatch an adhoc event without a parent run id.This function can only be called from within an existing run (e.g.,inside a tool or a RunnableLambda or a RunnableGenerator.)If you are doing that and still seeing this error, try explicitlypassing the config parameter to this function.rK   )langchain_core.runnables.configr  r  rU   r   rj  )rJ   rn  r  r  r  rE   ro  s          r;   adispatch_custom_eventr  	  st     |
 6"F<VD
 %%-= 	 3

*
*-- +   s   AAAAc                   ddl m}m}  ||      } ||      }|j                  d}t	        |      |j                  | ||j                         y)ad  Dispatch an adhoc event.

    Args:
        name: The name of the adhoc event.
        data: The data for the adhoc event. Free form data. Ideally should be
            JSON serializable to avoid serialization issues downstream, but
            this is not enforced.
        config: Optional config object. Mirrors the async API but not strictly needed.

    Raises:
        RuntimeError: If there is no parent run ID available to associate
            the event with.

    Example:
        ```python
        from langchain_core.callbacks import BaseCallbackHandler
        from langchain_core.callbacks import dispatch_custom_event
        from langchain_core.runnable import RunnableLambda

        class CustomCallbackManager(BaseCallbackHandler):
            def on_custom_event(
                self,
                name: str,
                data: Any,
                *,
                run_id: UUID,
                tags: list[str] | None = None,
                metadata: dict[str, Any] | None = None,
                **kwargs: Any,
            ) -> None:
                print(f"Received custom event: {name} with data: {data}")

        def foo(inputs):
            dispatch_custom_event("my_event", {"bar": "buzz})
            return inputs

        foo_ = RunnableLambda(foo)
        foo_.invoke({"a": "1"}, {"callbacks": [CustomCallbackManager()]})
        ```
    r   )r  get_callback_manager_for_configNr  rK   )r  r  r  rU   r   rj  )rJ   rn  r  r  r  rE   ro  s          r;   dispatch_custom_eventr  (
  sf    X
 6"F6v>
 %%-= 	 3$$-- % r:   r}   )maxsizec                 `    t        d      } t        j                  | j                  d       | S )N
   )max_workersT)r   )r   atexitregistershutdown)cuties    r;   r   r   o
  s%     2.E
OOENN.Lr:   r  r8   )r[   r   rE   zCallbackManager | Noner=   r   r>   r   r?   str | UUID | Noner@   r   rA   r   rB   r   rw   z3Generator[CallbackManagerForChainGroup, None, None])r[   r   rE   zAsyncCallbackManager | Noner=   r   r>   r   r?   r  r@   r   rA   r   rB   r   rw   z7AsyncGenerator[AsyncCallbackManagerForChainGroup, None])ru   rg   rw   rg   )rS   r   r   r   r   r   rp   r   rq   r   rw   r   )r   zlist[Coroutine[Any, Any, Any]]rw   r   )r   r   r   r   r   r   rp   r   rq   r   rw   r   )NNNNNN)r  ztype[T]rG   r   rv  r   rH   r   rw  r   rI   r   rx  r   rr  r  rw   r  )rJ   r   rn  r   r  zRunnableConfig | Nonerw   r   )rw   r   )sr   
__future__r   rl   r  rx   loggingabcr   r   collections.abcr   concurrent.futuresr   
contextlibr   r	   contextvarsr
   typingr   r   r   r   langsmith.run_helpersr   typing_extensionsr   r   langchain_core.callbacks.baser   r   r   r   r   r   r   r   langchain_core.callbacks.stdoutr   langchain_core.globalsr   langchain_core.messagesr   r   langchain_core.tracers.contextr   r    r!   r"   r#    langchain_core.tracers.langchainr$   langchain_core.tracers.stdoutr%   langchain_core.utils.envr&   langchain_core.utils.uuidr(   r)   r*   r+   r,   uuidr-   tenacityr.   langchain_core.agentsr/   r0   langchain_core.documentsr1   langchain_core.outputsr2   r3   r4   r  r5   langchain_core.tracers.schemasr6   	getLoggerr   r   r<   rb   rf   rg   rz   r   r   r   r   r   r   r   r   r   r   r
  r  r*  r3  r=  rB  rM  rN   rR   rd   re   r  rt  r  r  	lru_cacher   r9   r:   r;   <module>r     s    "     # $ 1 : $ 4 4 5 ,	 	 	 B , B  = @ 3 +NN'>1VV>2			8	$  04G) %)#$(!&*G)G),G) "	G)
 G) "G) G) G) $G) 9G) G)T  59J/ %)#$(!&*J/J/1J/ "	J/
 J/ "J/ J/ J/ $J/ =J/ J/Z vX& !FS"'S"S" &S" 	S"
 S" 
S"lK:1 11 &1 	1
 1 
1h%'%% &% 	%
 % 
%P5
_ 5
p2
 2
jz ,;
nc ;
|O ,M
z? M
`d
O_ d
NW
!13D W
tj
&;=N j
Z3
 02B 3
l@
%:<L @
F3
%57L 3
lH
H
VP
) P
f
AG? AGHB
. B
J@F(< @FF C"67
 (,!%)-#'26,0m m!m$m m '	m
 !m 0m *m m mb >Bw
ww%:w	wv >BD
DD%:D	DN Q  r:   