
    bi
                    l    d Z ddlmZ ddlZddlmZmZ  ej                  e      Z	 G d d      Z
ddZy)	z>Recursive callback injection for Google ADK agent hierarchies.    )annotationsN)AnyCallablec                  @    e Zd ZdZd	dZd
dZddZddZddZddZ	y)RecursiveCallbackInjectorz4Inject callbacks into agent hierarchies recursively.c                0    || _         t               | _        y N)
_callbacksset	_seen_ids)self	callbackss     v/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/langsmith/integrations/google_adk/_recursive.py__init__z"RecursiveCallbackInjector.__init__   s    ##&5    c                &    | j                  |       y r	   )_process_agent)r   
root_agents     r   injectz RecursiveCallbackInjector.inject   s    J'r   c                    t        |      }|| j                  v ry | j                  j                  |       | j                  |       | j	                  |       | j                  |       y r	   )idr   add_add_callbacks_process_sub_agents_process_tools)r   agentagent_ids      r   r   z(RecursiveCallbackInjector._process_agent   sV    e9t~~%8$E"  'E"r   c                z   | j                   j                         D ]m  \  }}	 t        ||d       }|t        |||       nJt	        |t
              r|j                  |       n(t        |      rt        ||||g       nt        |||       o y # t        $ r%}t        j                  d| d|        Y d }~d }~ww xY w)NzFailed to inject callback z: )r
   itemsgetattrsetattr
isinstancelistappendcallable	Exceptionloggerdebug)r   r   namecallbackcurrentes         r   r   z(RecursiveCallbackInjector._add_callbacks   s    "oo335 	GND(G!%t4?E42.NN8,g&E4'8)<=E42	G  G9$r!EFFGs   A'B	B:B55B:c                X    t        |dd       xs g D ]  }|| j                  |        y )N
sub_agentsr    r   )r   r   	sub_agents      r   r   z-RecursiveCallbackInjector._process_sub_agents.   s3     d;Ar 	/I$##I.	/r   c                    t        |dd       xs g D ]O  }|t        |dd       x}r| j                  |       t        |dd       xs g D ]  }|| j                  |        Q y )Ntoolsr   r.   r/   )r   r   toolnestedsubs        r   r   z(RecursiveCallbackInjector._process_tools3   sy    E7D17R 	-D| w55v5##F+t\48>B -?'',-	-r   N)r   dict[str, Callable[..., Any]])r   r   returnNone)r   r   r7   r8   )
__name__
__module____qualname____doc__r   r   r   r   r   r    r   r   r   r      s$    >)(#G/
-r   r   c                 (    ddl m} m}m}m} || ||dS )zKGet LangSmith tracing callbacks (agent + tool only; LLM uses flow wrapper).   after_agent_callbackafter_tool_callbackbefore_agent_callbackbefore_tool_callback)rC   rA   rD   rB   )_hooksrA   rB   rC   rD   r@   s       r   get_callbacksrF   >   s$      "7 4 42	 r   )r7   r6   )r<   
__future__r   loggingtypingr   r   	getLoggerr9   r'   r   rF   r=   r   r   <module>rK      s3    D "   			8	$0- 0-fr   