test_multi_memory_cube.py•6.19 kB
#!/usr/bin/env python3
"""
测试多Memory模块的MemCube实现
验证6类专用Memory模块的创建、配置和基本操作
"""
import os
import sys
import tempfile
import shutil
from pathlib import Path
# 添加项目根目录到Python路径
sys.path.insert(0, str(Path(__file__).parent))
def test_multi_memory_config():
"""测试MultiMemoryMemCubeConfig配置"""
print("🧪 测试MultiMemoryMemCubeConfig配置...")
try:
from memos.configs.mem_cube import MultiMemoryMemCubeConfig
from memos.configs.memory import MemoryConfigFactory
# 创建6类专用Memory配置(使用uninitialized避免依赖问题)
mem_configs = {
'code_snippet_mem': MemoryConfigFactory(backend='uninitialized'),
'error_log_mem': MemoryConfigFactory(backend='uninitialized'),
'api_sample_mem': MemoryConfigFactory(backend='uninitialized'),
'file_chunk_mem': MemoryConfigFactory(backend='uninitialized'),
'git_commit_mem': MemoryConfigFactory(backend='uninitialized'),
'product_graph_mem': MemoryConfigFactory(backend='uninitialized')
}
# 创建配置
config = MultiMemoryMemCubeConfig(
user_id="test_user",
memory_configs=mem_configs
)
print(f"✅ 配置创建成功")
print(f" 用户ID: {config.user_id}")
print(f" Cube ID: {config.cube_id}")
print(f" Memory模块数量: {len(config.memory_configs)}")
return config
except Exception as e:
print(f"❌ 配置测试失败: {e}")
import traceback
traceback.print_exc()
return None
def test_multi_memory_cube(config):
"""测试MultiMemoryMemCube实现"""
print("\n🧪 测试MultiMemoryMemCube实现...")
try:
from memos.mem_cube.general import MultiMemoryMemCube
# 创建MemCube
cube = MultiMemoryMemCube(config)
print(f"✅ MemCube创建成功")
# 列出Memory模块
memories = cube.list_memories()
print(f" Memory模块列表:")
for name, mem_type in memories.items():
print(f" - {name}: {mem_type}")
return cube
except Exception as e:
print(f"❌ MemCube测试失败: {e}")
return None
def test_memory_ops_sdk():
"""测试MultiMemoryOps SDK"""
print("\n🧪 测试MultiMemoryOps SDK...")
try:
from memory_ops_sdk import MultiMemoryOps
# 创建临时目录
temp_dir = tempfile.mkdtemp()
# 初始化SDK(使用uninitialized避免依赖问题)
multi_mem = MultiMemoryOps(data_dir=temp_dir, verbose=True)
if multi_mem.memory_cube is None:
print("❌ SDK初始化失败")
return False
# 列出Memory模块
modules = multi_mem.list_memory_modules()
print(f"✅ SDK初始化成功,支持的Memory模块:")
for name, desc in modules.items():
print(f" - {name}: {desc}")
# 获取统计信息(跳过实际的记忆操作,因为需要外部依赖)
print(f"\n📊 Memory模块统计信息:")
stats = multi_mem.get_memory_stats()
for name, stat in stats.items():
print(f" - {name}: {stat['count']} 条记忆, 状态: {stat['status']}")
# 清理临时目录
shutil.rmtree(temp_dir, ignore_errors=True)
return True
except Exception as e:
print(f"❌ SDK测试失败: {e}")
import traceback
traceback.print_exc()
return False
def test_dump_and_load():
"""测试序列化和加载功能"""
print("\n🧪 测试序列化和加载功能...")
try:
from memos.configs.mem_cube import MultiMemoryMemCubeConfig
from memos.configs.memory import MemoryConfigFactory
from memos.mem_cube.general import MultiMemoryMemCube
# 创建临时目录
temp_dir = tempfile.mkdtemp()
# 创建配置和MemCube(使用uninitialized避免依赖问题)
mem_configs = {
'test_mem': MemoryConfigFactory(backend='uninitialized')
}
config = MultiMemoryMemCubeConfig(memory_configs=mem_configs)
cube = MultiMemoryMemCube(config)
# 序列化
cube.dump(temp_dir)
print(f"✅ 序列化成功到: {temp_dir}")
# 检查文件
config_file = os.path.join(temp_dir, "config.json")
if os.path.exists(config_file):
print(f" ✅ 配置文件已创建: config.json")
else:
print(f" ❌ 配置文件未找到")
# 从目录加载
loaded_cube = MultiMemoryMemCube.init_from_dir(temp_dir)
print(f"✅ 从目录加载成功")
# 验证加载的配置
loaded_memories = loaded_cube.list_memories()
print(f" 加载的Memory模块: {list(loaded_memories.keys())}")
# 清理临时目录
shutil.rmtree(temp_dir, ignore_errors=True)
return True
except Exception as e:
print(f"❌ 序列化测试失败: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""主测试函数"""
print("🚀 开始测试多Memory模块MemCube实现")
print("=" * 60)
# 测试配置
config = test_multi_memory_config()
if config is None:
print("❌ 配置测试失败,终止测试")
return False
# 测试MemCube
cube = test_multi_memory_cube(config)
if cube is None:
print("❌ MemCube测试失败,终止测试")
return False
# 测试SDK
sdk_success = test_memory_ops_sdk()
if not sdk_success:
print("❌ SDK测试失败")
return False
# 测试序列化
dump_success = test_dump_and_load()
if not dump_success:
print("❌ 序列化测试失败")
return False
print("\n" + "=" * 60)
print("🎉 所有测试通过!多Memory模块MemCube实现成功")
return True
if __name__ == "__main__":
success = main()
sys.exit(0 if success else 1)