API reference¶
Public exports from pydantic_team.
pydantic_team ¶
Type-safe team orchestration for pydantic-ai Agents.
BaseTeam ¶
Bases: ABC, Generic[OutputT]
Abstract base for team orchestration strategies.
members
abstractmethod
property
¶
Agents or nested teams that participate in this team.
run
abstractmethod
async
¶
Execute the team against user_prompt.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_prompt
|
str
|
User input for the team run. |
required |
usage
|
RunUsage | None
|
Optional usage accumulator shared with nested agent runs. |
None
|
Returns:
| Type | Description |
|---|---|
TeamResult[OutputT]
|
A |
Source code in pydantic_team/base.py
TeamResult
dataclass
¶
Bases: Generic[OutputT]
Outcome of a team run.
Attributes:
| Name | Type | Description |
|---|---|---|
data |
OutputT
|
Final output produced by the team (leader output for hierarchical teams). |
usage |
RunUsage
|
Aggregated token/request usage for all agents involved in the run. |
HierarchicalTeam ¶
HierarchicalTeam(
*,
members: Sequence[TeamMember],
leader_agent: Agent[object, object] | None = None,
leader_model: str | None = None,
system_prompt_override: str | None = None,
name: str | None = None,
)
Bases: BaseTeam[object]
Leader-driven team that registers each member as a delegation tool.
Follows pydantic-ai
agent delegation:
nested member runs receive usage=ctx.usage so tokens aggregate on the leader run.
Create a hierarchical team.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
members
|
Sequence[TeamMember]
|
Specialist agents or nested teams (at least one required). |
required |
leader_agent
|
Agent[object, object] | None
|
Existing leader agent. Mutually exclusive with |
None
|
leader_model
|
str | None
|
Model string used to construct a leader agent when
|
None
|
system_prompt_override
|
str | None
|
Optional leader instructions / extra system prompt. |
None
|
name
|
str | None
|
Optional team name (used when this team is nested as a member tool). |
None
|
Source code in pydantic_team/hierarchical.py
CollaborativeTeam ¶
CollaborativeTeam(
*,
members: Sequence[AnyAgent],
leader_agent: AnyAgent | None = None,
leader_model: str | None = None,
system_prompt_override: str | None = None,
name: str | None = None,
max_rounds: int = 3,
max_replans: int = 0,
max_assignments_per_tick: int | None = None,
dispatch_mode: DispatchMode = 'phased',
require_review: bool = False,
)
Bases: BaseTeam[object]
Team that coordinates work through a shared TaskBoard.
The leader creates and assigns tasks by role; members complete their assigned work
in parallel (phased rounds or streaming dispatch). When the board remains incomplete,
the leader may replan (up to max_replans) before synthesizing. Members may
message each other directly via board tools (send_message / list_messages).
Create a collaborative team.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
members
|
Sequence[AnyAgent]
|
Teammate agents (at least one). Nested teams are not supported here. |
required |
leader_agent
|
AnyAgent | None
|
Existing leader. Mutually exclusive with |
None
|
leader_model
|
str | None
|
Model string used to build the leader when |
None
|
system_prompt_override
|
str | None
|
Optional leader instructions / extra system prompt. |
None
|
name
|
str | None
|
Optional team name. |
None
|
max_rounds
|
int
|
In |
3
|
max_replans
|
int
|
How many times the leader may replan after incomplete member phases.
|
0
|
max_assignments_per_tick
|
int | None
|
If set, each member tick only lists this many incomplete assignments (caps work per round without relying on soft prompt wording). |
None
|
dispatch_mode
|
DispatchMode
|
|
'phased'
|
require_review
|
bool
|
When True, new tasks get |
False
|
Source code in pydantic_team/collaborative.py
692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 | |
member_ids
property
¶
Stable teammate ids used with assign_task (agent names).
iter ¶
Start an observable collaborative run (async context + async iterator).
Source code in pydantic_team/collaborative.py
CollaborativeRun
dataclass
¶
CollaborativeRun(
leader: AnyAgent,
members: Sequence[AnyAgent],
member_ids: Sequence[str],
max_rounds: int,
max_replans: int,
max_assignments_per_tick: int | None,
dispatch_mode: DispatchMode,
run_member: RunMemberFn,
user_prompt: str,
require_review: bool,
_usage: RunUsage,
_board: TaskBoard = TaskBoard(),
_events: Queue[TeamEvent | None] = (
lambda: asyncio.Queue[TeamEvent | None]()
)(),
_result: TeamResult[object] | None = None,
_driver: Task[None] | None = None,
_error: BaseException | None = None,
)
Step-by-step collaborative run (inspired by pydantic-graph GraphRun).
TeamTask
dataclass
¶
A unit of scheduled collaborative work (inspired by pydantic-graph GraphTask).
TasksScheduled
dataclass
¶
One or more tasks are about to run (or have just been spawned).
TaskCompleted
dataclass
¶
A scheduled task finished (board may have been mutated via tools).
PhaseJoined
dataclass
¶
No inflight work remains for this phase (join / barrier).
MessagePosted
dataclass
¶
A teammate posted a peer message on the board.
TaskReviewDecided
dataclass
¶
A reviewer approved or rejected a board task.
RunEnded
dataclass
¶
The collaborative run finished with a final result.
TaskBoard
dataclass
¶
TaskBoard(
_tasks: dict[str, Task] = (lambda: {})(),
_messages: list[BoardMessage] = (
lambda: list[BoardMessage]()
)(),
_lock: Lock = asyncio.Lock(),
_counter: int = 0,
_message_counter: int = 0,
_wakeup: Event = asyncio.Event(),
_wakeup_agents: set[str] = (lambda: set[str]())(),
)
Thread-safe in-process task list shared by a collaborative team.
add_task
async
¶
Create an open task and return its snapshot.
Source code in pydantic_team/board.py
list_tasks
async
¶
Return task snapshots, optionally filtered by status.
Source code in pydantic_team/board.py
post_message
async
¶
Append a peer message; optionally link to an existing task.
Source code in pydantic_team/board.py
list_messages
async
¶
Return messages; when agent_id is set, only visible ones for that agent.
Source code in pydantic_team/board.py
messages_snapshot ¶
claim
async
¶
Atomically claim an open task for agent_id.
Source code in pydantic_team/board.py
assign
async
¶
Force-assign a non-done, non-pending-review task to agent_id (lead operation).
Source code in pydantic_team/board.py
assign_reviewer
async
¶
Set or replace the reviewer on a non-done task.
Source code in pydantic_team/board.py
complete
async
¶
Mark work submitted; gated tasks become pending_review, others done.
Source code in pydantic_team/board.py
approve
async
¶
Accept a pending_review task; only the reviewer may approve.
Source code in pydantic_team/board.py
reject
async
¶
Reject a pending_review task back to needs_revision; reason required.
Source code in pydantic_team/board.py
is_complete ¶
Return True when there are no tasks or every task is done.
snapshot ¶
signal_wakeup ¶
Wake waiters; optionally record which agent gained work.
wait_wakeup
async
¶
Block until signal_wakeup; return agent ids recorded since last wait.
Source code in pydantic_team/board.py
Task
dataclass
¶
Task(
id: str,
title: str,
description: str = '',
status: TaskStatus = TaskStatus.OPEN,
assignee: str | None = None,
result: str | None = None,
reviewer: str | None = None,
rejection_reason: str | None = None,
)
A unit of work on the shared board.
BoardMessage
dataclass
¶
A peer message posted on the shared board.
TaskStatus ¶
Bases: str, Enum
Lifecycle status of a board task.
BoardDeps
dataclass
¶
BoardDeps(
board: TaskBoard,
agent_id: str,
member_ids: tuple[str, ...],
leader_id: str = 'leader',
emit: EmitFn | None = None,
require_review: bool = False,
)
Dependencies injected into leader and member agent runs.
instrument_pydantic_team ¶
Enable or disable OpenTelemetry spans for team orchestration (idempotent).
Base types¶
pydantic_team.base.TeamResult
dataclass
¶
Bases: Generic[OutputT]
Outcome of a team run.
Attributes:
| Name | Type | Description |
|---|---|---|
data |
OutputT
|
Final output produced by the team (leader output for hierarchical teams). |
usage |
RunUsage
|
Aggregated token/request usage for all agents involved in the run. |
pydantic_team.base.BaseTeam ¶
Bases: ABC, Generic[OutputT]
Abstract base for team orchestration strategies.
members
abstractmethod
property
¶
Agents or nested teams that participate in this team.
run
abstractmethod
async
¶
Execute the team against user_prompt.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
user_prompt
|
str
|
User input for the team run. |
required |
usage
|
RunUsage | None
|
Optional usage accumulator shared with nested agent runs. |
None
|
Returns:
| Type | Description |
|---|---|
TeamResult[OutputT]
|
A |
Source code in pydantic_team/base.py
Hierarchical team¶
pydantic_team.hierarchical.HierarchicalTeam ¶
HierarchicalTeam(
*,
members: Sequence[TeamMember],
leader_agent: Agent[object, object] | None = None,
leader_model: str | None = None,
system_prompt_override: str | None = None,
name: str | None = None,
)
Bases: BaseTeam[object]
Leader-driven team that registers each member as a delegation tool.
Follows pydantic-ai
agent delegation:
nested member runs receive usage=ctx.usage so tokens aggregate on the leader run.
Create a hierarchical team.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
members
|
Sequence[TeamMember]
|
Specialist agents or nested teams (at least one required). |
required |
leader_agent
|
Agent[object, object] | None
|
Existing leader agent. Mutually exclusive with |
None
|
leader_model
|
str | None
|
Model string used to construct a leader agent when
|
None
|
system_prompt_override
|
str | None
|
Optional leader instructions / extra system prompt. |
None
|
name
|
str | None
|
Optional team name (used when this team is nested as a member tool). |
None
|
Source code in pydantic_team/hierarchical.py
Collaborative team / board¶
pydantic_team.board.TaskStatus ¶
Bases: str, Enum
Lifecycle status of a board task.
pydantic_team.board.Task
dataclass
¶
Task(
id: str,
title: str,
description: str = '',
status: TaskStatus = TaskStatus.OPEN,
assignee: str | None = None,
result: str | None = None,
reviewer: str | None = None,
rejection_reason: str | None = None,
)
A unit of work on the shared board.
pydantic_team.board.BoardMessage
dataclass
¶
A peer message posted on the shared board.
pydantic_team.board.TaskBoard
dataclass
¶
TaskBoard(
_tasks: dict[str, Task] = (lambda: {})(),
_messages: list[BoardMessage] = (
lambda: list[BoardMessage]()
)(),
_lock: Lock = asyncio.Lock(),
_counter: int = 0,
_message_counter: int = 0,
_wakeup: Event = asyncio.Event(),
_wakeup_agents: set[str] = (lambda: set[str]())(),
)
Thread-safe in-process task list shared by a collaborative team.
add_task
async
¶
Create an open task and return its snapshot.
Source code in pydantic_team/board.py
list_tasks
async
¶
Return task snapshots, optionally filtered by status.
Source code in pydantic_team/board.py
post_message
async
¶
Append a peer message; optionally link to an existing task.
Source code in pydantic_team/board.py
list_messages
async
¶
Return messages; when agent_id is set, only visible ones for that agent.
Source code in pydantic_team/board.py
messages_snapshot ¶
claim
async
¶
Atomically claim an open task for agent_id.
Source code in pydantic_team/board.py
assign
async
¶
Force-assign a non-done, non-pending-review task to agent_id (lead operation).
Source code in pydantic_team/board.py
assign_reviewer
async
¶
Set or replace the reviewer on a non-done task.
Source code in pydantic_team/board.py
complete
async
¶
Mark work submitted; gated tasks become pending_review, others done.
Source code in pydantic_team/board.py
approve
async
¶
Accept a pending_review task; only the reviewer may approve.
Source code in pydantic_team/board.py
reject
async
¶
Reject a pending_review task back to needs_revision; reason required.
Source code in pydantic_team/board.py
is_complete ¶
Return True when there are no tasks or every task is done.
snapshot ¶
signal_wakeup ¶
Wake waiters; optionally record which agent gained work.
wait_wakeup
async
¶
Block until signal_wakeup; return agent ids recorded since last wait.
Source code in pydantic_team/board.py
pydantic_team.collaborative.BoardDeps
dataclass
¶
BoardDeps(
board: TaskBoard,
agent_id: str,
member_ids: tuple[str, ...],
leader_id: str = 'leader',
emit: EmitFn | None = None,
require_review: bool = False,
)
Dependencies injected into leader and member agent runs.
pydantic_team.collaborative.CollaborativeTeam ¶
CollaborativeTeam(
*,
members: Sequence[AnyAgent],
leader_agent: AnyAgent | None = None,
leader_model: str | None = None,
system_prompt_override: str | None = None,
name: str | None = None,
max_rounds: int = 3,
max_replans: int = 0,
max_assignments_per_tick: int | None = None,
dispatch_mode: DispatchMode = 'phased',
require_review: bool = False,
)
Bases: BaseTeam[object]
Team that coordinates work through a shared TaskBoard.
The leader creates and assigns tasks by role; members complete their assigned work
in parallel (phased rounds or streaming dispatch). When the board remains incomplete,
the leader may replan (up to max_replans) before synthesizing. Members may
message each other directly via board tools (send_message / list_messages).
Create a collaborative team.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
members
|
Sequence[AnyAgent]
|
Teammate agents (at least one). Nested teams are not supported here. |
required |
leader_agent
|
AnyAgent | None
|
Existing leader. Mutually exclusive with |
None
|
leader_model
|
str | None
|
Model string used to build the leader when |
None
|
system_prompt_override
|
str | None
|
Optional leader instructions / extra system prompt. |
None
|
name
|
str | None
|
Optional team name. |
None
|
max_rounds
|
int
|
In |
3
|
max_replans
|
int
|
How many times the leader may replan after incomplete member phases.
|
0
|
max_assignments_per_tick
|
int | None
|
If set, each member tick only lists this many incomplete assignments (caps work per round without relying on soft prompt wording). |
None
|
dispatch_mode
|
DispatchMode
|
|
'phased'
|
require_review
|
bool
|
When True, new tasks get |
False
|
Source code in pydantic_team/collaborative.py
692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 | |
member_ids
property
¶
Stable teammate ids used with assign_task (agent names).
iter ¶
Start an observable collaborative run (async context + async iterator).
Source code in pydantic_team/collaborative.py
pydantic_team.collaborative.CollaborativeRun
dataclass
¶
CollaborativeRun(
leader: AnyAgent,
members: Sequence[AnyAgent],
member_ids: Sequence[str],
max_rounds: int,
max_replans: int,
max_assignments_per_tick: int | None,
dispatch_mode: DispatchMode,
run_member: RunMemberFn,
user_prompt: str,
require_review: bool,
_usage: RunUsage,
_board: TaskBoard = TaskBoard(),
_events: Queue[TeamEvent | None] = (
lambda: asyncio.Queue[TeamEvent | None]()
)(),
_result: TeamResult[object] | None = None,
_driver: Task[None] | None = None,
_error: BaseException | None = None,
)
Step-by-step collaborative run (inspired by pydantic-graph GraphRun).
Run events¶
pydantic_team.events.TeamTask
dataclass
¶
A unit of scheduled collaborative work (inspired by pydantic-graph GraphTask).
pydantic_team.events.TasksScheduled
dataclass
¶
One or more tasks are about to run (or have just been spawned).
pydantic_team.events.TaskCompleted
dataclass
¶
A scheduled task finished (board may have been mutated via tools).
pydantic_team.events.PhaseJoined
dataclass
¶
No inflight work remains for this phase (join / barrier).
pydantic_team.events.MessagePosted
dataclass
¶
A teammate posted a peer message on the board.
pydantic_team.events.TaskReviewDecided
dataclass
¶
A reviewer approved or rejected a board task.
pydantic_team.events.RunEnded
dataclass
¶
The collaborative run finished with a final result.