Files
Hy-Memory/hy_memory/utils/clone_references.py
T
2026-10-16 16:26:27 +08:00

33 lines
1.4 KiB
Python

"""Remap structured memory references without rewriting user-authored text."""
from copy import deepcopy
MEMORY_REFERENCE_KEYS = frozenset({
"episode_id", "parent_episode_id", "parent_episode_ids", "series_episode_ids",
"source_episode_ids", "member_memory_ids", "member_ids",
"source_raw_memory_id", "source_raw_memory_ids", "evidence_chain",
"supersedes", "superseded_by", "source_fact_ids", "evidence_ids",
})
def remap_memory_references(value, id_map):
"""Copy metadata, mapping only known references that belong to this clone.
Legacy episode labels and references outside an agent-scoped clone retain
their existing meaning. Free text, session IDs and request IDs are untouched.
"""
if isinstance(value, dict):
result = {}
for key, child in value.items():
if key in MEMORY_REFERENCE_KEYS and isinstance(child, str):
result[key] = id_map.get(child, child)
elif key in MEMORY_REFERENCE_KEYS and isinstance(child, list):
result[key] = [id_map.get(item, item) if isinstance(item, str)
else remap_memory_references(item, id_map) for item in child]
else:
result[key] = remap_memory_references(child, id_map)
return result
if isinstance(value, list):
return [remap_memory_references(item, id_map) for item in value]
return deepcopy(value)