python-v0.6.0
What's New
Change to BaseGroupChatManager.select_speaker and support for concurrent agents in GraphFlow
We made a type hint change to the select_speaker method of BaseGroupChatManager to allow for a list of agent names as a return value. This makes it possible to support concurrent agents in GraphFlow, such as in a fan-out-fan-in pattern.
# Original signature:
async def select_speaker(self, thread: Sequence[BaseAgentEvent | BaseChatMessage]) -> str:
...
# New signature:
async def select_speaker(self, thread: Sequence[BaseAgentEvent | BaseChatMessage]) -> List[str] | str:
...Now you can run GraphFlow with concurrent agents as follows:
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.conditions import MaxMessageTermination
from autogen_agentchat.teams import DiGraphBuilder, GraphFlow
from autogen_ext.models.openai import OpenAIChatCompletionClient
async def main():
# Initialize agents with OpenAI model clients.
model_client = OpenAIChatCompletionClient(model="gpt-4.1-nano")
agent_a = AssistantAgent("A", model_client=model_client, system_message="You are a helpful assistant.")
agent_b = AssistantAgent("B", model_client=model_client, system_message="Translate input to Chinese.")
agent_c = AssistantAgent("C", model_client=model_client, system_message="Translate input to Japanese.")
# Create a directed graph with fan-out flow A -> (B, C).
builder = DiGraphBuilder()
builder.add_node(agent_a).add_node(agent_b).add_node(agent_c)
builder.add_edge(agent_a, agent_b).add_edge(agent_a, agent_c)
graph = builder.build()
# Create a GraphFlow team with the directed graph.
team = GraphFlow(
participants=[agent_a, agent_b, agent_c],
graph=graph,
termination_condition=MaxMessageTermination(5),
)
# Run the team and print the events.
async for event in team.run_stream(task="Write a short story about a cat."):
print(event)
asyncio.run(main())Agent B and C will run concurrently in separate coroutines.
- Enable concurrent execution of agents in GraphFlow by Eric Zhu (@ekzhu) in #6545
Callable conditions for GraphFlow edges
Now you can use lambda functions or other callables to specify edge conditions in GraphFlow. This addresses the issue of the keyword substring-based conditions cannot cover all possibilities and leading to "cannot find next agent" bug.
NOTE: callable conditions are currently experimental, and it cannot be serialized with the graph.
- Add callable condition for GraphFlow edges by Eric Zhu (@ekzhu) in #6623
New Agent: OpenAIAgent
- Feature: Add OpenAIAgent backed by OpenAI Response API by Jay Prakash Thakur (@jay-thakur) in #6418
MCP Improvement
- Support the Streamable HTTP transport for MCP by Sungjun.Kim (@withsmilo) in #6615
AssistantAgent Improvement
- Add tool_call_summary_msg_format_fct and test by ChrisBlaa in #6460
- Support multiple workbenches in assistant agent by Griffin Bassman (@bassmang) in #6529
Code Executors Improvement
- Add option to auto-delete temporary files in LocalCommandLineCodeExecutor by Björn Holtvogt (@holtvogt) in #6556
- Include all output to error output in docker jupyter code executor by Eric Zhu (@ekzhu) in #6572
OpenAIChatCompletionClient Improvement
- Default usage statistics for streaming responses by peterychang in #6578
- Add Llama API OAI compatible endpoint support by Chester Hu (@WuhanMonkey) in #6442
OllamaChatCompletionClient Improvement
- Add qwen3 support by Miroslav Pokrovskii (@mirpo) in #6528
AnthropicBedrockChatCompletionClient Improvement
- Allow implicit AWS credential setting for AnthropicBedrockChatCompletionClient by GeorgiosEfstathiadis (@GeorgeEfstathiadis) in #6561
MagenticOneGroupChat Improvement
- Use structured output for m1 orchestrator by Eric Zhu (@ekzhu) in #6540
Other Changes
- Update website 0.5.7 by Eric Zhu (@ekzhu) in #6527
- feat: add qwen3 support by Miroslav Pokrovskii (@mirpo) in #6528
- Fix missing tools in logs by Afzal Pawaskar (@afzalmushtaque) in #6532
- Update to stable Microsoft.Extensions.AI release by Stephen Toub (@stephentoub) in #6552
- fix: CodeExecutorAgent prompt misuse by Zhenyu (@Dormiveglia-elf) in #6559
- Update README.md by Justin Trantham (@CakeRepository) in #6506
- fix:Prevent Async Event Loop from Running Indefinitely by Wanfeng Ge (@wfge) in #6530
- Update state.ipynb, fix a grammar error by Ethan Yang /杨懿宸 (@realethanyang) in #6448
- Add gemini 2.5 fash compatibility by Damien Menigaux (@dmenig) in #6574
- remove superfluous underline in the docs by peterychang in #6573
- Add/fix windows install instructions by peterychang in #6579
- Add created_at to BaseChatMessage and BaseAgentEvent by Sungjun.Kim (@withsmilo) in #6557
- feat: Add missing Anthropic models (Claude Sonnet 4, Claude Opus 4) by Sungjun.Kim (@withsmilo) in #6585
- Missing UserMessage import by Aleksey (@AlexeyKoltsov) in #6583
- feat: [draft] update version of azureaiagent by Victor Dibia (@victordibia) in #6581
- Add support for specifying the languages to parse from the
CodeExecutorAgentresponse by Abhijeetsingh Meena (@Ethan0456) in #6592 - feat: bump ags version, minor fixes by Victor Dibia (@victordibia) in #6603
- note: note selector_func is not serializable by Griffin Bassman (@bassmang) in #6609
- Use structured output for m1 orchestrator by Eric Zhu (@ekzhu) in #6540
- Parse backtick-enclosed json by peterychang in #6607
- fix typo in the doc distributed-agent-runtime.ipynb by Bobur Hakimiy (@bhakimiy) in #6614
- Update version to 0.6.0 by Eric Zhu (@ekzhu) in #6624
New Contributors
- Miroslav Pokrovskii (@mirpo) made their first contribution in #6528
- ChrisBlaa made their first contribution in #6460
- Chester Hu (@WuhanMonkey) made their first contribution in #6442
- Afzal Pawaskar (@afzalmushtaque) made their first contribution in #6532
- Stephen Toub (@stephentoub) made their first contribution in #6552
- Justin Trantham (@CakeRepository) made their first contribution in #6506
- Wanfeng Ge (@wfge) made their first contribution in #6530
- Ethan Yang /杨懿宸 (@realethanyang) made their first contribution in #6448
- GeorgiosEfstathiadis (@GeorgeEfstathiadis) made their first contribution in #6561
- Damien Menigaux (@dmenig) made their first contribution in #6574
- Björn Holtvogt (@holtvogt) made their first contribution in #6556
- Aleksey (@AlexeyKoltsov) made their first contribution in #6583
- Bobur Hakimiy (@bhakimiy) made their first contribution in #6614
Full Changelog: python-v0.5.7...python-v0.6.0