Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/a2a/utils/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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),
Expand Down
10 changes: 10 additions & 0 deletions tests/utils/test_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
Loading