fix(bedrock): preserve tool reference results

This commit is contained in:
qdivan 2026-09-04 21:58:01 +08:00
parent c8635ecc67
commit d8135c5d7b
2 changed files with 49 additions and 2 deletions

View file

@ -3795,7 +3795,12 @@ def _build_bedrock_tool_result_content_blocks(
if isinstance(message_content, str):
return [BedrockToolResultContentBlock(text=message_content)], False
if isinstance(message_content, list):
return _parse_bedrock_tool_result_content_list(message_content), False
parsed_content: Final = _parse_bedrock_tool_result_content_list(message_content)
if parsed_content:
return parsed_content, False
if any(content.get("type") == "tool_reference" for content in message_content):
return [BedrockToolResultContentBlock(text="")], False
return parsed_content, False
return [], False

View file

@ -2,7 +2,7 @@ import base64
import json
import logging
import os
from typing import Final
from typing import Final, cast
from unittest.mock import MagicMock, patch
import pytest
@ -55,6 +55,48 @@ def test_ollama_pt_simple_messages():
assert result["images"] == []
def test_bedrock_converse_tool_reference_result_keeps_empty_result():
messages = [
{
"role": "assistant",
"content": None,
"tool_calls": [
{
"id": "toolu_01",
"type": "function",
"function": {"name": "ToolSearch", "arguments": "{}"},
}
],
},
{
"role": "tool",
"tool_call_id": "toolu_01",
"content": [{"type": "tool_reference", "tool_name": "mcp__deferred__search"}],
},
]
translated: Final[list[dict[str, object]]] = cast(
list[dict[str, object]], _bedrock_converse_messages_pt(messages=messages, model="", llm_provider="")
)
assert translated[1]["content"] == [{"toolResult": {"content": [{"text": ""}], "toolUseId": "toolu_01"}}]
def test_bedrock_converse_tool_reference_result_preserves_text_content():
message = {
"role": "tool",
"tool_call_id": "toolu_01",
"content": [
{"type": "text", "text": "loaded"},
{"type": "tool_reference", "tool_name": "mcp__deferred__search"},
],
}
result: Final[dict[str, object]] = cast(dict[str, object], _convert_to_bedrock_tool_call_result(message))
assert result == {"toolResult": {"content": [{"text": "loaded"}], "toolUseId": "toolu_01"}}
def test_ollama_pt_consecutive_user_messages():
"""Test handling consecutive user messages"""
messages = [