From 3d12f44b8b7ce8901cc3f6e603886551b44c0820 Mon Sep 17 00:00:00 2001 From: fridayL Date: Mon, 29 Sep 2025 17:33:36 +0800 Subject: [PATCH] hotfix:noe4j community dataformat --- src/memos/graph_dbs/neo4j.py | 4 ++++ src/memos/graph_dbs/neo4j_community.py | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/memos/graph_dbs/neo4j.py b/src/memos/graph_dbs/neo4j.py index 96908913d..ccc91c48b 100644 --- a/src/memos/graph_dbs/neo4j.py +++ b/src/memos/graph_dbs/neo4j.py @@ -38,6 +38,10 @@ def _prepare_node_metadata(metadata: dict[str, Any]) -> dict[str, Any]: if embedding and isinstance(embedding, list): metadata["embedding"] = [float(x) for x in embedding] + # serialization + if metadata["sources"]: + for idx in range(len(metadata["sources"])): + metadata["sources"][idx] = json.dumps(metadata["sources"][idx]) return metadata diff --git a/src/memos/graph_dbs/neo4j_community.py b/src/memos/graph_dbs/neo4j_community.py index 8acab420c..54000a51d 100644 --- a/src/memos/graph_dbs/neo4j_community.py +++ b/src/memos/graph_dbs/neo4j_community.py @@ -1,3 +1,4 @@ +import json from typing import Any from memos.configs.graph_db import Neo4jGraphDBConfig @@ -49,6 +50,10 @@ def add_node(self, id: str, memory: str, metadata: dict[str, Any]) -> None: # Safely process metadata metadata = _prepare_node_metadata(metadata) + # serialization + if metadata["sources"]: + for idx in range(len(metadata["sources"])): + metadata["sources"][idx] = json.dumps(metadata["sources"][idx]) # Extract required fields embedding = metadata.pop("embedding", None) if embedding is None: @@ -298,7 +303,16 @@ def _parse_node(self, node_data: dict[str, Any]) -> dict[str, Any]: if time_field in node and hasattr(node[time_field], "isoformat"): node[time_field] = node[time_field].isoformat() node.pop("user_name", None) - + # serialization + if node["sources"]: + for idx in range(len(node["sources"])): + if not ( + isinstance(node["sources"][idx], str) + and node["sources"][idx][0] == "{" + and node["sources"][idx][0] == "}" + ): + break + node["sources"][idx] = json.loads(node["sources"][idx]) new_node = {"id": node.pop("id"), "memory": node.pop("memory", ""), "metadata": node} try: vec_item = self.vec_db.get_by_id(new_node["id"])