From ced852033ba1e3578da5058a37b18cfdaa724203 Mon Sep 17 00:00:00 2001 From: Hrushikesh Yadav <136978914+HrushiYadav@users.noreply.github.com> Date: Fri, 12 Jun 2026 19:35:24 +0530 Subject: [PATCH] fix: return 400 instead of 502 for invalid search filters (#5482) --- server/main.py | 4 ++++ tests/test_server_params.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/server/main.py b/server/main.py index f5cc553f5..7476698a1 100644 --- a/server/main.py +++ b/server/main.py @@ -451,6 +451,10 @@ def search_memories(search_req: SearchRequest, _auth=Depends(verify_auth)): if search_req.explain is not None: params["explain"] = search_req.explain return get_memory_instance().search(query=search_req.query, filters=filters, **params) + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + except HTTPException: + raise except Exception: raise upstream_error() diff --git a/tests/test_server_params.py b/tests/test_server_params.py index 977738d47..6ee58de69 100644 --- a/tests/test_server_params.py +++ b/tests/test_server_params.py @@ -682,3 +682,22 @@ class TestSearchEntityIdMapping: _, kwargs = mock_memory.search.call_args assert kwargs["filters"]["user_id"] == "u1" assert kwargs["filters"]["category"] == "food" + + +class TestSearchValidationErrors: + """Verify that ValueError from Memory.search() returns 400, not 502.""" + + def test_empty_filters_returns_400(self, client, mock_memory): + mock_memory.search.side_effect = ValueError( + "filters must contain at least one of: user_id, agent_id, run_id" + ) + resp = client.post("/search", json={"query": "food", "filters": {}}) + assert resp.status_code == 400 + assert "filters must contain" in resp.json()["detail"] + + def test_no_identifiers_returns_400(self, client, mock_memory): + mock_memory.search.side_effect = ValueError( + "filters must contain at least one of: user_id, agent_id, run_id" + ) + resp = client.post("/search", json={"query": "food"}) + assert resp.status_code == 400