From cfd35c93549bb8504de21a8b8cbb918ed1040abb Mon Sep 17 00:00:00 2001 From: "opencode-agent[bot]" <219766164+opencode-agent[bot]@users.noreply.github.com> Date: Thu, 2 Jul 2026 00:17:18 -0500 Subject: [PATCH] fix(tui): include variant in model switch notice (#34856) Co-authored-by: Aiden Cline --- packages/tui/src/routes/session/index.tsx | 4 ++-- packages/tui/src/util/model.ts | 8 ++++++++ packages/tui/test/util/model.test.ts | 13 ++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/packages/tui/src/routes/session/index.tsx b/packages/tui/src/routes/session/index.tsx index e2ece2fbd5..dbe78f2eec 100644 --- a/packages/tui/src/routes/session/index.tsx +++ b/packages/tui/src/routes/session/index.tsx @@ -71,6 +71,7 @@ import { OPENCODE_BASE_MODE, useBindings, useCommandShortcut } from "../../keyma import { usePathFormatter } from "../../context/path-format" import { LocationProvider } from "../../context/location" import { createSessionRows, type PartRef, type SessionRow } from "./rows" +import { switchLabel } from "../../util/model" addDefaultParsers(parsers.parsers) @@ -1231,8 +1232,7 @@ function SessionSwitchMessageV2(props: { message: SessionMessage }) { const { theme } = useTheme() const text = () => { if (props.message.type === "agent-switched") return `Switched agent to ${props.message.agent}` - if (props.message.type === "model-switched") - return `Switched model to ${props.message.model.providerID}/${props.message.model.id}` + if (props.message.type === "model-switched") return switchLabel(props.message.model) return "" } return {text()} diff --git a/packages/tui/src/util/model.ts b/packages/tui/src/util/model.ts index b6a5c77f54..637acb31e8 100644 --- a/packages/tui/src/util/model.ts +++ b/packages/tui/src/util/model.ts @@ -26,3 +26,11 @@ export function name( ) { return get(list, providerID, modelID)?.name ?? modelID } + +export function formatRef(model: { providerID: string; id: string; variant?: string }) { + return [model.providerID, model.id, model.variant].filter((value) => value !== undefined).join("/") +} + +export function switchLabel(model: { providerID: string; id: string; variant?: string }) { + return `Switched model to ${formatRef(model)}` +} diff --git a/packages/tui/test/util/model.test.ts b/packages/tui/test/util/model.test.ts index 662b1b3210..6cf29ddc7e 100644 --- a/packages/tui/test/util/model.test.ts +++ b/packages/tui/test/util/model.test.ts @@ -1,9 +1,20 @@ import { describe, expect, test } from "bun:test" -import { parse } from "../../src/util/model" +import { formatRef, parse, switchLabel } from "../../src/util/model" describe("util.model", () => { test("splits provider from a nested model identifier", () => { expect(parse("provider/org/model")).toEqual({ providerID: "provider", modelID: "org/model" }) expect(parse("invalid")).toEqual({ providerID: "invalid", modelID: "" }) }) + + test("includes the selected variant in model refs", () => { + expect(formatRef({ providerID: "anthropic", id: "sonnet", variant: "thinking" })).toBe("anthropic/sonnet/thinking") + expect(formatRef({ providerID: "anthropic", id: "sonnet" })).toBe("anthropic/sonnet") + }) + + test("includes the selected variant in model switch notices", () => { + expect(switchLabel({ providerID: "anthropic", id: "sonnet", variant: "thinking" })).toBe( + "Switched model to anthropic/sonnet/thinking", + ) + }) })