Bug Description
The amazon-bedrock-openai provider with api: openai-responses produces multiple incremental phase:"final_answer" text blocks within a single assistant response. Each incremental block is delivered as a separate visible message to downstream channels (Telegram, Discord), resulting in 4–5 progressively-longer duplicate messages for the same user turn.
Repro Evidence
Session history shows a single assistant response containing 4 final_answer text blocks for one user turn (image + calendar request):
| # |
phase |
Text (truncated) |
| 1 |
final_answer |
partial address |
| 2 |
final_answer |
partial address + restaurant |
| 3 |
final_answer |
partial address + restaurant + street numbers |
| 4 |
final_answer |
full address + times + notes |
A second turn (calendar event creation) showed 5 incremental final_answer blocks for the same response.
Trajectory event confirms the route:
- Provider:
amazon-bedrock-openai
- Model:
openai.gpt-5.5
- API:
openai-responses
Affected Channels
- Telegram DM (direct) — 4–5 duplicate messages for a single user turn
- Discord channel session — 4 duplicate repo-review messages for a single assistant response
Affected Route
amazon-bedrock-openai/openai.gpt-5.5
- API:
openai-responses
- Bedrock Mantle endpoint shape:
https://bedrock-mantle.*.api.aws/openai/v1 (redacted)
Hypothesis
The openai-responses streaming adapter/parser for amazon-bedrock-openai treats Bedrock Responses streaming incremental/cumulative snapshots as distinct final-text events, rather than deduplicating or delta-appending to a single final output. This causes the transport layer to emit multiple final_answer phases.
Root-Cause Update (2026-06-03)
Direct curl -N to Bedrock Mantle /openai/v1/responses with stream: true shows only one phase: "final_answer" in the raw SSE stream. The Bedrock Mantle streaming format is correct; the duplicate final_answer phases are produced inside the OpenClaw openai-responses streaming adapter.
See comment below for raw SSE evidence.
Expected Behavior
One final_answer text block per assistant response, containing the complete final text.
Actual Behavior
3–5 incremental final_answer blocks per assistant response, each delivered as a separate channel message.
Not a Duplicate Of
Environment / Version
- OpenClaw observed on runtime circa 2026-06-02
- Gateway model:
amazon-bedrock-openai/openai.gpt-5.5
- API:
openai-responses
- Channel streaming modes already set to
off (not channel-level issue)
Bug Description
The
amazon-bedrock-openaiprovider withapi: openai-responsesproduces multiple incrementalphase:"final_answer"text blocks within a single assistant response. Each incremental block is delivered as a separate visible message to downstream channels (Telegram, Discord), resulting in 4–5 progressively-longer duplicate messages for the same user turn.Repro Evidence
Session history shows a single assistant response containing 4
final_answertext blocks for one user turn (image + calendar request):phasefinal_answerfinal_answerfinal_answerfinal_answerA second turn (calendar event creation) showed 5 incremental
final_answerblocks for the same response.Trajectory event confirms the route:
amazon-bedrock-openaiopenai.gpt-5.5openai-responsesAffected Channels
Affected Route
amazon-bedrock-openai/openai.gpt-5.5openai-responseshttps://bedrock-mantle.*.api.aws/openai/v1(redacted)Hypothesis
The
openai-responsesstreaming adapter/parser foramazon-bedrock-openaitreats Bedrock Responses streaming incremental/cumulative snapshots as distinct final-text events, rather than deduplicating or delta-appending to a single final output. This causes the transport layer to emit multiplefinal_answerphases.Root-Cause Update (2026-06-03)
Direct
curl -Nto Bedrock Mantle/openai/v1/responseswithstream: trueshows only onephase: "final_answer"in the raw SSE stream. The Bedrock Mantle streaming format is correct; the duplicatefinal_answerphases are produced inside the OpenClawopenai-responsesstreaming adapter.See comment below for raw SSE evidence.
Expected Behavior
One
final_answertext block per assistant response, containing the complete final text.Actual Behavior
3–5 incremental
final_answerblocks per assistant response, each delivered as a separate channel message.Not a Duplicate Of
{}when content parameter is large (write/exec) #70033 (large payload empty args)Environment / Version
amazon-bedrock-openai/openai.gpt-5.5openai-responsesoff(not channel-level issue)