AgentFrame-v2 / memory /store.py
ljsysfurry's picture
Upload folder using huggingface_hub
c2179b0 verified
Raw
History Blame Contribute Delete
1.66 kB
"""持久化: 状态保存/加载 (JSON 快照)"""
import json
import os
import numpy as np
def _serialize(obj):
"""递归序列化 (处理 numpy 类型)"""
if isinstance(obj, np.ndarray):
return {"__ndarray__": True, "shape": list(obj.shape),
"dtype": str(obj.dtype), "data": obj.tobytes().hex()}
if isinstance(obj, np.generic):
return obj.item()
if isinstance(obj, dict):
return {str(k): _serialize(v) for k, v in obj.items()}
if isinstance(obj, (list, tuple)):
return [_serialize(v) for v in obj]
if hasattr(obj, "__dict__"):
return _serialize(obj.__dict__)
return obj
def _deserialize(obj):
"""递归反序列化"""
if isinstance(obj, dict):
if obj.get("__ndarray__"):
arr = np.frombuffer(bytes.fromhex(obj["data"]), dtype=obj["dtype"])
return arr.reshape(obj["shape"])
return {k: _deserialize(v) for k, v in obj.items()}
if isinstance(obj, list):
return [_deserialize(v) for v in obj]
return obj
class StateStore:
"""JSON 快照存储: 保存引擎状态到文件, 可恢复"""
def __init__(self, path: str):
self.path = path
def save(self, state: dict):
os.makedirs(os.path.dirname(self.path) or ".", exist_ok=True)
with open(self.path, "w") as f:
json.dump(_serialize(state), f, ensure_ascii=False)
def load(self) -> dict:
if not os.path.exists(self.path):
return {}
with open(self.path) as f:
return _deserialize(json.load(f))
def exists(self) -> bool:
return os.path.exists(self.path)