diff --git a/src/selectools/entity_memory.py b/src/selectools/entity_memory.py index c41776a..af5e51c 100644 --- a/src/selectools/entity_memory.py +++ b/src/selectools/entity_memory.py @@ -8,6 +8,7 @@ from __future__ import annotations import json +import logging import re import threading import time @@ -17,6 +18,8 @@ from .stability import stable from .types import Message, Role +logger = logging.getLogger(__name__) + @stable @dataclass @@ -173,6 +176,7 @@ def extract_entities( ) return extracted except Exception: + logger.warning("Entity extraction failed", exc_info=True) return [] def update(self, entities: List[Entity]) -> None: diff --git a/tests/test_entity_memory.py b/tests/test_entity_memory.py index 1f9e995..d5d061d 100644 --- a/tests/test_entity_memory.py +++ b/tests/test_entity_memory.py @@ -132,6 +132,15 @@ def test_invalid_json_returns_empty(self) -> None: result = em.extract_entities([Message(role=Role.USER, content="test")]) assert result == [] + def test_provider_failure_logs_warning(self, caplog) -> None: + import logging as _logging + + em = EntityMemory(provider=FailingProvider()) + with caplog.at_level(_logging.WARNING, logger="selectools.entity_memory"): + result = em.extract_entities([Message(role=Role.USER, content="test")]) + assert result == [] + assert "Entity extraction failed" in caplog.text + def test_respects_relevance_window(self) -> None: entities_json = json.dumps([{"name": "X", "entity_type": "concept"}]) provider = FakeExtractionProvider(entities_json)