Repository navigation
Description
Observed Behavior
When streamed updates are combined into a response (ChatResponse.from_updates, AgentResponse.from_updates, or get_final_response() on a stream), updates from different authors are merged into one message when they carry no message_id. The merged message keeps the last author's author_name and contains the text of every author.
Most chat clients do not set message_id on streaming updates, so this happens in multi-agent streams. For example, with a sequential workflow used as an agent:
workflow_agent = SequentialBuilder(participants=[writer, reviewer], output_from="all").build().as_agent()await workflow_agent.run("hi")returns two messages:("writer", "Draft text.")and("reviewer", "Looks good.").run("hi", stream=True)followed byget_final_response()returns one message:("reviewer", "Draft text. Looks good. ").
The author_name docstrings of ChatResponseUpdate and AgentResponseUpdate say it identifies which agent generated the update and is propagated to the resulting messages.
Expected Behavior
An update with a different, non-empty author_name starts a new message, the same way a different non-empty message_id already does. Streaming and non-streaming runs give the same messages.
Steps to Reproduce
- Create updates from two authors, without
message_id. - Combine them with
AgentResponse.from_updates(orChatResponse.from_updates). - Look at the resulting messages.
Minimal Reproduction
from agent_framework import AgentResponse, AgentResponseUpdate, Content
updates = [
AgentResponseUpdate(contents=[Content.from_text("Draft text.")], role="assistant", author_name="writer"),
AgentResponseUpdate(contents=[Content.from_text("Looks good.")], role="assistant", author_name="reviewer"),
]
response = AgentResponse.from_updates(updates)
print([(message.author_name, message.text) for message in response.messages])
# [('reviewer', 'Draft text.Looks good.')]
# expected [('writer', 'Draft text.'), ('reviewer', 'Looks good.')]The cause is in _process_update in agent_framework/_types.py: a new message starts only when the role or a non-empty message_id changes; a change of author_name is ignored.
Error Messages and Stack Traces
No error. The writer's text is attributed to the reviewer, and one message is lost.
Package Versions
agent-framework-core: 1.21.0 (main at b5e5521), agent-framework-orchestrations (same main)
Python Version
Python 3.12
Additional Context
I'd like to fix this. The change is one extra condition in _process_update (start a new message when both the update and the last message have an author_name and they differ), plus regression tests. Updates without an author_name, and a message that has no author yet, keep today's behavior.
AI assistance: I used an AI coding assistant for the analysis and to draft this report. I reproduced and verified the behavior myself.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity