| | import pytest
|
| | import asyncio
|
| | from unittest.mock import MagicMock
|
| | from mnemocore.agent_interface import CognitiveMemoryClient
|
| | from mnemocore.core.engine import HAIMEngine
|
| | from mnemocore.core.working_memory import WorkingMemoryService
|
| | from mnemocore.core.episodic_store import EpisodicStoreService
|
| | from mnemocore.core.semantic_store import SemanticStoreService
|
| | from mnemocore.core.procedural_store import ProceduralStoreService
|
| | from mnemocore.core.meta_memory import MetaMemoryService
|
| |
|
| | @pytest.fixture
|
| | def mock_engine():
|
| | engine = MagicMock(spec=HAIMEngine)
|
| | engine.encoder = MagicMock()
|
| | return engine
|
| |
|
| | def test_cognitive_client_observe_and_context(mock_engine):
|
| | wm = WorkingMemoryService()
|
| | client = CognitiveMemoryClient(
|
| | engine=mock_engine,
|
| | wm=wm,
|
| | episodic=MagicMock(),
|
| | semantic=MagicMock(),
|
| | procedural=MagicMock(),
|
| | meta=MagicMock()
|
| | )
|
| |
|
| | agent_id = "agent-alpha"
|
| | client.observe(agent_id, content="User said hi", importance=0.9)
|
| | client.observe(agent_id, content="User asked about weather", importance=0.7)
|
| |
|
| | ctx = client.get_working_context(agent_id)
|
| | assert len(ctx) == 2
|
| | assert ctx[0].content == "User said hi"
|
| |
|
| | def test_cognitive_client_episodic(mock_engine):
|
| | episodic = EpisodicStoreService()
|
| | client = CognitiveMemoryClient(
|
| | engine=mock_engine,
|
| | wm=MagicMock(),
|
| | episodic=episodic,
|
| | semantic=MagicMock(),
|
| | procedural=MagicMock(),
|
| | meta=MagicMock()
|
| | )
|
| |
|
| | agent_id = "agent-beta"
|
| | ep_id = client.start_episode(agent_id, goal="Greet user")
|
| | client.append_event(ep_id, kind="action", content="Said hello")
|
| | client.end_episode(ep_id, outcome="Success")
|
| |
|
| | recent = episodic.get_recent(agent_id)
|
| | assert len(recent) == 1
|
| | assert recent[0].goal == "Greet user"
|
| |
|
| | @pytest.mark.asyncio
|
| | async def test_cognitive_client_recall(mock_engine):
|
| | episodic = EpisodicStoreService()
|
| | client = CognitiveMemoryClient(
|
| | engine=mock_engine,
|
| | wm=MagicMock(),
|
| | episodic=episodic,
|
| | semantic=MagicMock(),
|
| | procedural=MagicMock(),
|
| | meta=MagicMock()
|
| | )
|
| |
|
| | agent_id = "agent-gamma"
|
| | ep_id = client.start_episode(agent_id, goal="Buy milk")
|
| | client.end_episode(ep_id, outcome="Success")
|
| |
|
| |
|
| | mock_engine.query.return_value = [("mem-1", 0.9)]
|
| |
|
| | mock_node = MagicMock()
|
| | mock_node.content = "Semantic info about milk"
|
| |
|
| | async def mock_get_memory(mem_id):
|
| | return mock_node
|
| |
|
| | mock_engine.tier_manager = MagicMock()
|
| | mock_engine.tier_manager.get_memory = mock_get_memory
|
| |
|
| | results = await client.recall(agent_id, query="milk", modes=("episodic", "semantic"))
|
| | assert len(results) == 2
|
| | sources = [r["source"] for r in results]
|
| | assert "episodic" in sources
|
| | assert "semantic/engine" in sources
|
| |
|