diff --git a/src/strands/event_loop/streaming.py b/src/strands/event_loop/streaming.py index 74cadaf9e..f4048a65c 100644 --- a/src/strands/event_loop/streaming.py +++ b/src/strands/event_loop/streaming.py @@ -194,16 +194,18 @@ def handle_content_block_stop(state: dict[str, Any]) -> dict[str, Any]: state["text"] = "" elif reasoning_text: - content.append( - { - "reasoningContent": { - "reasoningText": { - "text": state["reasoningText"], - "signature": state["signature"], - } + content_block: ContentBlock = { + "reasoningContent": { + "reasoningText": { + "text": state["reasoningText"], } } - ) + } + + if "signature" in state: + content_block["reasoningContent"]["reasoningText"]["signature"] = state["signature"] + + content.append(content_block) state["reasoningText"] = "" return state @@ -263,7 +265,6 @@ async def process_stream(chunks: AsyncIterable[StreamEvent]) -> AsyncGenerator[d "text": "", "current_tool_use": {}, "reasoningText": "", - "signature": "", } state["content"] = state["message"]["content"] diff --git a/tests/strands/event_loop/test_streaming.py b/tests/strands/event_loop/test_streaming.py index 921fd91de..b1cc312c2 100644 --- a/tests/strands/event_loop/test_streaming.py +++ b/tests/strands/event_loop/test_streaming.py @@ -216,6 +216,21 @@ def test_handle_content_block_delta(event: ContentBlockDeltaEvent, state, exp_up "signature": "123", }, ), + # Reasoning without signature + ( + { + "content": [], + "current_tool_use": {}, + "text": "", + "reasoningText": "test", + }, + { + "content": [{"reasoningContent": {"reasoningText": {"text": "test"}}}], + "current_tool_use": {}, + "text": "", + "reasoningText": "", + }, + ), # Empty ( {