perf: cache ChromaDB PersistentClient instead of re-instantiating per call

The MCP server previously created a new PersistentClient on every tool
call via _get_collection(). This incurs HNSW index loading overhead
on each request.

Cache the client and collection at module level. The cache resets
naturally on process restart (MCP runs as a subprocess).

Also adds a _reset_mcp_cache fixture to conftest.py for test isolation.

Includes test infrastructure from PR #131.
92 tests pass.
This commit is contained in:
Igor Lins e Silva
2026-04-07 17:19:53 -03:00
parent 71736a3f4f
commit a67b00d7c7
2 changed files with 25 additions and 4 deletions
+13
View File
@@ -34,6 +34,19 @@ from mempalace.config import MempalaceConfig # noqa: E402
from mempalace.knowledge_graph import KnowledgeGraph # noqa: E402
@pytest.fixture(autouse=True)
def _reset_mcp_cache():
"""Reset the MCP server's cached ChromaDB client/collection between tests."""
yield
try:
from mempalace import mcp_server
mcp_server._client_cache = None
mcp_server._collection_cache = None
except (ImportError, AttributeError):
pass
@pytest.fixture(scope="session", autouse=True)
def _isolate_home():
"""Ensure HOME points to a temp dir for the entire test session.