From 0340ea852c3ab5e51d78503211ebf234e1da645b Mon Sep 17 00:00:00 2001 From: lkawka Date: Fri, 7 Nov 2025 23:17:03 +0000 Subject: [PATCH 1/2] Align limiting history with what the spec currently defines --- src/a2a/utils/task.py | 6 ++---- .../test_default_request_handler.py | 13 +++++++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/a2a/utils/task.py b/src/a2a/utils/task.py index 5c5f3f07..d8215cec 100644 --- a/src/a2a/utils/task.py +++ b/src/a2a/utils/task.py @@ -83,11 +83,9 @@ def apply_history_length(task: Task, history_length: int | None) -> Task: A new task object with limited history """ # Apply historyLength parameter if specified - if history_length is not None and task.history: + if history_length is not None and history_length > 0 and task.history: # Limit history to the most recent N messages - limited_history = ( - task.history[-history_length:] if history_length > 0 else [] - ) + limited_history = task.history[-history_length:] # Create a new task instance with limited history return task.model_copy(update={'history': limited_history}) diff --git a/tests/server/request_handlers/test_default_request_handler.py b/tests/server/request_handlers/test_default_request_handler.py index 5268af11..45cf1284 100644 --- a/tests/server/request_handlers/test_default_request_handler.py +++ b/tests/server/request_handlers/test_default_request_handler.py @@ -855,7 +855,7 @@ async def test_on_message_send_limit_history(): configuration=MessageSendConfiguration( blocking=True, accepted_output_modes=['text/plain'], - history_length=0, + history_length=1, ), ) @@ -866,13 +866,13 @@ async def test_on_message_send_limit_history(): # verify that history_length is honored assert result is not None assert isinstance(result, Task) - assert result.history is not None and len(result.history) == 0 + assert result.history is not None and len(result.history) == 1 assert result.status.state == TaskState.completed # verify that history is still persisted to the store task = await task_store.get(result.id) assert task is not None - assert task.history is not None and len(task.history) > 0 + assert task.history is not None and len(task.history) > 1 @pytest.mark.asyncio @@ -892,7 +892,8 @@ async def test_on_task_get_limit_history(): parts=[Part(root=TextPart(text='Hi'))], ), configuration=MessageSendConfiguration( - blocking=True, accepted_output_modes=['text/plain'] + blocking=True, + accepted_output_modes=['text/plain'], ), ) @@ -904,14 +905,14 @@ async def test_on_task_get_limit_history(): assert isinstance(result, Task) get_task_result = await request_handler.on_get_task( - TaskQueryParams(id=result.id, history_length=0), + TaskQueryParams(id=result.id, history_length=1), create_server_call_context(), ) assert get_task_result is not None assert isinstance(get_task_result, Task) assert ( get_task_result.history is not None - and len(get_task_result.history) == 0 + and len(get_task_result.history) == 1 ) From aa15b8b8ec591b1a13239d495d71d1672c0f159c Mon Sep 17 00:00:00 2001 From: lkawka Date: Fri, 7 Nov 2025 23:35:21 +0000 Subject: [PATCH 2/2] check unlimited history is returned --- .../request_handlers/test_default_request_handler.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/server/request_handlers/test_default_request_handler.py b/tests/server/request_handlers/test_default_request_handler.py index 45cf1284..88dd77ab 100644 --- a/tests/server/request_handlers/test_default_request_handler.py +++ b/tests/server/request_handlers/test_default_request_handler.py @@ -834,6 +834,11 @@ async def test_on_message_send_non_blocking(): assert task is not None assert task.status.state == TaskState.completed + assert ( + result.history + and task.history + and len(result.history) == len(task.history) + ) @pytest.mark.asyncio @@ -876,7 +881,7 @@ async def test_on_message_send_limit_history(): @pytest.mark.asyncio -async def test_on_task_get_limit_history(): +async def test_on_get_task_limit_history(): task_store = InMemoryTaskStore() push_store = InMemoryPushNotificationConfigStore()