microsoft/semantic-kernel · error · ValueError
All members must have a description.
Error message
All members must have a description.
What it means
MagenticOrchestration feeds each member's description into the orchestrator's task-ledger and progress-ledger prompts so the model knows who can speak. A member with description=None cannot be advertised, so construction refuses it. This is enforced in addition to the base class's non-empty members check.
Source
Thrown at python/semantic_kernel/agents/orchestration/magentic.py:797
"""Initialize the Magentic One orchestration.
Args:
members (list[Agent]): A list of agents.
manager (MagenticManagerBase): The manager for the Magentic One pattern.
name (str | None): The name of the orchestration.
description (str | None): The description of the orchestration.
input_transform (Callable | None): A function that transforms the external input message.
output_transform (Callable | None): A function that transforms the internal output message.
agent_response_callback (Callable | None): A function that is called when a response is produced
by the agents.
streaming_agent_response_callback (Callable | None): A function that is called when a streaming response
is produced by the agents.
"""
self._manager = manager
for member in members:
if member.description is None:
raise ValueError("All members must have a description.")
super().__init__(
members=members,
name=name,
description=description,
input_transform=input_transform,
output_transform=output_transform,
agent_response_callback=agent_response_callback,
streaming_agent_response_callback=streaming_agent_response_callback,
)
@override
async def _start(
self,
task: DefaultTypeAlias,
runtime: CoreRuntime,
internal_topic_type: str,
cancellation_token: CancellationToken,View on GitHub (pinned to c028a0c7dc)
Solutions
- Set a concise, role-specific description on every member before constructing MagenticOrchestration.
- Validate members programmatically before construction (see defense validation code).
- Use distinct descriptions that match each agent's name and purpose to also improve speaker selection.
Example fix
// before
agent = ChatCompletionAgent(name="Researcher") # description defaults to None
orch = MagenticOrchestration(members=[agent], manager=manager) # raises
// after
agent = ChatCompletionAgent(
name="Researcher",
description="Researcher: finds and summarizes information.",
service=service,
)
orch = MagenticOrchestration(members=[agent], manager=manager) Defensive patterns
Strategy: validation
Validate before calling
# Validate descriptions before constructing MagenticOrchestration
missing = [m.name for m in members if not getattr(m, "description", None)]
if missing:
raise ValueError(f"These members lack a description: {missing}")
orch = MagenticOrchestration(members=members, manager=manager) Type guard
def all_members_described(members) -> bool:
return all(getattr(m, "description", None) for m in members) Prevention
- Always pass a description when constructing each agent.
- Make descriptions role-specific and mention the agent.name.
- Validate the members list in a helper before building the orchestration.
When it happens
Trigger: Constructing `MagenticOrchestration(members=[...], manager=...)` where any agent in members has `description is None`. Agents default to description=None unless explicitly set.
Common situations: Creating ChatCompletionAgent/AzureAssistantAgent instances and forgetting the description argument. Reusing agents built for a non-Magentic orchestration (group_chat, sequential) where descriptions were optional.
Related errors
- The prompt execution settings must not have a response forma
- The members list cannot be empty.
- Unsupported service name: {service_name}
- Unsupported service name: {service_name}
- Failed to create Azure OpenAI settings: {exc}
AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13).
Data as JSON: /api/errors/b30b68095fa0c6cb.
Report an issue: GitHub.