Files
dbx/crates/dbx-core
runstone 28fc4bc2a9 fix(ai): consolidate consecutive tool_result messages for Claude and Gemini
Anthropic and Gemini APIs require ALL tool_result blocks for a given
assistant message to be in a SINGLE user message that immediately follows
the assistant message. Previously, each tool AiMessage was converted to
a separate user message, causing Anthropic to reject multi-turn tool
conversations with 'tool_result must follow a tool_use block' error.

Fix: collect consecutive 'tool' role messages into a buffer, then flush
as a single user message with all tool_result/functionResponse blocks
when a non-tool message is encountered or at end of message list.

- Claude: merge N tool results into 1 user message with N content blocks
- Gemini: merge N tool results into 1 user message with N functionResponse parts
- OpenAI path unchanged (each tool message already has tool_call_id field)
2026-06-12 12:49:49 +08:00
..