From dcbb5dd013d754cb43853fce182e680273b63957 Mon Sep 17 00:00:00 2001 From: anton-codes-iac <25830178+anton-codes-iac@users.noreply.github.com> Date: Tue, 8 Sep 2026 14:49:50 +0200 Subject: [PATCH] fix(bedrock): route cross-region openai inference profiles to correct endpoint --- litellm/llms/bedrock/common_utils.py | 12 ++++++++- .../llms/bedrock/test_bedrock_common_utils.py | 27 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/litellm/llms/bedrock/common_utils.py b/litellm/llms/bedrock/common_utils.py index be4f0f32689..f58a3dc23dd 100644 --- a/litellm/llms/bedrock/common_utils.py +++ b/litellm/llms/bedrock/common_utils.py @@ -1132,6 +1132,10 @@ class BedrockModelInfo(BaseLLMModelInfo): "agentcore/": "agentcore", "async_invoke/": "async_invoke", "openai/": "openai", + "global.openai.": "openai", + "eu.openai.": "openai", + "apac.openai.": "openai", + "us.openai.": "openai", "mantle/": "mantle", } @@ -1256,7 +1260,13 @@ class BedrockModelInfo(BaseLLMModelInfo): Check if the model is an explicit openai route. Used for Bedrock imported models that use OpenAI Chat Completions format. """ - return BedrockModelInfo._model_has_route_prefix(model, "openai/") + return ( + BedrockModelInfo._model_has_route_prefix(model, "openai/") + or BedrockModelInfo._model_has_route_prefix(model, "global.openai.") + or BedrockModelInfo._model_has_route_prefix(model, "eu.openai.") + or BedrockModelInfo._model_has_route_prefix(model, "apac.openai.") + or BedrockModelInfo._model_has_route_prefix(model, "us.openai.") + ) @staticmethod def get_bedrock_provider_config_for_messages_api( diff --git a/tests/test_litellm/llms/bedrock/test_bedrock_common_utils.py b/tests/test_litellm/llms/bedrock/test_bedrock_common_utils.py index 3f03305423a..6f3a3272b7b 100644 --- a/tests/test_litellm/llms/bedrock/test_bedrock_common_utils.py +++ b/tests/test_litellm/llms/bedrock/test_bedrock_common_utils.py @@ -871,3 +871,30 @@ def test_every_bedrock_config_get_error_class_keeps_provider_headers(config): def test_bedrock_get_error_class_audit_covers_every_surface(): assert len(_bedrock_configs_with_get_error_class()) >= 30 + +@pytest.mark.parametrize( + "model", + [ + "bedrock/global.openai.gpt-5.6-sol", + "bedrock/global.openai.gpt-5.6-terra", + "bedrock/global.openai.gpt-5.6-luna", + "bedrock/eu.openai.gpt-5.6-sol", + "bedrock/apac.openai.gpt-5.6-sol", + "bedrock/us.openai.gpt-5.6-sol", + ], +) +def test_bedrock_cross_region_openai_routing(model: str): + """ + Ensure cross-region OpenAI inference profiles on Bedrock route to the + OpenAI-compatible config instead of falling back to Bedrock Converse. + """ + import litellm + from litellm.llms.bedrock.common_utils import get_bedrock_chat_config + + # 1. Verify route identification + assert BedrockModelInfo.get_bedrock_route(model) == "openai" + assert BedrockModelInfo._explicit_openai_route(model) is True + + # 2. Verify config mapping + config = get_bedrock_chat_config(model) + assert isinstance(config, litellm.AmazonBedrockOpenAIConfig)