diff --git a/src/shared/model-settings-compatibility.test.ts b/src/shared/model-settings-compatibility.test.ts index d9b8a455d..6e7a7b590 100644 --- a/src/shared/model-settings-compatibility.test.ts +++ b/src/shared/model-settings-compatibility.test.ts @@ -486,6 +486,30 @@ describe("resolveCompatibleModelSettings", () => { ]) }) + test("#given capabilities.maxOutputTokens is 0 #then maxTokens preserved unchanged", () => { + const result = resolveCompatibleModelSettings({ + providerID: "openai", + modelID: "gpt-5.4", + desired: { maxTokens: 200_000 }, + capabilities: { maxOutputTokens: 0 }, + }) + + expect(result.maxTokens).toBe(200_000) + expect(result.changes).toEqual([]) + }) + + test("#given capabilities.maxOutputTokens is -1 #then maxTokens preserved unchanged", () => { + const result = resolveCompatibleModelSettings({ + providerID: "openai", + modelID: "gpt-5.4", + desired: { maxTokens: 200_000 }, + capabilities: { maxOutputTokens: -1 }, + }) + + expect(result.maxTokens).toBe(200_000) + expect(result.changes).toEqual([]) + }) + // Passthrough: undefined desired values produce no changes test("no-op when desired settings are empty", () => { const result = resolveCompatibleModelSettings({ diff --git a/src/shared/model-settings-compatibility.ts b/src/shared/model-settings-compatibility.ts index f39875f43..974d75619 100644 --- a/src/shared/model-settings-compatibility.ts +++ b/src/shared/model-settings-compatibility.ts @@ -165,6 +165,7 @@ export function resolveCompatibleModelSettings( if ( maxTokens !== undefined && input.capabilities?.maxOutputTokens !== undefined && + input.capabilities.maxOutputTokens > 0 && maxTokens > input.capabilities.maxOutputTokens ) { changes.push({