@@ -49,15 +49,18 @@ def __init__(
4949 )
5050 self ._merged_threshold = merged_threshold
5151
52- def add (self , memories : list [TextualMemoryItem ]) -> None :
52+ def add (self , memories : list [TextualMemoryItem ]) -> list [ str ] :
5353 """
5454 Add new memories in parallel to different memory types (WorkingMemory, LongTermMemory, UserMemory).
5555 """
56+ added_ids : list [str ] = []
57+
5658 with ThreadPoolExecutor (max_workers = 8 ) as executor :
57- futures = [ executor .submit (self ._process_memory , memory ) for memory in memories ]
59+ futures = { executor .submit (self ._process_memory , m ): m for m in memories }
5860 for future in as_completed (futures ):
5961 try :
60- future .result ()
62+ ids = future .result ()
63+ added_ids .extend (ids )
6164 except Exception as e :
6265 logger .exception ("Memory processing error: " , exc_info = e )
6366
@@ -72,6 +75,7 @@ def add(self, memories: list[TextualMemoryItem]) -> None:
7275 )
7376
7477 self ._refresh_memory_size ()
78+ return added_ids
7579
7680 def replace_working_memory (self , memories : list [TextualMemoryItem ]) -> None :
7781 """
@@ -113,17 +117,23 @@ def _process_memory(self, memory: TextualMemoryItem):
113117 Process and add memory to different memory types (WorkingMemory, LongTermMemory, UserMemory).
114118 This method runs asynchronously to process each memory item.
115119 """
120+ ids = []
121+
116122 # Add to WorkingMemory
117- self ._add_memory_to_db (memory , "WorkingMemory" )
123+ working_id = self ._add_memory_to_db (memory , "WorkingMemory" )
124+ ids .append (working_id )
118125
119126 # Add to LongTermMemory and UserMemory
120127 if memory .metadata .memory_type in ["LongTermMemory" , "UserMemory" ]:
121- self ._add_to_graph_memory (
128+ added_id = self ._add_to_graph_memory (
122129 memory = memory ,
123130 memory_type = memory .metadata .memory_type ,
124131 )
132+ ids .append (added_id )
133+
134+ return ids
125135
126- def _add_memory_to_db (self , memory : TextualMemoryItem , memory_type : str ):
136+ def _add_memory_to_db (self , memory : TextualMemoryItem , memory_type : str ) -> str :
127137 """
128138 Add a single memory item to the graph store, with FIFO logic for WorkingMemory.
129139 """
@@ -135,6 +145,7 @@ def _add_memory_to_db(self, memory: TextualMemoryItem, memory_type: str):
135145
136146 # Insert node into graph
137147 self .graph_store .add_node (working_memory .id , working_memory .memory , metadata )
148+ return working_memory .id
138149
139150 def _add_to_graph_memory (self , memory : TextualMemoryItem , memory_type : str ):
140151 """
@@ -159,7 +170,7 @@ def _add_to_graph_memory(self, memory: TextualMemoryItem, memory_type: str):
159170 )
160171
161172 if similar_nodes and similar_nodes [0 ]["score" ] > self ._merged_threshold :
162- self ._merge (memory , similar_nodes )
173+ return self ._merge (memory , similar_nodes )
163174 else :
164175 node_id = str (uuid .uuid4 ())
165176 # Step 2: Add new node to graph
@@ -172,8 +183,9 @@ def _add_to_graph_memory(self, memory: TextualMemoryItem, memory_type: str):
172183 after_node = [node_id ],
173184 )
174185 )
186+ return node_id
175187
176- def _merge (self , source_node : TextualMemoryItem , similar_nodes : list [dict ]) -> None :
188+ def _merge (self , source_node : TextualMemoryItem , similar_nodes : list [dict ]) -> str :
177189 """
178190 TODO: Add node traceability support by optionally preserving source nodes and linking them with MERGED_FROM edges.
179191
@@ -200,7 +212,9 @@ def _merge(self, source_node: TextualMemoryItem, similar_nodes: list[dict]) -> N
200212 merged_background = f"{ original_meta .background } \n ⟵MERGED⟶\n { source_meta .background } "
201213 merged_embedding = self .embedder .embed ([merged_text ])[0 ]
202214
203- merged_confidence = float ((original_meta .confidence + source_meta .confidence ) / 2 )
215+ original_conf = original_meta .confidence or 0.0
216+ source_conf = source_meta .confidence or 0.0
217+ merged_confidence = float ((original_conf + source_conf ) / 2 )
204218 merged_usage = list (set ((original_meta .usage or []) + (source_meta .usage or [])))
205219
206220 # Create new merged node
@@ -243,6 +257,7 @@ def _merge(self, source_node: TextualMemoryItem, similar_nodes: list[dict]) -> N
243257 after_node = [merged_id ],
244258 )
245259 )
260+ return merged_id
246261
247262 def _inherit_edges (self , from_id : str , to_id : str ) -> None :
248263 """
0 commit comments