From d9cac62f129a4834d4eea5c623a609553b259e10 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Wed, 27 Aug 2025 12:59:45 +0000 Subject: [PATCH] feat: add checkbox to control maximum context window for magistral-medium model - Added useMaximumContextWindow field to provider settings schema - Implemented checkbox UI in Mistral provider settings with yellow warning - Updated context window logic to limit to 41k tokens when checkbox is unchecked - Added localization strings for the new feature This allows users to opt-in to using the full 128k context window for the magistral-medium-latest model, with a warning about potential performance degradation. --- packages/types/src/provider-settings.ts | 3 ++ packages/types/src/providers/mistral.ts | 5 ++-- src/api/providers/mistral.ts | 12 +++++++- .../components/settings/providers/Mistral.tsx | 29 ++++++++++++++++++- webview-ui/src/i18n/locales/en/settings.json | 4 +++ 5 files changed, 49 insertions(+), 4 deletions(-) diff --git a/packages/types/src/provider-settings.ts b/packages/types/src/provider-settings.ts index eb404f7129..e302c8acc7 100644 --- a/packages/types/src/provider-settings.ts +++ b/packages/types/src/provider-settings.ts @@ -111,6 +111,9 @@ const baseProviderSettingsSchema = z.object({ // Model verbosity. verbosity: verbosityLevelsSchema.optional(), + + // Context window settings. + useMaximumContextWindow: z.boolean().optional(), }) // Several of the providers share common model config properties. diff --git a/packages/types/src/providers/mistral.ts b/packages/types/src/providers/mistral.ts index f3cc47787a..dcacb61bc0 100644 --- a/packages/types/src/providers/mistral.ts +++ b/packages/types/src/providers/mistral.ts @@ -7,10 +7,11 @@ export const mistralDefaultModelId: MistralModelId = "codestral-latest" export const mistralModels = { "magistral-medium-latest": { - maxTokens: 41_000, - contextWindow: 41_000, + maxTokens: 128_000, + contextWindow: 128_000, supportsImages: false, supportsPromptCache: false, + supportsReasoningBudget: true, inputPrice: 2.0, outputPrice: 5.0, }, diff --git a/src/api/providers/mistral.ts b/src/api/providers/mistral.ts index fef215d43f..bfb89361b6 100644 --- a/src/api/providers/mistral.ts +++ b/src/api/providers/mistral.ts @@ -95,7 +95,17 @@ export class MistralHandler extends BaseProvider implements SingleCompletionHand override getModel() { const id = this.options.apiModelId ?? mistralDefaultModelId - const info = mistralModels[id as MistralModelId] ?? mistralModels[mistralDefaultModelId] + let info = mistralModels[id as MistralModelId] ?? mistralModels[mistralDefaultModelId] + + // For magistral-medium-latest, optionally limit context window if useMaximumContextWindow is false + if (id === "magistral-medium-latest" && !this.options.useMaximumContextWindow && info.contextWindow > 41000) { + // Create a modified info object with reduced context window for better performance + info = { + ...info, + contextWindow: 41000, + maxTokens: 41000, + } + } // @TODO: Move this to the `getModelParams` function. const maxTokens = this.options.includeMaxTokens ? info.maxTokens : undefined diff --git a/webview-ui/src/components/settings/providers/Mistral.tsx b/webview-ui/src/components/settings/providers/Mistral.tsx index 666d1421c3..2e12d562e8 100644 --- a/webview-ui/src/components/settings/providers/Mistral.tsx +++ b/webview-ui/src/components/settings/providers/Mistral.tsx @@ -1,12 +1,13 @@ import { useCallback } from "react" import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react" -import { type ProviderSettings, mistralDefaultModelId } from "@roo-code/types" +import { type ProviderSettings, mistralDefaultModelId, mistralModels } from "@roo-code/types" import type { RouterModels } from "@roo/api" import { useAppTranslation } from "@src/i18n/TranslationContext" import { VSCodeButtonLink } from "@src/components/common/VSCodeButtonLink" +import { Checkbox } from "@src/components/ui" import { inputEventTransform } from "../transforms" @@ -30,6 +31,15 @@ export const Mistral = ({ apiConfiguration, setApiConfigurationField }: MistralP [setApiConfigurationField], ) + // Check if the current model is magistral-medium-latest + const isMagistralMedium = + apiConfiguration?.apiModelId === "magistral-medium-latest" || + (!apiConfiguration?.apiModelId && mistralDefaultModelId === "magistral-medium-latest") + + // Get the model info for magistral-medium-latest + const magistralMediumModel = mistralModels["magistral-medium-latest"] + const hasLargeContext = magistralMediumModel && magistralMediumModel.contextWindow >= 100000 + return ( <> )} + {isMagistralMedium && hasLargeContext && ( +
+ setApiConfigurationField("useMaximumContextWindow", checked)}> + {t("settings:providers.mistral.useMaximumContextWindow")} + + {apiConfiguration?.useMaximumContextWindow && ( +
+ +
+ {t("settings:providers.mistral.contextWindowWarning")} +
+
+ )} +
+ )} {(apiConfiguration?.apiModelId?.startsWith("codestral-") || (!apiConfiguration?.apiModelId && mistralDefaultModelId.startsWith("codestral-"))) && ( <> diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index c8cad691a8..92737712ef 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -313,6 +313,10 @@ "getMistralApiKey": "Get Mistral / Codestral API Key", "codestralBaseUrl": "Codestral Base URL (Optional)", "codestralBaseUrlDesc": "Set an alternative URL for the Codestral model.", + "mistral": { + "useMaximumContextWindow": "Use maximum context window (128k tokens)", + "contextWindowWarning": "Using the full 128k context window may significantly degrade performance. Consider using a smaller context for better responsiveness unless you specifically need the extended context." + }, "xaiApiKey": "xAI API Key", "getXaiApiKey": "Get xAI API Key", "litellmApiKey": "LiteLLM API Key",