This commit is contained in:
devin-ai-integration[bot] 2026-09-12 09:58:17 -07:00 committed by GitHub
commit 1a45617e9c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 22 additions and 3 deletions

View file

@ -31,6 +31,8 @@ BEDROCK_MANTLE_DEFAULT_REGION: Final = "us-east-1"
# Standard Mantle host: https://bedrock-mantle.<region>.api.aws (group 1 = region).
MANTLE_HOST_RE: Final = re.compile(r"^https?://bedrock-mantle\.([^/.]+)\.api\.aws(?=/|$)", re.IGNORECASE)
OPENAI_V1_FAMILY_RE: Final = re.compile(r"^openai\.gpt-(?!oss)")
def resolve_mantle_bearer_token(api_key: str | None) -> str | None:
return api_key or get_secret_str("BEDROCK_MANTLE_API_KEY") or get_secret_str("AWS_BEARER_TOKEN_BEDROCK")
@ -145,7 +147,13 @@ def mantle_base_segment(model: str | None, model_cost: dict) -> str:
/openai/v1 base (.../openai/v1/responses and .../openai/v1/chat/completions);
every other model including gpt-oss uses the standard /v1 base. The segment is
the base for the model's whole OpenAI-compatible surface, so both the chat and
responses configs derive from it -- there is no separate model-name rule.
responses configs derive from it. When the flag is absent (no price-map entry,
or a bare entry the Router registers for an unmapped deployment) a family rule
keeps day-0 OpenAI model IDs working before their cost-map entry lands: every
openai.gpt-* model except gpt-oss is on /openai/v1.
"""
entry: Final = model_cost.get(f"bedrock_mantle/{model}", {})
return "openai/v1" if entry.get("use_openai_responses_path") is True else "v1"
flag: Final = entry.get("use_openai_responses_path")
if flag is None:
return "openai/v1" if model and OPENAI_V1_FAMILY_RE.match(model) else "v1"
return "openai/v1" if flag is True else "v1"

View file

@ -1269,7 +1269,8 @@ class TestBedrockMantleResponsesRegistry:
class TestMantleBaseSegment:
"""The wire-path helper is data-driven from the price-map
use_openai_responses_path flag (NOT a model-name match): flagged models are on
the /openai/v1 base, everything else on /v1. An unmapped model defaults to /v1.
the /openai/v1 base, everything else on /v1. An unmapped model defaults to /v1
unless it is a non-gpt-oss openai.gpt-* ID, which falls back to /openai/v1.
"""
@pytest.mark.parametrize(
@ -1296,6 +1297,16 @@ class TestMantleBaseSegment:
),
("openai.gpt-oss-120b", {}, "v1"),
(None, {}, "v1"),
("openai.gpt-daybreak-blue-5.6-sol", {}, "openai/v1"),
("openai.gpt-5.7", {}, "openai/v1"),
("openai.gpt-oss-safeguard-20b", {}, "v1"),
("somelab.unmapped", {}, "v1"),
("openai.gpt-5.7", {"bedrock_mantle/openai.gpt-5.7": {}}, "openai/v1"),
(
"openai.gpt-5.7",
{"bedrock_mantle/openai.gpt-5.7": {"use_openai_responses_path": False}},
"v1",
),
],
)
def test_base_segment(self, model, model_cost, expected):