@@ -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