Skip to content

Commit c21db8c

Browse files
committed
fix: [WIP]bug in get_structure_optimization_candidates
1 parent 9610928 commit c21db8c

File tree

1 file changed

+37
-6
lines changed

1 file changed

+37
-6
lines changed

src/memos/graph_dbs/nebular.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -955,9 +955,11 @@ def clear(self) -> None:
955955
except Exception as e:
956956
logger.error(f"[ERROR] Failed to clear database: {e}")
957957

958-
def export_graph(self) -> dict[str, Any]:
958+
def export_graph(self, include_embedding: bool = False) -> dict[str, Any]:
959959
"""
960960
Export all graph nodes and edges in a structured form.
961+
Args:
962+
include_embedding (bool): Whether to include the large embedding field.
961963
962964
Returns:
963965
{
@@ -974,14 +976,41 @@ def export_graph(self) -> dict[str, Any]:
974976
edge_query += f' WHERE r.user_name = "{username}"'
975977

976978
try:
977-
full_node_query = f"{node_query} RETURN n"
979+
if include_embedding:
980+
return_fields = "n"
981+
else:
982+
return_fields = ",".join(
983+
[
984+
"n.id AS id",
985+
"n.memory AS memory",
986+
"n.user_name AS user_name",
987+
"n.user_id AS user_id",
988+
"n.session_id AS session_id",
989+
"n.status AS status",
990+
"n.key AS key",
991+
"n.confidence AS confidence",
992+
"n.tags AS tags",
993+
"n.created_at AS created_at",
994+
"n.updated_at AS updated_at",
995+
"n.memory_type AS memory_type",
996+
"n.sources AS sources",
997+
"n.source AS source",
998+
"n.node_type AS node_type",
999+
"n.visibility AS visibility",
1000+
"n.usage AS usage",
1001+
"n.background AS background",
1002+
]
1003+
)
1004+
1005+
full_node_query = f"{node_query} RETURN {return_fields}"
9781006
node_result = self.execute_query(full_node_query, timeout=20)
9791007
nodes = []
9801008
logger.debug(f"Debugging: {node_result}")
9811009
for row in node_result:
982-
logger.debug(f"Debugging: {row}")
983-
node_wrapper = row.values()[0].as_node()
984-
props = node_wrapper.get_properties()
1010+
if include_embedding:
1011+
props = row.values()[0].as_node().get_properties()
1012+
else:
1013+
props = {k: v.value for k, v in row.items()}
9851014

9861015
node = self._parse_node(props)
9871016
nodes.append(node)
@@ -1361,7 +1390,9 @@ def _parse_node(self, props: dict[str, Any]) -> dict[str, Any]:
13611390
parsed.pop("user_name", None)
13621391
metadata = parsed
13631392
metadata["type"] = metadata.pop("node_type")
1364-
metadata["embedding"] = metadata.pop(self.dim_field)
1393+
1394+
if self.dim_field in metadata:
1395+
metadata["embedding"] = metadata.pop(self.dim_field)
13651396

13661397
return {"id": node_id, "memory": memory, "metadata": metadata}
13671398

0 commit comments

Comments
 (0)