From e39a8515f2dbeb0e380015bcb0793c7b62ab9b8f Mon Sep 17 00:00:00 2001 From: Jerry-Xin Date: Mon, 16 Mar 2026 15:28:40 +0800 Subject: [PATCH] fix(image): preserve provider config overrides in OpenRouter fallback Honor providerConfig.baseUrl, providerConfig.api, and headers in the OpenRouter fallback path instead of hardcoding defaults. This ensures custom OpenRouter gateways/proxies and auth headers are preserved when plugin-based capability lookup returns nothing. --- src/agents/pi-embedded-runner/model.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/agents/pi-embedded-runner/model.ts b/src/agents/pi-embedded-runner/model.ts index 30f2dede5ff..35e692bc769 100644 --- a/src/agents/pi-embedded-runner/model.ts +++ b/src/agents/pi-embedded-runner/model.ts @@ -323,6 +323,13 @@ export function resolveModelWithRegistry(params: { ? ["text", "image"] : ["text"]; + const providerHeaders = sanitizeModelHeaders(providerConfig?.headers, { + stripSecretRefMarkers: true, + }); + const modelHeaders = sanitizeModelHeaders(configuredOpenRouterModel?.headers, { + stripSecretRefMarkers: true, + }); + return normalizeResolvedModel({ provider, cfg, @@ -330,15 +337,18 @@ export function resolveModelWithRegistry(params: { model: { id: modelId, name: modelId, - api: "openai-completions", + api: configuredOpenRouterModel?.api ?? providerConfig?.api ?? "openai-completions", provider, - baseUrl: "https://openrouter.ai/api/v1", + baseUrl: providerConfig?.baseUrl ?? "https://openrouter.ai/api/v1", reasoning: configuredOpenRouterModel?.reasoning ?? false, input: resolvedInput, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: configuredOpenRouterModel?.contextWindow ?? DEFAULT_CONTEXT_TOKENS, // Align with OPENROUTER_DEFAULT_MAX_TOKENS in models-config.providers.ts maxTokens: configuredOpenRouterModel?.maxTokens ?? 8192, + ...(providerHeaders || modelHeaders + ? { headers: { ...providerHeaders, ...modelHeaders } } + : {}), } as Model, }); }