diff --git a/backend/chat.py b/backend/chat.py index 31e9cd0..d222020 100644 --- a/backend/chat.py +++ b/backend/chat.py @@ -100,5 +100,6 @@ def _collect(nodes: list, parts: list): parts = [] _collect(tree if isinstance(tree, list) else [tree], parts) return "\n\n".join(parts) - except Exception: + except Exception as e: + logger.warning(f"Failed to extract summaries from structure JSON: {e}") return "" diff --git a/tests/test_api.py b/tests/test_api.py index 899d446..4db0edf 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -135,6 +135,44 @@ def test_answer_does_not_contain_suggestion_marker(self, client_with_docs): assert "💡 SUGERENCIA:" not in data["answer"] +# --------------------------------------------------------------------------- +# _extract_summaries (unit) +# --------------------------------------------------------------------------- + +class TestExtractSummaries: + def test_returns_empty_string_on_invalid_json(self, caplog): + import logging + from backend.chat import _extract_summaries + + with caplog.at_level(logging.WARNING, logger="backend.chat"): + result = _extract_summaries("not valid json{{{") + + assert result == "" + assert "Failed to extract summaries" in caplog.text + + def test_extracts_nested_summaries(self): + from backend.chat import _extract_summaries + import json + + structure = json.dumps([{ + "title": "Root", + "summary": "Root summary", + "nodes": [ + {"title": "Child", "summary": "Child summary", "nodes": []} + ] + }]) + result = _extract_summaries(structure) + assert "Root summary" in result + assert "Child summary" in result + + def test_returns_empty_string_on_empty_nodes(self): + from backend.chat import _extract_summaries + import json + + result = _extract_summaries(json.dumps([{"title": "T", "nodes": []}])) + assert result == "" + + # --------------------------------------------------------------------------- # POST /upload # ---------------------------------------------------------------------------