From 2897973f33bf1c8d764a892bf5bc6e7d61b8a038 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 8 Dec 2025 03:28:19 +0000 Subject: [PATCH 1/5] fix: construct provider options for mux-gateway provider --- src/common/utils/ai/providerOptions.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/common/utils/ai/providerOptions.ts b/src/common/utils/ai/providerOptions.ts index b1d3b19037..c56e5b63ff 100644 --- a/src/common/utils/ai/providerOptions.ts +++ b/src/common/utils/ai/providerOptions.ts @@ -69,7 +69,7 @@ export function buildProviderOptions( // Always clamp to the model's supported thinking policy (e.g., gpt-5-pro = HIGH only) const effectiveThinking = enforceThinkingPolicy(modelString, thinkingLevel); // Parse provider from model string - const [provider] = modelString.split(":"); + let [provider, modelName] = modelString.split(":", 2); log.debug("buildProviderOptions", { modelString, @@ -82,11 +82,19 @@ export function buildProviderOptions( return {}; } + // Convert mux-gateway provider to the actual provider and model name. + if (provider === "mux-gateway") { + const [innerProvider, innerModelName] = modelName.split("/", 2); + log.debug("buildProviderOptions: detected mux-gateway provider, using inner provider and model name", { + innerProvider, + innerModelName, + }); + provider = innerProvider; + modelName = innerModelName; + } + // Build Anthropic-specific options if (provider === "anthropic") { - // Extract model name from model string (e.g., "anthropic:claude-opus-4-5" -> "claude-opus-4-5") - const [, modelName] = modelString.split(":"); - // Check if this is Opus 4.5 (supports effort parameter) // Opus 4.5 uses the new "effort" parameter for reasoning control // All other Anthropic models use the "thinking" parameter with budgetTokens From 61787d61fb44872e40d8e5f3db7500fad8b4f296 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 8 Dec 2025 03:51:12 +0000 Subject: [PATCH 2/5] check falsey model or provider name --- src/common/utils/ai/providerOptions.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/common/utils/ai/providerOptions.ts b/src/common/utils/ai/providerOptions.ts index c56e5b63ff..bc2847b6b8 100644 --- a/src/common/utils/ai/providerOptions.ts +++ b/src/common/utils/ai/providerOptions.ts @@ -77,11 +77,6 @@ export function buildProviderOptions( thinkingLevel, }); - if (!provider) { - log.debug("buildProviderOptions: No provider found, returning empty"); - return {}; - } - // Convert mux-gateway provider to the actual provider and model name. if (provider === "mux-gateway") { const [innerProvider, innerModelName] = modelName.split("/", 2); @@ -93,6 +88,11 @@ export function buildProviderOptions( modelName = innerModelName; } + if (!provider || !modelName) { + log.debug("buildProviderOptions: No provider or model name found, returning empty"); + return {}; + } + // Build Anthropic-specific options if (provider === "anthropic") { // Check if this is Opus 4.5 (supports effort parameter) From 4df408fc57bcc728ced7a012881141341d82c78d Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 8 Dec 2025 03:51:41 +0000 Subject: [PATCH 3/5] fmt --- src/common/utils/ai/providerOptions.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/common/utils/ai/providerOptions.ts b/src/common/utils/ai/providerOptions.ts index bc2847b6b8..6341db9a16 100644 --- a/src/common/utils/ai/providerOptions.ts +++ b/src/common/utils/ai/providerOptions.ts @@ -80,10 +80,13 @@ export function buildProviderOptions( // Convert mux-gateway provider to the actual provider and model name. if (provider === "mux-gateway") { const [innerProvider, innerModelName] = modelName.split("/", 2); - log.debug("buildProviderOptions: detected mux-gateway provider, using inner provider and model name", { - innerProvider, - innerModelName, - }); + log.debug( + "buildProviderOptions: detected mux-gateway provider, using inner provider and model name", + { + innerProvider, + innerModelName, + } + ); provider = innerProvider; modelName = innerModelName; } From 0f556a6ab04ca0f1415e4a895677ce26df9952a0 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 8 Dec 2025 04:03:44 +0000 Subject: [PATCH 4/5] use normalize function --- src/common/utils/ai/providerOptions.ts | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/src/common/utils/ai/providerOptions.ts b/src/common/utils/ai/providerOptions.ts index 6341db9a16..76ccf4e135 100644 --- a/src/common/utils/ai/providerOptions.ts +++ b/src/common/utils/ai/providerOptions.ts @@ -20,6 +20,7 @@ import { import { log } from "@/node/services/log"; import type { MuxMessage } from "@/common/types/message"; import { enforceThinkingPolicy } from "@/browser/utils/thinking/policy"; +import { normalizeGatewayModel } from "./models"; /** * OpenRouter reasoning options @@ -68,29 +69,16 @@ export function buildProviderOptions( ): ProviderOptions { // Always clamp to the model's supported thinking policy (e.g., gpt-5-pro = HIGH only) const effectiveThinking = enforceThinkingPolicy(modelString, thinkingLevel); - // Parse provider from model string - let [provider, modelName] = modelString.split(":", 2); + // Parse provider from normalized model string + let [provider, modelName] = normalizeGatewayModel(modelString).split(":", 2); log.debug("buildProviderOptions", { modelString, provider, + modelName, thinkingLevel, }); - // Convert mux-gateway provider to the actual provider and model name. - if (provider === "mux-gateway") { - const [innerProvider, innerModelName] = modelName.split("/", 2); - log.debug( - "buildProviderOptions: detected mux-gateway provider, using inner provider and model name", - { - innerProvider, - innerModelName, - } - ); - provider = innerProvider; - modelName = innerModelName; - } - if (!provider || !modelName) { log.debug("buildProviderOptions: No provider or model name found, returning empty"); return {}; From 81a1dcc605aee922c135bf4b3c4974dffd34cc07 Mon Sep 17 00:00:00 2001 From: Dean Sheather Date: Mon, 8 Dec 2025 04:17:32 +0000 Subject: [PATCH 5/5] static-check --- src/common/utils/ai/providerOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/utils/ai/providerOptions.ts b/src/common/utils/ai/providerOptions.ts index 76ccf4e135..0a05cabbe8 100644 --- a/src/common/utils/ai/providerOptions.ts +++ b/src/common/utils/ai/providerOptions.ts @@ -70,7 +70,7 @@ export function buildProviderOptions( // Always clamp to the model's supported thinking policy (e.g., gpt-5-pro = HIGH only) const effectiveThinking = enforceThinkingPolicy(modelString, thinkingLevel); // Parse provider from normalized model string - let [provider, modelName] = normalizeGatewayModel(modelString).split(":", 2); + const [provider, modelName] = normalizeGatewayModel(modelString).split(":", 2); log.debug("buildProviderOptions", { modelString,