fix(tests): use top_k instead of limit in test_server_params (#4820)

This commit is contained in:
shafdev
2026-04-14 01:11:31 +05:30
committed by GitHub
parent 85768e78e7
commit 4a7e166f9a
+20 -20
View File
@@ -2,7 +2,7 @@
Verifies that the Pydantic request models in server/main.py correctly accept Verifies that the Pydantic request models in server/main.py correctly accept
and forward all parameters supported by the underlying Memory class methods, and forward all parameters supported by the underlying Memory class methods,
including limit, threshold, infer, memory_type, and prompt — which were including top_k, threshold, infer, memory_type, and prompt — which were
previously silently dropped by Pydantic v2's default extra='ignore' behavior. previously silently dropped by Pydantic v2's default extra='ignore' behavior.
""" """
@@ -55,31 +55,31 @@ def mock_memory(_mock_memory):
# =========================================================================== # ===========================================================================
# SearchRequest: limit parameter # SearchRequest: top_k parameter
# =========================================================================== # ===========================================================================
class TestSearchLimit: class TestSearchLimit:
"""Verify that the limit parameter is accepted and forwarded to Memory.search().""" """Verify that the top_k parameter is accepted and forwarded to Memory.search()."""
def test_limit_forwarded(self, client, mock_memory): def test_limit_forwarded(self, client, mock_memory):
resp = client.post("/search", json={"query": "food", "user_id": "u1", "limit": 5}) resp = client.post("/search", json={"query": "food", "user_id": "u1", "top_k": 5})
assert resp.status_code == 200 assert resp.status_code == 200
_, kwargs = mock_memory.search.call_args _, kwargs = mock_memory.search.call_args
assert kwargs["limit"] == 5 assert kwargs["top_k"] == 5
def test_limit_one(self, client, mock_memory): def test_limit_one(self, client, mock_memory):
resp = client.post("/search", json={"query": "food", "user_id": "u1", "limit": 1}) resp = client.post("/search", json={"query": "food", "user_id": "u1", "top_k": 1})
assert resp.status_code == 200 assert resp.status_code == 200
_, kwargs = mock_memory.search.call_args _, kwargs = mock_memory.search.call_args
assert kwargs["limit"] == 1 assert kwargs["top_k"] == 1
def test_limit_omitted_uses_memory_default(self, client, mock_memory): def test_limit_omitted_uses_memory_default(self, client, mock_memory):
"""When limit is not sent, it should not appear in the kwargs, """When top_k is not sent, it should not appear in the kwargs,
allowing Memory.search() to use its own default (100).""" allowing Memory.search() to use its own default (100)."""
resp = client.post("/search", json={"query": "food", "user_id": "u1"}) resp = client.post("/search", json={"query": "food", "user_id": "u1"})
assert resp.status_code == 200 assert resp.status_code == 200
_, kwargs = mock_memory.search.call_args _, kwargs = mock_memory.search.call_args
assert "limit" not in kwargs assert "top_k" not in kwargs
# =========================================================================== # ===========================================================================
@@ -110,18 +110,18 @@ class TestSearchThreshold:
# =========================================================================== # ===========================================================================
# SearchRequest: limit + threshold together # SearchRequest: top_k + threshold together
# =========================================================================== # ===========================================================================
class TestSearchLimitAndThreshold: class TestSearchLimitAndThreshold:
def test_both_forwarded(self, client, mock_memory): def test_both_forwarded(self, client, mock_memory):
resp = client.post("/search", json={ resp = client.post("/search", json={
"query": "food", "user_id": "u1", "limit": 10, "threshold": 0.5 "query": "food", "user_id": "u1", "top_k": 10, "threshold": 0.5
}) })
assert resp.status_code == 200 assert resp.status_code == 200
_, kwargs = mock_memory.search.call_args _, kwargs = mock_memory.search.call_args
assert kwargs["limit"] == 10 assert kwargs["top_k"] == 10
assert kwargs["threshold"] == 0.5 assert kwargs["threshold"] == 0.5
@@ -334,8 +334,8 @@ class TestOpenAPISchema:
def test_search_schema_includes_limit(self, client): def test_search_schema_includes_limit(self, client):
schema = client.get("/openapi.json").json() schema = client.get("/openapi.json").json()
search_props = schema["components"]["schemas"]["SearchRequest"]["properties"] search_props = schema["components"]["schemas"]["SearchRequest"]["properties"]
assert "limit" in search_props assert "top_k" in search_props
assert search_props["limit"]["description"] == "Maximum number of results to return." assert search_props["top_k"]["description"] == "Maximum number of results to return."
def test_search_schema_includes_threshold(self, client): def test_search_schema_includes_threshold(self, client):
schema = client.get("/openapi.json").json() schema = client.get("/openapi.json").json()
@@ -367,7 +367,7 @@ class TestTypeValidation:
def test_limit_string_rejected(self, client): def test_limit_string_rejected(self, client):
resp = client.post("/search", json={ resp = client.post("/search", json={
"query": "food", "user_id": "u1", "limit": "not_a_number", "query": "food", "user_id": "u1", "top_k": "not_a_number",
}) })
assert resp.status_code == 422 assert resp.status_code == 422
@@ -399,7 +399,7 @@ class TestTypeValidation:
def test_limit_float_rejected(self, client): def test_limit_float_rejected(self, client):
resp = client.post("/search", json={ resp = client.post("/search", json={
"query": "food", "user_id": "u1", "limit": 5.7, "query": "food", "user_id": "u1", "top_k": 5.7,
}) })
assert resp.status_code == 422 assert resp.status_code == 422
@@ -422,11 +422,11 @@ class TestExplicitNull:
def test_limit_null_uses_memory_default(self, client, mock_memory): def test_limit_null_uses_memory_default(self, client, mock_memory):
resp = client.post("/search", json={ resp = client.post("/search", json={
"query": "food", "user_id": "u1", "limit": None, "query": "food", "user_id": "u1", "top_k": None,
}) })
assert resp.status_code == 200 assert resp.status_code == 200
_, kwargs = mock_memory.search.call_args _, kwargs = mock_memory.search.call_args
assert "limit" not in kwargs assert "top_k" not in kwargs
def test_infer_null_uses_memory_default(self, client, mock_memory): def test_infer_null_uses_memory_default(self, client, mock_memory):
resp = client.post("/memories", json={ resp = client.post("/memories", json={
@@ -462,12 +462,12 @@ class TestCallSignatureMatch:
resp = client.post("/search", json={ resp = client.post("/search", json={
"query": "food", "user_id": "u1", "agent_id": "a1", "query": "food", "user_id": "u1", "agent_id": "a1",
"run_id": "r1", "filters": {"k": "v"}, "run_id": "r1", "filters": {"k": "v"},
"limit": 10, "threshold": 0.5, "top_k": 10, "threshold": 0.5,
}) })
assert resp.status_code == 200 assert resp.status_code == 200
# The handler passes query= as a keyword arg, so it appears in kwargs too # The handler passes query= as a keyword arg, so it appears in kwargs too
_, kwargs = mock_memory.search.call_args _, kwargs = mock_memory.search.call_args
valid_params = {"query", "user_id", "agent_id", "run_id", "limit", "filters", "threshold", "rerank"} valid_params = {"query", "user_id", "agent_id", "run_id", "top_k", "filters", "threshold", "rerank"}
for key in kwargs: for key in kwargs:
assert key in valid_params, f"Unexpected kwarg '{key}' forwarded to Memory.search()" assert key in valid_params, f"Unexpected kwarg '{key}' forwarded to Memory.search()"