
    i                     J    d dl mZ d dlmZmZ d dlmZmZmZ  G d de      Z	y)    )ReflectionThinkingConfig)MessageMessageRole)ThinkingManagerBaseAgentInvokerThinkingPayloadc                        e Zd ZdZdef fdZdededededz  d	e	ee
f   f
d
Zdededededz  ded	e	ee
f   fdZ xZS )SelfReflectionThinkingManagerz
    A simple implementation of thinking manager, named self-reflection.
    This part of the code is borrowed from ChatDev (https://github.com/OpenBMB/ChatDev) and adapted.
    configc                 x    t         |   |       d| _        d| _        d| _        |j
                  xs d| _        y )NFTzMHere is a conversation between two roles: {conversations} {reflection_prompt}zIReflect on the given information and summarize key points in a few words.)super__init__before_gen_think_enabledafter_gen_think_enabledbase_promptreflection_prompt)selfr   	__class__s     X/Users/bowang/.openclaw/workspace/ChatDev/runtime/node/agent/thinking/self_reflection.pyr   z&SelfReflectionThinkingManager.__init__   sB     (-%'+$n!'!9!9  "I  >I    agent_invokerinput_payload
agent_rolememoryNreturnc                      y )N )r   r   r   r   r   s        r   _before_gen_thinkz/SelfReflectionThinkingManager._before_gen_think   s     	r   gen_payloadc                 V   d| d|j                    d|j                    g}|r|j                   r|j                   g|z   }| j                  j                  dj                  |      | j                        } |t        t        j                  |      g      }|j                         dfS )NzSYSTEM: zUSER: zASSISTANT: z

)conversationsr   )rolecontentT)	textr   formatjoinr   r   r   USERtext_content)	r   r   r   r   r   r   r!   promptreflection_messages	            r   _after_gen_thinkz.SelfReflectionThinkingManager._after_gen_think!   s     zl#]''()+**+,

 fkk#[[MM9M!!((v{{=7Q;?;Q;Q ) S ++**F;<
 "..0$66r   )__name__
__module____qualname____doc__r   r   r   r   strtupleboolr   r+   __classcell__)r   s   @r   r
   r
   
   s    
I7 I# ' 	
  $& 
sDy	7#7 '7 	7
  $&7 %7 
sDy	7r   r
   N)
entity.configsr   entity.messagesr   r   ,runtime.node.agent.thinking.thinking_managerr   r   r   r
   r   r   r   <module>r7      s"    3 0 ,7$7 ,7r   