diff --git a/src/agents/extensions/memory/advanced_sqlite_session.py b/src/agents/extensions/memory/advanced_sqlite_session.py index 83c289bdf8..c77cb98149 100644 --- a/src/agents/extensions/memory/advanced_sqlite_session.py +++ b/src/agents/extensions/memory/advanced_sqlite_session.py @@ -172,6 +172,9 @@ async def get_items( """ session_limit = resolve_session_limit(limit, self.session_settings) + if session_limit is not None and session_limit <= 0: + return [] + if branch_id is None: branch_id = self._current_branch_id diff --git a/tests/extensions/memory/test_advanced_sqlite_session.py b/tests/extensions/memory/test_advanced_sqlite_session.py index ad4b5c4d86..c653b8b3a6 100644 --- a/tests/extensions/memory/test_advanced_sqlite_session.py +++ b/tests/extensions/memory/test_advanced_sqlite_session.py @@ -1288,6 +1288,12 @@ async def test_get_items_explicit_limit_overrides_session_settings(): assert retrieved[0].get("content") == "Message 8" assert retrieved[1].get("content") == "Message 9" + # Non-positive limits must return [] for parity with MongoDB/Redis/AsyncSQLite. + # SQLite treats LIMIT -1 as "no limit", so without an explicit guard a negative + # limit would incorrectly return all rows instead of an empty list. + assert await session.get_items(limit=0) == [] + assert await session.get_items(limit=-1) == [] + session.close()