From a10c0cd0300695c203e60b863d76f789d96f56d8 Mon Sep 17 00:00:00 2001 From: Kartik Date: Fri, 14 Aug 2026 16:57:01 +0530 Subject: [PATCH] fix(mem0-plugin): stop search errors from looking like empty results (#6898) --- integrations/mem0-plugin/scripts/_search.py | 4 ++- integrations/mem0-plugin/tests/test_search.py | 34 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/integrations/mem0-plugin/scripts/_search.py b/integrations/mem0-plugin/scripts/_search.py index 5a19cfd41..95db89ce9 100644 --- a/integrations/mem0-plugin/scripts/_search.py +++ b/integrations/mem0-plugin/scripts/_search.py @@ -8,6 +8,7 @@ from __future__ import annotations import json import os +import sys import urllib.request SEARCH_URL = "https://api.mem0.ai/v3/memories/search/" @@ -83,7 +84,8 @@ def search_memories( if min_score > 0: results = [m for m in results if m.get("score", 0) >= min_score] return results - except Exception: + except Exception as e: + print(f"[mem0] search request failed: {e}", file=sys.stderr) return [] diff --git a/integrations/mem0-plugin/tests/test_search.py b/integrations/mem0-plugin/tests/test_search.py index ccf1437d3..58c1c8042 100644 --- a/integrations/mem0-plugin/tests/test_search.py +++ b/integrations/mem0-plugin/tests/test_search.py @@ -3,6 +3,7 @@ from __future__ import annotations import json +import urllib.error from unittest.mock import MagicMock, patch @@ -101,6 +102,39 @@ def test_search_memories_no_api_key_returns_empty(): assert results == [] +def test_search_memories_logs_rate_limit_error(capsys): + """Bug bash #22: a 429 must not look identical to a genuine empty result.""" + from _search import search_memories + + def mock_urlopen(req, timeout=None): + raise urllib.error.HTTPError("http://x", 429, "Too Many Requests", {}, None) + + with patch("urllib.request.urlopen", side_effect=mock_urlopen): + results = search_memories("key", "user", "proj", "query") + + assert results == [] + err = capsys.readouterr().err + assert "429" in err + assert "Too Many Requests" in err + + +def test_search_memories_happy_path_is_silent(capsys): + from _search import search_memories + + def mock_urlopen(req, timeout=None): + resp = MagicMock() + resp.read.return_value = json.dumps({"results": []}).encode() + resp.__enter__ = lambda s: s + resp.__exit__ = MagicMock(return_value=False) + return resp + + with patch("urllib.request.urlopen", side_effect=mock_urlopen): + results = search_memories("key", "user", "proj", "query") + + assert results == [] + assert capsys.readouterr().err == "" + + def test_search_memories_omits_rerank_by_default(): """Regression for #5684: rerank must not be sent unless requested.""" from _search import search_memories