Akshay66777's picture
AgentScope Gradio chat app — ZeroGPU-ready
9792ea7 verified
Raw
History Blame Contribute Delete
3.01 kB
# -*- coding: utf-8 -*-
"""The get task tool class."""
from pydantic import BaseModel, Field
from ._task_tool_base import _TaskToolBase
from .._response import ToolChunk
from ...state import AgentState
from ...exception import DeveloperOrientedException
from ...message import TextBlock, ToolResultState
class _TaskGetParams(BaseModel):
"""The params of the get task."""
task_id: str = Field(description="The ID of the task to retrieve")
class TaskGet(_TaskToolBase):
"""Retrieve a task by its ID from the task list."""
name: str = "TaskGet"
description: str = """Use this tool to retrieve a task by its ID from the task list.
## When to Use This Tool
- When you need the full description and context before starting work on a task
- To understand task dependencies (what it blocks, what blocks it)
- After being assigned a task, to get complete requirements
## Output
Returns full task details:
- **subject**: Task title
- **description**: Detailed requirements and context
- **status**: 'pending', 'in_progress', or 'completed'
- **blocks**: Tasks waiting on this one to complete
- **blockedBy**: Tasks that must complete before this one can start
## Tips
- After fetching a task, verify its blockedBy list is empty before beginning work.
- Use TaskList to see all tasks in summary form.""" # noqa: E501
input_schema: dict = _TaskGetParams.model_json_schema()
async def call(
self,
task_id: str,
_agent_state: AgentState,
) -> ToolChunk:
"""Retrieve a task by its ID."""
if not isinstance(_agent_state, AgentState):
# Expose error to the developer
raise DeveloperOrientedException(
f"Error: TaskGet requires AgentState to be provided, got "
f"{_agent_state} instead.",
)
# Find the task by ID
task = None
for t in _agent_state.tasks_context.tasks:
if t.id == task_id:
task = t
break
if task is None:
return ToolChunk(
content=[
TextBlock(text="Task not found"),
],
state=ToolResultState.ERROR,
)
# Build the response
lines = [
f"Task (id={task.id}): {task.subject}",
f"Status: {task.state}",
f"Description: {task.description}",
]
if task.owner:
lines.append(f"Owner: {task.owner}")
if task.blocked_by:
blocked_by_str = ", ".join([f"#{bid}" for bid in task.blocked_by])
lines.append(f"Blocked by: {blocked_by_str}")
if task.blocks:
blocks_str = ", ".join([f"#{bid}" for bid in task.blocks])
lines.append(f"Blocks: {blocks_str}")
if task.metadata:
lines.append(f"Metadata: {task.metadata}")
return ToolChunk(
content=[
TextBlock(text="\n".join(lines)),
],
)