From abae9cbbc5df515e72d07b435e84db79c98047fd Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Tue, 11 Aug 2026 12:14:03 -0400 Subject: [PATCH] fix(core): resolve Bedrock region templates --- packages/core/src/model-resolver.ts | 7 +++++++ packages/core/test/model-resolver.test.ts | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/packages/core/src/model-resolver.ts b/packages/core/src/model-resolver.ts index 346c2402cfd9..734f4ed3c3d5 100644 --- a/packages/core/src/model-resolver.ts +++ b/packages/core/src/model-resolver.ts @@ -254,7 +254,14 @@ function prepareRuntimeModel(model: Info, credential: Credential.Value | undefin if (credential?.type === "key" && credential.metadata !== undefined) draft.body = Provider.mergeOverlay(draft.body, credential.metadata) if (typeof draft.settings?.baseURL !== "string") return + const bedrockRegion = + Provider.isAISDK(draft.package) && + Provider.packageName(draft.package) === "@ai-sdk/amazon-bedrock/mantle" && + typeof draft.settings.region === "string" + ? draft.settings.region + : undefined draft.settings.baseURL = draft.settings.baseURL.replace(/\$\{([^}]+)\}/g, (placeholder, name: string) => { + if (name === "AWS_REGION" && bedrockRegion) return bedrockRegion return process.env[name] ?? placeholder }) }) diff --git a/packages/core/test/model-resolver.test.ts b/packages/core/test/model-resolver.test.ts index 7d04516f8cc2..cf5584fc6269 100644 --- a/packages/core/test/model-resolver.test.ts +++ b/packages/core/test/model-resolver.test.ts @@ -152,6 +152,28 @@ describe("ModelResolver", () => { }), ) + it.effect("resolves the Bedrock Mantle catalog endpoint from the configured region", () => + withEnv({ AWS_REGION: undefined }, () => + Effect.gen(function* () { + const resolved = yield* ModelResolver.fromCatalogModel( + model(Provider.aisdk("@ai-sdk/amazon-bedrock/mantle"), { + providerID: Provider.ID.amazonBedrock, + modelID: "openai.gpt-oss-120b", + settings: { + region: "us-west-2", + baseURL: "https://bedrock-mantle.${AWS_REGION}.api.aws/openai/v1", + }, + }), + ) + + expect(resolved.route).toMatchObject({ + id: "bedrock-mantle-responses", + endpoint: { baseURL: "https://bedrock-mantle.us-west-2.api.aws/openai/v1" }, + }) + }), + ), + ) + it.effect("uses the API modelID instead of the catalog ID for native OpenAI routes", () => Effect.gen(function* () { const catalog = model(Provider.aisdk("@ai-sdk/openai"), {