
    l*jh                        d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
  ej        d          ZddZddZ G d de	          ZdS )u   纯内存 MemoryStore:确定性、零外部依赖,供单测与离线运行。

相关度用 token Jaccard 重合度近似(非向量语义),足够驱动检索逻辑的单测。
    )annotationsN)defaultdict)MemoryRecord)MemoryStore	SearchHitu   [a-z0-9]+|[一-鿿]textstrreturnset[str]c                t    t          t                              |                                                     S N)set	_TOKEN_REfindalllower)r   s    5/root/genesis-world/src/genesis/memory/local_store.py_tokensr      s&    y  ..///    abfloatc                h    | r|sdS t          | |z            }t          | |z            }|r||z  ndS )N        )len)r   r   interunions       r   _jaccardr      sG     A sAJJEAJJE!*55==s*r   c                  8    e Zd ZddZddZdddZddZddZdS )LocalMemoryStorer
   Nonec                F    t          t                    | _        d| _        d S )Nr   )r   list	_by_agent_counter)selfs    r   __init__zLocalMemoryStore.__init__   s    8CD8I8Ir   recordr   r	   c                    | xj         dz  c_         |j         d| j          |_        | j        |j                                     |           |j        S )N   -)r$   agent_ididr#   append)r%   r'   s     r   addzLocalMemoryStore.add#   sP    8888	v'..v666yr      queryr+   limitintlist[SearchHit]c                    t          |          fd| j                            |g           D             }d |D             }|                    d d           |d |         S )Nc                r    g | ]3}t          |t          t          |j                                       4S ))r'   	relevance)r   r   r   content).0recqs     r   
<listcomp>z+LocalMemoryStore.search.<locals>.<listcomp>+   sJ     
 
 
 SHQ8L8L,M,MNNN
 
 
r   c                (    g | ]}|j         d k    |S )r   r6   )r8   hs     r   r;   z+LocalMemoryStore.search.<locals>.<listcomp>/   s$    555a1;#4#4#4#4#4r   c                    | j         S r   r=   )r>   s    r   <lambda>z)LocalMemoryStore.search.<locals>.<lambda>0   s     r   T)keyreverse)r   r#   getsort)r%   r0   r+   r1   hitsr:   s        @r   searchzLocalMemoryStore.search)   s    ENN
 
 
 
~))(B77
 
 
 654555		++T	:::FUF|r   list[MemoryRecord]c                R    t          | j                            |g                     S r   )r"   r#   rC   )r%   r+   s     r   allzLocalMemoryStore.all3   s"    DN&&x44555r   recordsc                    t          |          | j        |<   |D ]`}|j        pd                    dd          d         }|                                r't          | j        t          |                    | _        adS )u   整体替换某 agent 的全部记忆(世界存档恢复用):保留原 id,并把计数器
        校准到已见过的最大序号,避免恢复后新写入的 id 与旧记录冲突。 r*   r)   N)r"   r#   r,   rsplitisdigitmaxr$   r2   )r%   r+   rJ   r9   tails        r   replace_allzLocalMemoryStore.replace_all6   sy     $(==x  	> 	>CFLb((a004D||~~ > #DM3t99 = =	> 	>r   N)r
   r    )r'   r   r
   r	   )r/   )r0   r	   r+   r	   r1   r2   r
   r3   )r+   r	   r
   rG   )r+   r	   rJ   rG   r
   r    )__name__
__module____qualname__r&   r.   rF   rI   rR    r   r   r   r      s}                  6 6 6 6> > > > > >r   r   )r   r	   r
   r   )r   r   r   r   r
   r   )__doc__
__future__r   recollectionsr   genesis.memory.recordr   genesis.memory.storer   r   compiler   r   r   r   rV   r   r   <module>r^      s    
 # " " " " " 				 # # # # # # . . . . . . 7 7 7 7 7 7 7 7 BJ-..	0 0 0 0+ + + +> > > > >{ > > > > >r   