Fix converse handling for parallel_tool_calls
This commit is contained in:
parent
8d1c75c48a
commit
d0445e1e33
@ -1217,15 +1217,15 @@ class AmazonConverseConfig(BaseConfig):
|
|||||||
|
|
||||||
# Handle parallel_tool_calls configuration
|
# Handle parallel_tool_calls configuration
|
||||||
parallel_tool_use_config = additional_request_params.pop("_parallel_tool_use_config", None)
|
parallel_tool_use_config = additional_request_params.pop("_parallel_tool_use_config", None)
|
||||||
if parallel_tool_use_config is not None:
|
if parallel_tool_use_config is not None and is_claude_4_5_on_bedrock(model):
|
||||||
# Merge the tool_choice config from parallel_tool_calls into additional_request_params
|
|
||||||
for key, value in parallel_tool_use_config.items():
|
for key, value in parallel_tool_use_config.items():
|
||||||
if key in additional_request_params and isinstance(additional_request_params[key], dict) and isinstance(value, dict):
|
if key in additional_request_params and isinstance(additional_request_params[key], dict) and isinstance(value, dict):
|
||||||
# Merge dictionaries
|
|
||||||
additional_request_params[key].update(value)
|
additional_request_params[key].update(value)
|
||||||
else:
|
else:
|
||||||
additional_request_params[key] = value
|
additional_request_params[key] = value
|
||||||
|
|
||||||
|
additional_request_params.pop("parallel_tool_calls", None)
|
||||||
|
|
||||||
# Only set the topK value in for models that support it
|
# Only set the topK value in for models that support it
|
||||||
additional_request_params.update(
|
additional_request_params.update(
|
||||||
self._handle_top_k_value(model, inference_params)
|
self._handle_top_k_value(model, inference_params)
|
||||||
|
|||||||
@ -3382,59 +3382,78 @@ def test_output_config_applies_additional_properties():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def test_parallel_tool_calls_in_request_transformation():
|
_TOOL_PARAM = [
|
||||||
"""Test that parallel_tool_calls is correctly placed in additionalModelRequestFields after full transformation"""
|
{
|
||||||
config = AmazonConverseConfig()
|
"type": "function",
|
||||||
|
"function": {
|
||||||
messages = [
|
"name": "get_weather",
|
||||||
{"role": "user", "content": "What's the weather in SF and NYC?"}
|
"description": "Get the weather",
|
||||||
]
|
"parameters": {
|
||||||
|
"type": "object",
|
||||||
non_default_params = {
|
"properties": {
|
||||||
"parallel_tool_calls": False,
|
"location": {
|
||||||
"tools": [
|
"type": "string",
|
||||||
{
|
"description": "The location to get weather for",
|
||||||
"type": "function",
|
|
||||||
"function": {
|
|
||||||
"name": "get_weather",
|
|
||||||
"description": "Get the weather",
|
|
||||||
"parameters": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"location": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "The location to get weather for"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": ["location"]
|
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
"required": ["location"],
|
||||||
],
|
},
|
||||||
"max_tokens": 100,
|
},
|
||||||
}
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_parallel_tool_calls_newer_model_adds_disable_flag():
|
||||||
|
"""Newer Claude models (4.5+) should get disable_parallel_tool_use in additionalModelRequestFields."""
|
||||||
|
config = AmazonConverseConfig()
|
||||||
|
model = "anthropic.claude-sonnet-4-5-20250929-v1:0"
|
||||||
|
messages = [{"role": "user", "content": "What's the weather in SF and NYC?"}]
|
||||||
|
|
||||||
optional_params = config.map_openai_params(
|
optional_params = config.map_openai_params(
|
||||||
non_default_params=non_default_params,
|
non_default_params={"parallel_tool_calls": False, "tools": _TOOL_PARAM},
|
||||||
optional_params={},
|
optional_params={},
|
||||||
model="anthropic.claude-sonnet-4-5-v2:0",
|
model=model,
|
||||||
drop_params=False,
|
drop_params=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Transform the request
|
|
||||||
request_data = config.transform_request(
|
request_data = config.transform_request(
|
||||||
model="anthropic.claude-sonnet-4-5-v2:0",
|
model=model,
|
||||||
messages=messages,
|
messages=messages,
|
||||||
optional_params=optional_params,
|
optional_params=optional_params,
|
||||||
litellm_params={},
|
litellm_params={},
|
||||||
headers={},
|
headers={},
|
||||||
)
|
)
|
||||||
|
|
||||||
# Verify the structure
|
|
||||||
assert "additionalModelRequestFields" in request_data
|
assert "additionalModelRequestFields" in request_data
|
||||||
assert "tool_choice" in request_data["additionalModelRequestFields"]
|
assert "tool_choice" in request_data["additionalModelRequestFields"]
|
||||||
assert "disable_parallel_tool_use" in request_data["additionalModelRequestFields"]["tool_choice"]
|
|
||||||
assert request_data["additionalModelRequestFields"]["tool_choice"]["disable_parallel_tool_use"] is True
|
assert request_data["additionalModelRequestFields"]["tool_choice"]["disable_parallel_tool_use"] is True
|
||||||
|
assert "parallel_tool_calls" not in request_data["additionalModelRequestFields"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_parallel_tool_calls_older_model_drops_disable_flag():
|
||||||
|
"""Older Claude models (pre-4.5) must NOT receive disable_parallel_tool_use — Bedrock rejects it."""
|
||||||
|
config = AmazonConverseConfig()
|
||||||
|
model = "anthropic.claude-3-5-sonnet-20241022-v2:0"
|
||||||
|
messages = [{"role": "user", "content": "What's the weather in SF and NYC?"}]
|
||||||
|
|
||||||
|
optional_params = config.map_openai_params(
|
||||||
|
non_default_params={"parallel_tool_calls": False, "tools": _TOOL_PARAM},
|
||||||
|
optional_params={},
|
||||||
|
model=model,
|
||||||
|
drop_params=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
request_data = config.transform_request(
|
||||||
|
model=model,
|
||||||
|
messages=messages,
|
||||||
|
optional_params=optional_params,
|
||||||
|
litellm_params={},
|
||||||
|
headers={},
|
||||||
|
)
|
||||||
|
|
||||||
|
additional = request_data.get("additionalModelRequestFields", {})
|
||||||
|
assert "tool_choice" not in additional
|
||||||
|
assert "parallel_tool_calls" not in additional
|
||||||
|
|
||||||
|
|
||||||
class TestBedrockMinThinkingBudgetTokens:
|
class TestBedrockMinThinkingBudgetTokens:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user