From d8f053870f8f63307bbbcd2b36cb5f23d31051d2 Mon Sep 17 00:00:00 2001 From: Pankaj Kumar Bind Date: Sun, 20 Jul 2025 16:24:29 +0530 Subject: [PATCH 1/3] feat: Add Input Validation for Empty Message Content --- src/a2a/utils/task.py | 7 +++++-- tests/utils/test_task.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/a2a/utils/task.py b/src/a2a/utils/task.py index 9b8c82a9..5beaae5b 100644 --- a/src/a2a/utils/task.py +++ b/src/a2a/utils/task.py @@ -2,7 +2,7 @@ import uuid -from a2a.types import Artifact, Message, Task, TaskState, TaskStatus +from a2a.types import Artifact, Message, Task, TaskState, TaskStatus, TextPart def new_task(request: Message) -> Task: @@ -18,12 +18,15 @@ def new_task(request: Message) -> Task: Raises: TypeError: If the message role is None. - ValueError: If the message parts are empty. + ValueError: If the message parts are empty or if any part has empty content. """ if not request.role: raise TypeError('Message role cannot be None') if not request.parts: raise ValueError('Message parts cannot be empty') + for part in request.parts: + if isinstance(part.root, TextPart) and not part.root.text: + raise ValueError('Message parts cannot have empty content') return Task( status=TaskStatus(state=TaskState.submitted), diff --git a/tests/utils/test_task.py b/tests/utils/test_task.py index 0e391b74..078e34e2 100644 --- a/tests/utils/test_task.py +++ b/tests/utils/test_task.py @@ -144,6 +144,16 @@ def test_new_task_invalid_message_empty_parts(self): messageId=str(uuid.uuid4()), ) ) + + def test_new_task_invalid_message_empty_content(self): + with self.assertRaises(ValueError): + new_task( + Message( + role=Role.user, + parts=[Part(root=TextPart(text=''))], + messageId=str(uuid.uuid4()), + ) + ) def test_new_task_invalid_message_none_role(self): with self.assertRaises(TypeError): From 2e58384d39927fa7100a51f2e46f95fbf03d9fe1 Mon Sep 17 00:00:00 2001 From: Pankaj Kumar Bind <73558583+pankaj-bind@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:36:17 +0530 Subject: [PATCH 2/3] Update src/a2a/utils/task.py Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- src/a2a/utils/task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/a2a/utils/task.py b/src/a2a/utils/task.py index 5beaae5b..79133a1d 100644 --- a/src/a2a/utils/task.py +++ b/src/a2a/utils/task.py @@ -26,7 +26,7 @@ def new_task(request: Message) -> Task: raise ValueError('Message parts cannot be empty') for part in request.parts: if isinstance(part.root, TextPart) and not part.root.text: - raise ValueError('Message parts cannot have empty content') + raise ValueError('TextPart content cannot be empty') return Task( status=TaskStatus(state=TaskState.submitted), From 3cb072aa6eb0f40ab675fc8b16d86afa9637b64e Mon Sep 17 00:00:00 2001 From: Pankaj Kumar Bind <73558583+pankaj-bind@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:42:01 +0530 Subject: [PATCH 3/3] format linting --- tests/utils/test_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils/test_task.py b/tests/utils/test_task.py index 078e34e2..e332c977 100644 --- a/tests/utils/test_task.py +++ b/tests/utils/test_task.py @@ -144,7 +144,7 @@ def test_new_task_invalid_message_empty_parts(self): messageId=str(uuid.uuid4()), ) ) - + def test_new_task_invalid_message_empty_content(self): with self.assertRaises(ValueError): new_task(