From 50aa6a43edf22525ff2bcec8bc59ac076c3507ac Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Fri, 27 Feb 2026 17:38:22 -0800 Subject: [PATCH] fix(model): preserve reasoning in provider fallback resolution (#29285) * fix(model): preserve reasoning in provider fallback resolution * test(model): cover fallback reasoning propagation --- src/agents/pi-embedded-runner/model.test.ts | 26 +++++++++++++++++++++ src/agents/pi-embedded-runner/model.ts | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/agents/pi-embedded-runner/model.test.ts b/src/agents/pi-embedded-runner/model.test.ts index 7a5918a11..ba1406572 100644 --- a/src/agents/pi-embedded-runner/model.test.ts +++ b/src/agents/pi-embedded-runner/model.test.ts @@ -200,6 +200,32 @@ describe("resolveModel", () => { expect(result.model?.maxTokens).toBe(32768); }); + it("propagates reasoning from matching configured fallback model", () => { + const cfg = { + models: { + providers: { + custom: { + baseUrl: "http://localhost:9000", + models: [ + { + ...makeModel("model-a"), + reasoning: false, + }, + { + ...makeModel("model-b"), + reasoning: true, + }, + ], + }, + }, + }, + } as OpenClawConfig; + + const result = resolveModel("custom", "model-b", "/tmp/agent", cfg); + + expect(result.model?.reasoning).toBe(true); + }); + it("builds an openai-codex fallback for gpt-5.3-codex", () => { mockOpenAICodexTemplateModel(); diff --git a/src/agents/pi-embedded-runner/model.ts b/src/agents/pi-embedded-runner/model.ts index 313c5f552..acbcbe0ec 100644 --- a/src/agents/pi-embedded-runner/model.ts +++ b/src/agents/pi-embedded-runner/model.ts @@ -103,7 +103,7 @@ export function resolveModel( api: providerCfg?.api ?? "openai-responses", provider, baseUrl: providerCfg?.baseUrl, - reasoning: false, + reasoning: configuredModel?.reasoning ?? false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: