fix(azure_ai): drop tool_reference parts from tool messages on chat (#48032)

This commit is contained in:
shrey-berri 2026-10-23 16:04:09 -07:00 • committed by GitHub
parent e4766973a0
commit eeedf98d40
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 1 deletions

View file

@ -12,6 +12,7 @@ from litellm._logging import verbose_logger
from litellm.litellm_core_utils.prompt_templates.common_utils import (
audio_or_image_in_message_content,
convert_content_list_to_str,
drop_tool_reference_parts_from_tool_messages,
filter_value_from_dict,
)
from litellm.llms.azure.common_utils import BaseAzureLLM
@ -250,7 +251,7 @@ class AzureAIStudioConfig(OpenAIConfig):
Operates on a deep copy so the caller's messages keep their thinking blocks
and provider metadata, which a fallback to another provider still needs.
"""
stripped_messages: Final = copy.deepcopy(messages)
stripped_messages: Final = copy.deepcopy(drop_tool_reference_parts_from_tool_messages(messages))
for message in stripped_messages:
message_dict = cast(dict, message) # cast-ok: TypedDict is a runtime dict stripped on our copy
for field in NON_OPENAI_SPEC_MESSAGE_FIELDS:

View file

@ -879,6 +879,32 @@ def test_azure_ai_stripping_does_not_mutate_caller_messages():
}
def test_azure_ai_reference_only_tool_result_is_sent_as_empty_text():
messages: Final = [
{"role": "user", "content": "load the WebFetch tool"},
{
"role": "assistant",
"content": None,
"tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "ToolSearch", "arguments": "{}"}}],
},
{
"role": "tool",
"tool_call_id": "call_1",
"content": [{"type": "tool_reference", "tool_name": "WebFetch"}],
},
]
request: Final = AzureAIStudioConfig().transform_request(
model="fw-glm-5.2",
messages=messages,
optional_params={},
litellm_params={},
headers={},
)
assert request["messages"][2] == {"role": "tool", "tool_call_id": "call_1", "content": ""}
@pytest.mark.parametrize(
"api_base, expected_url",
[