fix(mem0-plugin): stop search errors from looking like empty results (#6898)
This commit is contained in:
@@ -8,6 +8,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
SEARCH_URL = "https://api.mem0.ai/v3/memories/search/"
|
SEARCH_URL = "https://api.mem0.ai/v3/memories/search/"
|
||||||
@@ -83,7 +84,8 @@ def search_memories(
|
|||||||
if min_score > 0:
|
if min_score > 0:
|
||||||
results = [m for m in results if m.get("score", 0) >= min_score]
|
results = [m for m in results if m.get("score", 0) >= min_score]
|
||||||
return results
|
return results
|
||||||
except Exception:
|
except Exception as e:
|
||||||
|
print(f"[mem0] search request failed: {e}", file=sys.stderr)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import urllib.error
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
|
|
||||||
@@ -101,6 +102,39 @@ def test_search_memories_no_api_key_returns_empty():
|
|||||||
assert results == []
|
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():
|
def test_search_memories_omits_rerank_by_default():
|
||||||
"""Regression for #5684: rerank must not be sent unless requested."""
|
"""Regression for #5684: rerank must not be sent unless requested."""
|
||||||
from _search import search_memories
|
from _search import search_memories
|
||||||
|
|||||||
Reference in New Issue
Block a user