From 2156ce77d75abb8418c63320a04f5e993025e16d Mon Sep 17 00:00:00 2001 From: HughhhhCoder Date: Sat, 5 Sep 2026 16:04:29 +0800 Subject: [PATCH 1/2] fix(memory): cap conversations page size --- .../memory/openai_conversations_session.py | 2 +- .../test_openai_conversations_session.py | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/agents/memory/openai_conversations_session.py b/src/agents/memory/openai_conversations_session.py index 8e0641067c..621dc5d12c 100644 --- a/src/agents/memory/openai_conversations_session.py +++ b/src/agents/memory/openai_conversations_session.py @@ -100,7 +100,7 @@ async def get_items(self, limit: int | None = None) -> list[TResponseInputItem]: else: async for item in self._openai_client.conversations.items.list( conversation_id=session_id, - limit=session_limit, + limit=min(session_limit, 100), order="desc", ): # calling model_dump() to make this serializable diff --git a/tests/memory/test_openai_conversations_session.py b/tests/memory/test_openai_conversations_session.py index d0075418d9..f401bf782e 100644 --- a/tests/memory/test_openai_conversations_session.py +++ b/tests/memory/test_openai_conversations_session.py @@ -232,6 +232,38 @@ async def test_get_items_zero_limit_returns_empty_without_api_call(self, mock_op assert session.session_id == "test_conversation_id" mock_openai_client.conversations.items.list.assert_not_called() + @pytest.mark.asyncio + async def test_get_items_applies_large_limit_after_provider_pagination( + self, mock_openai_client + ): + class ConversationItem: + def __init__(self, item_id: int) -> None: + self.item_id = item_id + + def model_dump(self, *, exclude_unset: bool) -> dict[str, int]: + assert exclude_unset is True + return {"item_id": self.item_id} + + yielded_item_ids: list[int] = [] + + async def descending_items(): + for item_id in range(101, -1, -1): + yielded_item_ids.append(item_id) + yield ConversationItem(item_id) + + mock_openai_client.conversations.items.list = MagicMock(return_value=descending_items()) + session = OpenAIConversationsSession( + conversation_id="test_id", openai_client=mock_openai_client + ) + + items = await session.get_items(limit=101) + + assert [cast(dict[str, int], item)["item_id"] for item in items] == list(range(1, 102)) + assert yielded_item_ids == list(range(101, 0, -1)) + mock_openai_client.conversations.items.list.assert_called_once_with( + conversation_id="test_id", limit=100, order="desc" + ) + @pytest.mark.asyncio async def test_add_items_simple(self, mock_openai_client): """Test adding items to the conversation.""" From a36bf6aadcefdeda5100c3fc4d9184dc746f433f Mon Sep 17 00:00:00 2001 From: HughhhhCoder Date: Sat, 5 Sep 2026 16:19:08 +0800 Subject: [PATCH 2/2] fix(memory): defer conversation page sizing --- src/agents/memory/openai_conversations_session.py | 1 - tests/memory/test_openai_conversations_session.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/agents/memory/openai_conversations_session.py b/src/agents/memory/openai_conversations_session.py index 621dc5d12c..8b1dcd4916 100644 --- a/src/agents/memory/openai_conversations_session.py +++ b/src/agents/memory/openai_conversations_session.py @@ -100,7 +100,6 @@ async def get_items(self, limit: int | None = None) -> list[TResponseInputItem]: else: async for item in self._openai_client.conversations.items.list( conversation_id=session_id, - limit=min(session_limit, 100), order="desc", ): # calling model_dump() to make this serializable diff --git a/tests/memory/test_openai_conversations_session.py b/tests/memory/test_openai_conversations_session.py index f401bf782e..908b592765 100644 --- a/tests/memory/test_openai_conversations_session.py +++ b/tests/memory/test_openai_conversations_session.py @@ -261,7 +261,7 @@ async def descending_items(): assert [cast(dict[str, int], item)["item_id"] for item in items] == list(range(1, 102)) assert yielded_item_ids == list(range(101, 0, -1)) mock_openai_client.conversations.items.list.assert_called_once_with( - conversation_id="test_id", limit=100, order="desc" + conversation_id="test_id", order="desc" ) @pytest.mark.asyncio