qwen_agent/tests/test_memori_manager.py
朱潮 455a48409d feat: integrate Memori long-term memory system
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>
2026-01-20 00:12:43 +08:00

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