
    i
                         d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	lmZ  G d
 dee         Zy)z5Payload processor that delegates to Python functions.    )AnyCallableMapping)Message)
LogManager)get_server_logger   )EdgePayloadProcessorProcessorFactoryContext)FunctionEdgeProcessorConfig)ExecutionContextc                        e Zd Zdededdf fdZdededed	ededz  f
d
Z	de
eeeef   gef   dz  fdZdedededz  fdZ xZS )FunctionEdgePayloadProcessorconfigctxreturnNc                     t         |   ||       |j                  | _        d| j                   d| _        d| j                  i| _        | j                         | _        y )Nz	function()function)super__init__name_namelabelmetadata_resolve	_callable)selfr   r   	__class__s      W/Users/bowang/.openclaw/workspace/ChatDev/runtime/edge/processors/function_processor.pyr   z%FunctionEdgePayloadProcessor.__init__   sN    %[[
 A.
#TZZ0    payloadsource_resultlog_managercontextc                   | j                   !|j                  d| j                   d       |S 	 | j                  |j                         |j                        }|y | j                  ||      S # t
        $ rW}d| j                   d| }	|j                  |	       t               }
|
j                  ||	| j                         |cY d }~S d }~ww xY w)NzProcessor function 'z)' not found. Falling back to passthrough.z
' failed: )processor_name)
r   warningr   text_contentglobal_state	Exceptionerrorr   log_exception_coerce_result)r   r"   r#   	from_node	edge_linkr$   r%   resultexc	error_msgserver_loggers              r    	transformz&FunctionEdgePayloadProcessor.transform   s     >>!&tzzl2[\ N	^^G$8$8$:G<P<PQF >""7F33  	.tzzl*SEJIi(-/M''Ytzz'RN	s   *A. .	C7AC	C	Cc                     | j                   r| j                   j                  nd }|sy |j                  | j                        }|y |S )N)r   function_managerget_functionr   )r   managerfuncs      r    r   z%FunctionEdgePayloadProcessor._resolve2   s@    /3xx$((++T##DJJ/<r!   r1   c                    t        |t              r|S |j                         }t        |t              r	||_        |S t        |t
              rb|j                  d      ry d|v r
|d   |_        t        |j                        }|j                  |j                  d      xs i        ||_        |S t        |      |_        |S )Ndropcontentr   )

isinstancer   clonestrr=   r   getdictr   update)r   r"   r1   clonedr   s        r    r.   z+FunctionEdgePayloadProcessor._coerce_result;   s    fg&Mfc"#FNMfg&zz&!F"!'	!2FOO,HOOFJJz28b9&FOMVr!   )__name__
__module____qualname__r   r   r   r   r   r   r5   r   r@   rB   r   r   r.   __classcell__)r   s   @r    r   r      s    ): )AX )]a )44 	4  4 "4 
44:(Cc3h#8##=>E g s w~ r!   r   N)__doc__typingr   r   r   entity.messagesr   utils.log_managerr   utils.structured_loggerr   baser
   r   "entity.configs.edge.edge_processorr   runtime.node.executorr   r    r!   r    <module>rR      s3    ; ) ) # ( 5 ? J 2?#78S#T ?r!   