
    i                     z    d Z ddlZddlZddl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mZmZ  G d de      Zy)	z9Lightweight append-only Blackboard memory implementation.    N)List)MemoryStoreConfig)BlackboardMemoryConfig)
MemoryBaseMemoryContentSnapshot
MemoryItemMemoryWritePayloadc                   j     e Zd ZdZdef fdZddZddZded	e	d
e
dedee   f
dZdeddfdZ xZS )BlackboardMemoryzASimple append-only memory: save raw outputs, retrieve by recency.storec                     |j                  t              }|st        d      t        |   |       || _        |j                  | _        |j                  | _        y )NzABlackboardMemory requires a blackboard memory store configuration)	as_configr   
ValueErrorsuper__init__configmemory_path	max_items)selfr   r   	__class__s      X/Users/bowang/.openclaw/workspace/ChatDev/runtime/node/agent/memory/blackboard_memory.pyr   zBlackboardMemory.__init__   sP    !78`aa!--))    returnNc                    | j                   r)t        j                  j                  | j                         sg | _        y 	 t        | j                   dd      5 }t        j                  |      }d d d        g }D ]'  }	 |j                  t        j                  |             ) || _        y # 1 sw Y   ?xY w# t        $ r Y Iw xY w# t        $ r
 g | _        Y y w xY w)Nrutf-8encoding)r   ospathexistscontentsopenjsonloadappendr   	from_dict	Exception)r   filedatar"   raws        r   r%   zBlackboardMemory.load    s    rww~~d6F6F'GDM	d&&g>$yy ?)+HOOJ$8$8$=> 
 %DM ?> !   	DM	sM   C B+-C =$B7!	C +B40C 7	C C CC CCc                    | j                   sy t        j                  t        j                  j	                  | j                         d       | j
                  | j                   d  D cg c]  }|j                          }}t        | j                   dd      5 }t        j                  ||dd       d d d        y c c}w # 1 sw Y   y xY w)	NT)exist_okwr   r   F   )ensure_asciiindent)r   r   makedirsr    dirnamer"   r   to_dictr#   r$   dump)r   itempayloadr)   s       r   savezBlackboardMemory.save3   s    
BGGOOD$4$45E.2mmT^^O<M.NO.Nd4<<>.NO$""C':dIIgt%B ;: P::s   (B<CC

agent_rolequerytop_ksimilarity_thresholdc                     | j                   sg S |dk  s|t        | j                         k\  rt        | j                         S t        | j                   | d        S )Nr   )r"   lenlist)r   r9   r:   r;   r<   s        r   retrievezBlackboardMemory.retrieve=   sN     }}IA:#dmm"44&&DMM5&'*++r   r7   c                 b   |j                   xs |j                  }|r|j                  n|j                  xs dj	                         }|sy |j
                  |j                  xs dd d |r|j                         ng d}t        dt        j                         j                   ||t        j                         |j                  |j                         }| j                  j                  |       t        | j                        | j                  kD  r | j                  | j                   d  | _        y y )N    )r9   input_previewattachmentsbb_)idcontent_summarymetadata	timestampinput_snapshotoutput_snapshot)rL   rK   textinputs_textstripr9   attachment_overviewr   uuiduuid4hextimer"   r&   r>   r   )r   r7   snapshotcontentrI   memory_items         r   updatezBlackboardMemory.updateL   s   **Dg.D.D$,8=='2E2E2KRRT ",,%117R#>=E87792
 !TZZ\%%&'#iik"11#33
 	[)t}}. MM4>>/*;<DM /r   )r   N)__name__
__module____qualname____doc__r   r   r%   r8   strr   intfloatr   r   r@   r	   rX   __classcell__)r   s   @r   r   r      sl    K*/ *&C,, %, 	,
 $, 
j	,=0 =T =r   r   )r\   r$   r   rT   rQ   typingr   entity.configsr   entity.configs.node.memoryr   %runtime.node.agent.memory.memory_baser   r   r   r	   r    r   r   <module>rf      s5    ?  	    , = P=z P=r   