Add Memori (https://github.com/MemoriLabs/Memori) integration for persistent cross-session memory capabilities in both create_agent and create_deep_agent. ## New Files - agent/memori_config.py: MemoriConfig dataclass for configuration - agent/memori_manager.py: MemoriManager for connection and instance management - agent/memori_middleware.py: MemoriMiddleware for memory recall/storage - tests/: Unit tests for Memori components ## Modified Files - agent/agent_config.py: Added enable_memori, memori_semantic_search_top_k, etc. - agent/deep_assistant.py: Integrated MemoriMiddleware into init_agent() - utils/settings.py: Added MEMORI_* environment variables - pyproject.toml: Added memori>=3.1.0 dependency ## Features - Semantic memory search with configurable top-k and threshold - Multi-tenant isolation (entity_id=user, process_id=bot, session_id) - Memory injection into system prompt - Background asynchronous memory augmentation - Graceful degradation when Memori is unavailable 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
"""
|
|
Memori 管理器测试
|
|
"""
|
|
|
|
import pytest
|
|
from agent.memori_manager import MemoriManager, get_memori_manager
|
|
|
|
|
|
class TestMemoriManager:
|
|
"""测试 MemoriManager 类"""
|
|
|
|
def test_singleton(self):
|
|
"""测试全局单例模式"""
|
|
manager1 = get_memori_manager()
|
|
manager2 = get_memori_manager()
|
|
assert manager1 is manager2
|
|
|
|
def test_initialization_state(self):
|
|
"""测试初始状态"""
|
|
manager = MemoriManager()
|
|
assert manager._initialized is False
|
|
assert manager._instances == {}
|
|
assert manager._sync_engines == {}
|
|
|
|
def test_clear_cache_all(self):
|
|
"""测试清除所有缓存"""
|
|
manager = MemoriManager()
|
|
manager._instances["key1"] = "value1"
|
|
manager._instances["key2"] = "value2"
|
|
|
|
manager.clear_cache()
|
|
assert manager._instances == {}
|
|
|
|
def test_clear_cache_selective(self):
|
|
"""测试选择性清除缓存"""
|
|
manager = MemoriManager()
|
|
manager._instances["user1:bot1"] = "value1"
|
|
manager._instances["user1:bot2"] = "value2"
|
|
manager._instances["user2:bot1"] = "value3"
|
|
|
|
# 只清除 user1 的缓存
|
|
manager.clear_cache(entity_id="user1")
|
|
assert "user1:bot1" not in manager._instances
|
|
assert "user1:bot2" not in manager._instances
|
|
assert "user2:bot1" in manager._instances
|
|
|
|
# 只清除 bot1 的缓存
|
|
manager.clear_cache(process_id="bot1")
|
|
assert "user2:bot1" not in manager._instances
|
|
|
|
def test_missing_db_url_and_pool(self):
|
|
"""测试没有提供 db_url 和 pool 的情况"""
|
|
import pytest
|
|
|
|
config = {
|
|
"entity_id": "user_123",
|
|
"process_id": "bot_456",
|
|
"session_id": "session_789",
|
|
}
|
|
|
|
# 需要 mock _create_memori_instance 或提供 db_url
|
|
# 这里只测试初始化逻辑
|
|
manager = MemoriManager()
|
|
assert manager._db_url is None
|
|
assert manager._db_pool is None
|