From 5c37e6fb1ba3a6235054eef991c0388b4abb7dc2 Mon Sep 17 00:00:00 2001 From: Pratik Dhanave Date: Mon, 2 Nov 2026 19:22:35 +0530 Subject: [PATCH] fix(memory): allow RetrievalConfig top_k=1 (ge=1, not gt=1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RetrievalConfig.top_k used Field(gt=1), which rejects top_k=1 — a legitimate request for the single best-scoring record. The SDK itself calls retrieve_memories(..., top_k=1) (client.py), and RetrievalConfig is a public parameter of MemorySessionManager.process_turn_with_llm, so a caller passing top_k=1 hits pydantic ValidationError. The upper bound is already inclusive (le=100); make the lower bound inclusive too. Add a regression test. --- src/bedrock_agentcore/memory/constants.py | 2 +- tests/bedrock_agentcore/memory/test_session.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/bedrock_agentcore/memory/constants.py b/src/bedrock_agentcore/memory/constants.py index 6ab3a444..ba4687d6 100644 --- a/src/bedrock_agentcore/memory/constants.py +++ b/src/bedrock_agentcore/memory/constants.py @@ -157,7 +157,7 @@ class RetrievalConfig(BaseModel): retrieval_query: Optional custom query for semantic search (default: None) """ - top_k: int = Field(default=10, gt=1, le=100) + top_k: int = Field(default=10, ge=1, le=100) relevance_score: float = Field(default=0.0, ge=0.0, le=1.0) strategy_id: Optional[str] = None retrieval_query: Optional[str] = None diff --git a/tests/bedrock_agentcore/memory/test_session.py b/tests/bedrock_agentcore/memory/test_session.py index 3108587a..d33cafcc 100644 --- a/tests/bedrock_agentcore/memory/test_session.py +++ b/tests/bedrock_agentcore/memory/test_session.py @@ -3940,3 +3940,17 @@ def test_get_last_k_turns_explicit_max_results(self): manager.get_last_k_turns(actor_id="user-123", session_id="session-456", k=200, max_results=50) call_kwargs = manager._data_plane_client.list_events.call_args[1] assert call_kwargs["maxResults"] == 50 + + +def test_retrieval_config_top_k_allows_one(): + """top_k=1 (single best-scoring record) is valid; the SDK itself calls + retrieve_memories(top_k=1). The lower bound must be inclusive (ge=1).""" + import pytest as _pytest + from pydantic import ValidationError + + assert RetrievalConfig(top_k=1).top_k == 1 # must not raise + # bounds still enforced on either side + with _pytest.raises(ValidationError): + RetrievalConfig(top_k=0) + with _pytest.raises(ValidationError): + RetrievalConfig(top_k=101)