
    i*                     $   d Z ddlmZmZ ddlmZmZmZmZ ddl	Z	ddl
mZmZ ddlmZmZ ddlmZ ddlmZmZ dd	lmZmZ e G d
 d             Ze G d d             Ze G d d             Ze G d d             Z G d d      Z G d d      Zy)z3Base memory abstractions with multimodal snapshots.    )	dataclassfield)AnyDictListOptionalN)MemoryAttachmentConfigMemoryStoreConfig)FileMemoryConfigSimpleMemoryConfig)AgentExecFlowStage)MessageMessageBlock)EmbeddingBaseEmbeddingFactoryc            
       *   e Zd ZU dZeed<    ee      Ze	e
eef      ed<   de
eef   fdZede
eef   dz  dd	fd
       Zedeez  dz  dd	fd       Zede	e   dd	fd       Zde	e   fdZde	e
eef      fdZedddede	e   dedd fd       Zy)MemoryContentSnapshotz2Lightweight serialization of a multimodal payload.text)default_factoryblocksreturnc                 4    | j                   | j                  dS )Nr   r   r   selfs    R/Users/bowang/.openclaw/workspace/ChatDev/runtime/node/agent/memory/memory_base.pyto_dictzMemoryContentSnapshot.to_dict   s    		T[[99    payloadNzMemoryContentSnapshot | Nonec                 |    |sy |j                  dd      }|j                  d      xs g } | |t        |            S )Nr    r   r   )getlist)clsr   r   r   s       r   	from_dictzMemoryContentSnapshot.from_dict   s<    {{62&X&,"T&\22r   messagec           
      B   |y t        |t              r[ | |j                         |j                         D cg c]+  }|j                  j
                  |j                  d      d- c}      S t        |t              r
 | |g       S  | t        |      g       S c c}w NTinclude_dataroleblockr   )
isinstancer   text_contentr   r,   valuer   str)r$   r&   r-   s      r   from_messagez"MemoryContentSnapshot.from_message    s    ?gw'))+ ")!1
 "2 !( 2 2!&D!A "2	 	 gs#GB//GR00s   0B
messagesc                 \   |sy g }g }|D ]  }|j                  d|j                  j                   d|j                                 |j	                         D ]:  }|j                  |j                  j                  |j                  d      d       <   | dj                  |      |      S )N(z) Tr)   r+   z

r   )appendr,   r0   r/   r   r   join)r$   r3   partsr   r&   r-   s         r   from_messagesz#MemoryContentSnapshot.from_messages3   s    ')GLL1W\\//073G3G3I2JKL ) ' 2 2!&D!A *   E*6::r   c                     g }| j                   D ][  }t        |t              r|j                  d      nd }t        |t              s7	 |j	                  t        j                  |             ] |S # t        $ r Y kw xY w)Nr-   )r   r.   dictr"   r6   r   r%   	Exception)r   r   r   
block_datas       r   to_message_blocksz'MemoryContentSnapshot.to_message_blocksD   ss    %'{{G1;GT1JW-PTJj$/l44Z@A #   s   $A//	A;:A;c           
         g }| j                   D ]  }t        |t              r|j                  d      nd }t        |t              s7|j                  d      }|sK|j	                  |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      d        |S )	Nr-   
attachmentr,   attachment_id	mime_typenamesize)r,   rA   rB   rC   rD   )r   r.   r;   r"   r6   )r   attachmentsr   r=   r@   s        r   attachment_overviewz)MemoryContentSnapshot.attachment_overviewP   s    ,.{{G1;GT1JW-PTJj$/#5J"" 'F 3)3)H%/^^K%@ *v 6 *v 6 # r   input)r,   r,   c                d    |D cg c]  }||j                  d      d }} | ||      S c c}w r(   )r   )r$   r   r   r,   r-   
serializeds         r   from_blocksz!MemoryContentSnapshot.from_blocksc   sO      

   D9   	 
 Z00
s   -)__name__
__module____qualname____doc__r1   __annotations__r   r#   r   r   r   r   r   classmethodr%   r   r2   r9   r   r>   rF   rJ    r   r   r   r      s-   <
I#(#>FDc3h >:c3h : 3S#X 5 3:X 3 3 17S=4#7 1<Z 1 1$ ;T'] ;7U ; ; 
4#5 
T$sCx.%9 &  1 1 \"	1
 1 
!1 1r   r   c                       e Zd ZU eed<   eed<   eeef   ed<   dZee	e
      ed<   dZe
dz  ed<   dZedz  ed<   dZedz  ed<   dd
Zd	eeef   fdZedeeef   d	d fd       Zd	e	eeef      fdZy)
MemoryItemidcontent_summarymetadataN	embedding	timestampinput_snapshotoutput_snapshotr   c                 P    | j                   t        j                         | _         y y N)rX   timer   s    r   __post_init__zMemoryItem.__post_init__   s    >>!!YY[DN "r   c                    | j                   | j                  | j                  | j                  | j                  d}| j
                  r| j
                  j                         |d<   | j                  r| j                  j                         |d<   |S )N)rT   rU   rV   rW   rX   rY   rZ   )rT   rU   rV   rW   rX   rY   r   rZ   r   r   s     r   r   zMemoryItem.to_dict   s{    ''#33#
 (,(;(;(C(C(EG$%)-)=)=)E)E)GG%&r   r   c                 0    | |d   |j                  dd      |j                  d      xs i |j                  d      |j                  d      t        j                  |j                  d            t        j                  |j                  d            	      S )
NrT   rU   r!   rV   rW   rX   rY   rZ   )rT   rU   rV   rW   rX   rY   rZ   )r"   r   r%   )r$   r   s     r   r%   zMemoryItem.from_dict   s~    t}#KK(92>[[,2kk+.kk+.0::7;;GW;XY1;;GKKHY<Z[
 	
r   c                     g }| j                   r)|j                  | j                   j                                | j                  r)|j                  | j                  j                                |S r\   )rY   extendrF   rZ   )r   rE   s     r   rE   zMemoryItem.attachments   sY    ,.t22FFHIt33GGIJr   r   N)rK   rL   rM   r1   rO   r   r   rW   r   r   floatrX   rY   r   rZ   r^   r   rP   r%   rE   rQ   r   r   rS   rS   u   s    G38n'+IxU$+"Iut|"37N)D0748O*T18)c3h  	
S#X 	
< 	
 	
T$sCx.1 r   rS   c                   B    e Zd ZU eed<   eed<   edz  ed<   edz  ed<   y)MemoryWritePayload
agent_roleinputs_textNrY   rZ   )rK   rL   rM   r1   rO   r   rQ   r   r   rg   rg      s#    O)D00*T11r   rg   c                   P    e Zd ZU eed<   ee   ed<   defdZdee	ee
f      fdZy)MemoryRetrievalResultformatted_textitemsr   c                 :    t        d | j                  D              S )Nc              3      K   | ]N  }|j                   xr |j                   j                  xs$ |j                  xr |j                  j                   P y wr\   )rY   r   rZ   ).0items     r   	<genexpr>z7MemoryRetrievalResult.has_multimodal.<locals>.<genexpr>   sW      
 #   ?T%8%8%?%? F$$D)=)=)D)DF"s   AA)anyrm   r   s    r   has_multimodalz$MemoryRetrievalResult.has_multimodal   s"     
 


 
 	
r   c                 j    g }| j                   D ]!  }|j                  |j                                # |S r\   )rm   rc   rE   )r   rE   rq   s      r   rF   z)MemoryRetrievalResult.attachment_overview   s2    ,.JJDt//12 r   N)rK   rL   rM   r1   rO   r   rS   boolrt   r   r   rF   rQ   r   r   rk   rk      s8    

 
T$sCx.%9 r   rk   c                   f    e Zd ZdefdZde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y)
MemoryBasestorec                 L   || _         |j                  | _        g | _        d }|j                  t              }|j                  t
              }|r|j                  r|j                  }n|r|j                  r|j                  }|rt        j                  |      | _        y d | _        y r\   )	ry   rC   contents	as_configr   r   rW   r   create_embedding)r   ry   embedding_cfg
simple_cfgfile_cfgs        r   __init__zMemoryBase.__init__   s    
JJ	*,__%78
??#34*..&00M(,,$..M AN--m< 	SW 	r   r   c                 ,    t        | j                        S r\   )lenr{   r   s    r   count_memorieszMemoryBase.count_memories   s    4==!!r   Nc                     t         r\   NotImplementedErrorr   s    r   loadzMemoryBase.load       !!r   c                     t         r\   r   r   s    r   savezMemoryBase.save   r   r   rh   querytop_ksimilarity_thresholdc                     t         r\   r   )r   rh   r   r   r   s        r   retrievezMemoryBase.retrieve   s
     "!r   r   c                     t         r\   r   r`   s     r   updatezMemoryBase.update   r   r   rd   )rK   rL   rM   r
   r   intr   r   r   r1   r   re   r   rS   r   rg   r   rQ   r   r   rx   rx      ss    
/ 
"" """"" %" 	"
 $" 
j	""0 "T "r   rx   c            	       n    e Zd Zdee   deeef   fdZdede	de
dedz  fd	Zd
eddfdZdededefdZy)MemoryManagerrE   storesc                     || _         i | _        |D ]Q  }|j                  |j                        }|st	        d|j                   d      || j                  |j                  <   S y )Nzmemory store z
 not found)rE   memoriesr"   rC   
ValueError)r   rE   r   r@   memorys        r   r   zMemoryManager.__init__   s[    &/1%JZZ
0F =0A!LMM-3DMM*//*	 &r   rh   r   current_stager   Nc                 |   g }| j                   D ]  }|j                  r||j                  vr|j                  s+| j                  j	                  |j
                        }|sS|j                  |||j                  |j                        }|D ]<  }| j                  ||j                        }	|j                  |j
                  ||	f       >  |sy |j                  d d       dg}
i }|D ]'  \  }}}|j                  |g       j                  |       ) |j                         D ]N  \  }}|
j                  d| d       t        |d      D ]%  \  }}|
j                  | d|j                           ' P |
j                  d	       |D cg c]  \  }}}|
 }}}t#        d
j%                  |
      |      S c c}}w )Nc                     | d   S )N   rQ   )entrys    r   <lambda>z(MemoryManager.retrieve.<locals>.<lambda>
  s    uQxr   T)keyreversez===== Related Memories =====z
--- z ---   z. z
===== End of Memory =====
)rl   rm   )rE   retrieve_stagereadr   r"   rC   r   r   r   _score_memoryr   r6   sort
setdefaultrm   	enumeraterU   rk   r7   )r   rh   r   r   resultsr@   r   rm   rq   combined_score	formattedgroupedrC   _idxordered_itemss                   r   r   zMemoryManager.retrieve   s    8:**J((]*B[B[-[??]]&&z7FOOJz7G7GIhIhiE!%!3!3D%**!E
~FG  + />34	/1$MD$tR(//5 %"==?KD%vdV401&ua0	T  C54+?+?*@!AB 1 + 	67078*!T18$DIIi4HP]^^ 9s   F8r   c                     | j                   D ]X  }|j                  s| j                  j                  |j                        }|s8|j                  |       |j                          Z y r\   )rE   writer   r"   rC   r   r   )r   r   r@   r   s       r   r   zMemoryManager.update  sQ    **J##]]&&z7FMM'"KKM +r   memory_itemc                    t        j                          }||j                  xs |z
  dz  }t        dd|dz  z
        }t        |j                        }|dk  rd}n
|dkD  rd}nd}t        |j                         j                               }t        |j                  j                         j                               }	|rt        ||	z        t        |      z  nd	}
d
|z  |z  d|
z  z   S )Ni  g?g      ?i     g      ?   g?g        gffffff?g333333?)r]   rX   maxr   rU   setlowersplit)r   r   r   current_time	age_hours
time_decaylengthlength_factorquery_wordscontent_words	relevances              r   r   zMemoryManager._score_memory"  s    yy{![%:%:%JlKtS	cI$99:
[001B;Mc\MM%++---/0K77==?EEGHKVCm34s;7GG\_	Z-/#	/AAr   )rK   rL   rM   r   r	   r   r1   rx   r   r   r   rk   r   rg   r   rS   re   r   rQ   r   r   r   r      s    4D)?$@ 4$sT^J_ 4#_#_ %#_ *	#_
 
	%#_J0 T B BC BE Br   r   )rN   dataclassesr   r   typingr   r   r   r   r]   entity.configsr	   r
   entity.configs.node.memoryr   r   entity.enumsr   entity.messagesr   r   #runtime.node.agent.memory.embeddingr   r   r   rS   rg   rk   rx   r   rQ   r   r   <module>r      s    9 ( , ,  D K + 1 O c1 c1 c1L - - -` 2 2 2   $%" %"PGB GBr   