Skip to content

Commit 5061834

Browse files
authored
fix: Add Input Validation for Empty Message Content (#327)
# Description Adding input validation to the `new_task` function in `a2a/utils/task.py`. The new validation checks if any `part` within a `Message` contains empty content (e.g., `TextPart(text='')`) and raises a `ValueError` if it does. This enhancement improves the system's reliability by preventing the creation and processing of tasks with invalid or incomplete message data. ### Changes Made - Updated the `new_task` function in `src/a2a/utils/task.py` to iterate through message parts and check for empty content. - Added a new test case, `test_new_task_invalid_message_empty_content`, in `tests/utils/test_task.py` to ensure the validation works as expected.
1 parent 73c2e6f commit 5061834

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

src/a2a/utils/task.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import uuid
44

5-
from a2a.types import Artifact, Message, Task, TaskState, TaskStatus
5+
from a2a.types import Artifact, Message, Task, TaskState, TaskStatus, TextPart
66

77

88
def new_task(request: Message) -> Task:
@@ -18,12 +18,15 @@ def new_task(request: Message) -> Task:
1818
1919
Raises:
2020
TypeError: If the message role is None.
21-
ValueError: If the message parts are empty.
21+
ValueError: If the message parts are empty or if any part has empty content.
2222
"""
2323
if not request.role:
2424
raise TypeError('Message role cannot be None')
2525
if not request.parts:
2626
raise ValueError('Message parts cannot be empty')
27+
for part in request.parts:
28+
if isinstance(part.root, TextPart) and not part.root.text:
29+
raise ValueError('TextPart content cannot be empty')
2730

2831
return Task(
2932
status=TaskStatus(state=TaskState.submitted),

tests/utils/test_task.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,16 @@ def test_new_task_invalid_message_empty_parts(self):
145145
)
146146
)
147147

148+
def test_new_task_invalid_message_empty_content(self):
149+
with self.assertRaises(ValueError):
150+
new_task(
151+
Message(
152+
role=Role.user,
153+
parts=[Part(root=TextPart(text=''))],
154+
messageId=str(uuid.uuid4()),
155+
)
156+
)
157+
148158
def test_new_task_invalid_message_none_role(self):
149159
with self.assertRaises(TypeError):
150160
msg = Message.model_construct(

0 commit comments

Comments
 (0)