from types import SimpleNamespace from app.config import Config from app.services.memory_entity_reader import LocalEntityNode from app.services.oasis_profile_generator import OasisProfileGenerator def test_profile_generator_can_disable_zep_context_for_local_memory(monkeypatch): monkeypatch.setattr(Config, "LLM_API_KEY", "test-key") monkeypatch.setattr(Config, "ZEP_API_KEY", "zep-key-that-must-not-be-used") generator = OasisProfileGenerator( graph_id="graph-local", use_zep_context=False, ) assert generator.zep_api_key is None assert generator.zep_client is None def test_profile_generator_never_constructs_zep_in_local_backend(monkeypatch): monkeypatch.setattr(Config, "MEMORY_BACKEND", "local") monkeypatch.setattr(Config, "LLM_API_KEY", "test-key") monkeypatch.setattr(Config, "ZEP_API_KEY", "zep-key-that-must-not-be-used") generator = OasisProfileGenerator(graph_id="graph-local") assert generator.zep_api_key is None assert generator.zep_client is None def test_profile_generator_uses_local_memory_context_without_zep(monkeypatch): monkeypatch.setattr(Config, "LLM_API_KEY", "test-key") class FakeLocalMemoryTools: def search_graph(self, query, *, limit=10, scope="both"): assert query == "Alice" assert limit == 30 assert scope == "both" return SimpleNamespace( facts=["Alice founded Orbit"], nodes=[{"name": "Orbit", "summary": "A local project"}], ) generator = OasisProfileGenerator( graph_id="graph-local", use_zep_context=False, local_memory_tools=FakeLocalMemoryTools(), ) entity = LocalEntityNode( uuid="node-alice", name="Alice", labels=["Entity", "person"], summary="A founder", attributes={}, ) context = generator._build_entity_context(entity) assert "Alice founded Orbit" in context assert "Orbit" in context assert generator.zep_client is None