From 418a4bf1c55d9203fa86962d8d183611da363370 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 8 Apr 2026 14:27:53 +0000 Subject: [PATCH] fix(minimax): pass through custom model IDs with default info fallback Previously, unknown model IDs were silently replaced with the default model ID in both backend getModel() and ignored in the frontend useSelectedModel hook (returning undefined info, causing context window to display as 1). Now custom/unknown model IDs are preserved for API calls while falling back to the default model info for context window and pricing metadata. --- src/api/providers/__tests__/minimax.spec.ts | 10 ++++++++++ src/api/providers/minimax.ts | 4 ++-- .../ui/hooks/__tests__/useSelectedModel.spec.ts | 14 ++++++++++++++ .../src/components/ui/hooks/useSelectedModel.ts | 4 +++- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/api/providers/__tests__/minimax.spec.ts b/src/api/providers/__tests__/minimax.spec.ts index 37f6f12798..6c3afd7606 100644 --- a/src/api/providers/__tests__/minimax.spec.ts +++ b/src/api/providers/__tests__/minimax.spec.ts @@ -196,6 +196,16 @@ describe("MiniMaxHandler", () => { const model = handlerDefault.getModel() expect(model.id).toBe("MiniMax-M2.7") }) + + it("should pass through unknown model ID and fall back to default model info", () => { + const handlerCustom = new MiniMaxHandler({ + minimaxApiKey: "test-minimax-api-key", + apiModelId: "some-future-minimax-model", + }) + const model = handlerCustom.getModel() + expect(model.id).toBe("some-future-minimax-model") + expect(model.info).toEqual(minimaxModels[minimaxDefaultModelId]) + }) }) describe("API Methods", () => { diff --git a/src/api/providers/minimax.ts b/src/api/providers/minimax.ts index bfcf4e3be4..d28b4ebe96 100644 --- a/src/api/providers/minimax.ts +++ b/src/api/providers/minimax.ts @@ -271,8 +271,8 @@ export class MiniMaxHandler extends BaseProvider implements SingleCompletionHand getModel() { const modelId = this.options.apiModelId - const id = modelId && modelId in minimaxModels ? (modelId as MinimaxModelId) : minimaxDefaultModelId - const info = minimaxModels[id] + const id = modelId || minimaxDefaultModelId + const info = minimaxModels[id as MinimaxModelId] ?? minimaxModels[minimaxDefaultModelId] const params = getModelParams({ format: "anthropic", diff --git a/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts b/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts index ed408d4e59..11bf817a35 100644 --- a/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts +++ b/webview-ui/src/components/ui/hooks/__tests__/useSelectedModel.spec.ts @@ -773,5 +773,19 @@ describe("useSelectedModel", () => { expect(result.current.id).toBe("MiniMax-M2.7") expect(result.current.info).toEqual(minimaxModels["MiniMax-M2.7"]) }) + + it("should fall back to default model info for unknown model IDs", () => { + const apiConfiguration: ProviderSettings = { + apiProvider: "minimax", + apiModelId: "some-future-minimax-model", + } + + const wrapper = createWrapper() + const { result } = renderHook(() => useSelectedModel(apiConfiguration), { wrapper }) + + expect(result.current.provider).toBe("minimax") + expect(result.current.id).toBe("some-future-minimax-model") + expect(result.current.info).toEqual(minimaxModels[minimaxDefaultModelId]) + }) }) }) diff --git a/webview-ui/src/components/ui/hooks/useSelectedModel.ts b/webview-ui/src/components/ui/hooks/useSelectedModel.ts index c32a08990c..ce4d114d87 100644 --- a/webview-ui/src/components/ui/hooks/useSelectedModel.ts +++ b/webview-ui/src/components/ui/hooks/useSelectedModel.ts @@ -243,7 +243,9 @@ function getSelectedModel({ } case "minimax": { const id = apiConfiguration.apiModelId ?? defaultModelId - const info = minimaxModels[id as keyof typeof minimaxModels] + const info = + minimaxModels[id as keyof typeof minimaxModels] ?? + minimaxModels[defaultModelId as keyof typeof minimaxModels] return { id, info } } case "zai": {