From 1fc80f4f6cc3db77824223c7bf3ec83515ae7792 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Fri, 12 Jun 2026 17:26:42 +0200 Subject: [PATCH] fix(coding-agent): preserve custom fallback thinking closes #5552 --- packages/coding-agent/CHANGELOG.md | 4 ++++ packages/coding-agent/src/core/model-resolver.ts | 7 +++++-- packages/coding-agent/test/model-resolver.test.ts | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index f24e827e..4d3ee3c6 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -6,6 +6,10 @@ - Added an experimental first-time setup flow behind `PI_EXPERIMENTAL=1` that asks for a dark/light theme choice (preselecting the detected appearance) and opt-in analytics data sharing on first launch with the default agent directory; opting in stores a `trackingId` in `settings.json`. +### Fixed + +- Fixed custom fallback model IDs with `:` suffixes to preserve the requested thinking level when the provider template model does not advertise reasoning ([#5552](https://github.com/earendil-works/pi/issues/5552)). + ## [0.79.1] - 2026-06-09 ### New Features diff --git a/packages/coding-agent/src/core/model-resolver.ts b/packages/coding-agent/src/core/model-resolver.ts index c9afb7b2..292ccf37 100644 --- a/packages/coding-agent/src/core/model-resolver.ts +++ b/packages/coding-agent/src/core/model-resolver.ts @@ -340,7 +340,7 @@ export interface ResolveCliModelResult { export function resolveCliModel(options: { cliProvider?: string; cliModel?: string; - cliThinking?: string; + cliThinking?: ThinkingLevel; modelRegistry: ModelRegistry; }): ResolveCliModelResult { const { cliProvider, cliModel, cliThinking, modelRegistry } = options; @@ -470,10 +470,13 @@ export function resolveCliModel(options: { const fallbackModel = buildFallbackModel(provider, fallbackPattern, availableModels); if (fallbackModel) { + const requestedThinking = cliThinking ?? fallbackThinking; + const model = + requestedThinking && requestedThinking !== "off" ? { ...fallbackModel, reasoning: true } : fallbackModel; const fallbackWarning = warning ? `${warning} Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.` : `Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`; - return { model: fallbackModel, thinkingLevel: fallbackThinking, warning: fallbackWarning, error: undefined }; + return { model, thinkingLevel: fallbackThinking, warning: fallbackWarning, error: undefined }; } } diff --git a/packages/coding-agent/test/model-resolver.test.ts b/packages/coding-agent/test/model-resolver.test.ts index 4b4caf0f..32861a9e 100644 --- a/packages/coding-agent/test/model-resolver.test.ts +++ b/packages/coding-agent/test/model-resolver.test.ts @@ -403,6 +403,7 @@ describe("resolveCliModel", () => { expect(result.model?.provider).toBe("neuralwatt"); // The :high suffix must NOT leak into the model id sent to the API expect(result.model?.id).toBe("zai-org/GLM-5.1-FP8"); + expect(result.model?.reasoning).toBe(true); expect(result.thinkingLevel).toBe("high"); });