
    (js	                    t    d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
mZmZmZ ddlmZ  G d d          Zd	S )
u   MemoryStream:单个 agent 的记忆流,封装写入(含重要度打分)+ Stanford 式检索。

store 由外部注入(LocalMemoryStore 测试 / Mem0Store 生产),换后端不动调用方。
    )annotations)HeuristicImportanceScorerImportanceScorer)
MemoryKindMemoryRecord)	CandidateRetrievalWeightsrankrecency_score)MemoryStorec                  J    e Zd Zddddd#dZej        ddd$dZdddd%d"ZdS )&MemoryStreamNgGz?)importance_scorerweightsdecaystorer   agent_idstrr   ImportanceScorer | Noner   RetrievalWeights | Noner   floatreturnNonec                   || _         || _        |pt                      | _        |pt	                      | _        || _        d S )N)r   r   r   scorerr	   r   r   )selfr   r   r   r   r   s         0/root/genesis-world/src/genesis/memory/stream.py__init__zMemoryStream.__init__   sC     
 'F+D+F+F4"2"4"4


    )kind
importancecontentnowr    r   r!   float | Noner   c                   ||n| j                             |          }t          | j        ||||          }| j                            |          |_        |S )uA   记录一条记忆;importance 缺省则由 scorer 自动打分。N)r   r"   
created_atr    r!   )r   scorer   r   r   addid)r   r"   r#   r    r!   imprecords          r   observezMemoryStream.observe   s`     '2jj8I8I'8R8R]G$[^
 
 
 JNN6**	r         )top_kcandidate_limitqueryr/   intr0   list[MemoryRecord]c                     j                             | j        |          } fd|D             }t          | j                  d|         }g }|D ](}	|	j        _        |                    |	j                   )|S )uT   检索与 query 最相关的 top_k 记忆;访问会刷新被取记忆的新近度。)limitc           
         g | ]U}t          |j        |j        t          |j        j        p|j        j        z
  j                  |j        j                   VS ))item	relevancerecencyr!   )r   r+   r8   r   last_accessedr&   r   r!   ).0hr#   r   s     r   
<listcomp>z)MemoryStream.retrieve.<locals>.<listcomp>3   sq     
 
 
  X+%cQX-C-ZqxGZ&[]a]ghh8.	  
 
 
r   N)r   searchr   r
   r   r7   r:   append)
r   r1   r#   r/   r0   hits
candidatesrankedresultrs
   ` `       r   retrievezMemoryStream.retrieve.   s     z  _ MM
 
 
 
 
 
 
 

 j$,//7 	" 	"A#&AF MM!&!!!!r   )r   r   r   r   r   r   r   r   r   r   r   r   )
r"   r   r#   r   r    r   r!   r$   r   r   )
r1   r   r#   r   r/   r2   r0   r2   r   r3   )__name__
__module____qualname__r   r   OBSERVATIONr,   rE    r   r   r   r      s         6:+/     ( &1#'     " 78PR       r   r   N)__doc__
__future__r   genesis.memory.importancer   r   genesis.memory.recordr   r   genesis.memory.retrievalr   r	   r
   r   genesis.memory.storer   r   rJ   r   r   <module>rQ      s    
 # " " " " " Q Q Q Q Q Q Q Q : : : : : : : : U U U U U U U U U U U U , , , , , ,3 3 3 3 3 3 3 3 3 3r   