From 13b80873dd047bf6633a129da6284f59cedc14bf Mon Sep 17 00:00:00 2001 From: Sai Sashankh D <530713+sashankh@users.noreply.github.com> Date: Sun, 16 Aug 2026 12:08:21 +0530 Subject: [PATCH] [Bugfix][Frontend] Convert Anthropic tool references to text Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Sai Sashankh D <530713+sashankh@users.noreply.github.com> --- .../test_anthropic_messages_conversion.py | 16 ++++++++++++++++ vllm/entrypoints/anthropic/serving.py | 5 ++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/entrypoints/anthropic/test_anthropic_messages_conversion.py b/tests/entrypoints/anthropic/test_anthropic_messages_conversion.py index a54e13666f68..1897d407d6d5 100644 --- a/tests/entrypoints/anthropic/test_anthropic_messages_conversion.py +++ b/tests/entrypoints/anthropic/test_anthropic_messages_conversion.py @@ -48,6 +48,8 @@ validation_exception_handler, ) +pytestmark = pytest.mark.skip_global_cleanup + _convert = AnthropicServingMessages._convert_anthropic_to_openai_request _img_url = AnthropicServingMessages._convert_image_source_to_url @@ -238,6 +240,20 @@ def test_tool_result_text_blocks(self): assert len(tool_msg) == 1 assert tool_msg[0]["content"] == "line 1\nline 2" + def test_tool_result_with_tool_reference(self): + request = self._make_tool_result_request( + [ + {"type": "tool_reference", "tool_name": "list_files"}, + ] + ) + result = _convert(request) + + tool_msg = [m for m in result.messages if m["role"] == "tool"] + assert len(tool_msg) == 2 + assert tool_msg[1]["content"] == [ + {"type": "text", "text": "[tool reference: list_files]"} + ] + def test_tool_result_with_image(self): """Image in tool_result should produce a follow-up user message.""" request = self._make_tool_result_request( diff --git a/vllm/entrypoints/anthropic/serving.py b/vllm/entrypoints/anthropic/serving.py index 4ec5c14e019b..2746742e2af6 100644 --- a/vllm/entrypoints/anthropic/serving.py +++ b/vllm/entrypoints/anthropic/serving.py @@ -431,7 +431,10 @@ def _convert_user_tool_result( ref_name = item.get("tool_name") or item.get("name") if ref_name: tool_reference.append( - {"type": "tool_reference", "name": ref_name} + { + "type": "text", + "text": f"[tool reference: {ref_name}]", + } ) tool_text = "\n".join(text_parts)