diff --git a/apps/web/src/lib/ai-gateway/providers/model-settings.test.ts b/apps/web/src/lib/ai-gateway/providers/model-settings.test.ts new file mode 100644 index 0000000000..348bf92489 --- /dev/null +++ b/apps/web/src/lib/ai-gateway/providers/model-settings.test.ts @@ -0,0 +1,27 @@ +import { MINIMAX_CURRENT_MODEL_ID } from './minimax'; +import { getModelVariants } from './model-settings'; + +describe('MiniMax model variants', () => { + it.each([MINIMAX_CURRENT_MODEL_ID, 'opencode-go/minimax-m3'])( + 'defaults to thinking while exposing instant for MiniMax M3 model %s', + model => { + const variants = getModelVariants(model); + + expect(Object.keys(variants ?? {})).toEqual(['thinking', 'instant']); + expect(variants).toEqual({ + thinking: { reasoning: { enabled: true, effort: 'high' } }, + instant: { reasoning: { enabled: false, effort: 'none' } }, + }); + } + ); + + it('keeps instant as the default for older MiniMax models', () => { + const variants = getModelVariants('minimax/minimax-m2.7'); + + expect(Object.keys(variants ?? {})).toEqual(['instant', 'thinking']); + expect(variants).toEqual({ + instant: { reasoning: { enabled: false, effort: 'none' } }, + thinking: { reasoning: { enabled: true, effort: 'high' } }, + }); + }); +}); diff --git a/apps/web/src/lib/ai-gateway/providers/model-settings.ts b/apps/web/src/lib/ai-gateway/providers/model-settings.ts index 52ff151945..b14fa072a8 100644 --- a/apps/web/src/lib/ai-gateway/providers/model-settings.ts +++ b/apps/web/src/lib/ai-gateway/providers/model-settings.ts @@ -25,8 +25,15 @@ const REASONING_VARIANTS_THINKING_ONLY = { thinking: { reasoning: { enabled: true, effort: 'high' } }, } as const; +const REASONING_DISABLED = { reasoning: { enabled: false, effort: 'none' } } as const; + +const REASONING_VARIANTS_THINKING_INSTANT = { + ...REASONING_VARIANTS_THINKING_ONLY, + instant: REASONING_DISABLED, +} as const; + export const REASONING_VARIANTS_BINARY = { - instant: { reasoning: { enabled: false, effort: 'none' } }, + instant: REASONING_DISABLED, ...REASONING_VARIANTS_THINKING_ONLY, } as const; @@ -107,6 +114,9 @@ export function getModelVariants(model: string): OpenCodeSettings['variants'] { if (model.includes('kimi-k2.7-code')) { return REASONING_VARIANTS_THINKING_ONLY; } + if (isMinimaxModel(model) && model.toLowerCase().includes('minimax-m3')) { + return REASONING_VARIANTS_THINKING_INSTANT; + } if ( isMinimaxModel(model) || isKimiModel(model) ||