
    i!                        d 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mZ ddl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 eegef   Z e
dd      Z ed       G d d             Z G d de	e   e      Z y)zIEdgeConditionManager abstraction that unifies edge condition compilation.    )ABCabstractmethod)	dataclass)AnyCallableGenericTypeVar)MessageMessageRole)ExecutionContext)
LogManager)get_server_logger)EdgeLinkNode)EdgeConditionTypeConfig)FunctionManagerTConfigr   )boundT)slotsc                   .    e Zd ZU dZdZded<   dZded<   y)ConditionFactoryContextz2Context passed to managers at initialization time.NzFunctionManager | Nonefunction_managerzLogManager | Nonelog_manager)__name__
__module____qualname____doc__r   __annotations__r        I/Users/bowang/.openclaw/workspace/ChatDev/runtime/edge/conditions/base.pyr   r      s    <15.5'+K$+r    r   c                      e Zd ZdZdedededdfdZedd	d
e	ddde
ddf
d       Zde	d
e	dddd	de
de	dz  fdZdededeeef   dd	d
e	ddde
ddfdZdedefdZ	 ddedededede	f
dZdedededede
ddfdZdedefdZy)EdgeConditionManagerzbAn abstract base class is required, and all edge condition types must implement the process logic.configctxexecution_contextreturnNc                 .    || _         || _        || _        y )N)r$   r%   r&   )selfr$   r%   r&   s       r!   __init__zEdgeConditionManager.__init__   s    !2r    	edge_linkr   source_result	from_noder   r   c                      y)z5The execution logic is implemented by the subclasses.Nr   )r)   r+   r,   r-   r   s        r!   processzEdgeConditionManager.process$   s    r    payloadc                   |j                   }|s|S 	 |j                  |||||| j                        S # t        $ r}d|j                   d|j
                  j                   d| }| j                  rV| j                  j                  r@| j                  j                  j                  |t        |dd       t        |di       d       t               }	|	j                  ||t        |dd       t        |di              |cY d }~S d }~ww xY w)	N)r,   r-   r+   r   contextz"Edge payload processor failed for z->z: process_typeprocess_metadata)processor_typeprocessor_metadatadetails)payload_processor	transformr&   	Exceptionidtargetr%   r   errorgetattrr   log_exception)
r)   r0   r,   r-   r+   r   	processorexc	error_msgserver_loggers
             r!   transform_payloadz&EdgeConditionManager.transform_payload.   s$    //	N	&&+##'.. '    	4Y\\N"YEUEUEXEXDYY[\_[`a  xxDHH00$$***1)^T*R.5iASUW.X +  ./M''&y.$G#*96H"#M	 (  N'	s    3 	DCD=DD	evaluatorlabelmetadatac          
      p   |j                   }|j                  |j                  |j                  |j                         | j	                  |      }		 t         ||	            }
|
s-|j                  d|j                   d|j                   d       y |j                  d	|j                   d|j                          | j                  |t        |d
d      t        |dd      ||       |j                  r| j!                  ||||j"                        }| j%                  |||||      }|,|j                  d|j                   d|j                          y |j&                  0t)        |j*                        }d|d<   |j                  |d<   ||_        |j-                  |       |j                  d|j                   d|j                   d| j/                  |       d       n,|j                  d|j                   d|j                   d       |j0                  r4d|_        |j                  d|j                   d|j                   d       y y # t        $ r^}d| d| }|j                  ||j                  |d       t               }|j                  |||j                  |       d}
Y d }~Od }~ww xY w)NzError calling condition 'z': )condition_typecondition_metadatar7   TzEdge condition not met for  -> z, skipping edge processingzEdge condition met for clear_contextFclear_kept_context)drop_non_keep	drop_keepr-   r   )r,   r-   r+   r   z+Payload processor dropped message for edge _from_dynamic_edge_dynamic_edge_sourcezData passed from z to z's input queue (type: )zEdge z, does not carry data, skipping data transferz
 triggered)r=   record_edge_processr<   r$   _payload_to_textboolr;   r>   rJ   r   r@   debuginfo_clear_target_contextr?   
carry_data_prepare_payload_for_targetkeep_messagerE   dynamic_configdictrH   append_input_describe_payloadtrigger	triggered)r)   rF   rG   rH   r+   r,   r-   r   target_nodeserialized_sourcecondition_metrB   rC   rD   r0   s                  r!   _process_with_conditionz,EdgeConditionManager._process_with_condition[   s     &&''	knniFVFVW 11-@	! +<!=>M& -ill^4?OOij 29<<.[^^DTUV""!)_eDi)=uE# 	# 	
 66}iQ\^g^t^tuG,,+##' - G !!A),,tT_TbTbScd  ''3 0 0115-.3<<</0#+ $$W-#ILL>knn5E F009:!=
 	~T+..)99ef "&Iill^47GzRS C  	!3E7#cUCI&/&>&>*2   ./M''(77#+	 (  !M!	!s   I 	J5AJ00J5c                 ^    t        |t              r|j                         S |yt        |      S )N )
isinstancer
   text_contentstrr)   r0   s     r!   rU   z%EdgeConditionManager._payload_to_text   s-    gw'''))?7|r    rc   keepc                    t        |t              s$t        t        j                  t	        |            }|j                         }|j                  s@|j                  |j                  k(  rt        j                  nt        j                  }||_	        t        |j                        }|j                  |d<   ||_        |rd|_        |S )N)rolecontentsourceT)ri   r
   r   	ASSISTANTrk   clonepreserve_roler<   USERro   r^   rH   rm   )r)   r0   r-   rc   rm   clonedcloned_rolerH   s           r!   r[   z0EdgeConditionManager._prepare_payload_for_target   s     '7+;#8#8#g,OG##3<<<;>>3Q+//WbWgWgK%FK(&\\"FKr    rO   rP   c                    |s|sy |j                  ||      \  }}|s|r3|j                  d|j                   d|j                   ||||d       y y )N)rO   rP   z Cleared target context for edge rL   )removed_non_keepremoved_keeprO   rP   r7   )clear_inputs_by_flagrW   r<   )r)   rc   rO   rP   r-   r   ry   rz   s           r!   rY   z*EdgeConditionManager._clear_target_context   sw     Y)4)I)I' *J *
&, |29<<.[^^DTU(8$0%2!*	    ,r    c                 ~    t        |t              rd|j                  j                   S t	        |      j
                  S )Nzmessage:)ri   r
   ro   valuetyper   rl   s     r!   r`   z&EdgeConditionManager._describe_payload   s4    gw'gll00122G}%%%r    )F)r   r   r   r   r   r   r   r*   r   r
   r   r/   rE   ConditionEvaluatorrk   r^   r   rf   rU   r   rV   r[   rY   r`   r   r    r!   r#   r#      s   l3w 3-D 3Yi 3nr 3
 DD D 	D
  D 
D D(( 	(
 ( (  ( 
4(ZTT%TT 	TT
 sCx.TT TT TT TT  TT 
TTl     	
  
( 	
     
4& & &r    r#   N)!r   abcr   r   dataclassesr   typingr   r   r   r	   entity.messagesr
   r   runtime.node.executorr   utils.log_managerr   utils.structured_loggerr   entity.configs.node.noder   r   "entity.configs.edge.edge_conditionr   utils.function_managerr   rk   rV   r   r   r   r#   r   r    r!   <module>r      sz    O # ! 2 2 0 2 ( 5 3 F 2seTk* 
)#<
= , , ,M&77+S M&r    