
    D(j                    n    d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
 dd
ZddZ G d de	          ZdS )u  Mem0 托管云版 MemoryStore。

agent_id → mem0 的 user_id,实现 agent 级记忆隔离。我们的 importance/created_at/kind
塞进 metadata 随记忆一起存,检索时取回用于本地 recency/importance 加权。

注:mem0 默认对写入做 LLM 抽取(infer=True),可能改写 episodic 原文;若需逐字
存记忆流可设 infer=False(原文入库,但失去 mem0 的去重/自编辑)。该取舍待评估
(PRD §12 TODO)。
    )annotations)Any)
MemoryKindMemoryRecord)MemoryStore	SearchHitresr   returnstrc                    t          | t                    r|                     d|           n| }t          |t                    r;|r9t          |d         t                    r|d                             dd          pdS dS )uT   从 mem0 add 的返回里尽力取第一条记忆 id(返回结构随版本而异)。resultsr   id )
isinstancedictgetlist)r	   itemss     4/root/genesis-world/src/genesis/memory/mem0_store.py_extract_idr      sy    '1#t'<'<ECGGIs####E% ,5 ,Za$-G-G ,Qx||D"%%++2    itemr   agent_idr   c                   |                      d          pi }|                     dd          }|t          j        v rt          |          nt          j        }t	          ||                      dd          pdt          |                     dd                    |t          |                     dd	                    |                      d
                    S )Nmetadatakindobservationmemoryr   
created_at        
importanceg      ?r   )r   contentr   r   r!   r   )r   r   _value2member_map_OBSERVATIONr   float)r   r   mdkind_valr   s        r   
_to_recordr(      s    	*			#Bvvfm,,H#+z/L#L#L:hR\RhD2&&,"c2233c223388D>>   r   c                  >    e Zd Zdddd	ZddZdddZddZddZdS )	Mem0StoreT)inferapi_keyr   r+   boolr
   Nonec               B    ddl m}  ||          | _        || _        d S )Nr   )MemoryClient)r,   )mem0r0   clientr+   )selfr,   r+   r0   s       r   __init__zMem0Store.__init__*   s3    %%%%%%"l7333


r   recordr   c                    | j                             d|j        dg|j        |j        j        |j        |j        d| j                  }t          |          |_
        |j
        S )Nuser)roler"   )r   r!   r   )user_idr   r+   )r2   addr"   r   r   valuer!   r   r+   r   r   )r3   r5   r	   s      r   r:   zMem0Store.add0   so    koo889O)$/$/ 
 *  	
 	
  $$	yr      queryr   limitintlist[SearchHit]c                   | j                             |d|i|          }t          |t                    r|                    d|          n|}g }|pg D ]k}t          |t                    s|                    t          t          ||          t          |                    dd                                         l|S )Nr9   )filtersr>   r   scorer    )r5   	relevance)	r2   searchr   r   r   appendr   r(   r%   )r3   r=   r   r>   r	   r   hitsits           r   rE   zMem0Store.search>   s    k  H0EU SS+5c4+@+@I	3'''c+2 	 	Bb$'' KKB!9!9U266RY[^K_K_E`E`aaa    r   list[MemoryRecord]c                    | j                             di          }t          |t                    r|                    d|          n|}fd|pg D             S )Nr9   )rB   r   c                Z    g | ]'}t          |t                    t          |          (S  )r   r   r(   ).0rH   r   s     r   
<listcomp>z!Mem0Store.all.<locals>.<listcomp>N   s3    YYYRJrSWDXDXY
2x((YYYr   )r2   get_allr   r   r   )r3   r   r	   r   s    `  r   allzMem0Store.allK   se    k!!9h*?!@@+5c4+@+@I	3'''cYYYYEKRYYYYr   c                <    | j                             |           dS )u3   删除某 agent 的全部记忆(测试清理用)。)r9   N)r2   
delete_all)r3   r   s     r   clearzMem0Store.clearP   s!    x00000r   N)r,   r   r+   r-   r
   r.   )r5   r   r
   r   )r<   )r=   r   r   r   r>   r?   r
   r@   )r   r   r
   rI   )r   r   r
   r.   )__name__
__module____qualname__r4   r:   rE   rP   rS   rL   r   r   r*   r*   )   s        6:             Z Z Z Z
1 1 1 1 1 1r   r*   N)r	   r   r
   r   )r   r   r   r   r
   r   )__doc__
__future__r   typingr   genesis.memory.recordr   r   genesis.memory.storer   r   r   r(   r*   rL   r   r   <module>r\      s     # " " " " "       : : : : : : : : 7 7 7 7 7 7 7 7      )1 )1 )1 )1 )1 )1 )1 )1 )1 )1r   