
    i                     f    d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ  G d d	e	      Zy)
zRExecutor for subgraph nodes.

Runs nested graph nodes inside the parent workflow.
    )ListN)Node)SubgraphConfig)NodeExecutor)MessageMessageRolec                   H     e Zd ZdZdef fdZdedee   dee   fdZ	 xZ
S )SubgraphNodeExecutorzeSubgraph node executor.
    
    Note: this executor needs access to ``GraphContext.subgraphs``.
    	subgraphsc                 2    t         |   |       || _        y)zInitialize the executor.
        
        Args:
            context: Execution context
            subgraphs: Mapping from node_id to ``GraphContext``
        N)super__init__r   )selfcontextr   	__class__s      T/Users/bowang/.openclaw/workspace/ChatDev/runtime/node/executor/subgraph_executor.pyr   zSubgraphNodeExecutor.__init__   s     	!"    nodeinputsreturnc           	         |j                   dk7  rt        d|j                   d      |j                  t              }|st        d|j                   d      | j                  |      }|s#| j                  t        j                  dd      g}| j                  |      }| j                  j                  d|j                   |j                  t        t        |            |d	
       |j                  | j                  vrt        d|j                   d      | j                  |j                     }t        j                   |      }ddlm} |j'                  ||      }|j)                         }	g }
|	s>| j                  t        j*                  d|j                        }|
j-                  |       n`|	D ][  }|j/                         }t1        |j2                        }|j5                  d|j                         ||_        |
j-                  |       ] | j                  j                  d|j                   |j                  |j                  j7                         
       |
S )zExecute a subgraph node.
        
        Args:
            node: Subgraph node definition
            inputs: Input messages list
            
        Returns:
            Result produced by the subgraph
        subgraphzNode z is not a subgraph nodez has no subgraph configuration SUBGRAPH)sourcezSubgraph processing for node )
input_sizeinput_result)node_iddetailszSubgraph for node z
 not foundr   )GraphExecutor)task_promptr   z'Subgraph processing completed for node )	node_type
ValueErrorid	as_configr   _clone_messages_build_messager   USER_inputs_to_textlog_managerdebuglenstrr   copydeepcopyworkflow.graphr    execute_graphget_final_output_messages	ASSISTANTappendclonedictmetadata
setdefaultlogs_to_dict)r   r   r   subgraph_configtask_payload
input_datar   r    executorresult_messagesfinal_resultsfallbackmsgresult_messagemetas                  r   executezSubgraphNodeExecutor.execute   s$    >>Z'uTWWI-DEFF..8uTWWI-KLMM&*&:&:6&B //0@0@"Z/XYL)),7
+DGG95GG!#j/2 * 	 	
 77$..(1$''*EFF>>$''*
 ==* 	1 ..x\.R"<<>**%%ww + H
   *&!$N334$''2*.'$$^4 ' 	5dggY?GG((557 	 	
 r   )__name__
__module____qualname____doc__r6   r   r   r   r   rD   __classcell__)r   s   @r   r
   r
      s:    
#4 #HD H$w- HDM Hr   r
   )rH   typingr   r.   entity.configsr   entity.configs.node.subgraphr   runtime.node.executor.baser   entity.messagesr   r   r
    r   r   <module>rP      s,   
    7 3 0X< Xr   