From 1f130cb921aa3d34b7eece822dbe3de7b617e01a Mon Sep 17 00:00:00 2001 From: Hashim Khan <64767361+Hashim1999164@users.noreply.github.com> Date: Thu, 13 Aug 2026 04:33:55 +0500 Subject: [PATCH 1/2] Keep newest history item IDs when applying limit get_history_item_ids in the in-memory and file response stores used resolved[:limit], which dropped recent turns. Slice from the end so conversation history keeps the newest N items. Fixes #48514. --- .../azure-ai-agentserver-responses/CHANGELOG.md | 9 +++++++++ .../azure/ai/agentserver/responses/store/_file.py | 3 ++- .../azure/ai/agentserver/responses/store/_memory.py | 3 ++- .../tests/unit/test_in_memory_provider_crud.py | 2 ++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md b/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md index 312ac5bb7990..68e0ae5956b0 100644 --- a/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md +++ b/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md @@ -1,5 +1,14 @@ # Release History +## 2.1.0b2 (Unreleased) + +### Bugs Fixed + +- Fixed `InMemoryResponseProvider` and `FileResponseProvider` `get_history_item_ids` + truncating from the wrong end of the history list. When `limit` is smaller than + the resolved history, the providers now keep the newest item IDs instead of the + oldest. (#48514) + ## 2.1.0b1 (2026-08-11) ### Breaking Changes diff --git a/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_file.py b/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_file.py index 1ff434cb118a..6069faea9044 100644 --- a/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_file.py +++ b/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_file.py @@ -579,7 +579,8 @@ async def get_history_item_ids( if limit <= 0: return [] - return resolved[:limit] + # Keep the most recent N history items (drop oldest when over limit). + return resolved[-limit:] # ------------------------------------------------------------------ # Internal helpers (must be called with self._lock held) diff --git a/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_memory.py b/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_memory.py index 941be36ee682..97dec94f1d2f 100644 --- a/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_memory.py +++ b/sdk/agentserver/azure-ai-agentserver-responses/azure/ai/agentserver/responses/store/_memory.py @@ -325,7 +325,8 @@ async def get_history_item_ids( if limit <= 0: return [] - return resolved[:limit] + # Keep the most recent N history items (drop oldest when over limit). + return resolved[-limit:] async def create_execution(self, execution: ResponseExecution, *, ttl_seconds: int | None = None) -> None: """Create a new execution and replay container for ``execution.response_id``. diff --git a/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_in_memory_provider_crud.py b/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_in_memory_provider_crud.py index 3915baeb02fd..9b36e9b0f77a 100644 --- a/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_in_memory_provider_crud.py +++ b/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_in_memory_provider_crud.py @@ -374,6 +374,8 @@ def test_history__respects_limit() -> None: ids = asyncio.run(provider.get_history_item_ids("resp_lim", None, 3)) assert len(ids) == 3 + # Chronological order is oldest-first; truncation must keep the newest IDs. + assert ids == ["in_lim_7", "in_lim_8", "in_lim_9"] def test_history__zero_limit_returns_empty() -> None: From 3d675a32a28733d7ab25fc37869198d2646b28e1 Mon Sep 17 00:00:00 2001 From: Hashim1999164 <64767361+Hashim1999164@users.noreply.github.com> Date: Thu, 13 Aug 2026 05:20:50 +0500 Subject: [PATCH 2/2] Keep newest history ids under the limit and fix changelog --- .../azure-ai-agentserver-responses/CHANGELOG.md | 9 ++------- .../tests/unit/test_file_response_store_parity.py | 3 ++- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md b/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md index 68e0ae5956b0..4ae7f4fa224b 100644 --- a/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md +++ b/sdk/agentserver/azure-ai-agentserver-responses/CHANGELOG.md @@ -1,15 +1,10 @@ # Release History -## 2.1.0b2 (Unreleased) +## 2.1.0b1 (2026-08-13) ### Bugs Fixed -- Fixed `InMemoryResponseProvider` and `FileResponseProvider` `get_history_item_ids` - truncating from the wrong end of the history list. When `limit` is smaller than - the resolved history, the providers now keep the newest item IDs instead of the - oldest. (#48514) - -## 2.1.0b1 (2026-08-11) +- `get_history_item_ids` on the in-memory and file stores now keeps the newest item IDs when applying `limit`. (#48514) ### Breaking Changes diff --git a/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_file_response_store_parity.py b/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_file_response_store_parity.py index 89a94485b6f6..0779ed7cf260 100644 --- a/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_file_response_store_parity.py +++ b/sdk/agentserver/azure-ai-agentserver-responses/tests/unit/test_file_response_store_parity.py @@ -327,7 +327,8 @@ async def test_history_respects_limit(tmp_path: Path) -> None: history_item_ids=["hist1", "hist2"], ) ids = await provider.get_history_item_ids("r_prev", None, limit=3) - assert ids == ["hist1", "hist2", "in1"] + # Chronological order is oldest-first; truncation must keep the newest IDs. + assert ids == ["out1", "out2", "out3"] # Non-positive limit returns empty. ids_zero = await provider.get_history_item_ids("r_prev", None, limit=0) assert ids_zero == []