Skip to content

fix: strip reasoningContent blocks in filter_restored_tool_context - #627

Open
gingeekrishna wants to merge 2 commits into
aws:mainfrom
gingeekrishna:fix/621-filter-restored-tool-context-thinking
Open

fix: strip reasoningContent blocks in filter_restored_tool_context#627
gingeekrishna wants to merge 2 commits into
aws:mainfrom
gingeekrishna:fix/621-filter-restored-tool-context-thinking

Conversation

@gingeekrishna

Copy link
Copy Markdown

Summary

  • _filter_restored_tool_context() stripped toolUse/toolResult blocks from restored session history but left reasoningContent (extended thinking) blocks intact.
  • Bedrock rejects an assistant message where reasoningContent blocks are present without their companion toolUse blocks, raising a ValidationException.
  • Fix: add "reasoningContent" not in content to the filter predicate so thinking blocks are stripped together with the tool calls they preceded.

Root cause

When extended thinking is enabled, an assistant turn produces a message like:

{
  "role": "assistant",
  "content": [
    {"reasoningContent": {"reasoningText": {"text": ""}}},
    {"toolUse": {"toolUseId": "t1", "name": "my_tool", "input": {}}}
  ]
}

reasoningContent and toolUse are semantically coupled — the Bedrock API requires them to appear together. filter_restored_tool_context was removing toolUse while keeping reasoningContent, producing a partial message that the API refuses.

Test plan

  • test_strips_reasoning_content_alongside_tool_use — assistant message with reasoningContent+toolUse → both stripped, only plain-text assistant message survives
  • test_message_with_only_reasoning_and_tool_use_is_dropped_entirely — message becomes empty after stripping → excluded from output
  • test_text_alongside_reasoning_and_tool_use_is_preserved — text content survives after stripping reasoning+toolUse
  • test_messages_without_tool_context_are_unchanged — plain text messages pass through unchanged (no regression)
  • test_existing_tool_use_filtering_still_works — original toolUse/toolResult behaviour preserved
5 passed in 0.XXs

Fixes #621

When extended thinking is enabled, assistant messages contain
reasoningContent blocks alongside toolUse blocks. The filter was
stripping toolUse/toolResult but leaving reasoningContent intact,
producing a partial assistant message that Bedrock rejects with:

  ValidationException: `thinking` or `redacted_thinking` blocks in
  the latest assistant message cannot be modified.

reasoningContent blocks are semantically coupled to the tool calls
that follow them — stripping the tool context without the accompanying
reasoning leaves an incoherent and API-rejected message. The fix adds
reasoningContent to the set of block types removed by the filter.

Fixes aws#621

Signed-off-by: gingeekrishna <gingeekrishna@gmail.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes restored-session filtering for Bedrock extended thinking by ensuring reasoningContent blocks are removed alongside toolUse/toolResult blocks, preventing invalid assistant messages from being sent to Bedrock.

Changes:

  • Update _filter_restored_tool_context() to also strip reasoningContent blocks when filtering restored history.
  • Expand the session manager integration test suite with regression cases covering reasoning+tool interactions and preservation of plain text.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py Adds regression tests validating restored-history filtering when reasoningContent is present.
src/bedrock_agentcore/memory/integrations/strands/session_manager.py Extends restored tool-context filtering to remove reasoningContent blocks and documents the rationale.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +802 to +806
"""Strip historical toolUse/toolResult context from restored messages.

Extended-thinking (reasoningContent) blocks are coupled to the tool
calls that follow them. Bedrock rejects an assistant message whose
reasoningContent blocks have been separated from their companion
…_context

Clarify that the flag strips reasoningContent (extended thinking) blocks
in addition to toolUse/toolResult, and explain why the two are always
removed together.

Signed-off-by: gingeekrishna <gingeekrishna@gmail.com>
@gingeekrishna

Copy link
Copy Markdown
Author

Done - addressed Copilot review: updated the filter_restored_tool_context docstring in AgentCoreMemoryConfig (commit d4f9b5d) to clarify that it strips toolUse, toolResult, and reasoningContent (extended thinking) blocks, with a note explaining that reasoning blocks must always be removed alongside the tool calls that followed them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m PR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] filter_restored_tool_context is incompatible with extended thinking

2 participants