us.openai.gpt-6-sol | raw ConverseStream | 5 | 1.03 | 3.32 | 317 | -
us.openai.gpt-6-sol | agent-framework stream=True | 5 | 3.56 | 3.56 | 320 | [1, 1, 1, 1, 1]
raw runs: [(1.54, 3.98, 320), (0.75, 2.86, 316), (1.03, 3.32, 309), (0.94, 3.01, 317), (1.59, 4.21, 353)]
lib runs: [(4.04, 4.04, 320, 1), (3.56, 3.56, 343, 1), (3.17, 3.18, 317, 1), (3.79, 3.79, 342, 1), (2.94, 2.94, 293, 1)]
us.openai.gpt-6-luna | raw ConverseStream | 5 | 0.96 | 2.84 | 387 | -
us.openai.gpt-6-luna | agent-framework stream=True | 5 | 2.83 | 2.83 | 409 | [1, 1, 1, 1, 1]
raw runs: [(0.98, 2.84, 387), (2.49, 4.2, 417), (0.91, 2.62, 385), (0.96, 2.85, 406), (0.88, 2.55, 384)]
lib runs: [(3.35, 3.35, 419, 1), (2.75, 2.75, 389, 1), (2.82, 2.82, 409, 1), (3.32, 3.32, 474, 1), (2.83, 2.83, 377, 1)]
us.openai.gpt-6-astra | raw ConverseStream | 5 | 1.88 | 9.05 | 331 | -
us.openai.gpt-6-astra | agent-framework stream=True | 5 | 8.35 | 8.35 | 326 | [1, 1, 1, 1, 1]
raw runs: [(2.75, 9.69, 356), (1.18, 8.47, 327), (2.08, 9.29, 327), (1.88, 9.05, 348), (1.3, 9.01, 331)]
lib runs: [(8.47, 8.47, 316, 1), (8.35, 8.35, 325, 1), (8.61, 8.61, 326, 1), (8.32, 8.32, 329, 1), (8.31, 8.31, 333, 1)]
global.openai.gpt-6-astra | raw ConverseStream | 5 | 1.26 | 8.38 | 339 | -
global.openai.gpt-6-astra | agent-framework stream=True | 5 | 9.24 | 9.24 | 341 | [1, 1, 1, 1, 1]
raw runs: [(1.2, 8.84, 340), (1.28, 8.38, 339), (1.81, 8.8, 344), (1.26, 6.69, 320), (1.24, 8.36, 337)]
lib runs: [(9.43, 9.43, 331, 1), (8.51, 8.51, 328, 1), (8.17, 8.17, 341, 1), (9.34, 9.34, 357, 1), (9.24, 9.24, 360, 1)]
GPT-5.6 Sol and gpt-oss-120b also get a single update.
Description
Thanks for the Bedrock connector and for keeping
stream=Trueworking end to end, including structured output. As far as I can tell,stream=Truestill calls the non-streaming Converse API and yields one update after the whole response has arrived, so the first text shows up only when generation is done. With the new OpenAI GPT-6 Sol/Luna/Astra models the first text arrives 3-7x later than with ConverseStream.us.openai.gpt-6-sol, raw boto3converse_streamus.openai.gpt-6-sol,BedrockChatClientstream=True(main @ f42ff01)us.openai.gpt-6-luna, raw boto3converse_streamus.openai.gpt-6-luna,BedrockChatClientstream=True(main @ f42ff01)us.openai.gpt-6-astra, raw boto3converse_streamus.openai.gpt-6-astra,BedrockChatClientstream=True(main @ f42ff01)global.openai.gpt-6-astra, raw boto3converse_streamglobal.openai.gpt-6-astra,BedrockChatClientstream=True(main @ f42ff01)Raw and library calls ran alternately in the same process.
Where:
_inner_get_responseinpython/packages/bedrock/agent_framework_bedrock/_chat_client.py(L371-391): "Streaming mode - simulate streaming by yielding a single update", thenasyncio.to_thread(self._invoke_converse, request), which callsconverse. The package has noconverse_streamcall.Impact: chat UIs and agents that stream to users wait the full generation time before showing anything. Total time is the same, so it only shows up as latency. It affects every Bedrock model.
Suggested direction: call
converse_streamthrough the same_invoke_converseerror handling and map each event to aChatResponseUpdate: text deltas,toolUsestart and input deltas (merged bycall_id, like the Anthropic client streams tool input),messageStopfinish reason andmetadatausage. The non-streaming path stays as it is. I have a branch with tests (about 45 lines of source) and will open a PR for it; happy to adjust the shape.Code Sample
Error Messages / Stack Traces
No error; the delay is the only symptom.
Package Versions
agent-framework-core: 1.19.0, agent-framework-bedrock: 1.0.0b260918 (main @ f42ff01), boto3: 1.43.100
Python Version
Python 3.12
Additional Context
Raw runs (TTFT s, total s, output tokens, updates)
GPT-5.6 Sol and gpt-oss-120b also get a single update.