Skip to content

Commit 5e0b177

Browse files
fridayLCaralHsi
andauthored
fix: fix ids for memory (#674)
* feat: update memos headers * feat: headers add * feat: update search agent * feat: upadte mem story * feat: update mem scehduler * feat: update deepsearch mem code * feat: update deepsearch agent * feat: update test code * fix: remove dup config * feat: dock search pipeline * fix: code test * feat: add test scripts * feat: add test * feat: update need_raw process * fix: add initter * fix: change agent search func name * feat: update logs and defined * feat: update full text mem search * feat: cp plugin to dev * feat: add one recall for fulltext retrieval * fix: set default for fulltext search * feat: add langchain chunk * feat: fix playground for query * feat: update file content memory extract * feat: update code * feat: update import * code: reformat suffix * feat: update file_id * remove langchain-text-splitters==1.0.0 * feat: add reqiuement * feat: make test * feat: fix markdown * feat: fix simple chunker * feat: add file sources * feat: add concat doc source * add: file_info * remove:macos-13 * feat: fix ffideids * fix: fix filed ids data --------- Co-authored-by: CaralHsi <[email protected]>
1 parent ab6de77 commit 5e0b177

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

src/memos/mem_reader/multi_modal_struct.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ def _build_window_from_items(
206206
memory_texts = []
207207
all_sources = []
208208
roles = set()
209+
aggregated_file_ids: list[str] = []
209210

210211
for item in items:
211212
if item.memory:
@@ -226,6 +227,15 @@ def _build_window_from_items(
226227
elif isinstance(source, dict) and source.get("role"):
227228
roles.add(source.get("role"))
228229

230+
# Aggregate file_ids from metadata
231+
metadata = getattr(item, "metadata", None)
232+
if metadata is not None:
233+
item_file_ids = getattr(metadata, "file_ids", None)
234+
if isinstance(item_file_ids, list):
235+
for fid in item_file_ids:
236+
if fid and fid not in aggregated_file_ids:
237+
aggregated_file_ids.append(fid)
238+
229239
# Determine memory_type based on roles (same logic as simple_struct)
230240
# UserMemory if only user role, else LongTermMemory
231241
memory_type = "UserMemory" if roles == {"user"} else "LongTermMemory"
@@ -238,12 +248,16 @@ def _build_window_from_items(
238248
return None
239249

240250
# Create aggregated memory item (similar to _build_fast_node in simple_struct)
251+
extra_kwargs: dict[str, Any] = {}
252+
if aggregated_file_ids:
253+
extra_kwargs["file_ids"] = aggregated_file_ids
241254
aggregated_item = self._make_memory_item(
242255
value=merged_text,
243256
info=info,
244257
memory_type=memory_type,
245258
tags=["mode:fast"],
246259
sources=all_sources,
260+
**extra_kwargs,
247261
)
248262

249263
return aggregated_item
@@ -371,6 +385,19 @@ def _process_one_item(fast_item: TextualMemoryItem) -> list[TextualMemoryItem]:
371385
if not isinstance(sources, list):
372386
sources = [sources]
373387

388+
# Extract file_ids from fast item metadata for propagation
389+
metadata = getattr(fast_item, "metadata", None)
390+
file_ids = getattr(metadata, "file_ids", None) if metadata is not None else None
391+
file_ids = [fid for fid in file_ids if fid] if isinstance(file_ids, list) else []
392+
393+
# Build per-item info copy and kwargs for _make_memory_item
394+
info_per_item = info.copy()
395+
if file_ids and "file_id" not in info_per_item:
396+
info_per_item["file_id"] = file_ids[0]
397+
extra_kwargs: dict[str, Any] = {}
398+
if file_ids:
399+
extra_kwargs["file_ids"] = file_ids
400+
374401
# Determine prompt type based on sources
375402
prompt_type = self._determine_prompt_type(sources)
376403

@@ -392,12 +419,13 @@ def _process_one_item(fast_item: TextualMemoryItem) -> list[TextualMemoryItem]:
392419
# Create fine mode memory item (same as simple_struct)
393420
node = self._make_memory_item(
394421
value=m.get("value", ""),
395-
info=info,
422+
info=info_per_item,
396423
memory_type=memory_type,
397424
tags=m.get("tags", []),
398425
key=m.get("key", ""),
399426
sources=sources, # Preserve sources from fast item
400427
background=resp.get("summary", ""),
428+
**extra_kwargs,
401429
)
402430
fine_items.append(node)
403431
except Exception as e:
@@ -407,12 +435,13 @@ def _process_one_item(fast_item: TextualMemoryItem) -> list[TextualMemoryItem]:
407435
# Create fine mode memory item (same as simple_struct)
408436
node = self._make_memory_item(
409437
value=resp.get("value", "").strip(),
410-
info=info,
438+
info=info_per_item,
411439
memory_type="LongTermMemory",
412440
tags=resp.get("tags", []),
413441
key=resp.get("key", None),
414442
sources=sources, # Preserve sources from fast item
415443
background=resp.get("summary", ""),
444+
**extra_kwargs,
416445
)
417446
fine_items.append(node)
418447
except Exception as e:

src/memos/mem_reader/simple_struct.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@ def _make_memory_item(
210210
info_ = info.copy()
211211
user_id = info_.pop("user_id", "")
212212
session_id = info_.pop("session_id", "")
213-
214213
return TextualMemoryItem(
215214
memory=value,
216215
metadata=TreeNodeTextualMemoryMetadata(

0 commit comments

Comments
 (0)