From 5c68ae3bee04de6531bdbdb8706a5e3c26d6e61a Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Mon, 2 Feb 2026 21:07:10 +0900 Subject: [PATCH] fix: honor agent variant overrides (#1394) * fix(shared): honor agent variant overrides * test(shared): use model in fallback chain to verify override precedence Address PR review: test now uses claude-opus-4-5 (which has default variant 'max' in sisyphus chain) to properly verify that agent override 'high' takes precedence over the fallback chain's default variant. --- src/shared/agent-variant.test.ts | 17 +++++++++++++++++ src/shared/agent-variant.ts | 24 +++++++++++++++--------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/shared/agent-variant.test.ts b/src/shared/agent-variant.test.ts index 8f8e2acf..16c46e91 100644 --- a/src/shared/agent-variant.test.ts +++ b/src/shared/agent-variant.test.ts @@ -83,6 +83,23 @@ describe("applyAgentVariant", () => { }) describe("resolveVariantForModel", () => { + test("returns agent override variant when configured", () => { + // given - use a model in sisyphus chain (claude-opus-4-5 has default variant "max") + // to verify override takes precedence over fallback chain + const config = { + agents: { + sisyphus: { variant: "high" }, + }, + } as OhMyOpenCodeConfig + const model = { providerID: "anthropic", modelID: "claude-opus-4-5" } + + // when + const variant = resolveVariantForModel(config, "sisyphus", model) + + // then + expect(variant).toBe("high") + }) + test("returns correct variant for anthropic provider", () => { // given const config = {} as OhMyOpenCodeConfig diff --git a/src/shared/agent-variant.ts b/src/shared/agent-variant.ts index b1c3b9c5..756f503e 100644 --- a/src/shared/agent-variant.ts +++ b/src/shared/agent-variant.ts @@ -37,23 +37,26 @@ export function resolveVariantForModel( agentName: string, currentModel: { providerID: string; modelID: string }, ): string | undefined { - const agentRequirement = AGENT_MODEL_REQUIREMENTS[agentName] - if (agentRequirement) { - return findVariantInChain(agentRequirement.fallbackChain, currentModel.providerID) - } - const agentOverrides = config.agents as - | Record + | Record | undefined const agentOverride = agentOverrides ? agentOverrides[agentName] ?? Object.entries(agentOverrides).find(([key]) => key.toLowerCase() === agentName.toLowerCase())?.[1] : undefined + if (agentOverride?.variant) { + return agentOverride.variant + } + + const agentRequirement = AGENT_MODEL_REQUIREMENTS[agentName] + if (agentRequirement) { + return findVariantInChain(agentRequirement.fallbackChain, currentModel) + } const categoryName = agentOverride?.category if (categoryName) { const categoryRequirement = CATEGORY_MODEL_REQUIREMENTS[categoryName] if (categoryRequirement) { - return findVariantInChain(categoryRequirement.fallbackChain, currentModel.providerID) + return findVariantInChain(categoryRequirement.fallbackChain, currentModel) } } @@ -62,10 +65,13 @@ export function resolveVariantForModel( function findVariantInChain( fallbackChain: { providers: string[]; model: string; variant?: string }[], - providerID: string, + currentModel: { providerID: string; modelID: string }, ): string | undefined { for (const entry of fallbackChain) { - if (entry.providers.includes(providerID)) { + if ( + entry.providers.includes(currentModel.providerID) + && entry.model === currentModel.modelID + ) { return entry.variant } }