From ca34143fa54c45aeaac19e58419f959583e4d53a Mon Sep 17 00:00:00 2001 From: Roo Code Date: Mon, 9 Mar 2026 18:49:21 +0000 Subject: [PATCH 1/7] feat: add model capability preset picker for OpenAI Compatible provider Adds a searchable dropdown to the OpenAI Compatible provider settings that lets users select from all known model capabilities across every provider Roo supports (Anthropic, OpenAI, DeepSeek, Gemini, MiniMax, Mistral, Moonshot/Kimi, Qwen, SambaNova, xAI, ZAi/GLM). When a preset is selected, the model capability fields (context window, max tokens, image support, prompt caching, pricing, etc.) are automatically populated. Users can still choose "Custom" to configure everything manually as before. Changes: - packages/types: new all-model-capabilities.ts aggregating presets - webview-ui: preset picker dropdown in OpenAICompatible.tsx - i18n: English translation keys for the new UI - Tests for both the preset data and the UI component Addresses #11674 --- .../__tests__/all-model-capabilities.test.ts | 67 ++++++++++ .../src/providers/all-model-capabilities.ts | 69 ++++++++++ packages/types/src/providers/index.ts | 1 + .../settings/providers/OpenAICompatible.tsx | 126 +++++++++++++++++- .../__tests__/OpenAICompatible.spec.tsx | 120 ++++++++++++++++- webview-ui/src/i18n/locales/en/settings.json | 8 ++ 6 files changed, 388 insertions(+), 3 deletions(-) create mode 100644 packages/types/src/__tests__/all-model-capabilities.test.ts create mode 100644 packages/types/src/providers/all-model-capabilities.ts diff --git a/packages/types/src/__tests__/all-model-capabilities.test.ts b/packages/types/src/__tests__/all-model-capabilities.test.ts new file mode 100644 index 00000000000..c80cd954884 --- /dev/null +++ b/packages/types/src/__tests__/all-model-capabilities.test.ts @@ -0,0 +1,67 @@ +import { modelCapabilityPresets } from "../providers/all-model-capabilities" + +describe("modelCapabilityPresets", () => { + it("should be a non-empty array", () => { + expect(Array.isArray(modelCapabilityPresets)).toBe(true) + expect(modelCapabilityPresets.length).toBeGreaterThan(0) + }) + + it("every preset should have a provider, modelId, and info with required fields", () => { + for (const preset of modelCapabilityPresets) { + expect(typeof preset.provider).toBe("string") + expect(preset.provider.length).toBeGreaterThan(0) + + expect(typeof preset.modelId).toBe("string") + expect(preset.modelId.length).toBeGreaterThan(0) + + expect(preset.info).toBeDefined() + expect(typeof preset.info.contextWindow).toBe("number") + expect(preset.info.contextWindow).toBeGreaterThan(0) + // supportsPromptCache is a required field in ModelInfo + expect(typeof preset.info.supportsPromptCache).toBe("boolean") + } + }) + + it("should include models from multiple providers", () => { + const providers = new Set(modelCapabilityPresets.map((p) => p.provider)) + expect(providers.size).toBeGreaterThan(5) + }) + + it("should include well-known models", () => { + const modelIds = modelCapabilityPresets.map((p) => p.modelId) + + // Check for some well-known models + expect(modelIds.some((id) => id.includes("claude"))).toBe(true) + expect(modelIds.some((id) => id.includes("gpt"))).toBe(true) + expect(modelIds.some((id) => id.includes("deepseek"))).toBe(true) + expect(modelIds.some((id) => id.includes("gemini"))).toBe(true) + }) + + it("should have unique provider/modelId combinations", () => { + const keys = modelCapabilityPresets.map((p) => `${p.provider}/${p.modelId}`) + const uniqueKeys = new Set(keys) + expect(uniqueKeys.size).toBe(keys.length) + }) + + it("each preset should include known providers", () => { + const knownProviders = [ + "Anthropic", + "OpenAI", + "DeepSeek", + "Gemini", + "MiniMax", + "Mistral", + "Moonshot (Kimi)", + "Qwen", + "SambaNova", + "xAI", + "ZAi (GLM)", + ] + + const providers = new Set(modelCapabilityPresets.map((p) => p.provider)) + + for (const known of knownProviders) { + expect(providers.has(known)).toBe(true) + } + }) +}) diff --git a/packages/types/src/providers/all-model-capabilities.ts b/packages/types/src/providers/all-model-capabilities.ts new file mode 100644 index 00000000000..78bde66ebb5 --- /dev/null +++ b/packages/types/src/providers/all-model-capabilities.ts @@ -0,0 +1,69 @@ +/** + * Aggregated model capabilities from all providers. + * + * This map is used by the OpenAI Compatible provider to let users select + * a known model's capabilities (context window, max tokens, image support, + * prompt caching, etc.) so Roo can communicate optimally with local or + * third-party endpoints that serve these models. + */ +import type { ModelInfo } from "../model.js" + +import { anthropicModels } from "./anthropic.js" +import { deepSeekModels } from "./deepseek.js" +import { geminiModels } from "./gemini.js" +import { minimaxModels } from "./minimax.js" +import { mistralModels } from "./mistral.js" +import { moonshotModels } from "./moonshot.js" +import { openAiNativeModels } from "./openai.js" +import { sambaNovaModels } from "./sambanova.js" +import { xaiModels } from "./xai.js" +import { internationalZAiModels } from "./zai.js" +import { qwenCodeModels } from "./qwen-code.js" + +/** + * A single entry in the capability presets list. + */ +export interface ModelCapabilityPreset { + /** The provider this model originally belongs to */ + provider: string + /** The model ID as known by its native provider */ + modelId: string + /** The model's capability info */ + info: ModelInfo +} + +/** + * Helper to build preset entries from a provider's model record. + */ +function buildPresets(provider: string, models: Record): ModelCapabilityPreset[] { + return Object.entries(models).map(([modelId, info]) => ({ + provider, + modelId, + info, + })) +} + +/** + * All known model capability presets, aggregated from every provider. + * + * We intentionally exclude cloud-only routing providers (OpenRouter, Requesty, + * LiteLLM, Roo, Unbound, Vercel AI Gateway) and platform-locked providers + * (Bedrock, Vertex, VSCode LM, OpenAI Codex, Baseten, Fireworks) since those + * models are either duplicates of the originals or have platform-specific + * model IDs that don't map to local inference. + * + * The user can always choose "Custom" and configure capabilities manually. + */ +export const modelCapabilityPresets: ModelCapabilityPreset[] = [ + ...buildPresets("Anthropic", anthropicModels), + ...buildPresets("OpenAI", openAiNativeModels), + ...buildPresets("DeepSeek", deepSeekModels), + ...buildPresets("Gemini", geminiModels), + ...buildPresets("MiniMax", minimaxModels), + ...buildPresets("Mistral", mistralModels), + ...buildPresets("Moonshot (Kimi)", moonshotModels), + ...buildPresets("Qwen", qwenCodeModels), + ...buildPresets("SambaNova", sambaNovaModels), + ...buildPresets("xAI", xaiModels), + ...buildPresets("ZAi (GLM)", internationalZAiModels), +] diff --git a/packages/types/src/providers/index.ts b/packages/types/src/providers/index.ts index 6bb959c7056..85311904ac1 100644 --- a/packages/types/src/providers/index.ts +++ b/packages/types/src/providers/index.ts @@ -24,6 +24,7 @@ export * from "./xai.js" export * from "./vercel-ai-gateway.js" export * from "./zai.js" export * from "./minimax.js" +export * from "./all-model-capabilities.js" import { anthropicDefaultModelId } from "./anthropic.js" import { basetenDefaultModelId } from "./baseten.js" diff --git a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx index 0524932c5fa..9a50aace579 100644 --- a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx +++ b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx @@ -1,6 +1,7 @@ -import { useState, useCallback, useEffect } from "react" +import { useState, useCallback, useEffect, useMemo } from "react" import { useEvent } from "react-use" import { Checkbox } from "vscrui" +import { ChevronsUpDown, Check } from "lucide-react" import { VSCodeButton, VSCodeTextField } from "@vscode/webview-ui-toolkit/react" import { @@ -11,10 +12,24 @@ import { type ExtensionMessage, azureOpenAiDefaultApiVersion, openAiModelInfoSaneDefaults, + modelCapabilityPresets, } from "@roo-code/types" import { useAppTranslation } from "@src/i18n/TranslationContext" -import { Button, StandardTooltip } from "@src/components/ui" +import { + Button, + StandardTooltip, + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + Popover, + PopoverContent, + PopoverTrigger, +} from "@src/components/ui" +import { cn } from "@src/lib/utils" import { convertHeadersToObject } from "../utils/headers" import { inputEventTransform, noTransform } from "../transforms" @@ -44,9 +59,40 @@ export const OpenAICompatible = ({ const { t } = useAppTranslation() const [azureApiVersionSelected, setAzureApiVersionSelected] = useState(!!apiConfiguration?.azureApiVersion) + const [presetPickerOpen, setPresetPickerOpen] = useState(false) + const [selectedPresetId, setSelectedPresetId] = useState(null) const [openAiModels, setOpenAiModels] = useState | null>(null) + // Group presets by provider for organized display + const groupedPresets = useMemo(() => { + const groups: Record = {} + for (const preset of modelCapabilityPresets) { + if (!groups[preset.provider]) { + groups[preset.provider] = [] + } + groups[preset.provider].push(preset) + } + return groups + }, []) + + const handlePresetSelect = useCallback( + (presetKey: string) => { + if (presetKey === "custom") { + setSelectedPresetId(null) + setApiConfigurationField("openAiCustomModelInfo", openAiModelInfoSaneDefaults) + } else { + const preset = modelCapabilityPresets.find((p) => `${p.provider}/${p.modelId}` === presetKey) + if (preset) { + setSelectedPresetId(presetKey) + setApiConfigurationField("openAiCustomModelInfo", { ...preset.info }) + } + } + setPresetPickerOpen(false) + }, + [setApiConfigurationField], + ) + const [customHeaders, setCustomHeaders] = useState<[string, string][]>(() => { const headers = apiConfiguration?.openAiHeaders || {} return Object.entries(headers) @@ -278,6 +324,82 @@ export const OpenAICompatible = ({ )}
+
+ +
+ {t("settings:providers.customModel.capabilityPreset.description")} +
+ + + + + + + + + + {t("settings:providers.customModel.capabilityPreset.noResults")} + + + handlePresetSelect("custom")}> + + {t("settings:providers.customModel.capabilityPreset.custom")} + + + {Object.entries(groupedPresets).map(([provider, presets]) => ( + + {presets.map((preset) => { + const presetKey = `${preset.provider}/${preset.modelId}` + return ( + handlePresetSelect(presetKey)}> + + {preset.modelId} + {preset.info.description && ( + + {preset.info.contextWindow + ? `${Math.round(preset.info.contextWindow / 1000)}K ctx` + : ""} + + )} + + ) + })} + + ))} + + + + +
+
{t("settings:providers.customModel.capabilities")}
diff --git a/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx b/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx index aba81ec2191..7422cbd3c0a 100644 --- a/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx +++ b/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx @@ -63,8 +63,40 @@ vi.mock("@src/i18n/TranslationContext", () => ({ // Mock the UI components vi.mock("@src/components/ui", () => ({ - Button: ({ children, onClick }: any) => , + Button: ({ children, onClick, ...props }: any) => ( + + ), StandardTooltip: ({ children, content }: any) =>
{children}
, + Command: ({ children }: any) =>
{children}
, + CommandEmpty: ({ children }: any) =>
{children}
, + CommandGroup: ({ children, heading }: any) =>
{children}
, + CommandInput: ({ placeholder }: any) => , + CommandItem: ({ children, onSelect, value }: any) => ( +
+ {children} +
+ ), + CommandList: ({ children }: any) =>
{children}
, + Popover: ({ children, open }: any) => ( +
+ {children} +
+ ), + PopoverContent: ({ children }: any) =>
{children}
, + PopoverTrigger: ({ children }: any) =>
{children}
, +})) + +// Mock lucide-react icons +vi.mock("lucide-react", () => ({ + ChevronsUpDown: () => , + Check: () => , +})) + +// Mock cn utility +vi.mock("@src/lib/utils", () => ({ + cn: (...args: any[]) => args.filter(Boolean).join(" "), })) // Mock other components @@ -313,3 +345,89 @@ describe("OpenAICompatible Component - includeMaxTokens checkbox", () => { }) }) }) + +describe("OpenAICompatible Component - Model Capability Presets", () => { + const mockSetApiConfigurationField = vi.fn() + const mockOrganizationAllowList = { + allowAll: true, + providers: {}, + } + + beforeEach(() => { + vi.clearAllMocks() + }) + + it("should render the model capability preset picker", () => { + const apiConfiguration: Partial = {} + + render( + , + ) + + // Check that the preset label is rendered + expect(screen.getByText("settings:providers.customModel.capabilityPreset.label")).toBeInTheDocument() + + // Check that the description is rendered + expect(screen.getByText("settings:providers.customModel.capabilityPreset.description")).toBeInTheDocument() + }) + + it("should render the popover trigger button with Custom text by default", () => { + const apiConfiguration: Partial = {} + + render( + , + ) + + // Should show the custom option text (appears in button, group heading, and item) + const customTexts = screen.getAllByText("settings:providers.customModel.capabilityPreset.custom") + expect(customTexts.length).toBeGreaterThanOrEqual(1) + }) + + it("should render command items for model presets grouped by provider", () => { + const apiConfiguration: Partial = {} + + render( + , + ) + + // Check that provider groups are rendered (via mocked CommandGroup with heading) + expect(screen.getByTestId("command-group-Anthropic")).toBeInTheDocument() + expect(screen.getByTestId("command-group-OpenAI")).toBeInTheDocument() + expect(screen.getByTestId("command-group-DeepSeek")).toBeInTheDocument() + }) + + it("should call setApiConfigurationField with preset info when a model is selected", () => { + const apiConfiguration: Partial = {} + + render( + , + ) + + // Click on the "custom" item to reset to defaults + const customItem = screen.getByTestId("command-item-custom") + fireEvent.click(customItem) + + expect(mockSetApiConfigurationField).toHaveBeenCalledWith( + "openAiCustomModelInfo", + expect.objectContaining({ + contextWindow: expect.any(Number), + }), + ) + }) +}) diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 3b2497aaee7..a0dcc1a9ce4 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -543,6 +543,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Model Capability Preset", + "description": "Select a known model to automatically configure capabilities (context window, max tokens, image support, etc.). Choose \"Custom\" to configure manually.", + "custom": "Custom (configure manually)", + "searchPlaceholder": "Search models...", + "noResults": "No matching models found.", + "applied": "Applied capabilities from {{model}}" + }, "capabilities": "Configure the capabilities and pricing for your custom OpenAI-compatible model. Be careful when specifying the model capabilities, as they can affect how Roo Code performs.", "maxTokens": { "label": "Max Output Tokens", From f21db240ba74b025530c457a562f84ff71086573 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Mon, 9 Mar 2026 18:50:37 +0000 Subject: [PATCH 2/7] fix: add explicit types and .js extensions to test imports for strict TS --- .../__tests__/all-model-capabilities.test.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/types/src/__tests__/all-model-capabilities.test.ts b/packages/types/src/__tests__/all-model-capabilities.test.ts index c80cd954884..5d68d477dbf 100644 --- a/packages/types/src/__tests__/all-model-capabilities.test.ts +++ b/packages/types/src/__tests__/all-model-capabilities.test.ts @@ -1,4 +1,5 @@ -import { modelCapabilityPresets } from "../providers/all-model-capabilities" +import { modelCapabilityPresets } from "../providers/all-model-capabilities.js" +import type { ModelCapabilityPreset } from "../providers/all-model-capabilities.js" describe("modelCapabilityPresets", () => { it("should be a non-empty array", () => { @@ -23,22 +24,22 @@ describe("modelCapabilityPresets", () => { }) it("should include models from multiple providers", () => { - const providers = new Set(modelCapabilityPresets.map((p) => p.provider)) + const providers = new Set(modelCapabilityPresets.map((p: ModelCapabilityPreset) => p.provider)) expect(providers.size).toBeGreaterThan(5) }) it("should include well-known models", () => { - const modelIds = modelCapabilityPresets.map((p) => p.modelId) + const modelIds = modelCapabilityPresets.map((p: ModelCapabilityPreset) => p.modelId) // Check for some well-known models - expect(modelIds.some((id) => id.includes("claude"))).toBe(true) - expect(modelIds.some((id) => id.includes("gpt"))).toBe(true) - expect(modelIds.some((id) => id.includes("deepseek"))).toBe(true) - expect(modelIds.some((id) => id.includes("gemini"))).toBe(true) + expect(modelIds.some((id: string) => id.includes("claude"))).toBe(true) + expect(modelIds.some((id: string) => id.includes("gpt"))).toBe(true) + expect(modelIds.some((id: string) => id.includes("deepseek"))).toBe(true) + expect(modelIds.some((id: string) => id.includes("gemini"))).toBe(true) }) it("should have unique provider/modelId combinations", () => { - const keys = modelCapabilityPresets.map((p) => `${p.provider}/${p.modelId}`) + const keys = modelCapabilityPresets.map((p: ModelCapabilityPreset) => `${p.provider}/${p.modelId}`) const uniqueKeys = new Set(keys) expect(uniqueKeys.size).toBe(keys.length) }) @@ -58,7 +59,7 @@ describe("modelCapabilityPresets", () => { "ZAi (GLM)", ] - const providers = new Set(modelCapabilityPresets.map((p) => p.provider)) + const providers = new Set(modelCapabilityPresets.map((p: ModelCapabilityPreset) => p.provider)) for (const known of knownProviders) { expect(providers.has(known)).toBe(true) From f4a83301dc58799be73ee07b4e3cd16773e6dc08 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Mon, 9 Mar 2026 19:00:29 +0000 Subject: [PATCH 3/7] fix: add capabilityPreset translations to all non-EN locales --- webview-ui/src/i18n/locales/ca/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/de/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/es/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/fr/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/hi/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/id/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/it/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/ja/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/ko/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/nl/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/pl/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/pt-BR/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/ru/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/tr/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/vi/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/zh-CN/settings.json | 8 ++++++++ webview-ui/src/i18n/locales/zh-TW/settings.json | 8 ++++++++ 17 files changed, 136 insertions(+) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 2c83cabbbcb..a9bfb5856cb 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset de capacitats del model", + "description": "Selecciona un model conegut per configurar automàticament les capacitats (finestra de context, tokens màxims, suport d'imatges, etc.). Tria \"Personalitzat\" per configurar manualment.", + "custom": "Personalitzat (configura manualment)", + "searchPlaceholder": "Cerca models...", + "noResults": "No s'han trobat models coincidents.", + "applied": "S'han aplicat les capacitats de {{model}}" + }, "capabilities": "Configureu les capacitats i preus per al vostre model personalitzat compatible amb OpenAI. Tingueu cura en especificar les capacitats del model, ja que poden afectar com funciona Roo Code.", "maxTokens": { "label": "Màxim de tokens de sortida", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index c31d29147d4..738b4790216 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Modellfähigkeiten-Preset", + "description": "Wähle ein bekanntes Modell, um die Fähigkeiten automatisch zu konfigurieren (Kontextfenster, maximale Token, Bildunterstützung usw.). Wähle \"Benutzerdefiniert\" für manuelle Konfiguration.", + "custom": "Benutzerdefiniert (manuell konfigurieren)", + "searchPlaceholder": "Modelle suchen...", + "noResults": "Keine passenden Modelle gefunden.", + "applied": "Fähigkeiten von {{model}} angewendet" + }, "capabilities": "Konfiguriere die Fähigkeiten und Preise für dein benutzerdefiniertes OpenAI-kompatibles Modell. Sei vorsichtig bei der Angabe der Modellfähigkeiten, da diese beeinflussen können, wie Roo Code funktioniert.", "maxTokens": { "label": "Maximale Ausgabe-Tokens", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 6595c4f9079..4d1f357ce87 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset de capacidades del modelo", + "description": "Selecciona un modelo conocido para configurar automáticamente las capacidades (ventana de contexto, tokens máximos, soporte de imágenes, etc.). Elige \"Personalizado\" para configurar manualmente.", + "custom": "Personalizado (configurar manualmente)", + "searchPlaceholder": "Buscar modelos...", + "noResults": "No se encontraron modelos coincidentes.", + "applied": "Se aplicaron las capacidades de {{model}}" + }, "capabilities": "Configure las capacidades y precios para su modelo personalizado compatible con OpenAI. Tenga cuidado al especificar las capacidades del modelo, ya que pueden afectar cómo funciona Roo Code.", "maxTokens": { "label": "Tokens máximos de salida", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 56337bda14c..07bba69fe85 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset de capacités du modèle", + "description": "Sélectionne un modèle connu pour configurer automatiquement les capacités (fenêtre de contexte, tokens maximum, support d'images, etc.). Choisis \"Personnalisé\" pour configurer manuellement.", + "custom": "Personnalisé (configurer manuellement)", + "searchPlaceholder": "Rechercher des modèles...", + "noResults": "Aucun modèle correspondant trouvé.", + "applied": "Capacités de {{model}} appliquées" + }, "capabilities": "Configurez les capacités et les prix pour votre modèle personnalisé compatible OpenAI. Soyez prudent lors de la spécification des capacités du modèle, car elles peuvent affecter le fonctionnement de Roo Code.", "maxTokens": { "label": "Tokens de sortie maximum", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index abd334bec09..71ce16595c4 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "मॉडल क्षमता प्रीसेट", + "description": "क्षमताओं को स्वचालित रूप से कॉन्फ़िगर करने के लिए एक ज्ञात मॉडल चुनें (कॉन्टेक्स्ट विंडो, अधिकतम token, इमेज सपोर्ट, आदि)। मैन्युअल रूप से कॉन्फ़िगर करने के लिए \"कस्टम\" चुनें।", + "custom": "कस्टम (मैन्युअल रूप से कॉन्फ़िगर करें)", + "searchPlaceholder": "मॉडल खोजें...", + "noResults": "कोई मेल खाने वाला मॉडल नहीं मिला।", + "applied": "{{model}} से क्षमताएं लागू की गईं" + }, "capabilities": "अपने कस्टम OpenAI-संगत मॉडल के लिए क्षमताओं और मूल्य निर्धारण को कॉन्फ़िगर करें। मॉडल क्षमताओं को निर्दिष्ट करते समय सावधान रहें, क्योंकि वे Roo Code के प्रदर्शन को प्रभावित कर सकती हैं।", "maxTokens": { "label": "अधिकतम आउटपुट टोकन", diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 1ebcf2073b6..40d1086ea89 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset Kemampuan Model", + "description": "Pilih model yang dikenal untuk mengonfigurasi kemampuan secara otomatis (jendela konteks, token maksimum, dukungan gambar, dll.). Pilih \"Kustom\" untuk mengonfigurasi secara manual.", + "custom": "Kustom (konfigurasi manual)", + "searchPlaceholder": "Cari model...", + "noResults": "Tidak ada model yang cocok ditemukan.", + "applied": "Kemampuan dari {{model}} diterapkan" + }, "capabilities": "Konfigurasi kemampuan dan harga untuk model kustom yang kompatibel dengan OpenAI. Hati-hati saat menentukan kemampuan model, karena dapat mempengaruhi performa Roo Code.", "maxTokens": { "label": "Token Output Maksimum", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 4a0c7161654..c84a0b24e5a 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset capacità del modello", + "description": "Seleziona un modello conosciuto per configurare automaticamente le capacità (finestra di contesto, token massimi, supporto immagini, ecc.). Scegli \"Personalizzato\" per configurare manualmente.", + "custom": "Personalizzato (configura manualmente)", + "searchPlaceholder": "Cerca modelli...", + "noResults": "Nessun modello corrispondente trovato.", + "applied": "Capacità di {{model}} applicate" + }, "capabilities": "Configura le capacità e i prezzi del tuo modello personalizzato compatibile con OpenAI. Fai attenzione quando specifichi le capacità del modello, poiché possono influenzare le prestazioni di Roo Code.", "maxTokens": { "label": "Token di output massimi", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index b0d921571af..462b905ef96 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "モデル機能プリセット", + "description": "既知のモデルを選択して、機能(コンテキストウィンドウ、最大トークン数、画像サポートなど)を自動的に設定します。手動で設定するには「カスタム」を選択してください。", + "custom": "カスタム(手動で設定)", + "searchPlaceholder": "モデルを検索...", + "noResults": "一致するモデルが見つかりません。", + "applied": "{{model}}の機能を適用しました" + }, "capabilities": "カスタムOpenAI互換モデルの機能と価格を設定します。モデルの機能はRoo Codeのパフォーマンスに影響を与える可能性があるため、慎重に指定してください。", "maxTokens": { "label": "最大出力トークン", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 88fc8e6d79e..f28c9372f24 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "모델 기능 프리셋", + "description": "알려진 모델을 선택하여 기능(컨텍스트 윈도우, 최대 토큰, 이미지 지원 등)을 자동으로 구성합니다. 수동으로 구성하려면 \"사용자 정의\"를 선택하세요.", + "custom": "사용자 정의 (수동 구성)", + "searchPlaceholder": "모델 검색...", + "noResults": "일치하는 모델을 찾을 수 없습니다.", + "applied": "{{model}}의 기능이 적용되었습니다" + }, "capabilities": "사용자 정의 OpenAI 호환 모델의 기능과 가격을 구성하세요. 모델 기능이 Roo Code의 성능에 영향을 미칠 수 있으므로 신중하게 지정하세요.", "maxTokens": { "label": "최대 출력 토큰", diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index fcfad37d376..6d43880f622 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Modelmogelijkheden-preset", + "description": "Selecteer een bekend model om de mogelijkheden automatisch te configureren (contextvenster, maximale tokens, afbeeldingsondersteuning, enz.). Kies \"Aangepast\" om handmatig te configureren.", + "custom": "Aangepast (handmatig configureren)", + "searchPlaceholder": "Modellen zoeken...", + "noResults": "Geen overeenkomende modellen gevonden.", + "applied": "Mogelijkheden van {{model}} toegepast" + }, "capabilities": "Stel de mogelijkheden en prijzen in voor je aangepaste OpenAI-compatibele model. Wees voorzichtig met het opgeven van de modelmogelijkheden, want deze kunnen de prestaties van Roo Code beïnvloeden.", "maxTokens": { "label": "Maximaal aantal outputtokens", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index fa48bc6b212..3e076615a49 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset możliwości modelu", + "description": "Wybierz znany model, aby automatycznie skonfigurować możliwości (okno kontekstu, maksymalna liczba tokenów, obsługa obrazów itp.). Wybierz \"Niestandardowy\" aby skonfigurować ręcznie.", + "custom": "Niestandardowy (konfiguruj ręcznie)", + "searchPlaceholder": "Szukaj modeli...", + "noResults": "Nie znaleziono pasujących modeli.", + "applied": "Zastosowano możliwości z {{model}}" + }, "capabilities": "Skonfiguruj możliwości i ceny swojego niestandardowego modelu zgodnego z OpenAI. Zachowaj ostrożność podczas określania możliwości modelu, ponieważ mogą one wpływać na wydajność Roo Code.", "maxTokens": { "label": "Maksymalna liczba tokenów wyjściowych", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index a8387e05121..a3023d80917 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset de capacidades do modelo", + "description": "Selecione um modelo conhecido para configurar automaticamente as capacidades (janela de contexto, tokens máximos, suporte a imagens, etc.). Escolha \"Personalizado\" para configurar manualmente.", + "custom": "Personalizado (configurar manualmente)", + "searchPlaceholder": "Buscar modelos...", + "noResults": "Nenhum modelo correspondente encontrado.", + "applied": "Capacidades de {{model}} aplicadas" + }, "capabilities": "Configure as capacidades e preços para seu modelo personalizado compatível com OpenAI. Tenha cuidado ao especificar as capacidades do modelo, pois elas podem afetar como o Roo Code funciona.", "maxTokens": { "label": "Máximo de Tokens de Saída", diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index fe24ebee299..5247ec3f5d9 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Пресет возможностей модели", + "description": "Выбери известную модель для автоматической настройки возможностей (окно контекста, максимум токенов, поддержка изображений и т.д.). Выбери \"Пользовательский\" для ручной настройки.", + "custom": "Пользовательский (настроить вручную)", + "searchPlaceholder": "Поиск моделей...", + "noResults": "Подходящие модели не найдены.", + "applied": "Применены возможности из {{model}}" + }, "capabilities": "Настройте возможности и стоимость вашей пользовательской модели, совместимой с OpenAI. Будьте осторожны при указании возможностей модели, это может повлиять на работу Roo Code.", "maxTokens": { "label": "Максимум токенов на вывод", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 7171718f1c5..ed1dd1ff1fa 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Model Yetenek Ön Ayarı", + "description": "Yetenekleri otomatik olarak yapılandırmak için bilinen bir model seç (bağlam penceresi, maksimum token, görüntü desteği vb.). Manuel yapılandırma için \"Özel\" seç.", + "custom": "Özel (manuel yapılandır)", + "searchPlaceholder": "Model ara...", + "noResults": "Eşleşen model bulunamadı.", + "applied": "{{model}} yetenekleri uygulandı" + }, "capabilities": "Özel OpenAI uyumlu modelinizin yeteneklerini ve fiyatlandırmasını yapılandırın. Model yeteneklerini belirtirken dikkatli olun, çünkü bunlar Roo Code'un performansını etkileyebilir.", "maxTokens": { "label": "Maksimum Çıktı Token'ları", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 95b4f2d6863..20ee9b3cabf 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "Preset khả năng mô hình", + "description": "Chọn một mô hình đã biết để tự động cấu hình các khả năng (cửa sổ ngữ cảnh, token tối đa, hỗ trợ hình ảnh, v.v.). Chọn \"Tùy chỉnh\" để cấu hình thủ công.", + "custom": "Tùy chỉnh (cấu hình thủ công)", + "searchPlaceholder": "Tìm kiếm mô hình...", + "noResults": "Không tìm thấy mô hình phù hợp.", + "applied": "Đã áp dụng khả năng từ {{model}}" + }, "capabilities": "Cấu hình các khả năng và giá cả cho mô hình tương thích OpenAI tùy chỉnh của bạn. Hãy cẩn thận khi chỉ định khả năng của mô hình, vì chúng có thể ảnh hưởng đến cách Roo Code hoạt động.", "maxTokens": { "label": "Số token đầu ra tối đa", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index eeba6bb079d..997d59f378f 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -480,6 +480,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "模型能力预设", + "description": "选择一个已知模型来自动配置能力(上下文窗口、最大 token 数、图像支持等)。选择「自定义」以手动配置。", + "custom": "自定义(手动配置)", + "searchPlaceholder": "搜索模型...", + "noResults": "未找到匹配的模型。", + "applied": "已应用 {{model}} 的能力配置" + }, "capabilities": "自定义模型配置注意事项:\n• 确保兼容OpenAI接口规范\n• 错误配置可能导致功能异常\n• 价格参数影响费用统计", "maxTokens": { "label": "最大输出Token数", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 9f4241c3dd9..0091c520b32 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -490,6 +490,14 @@ } }, "customModel": { + "capabilityPreset": { + "label": "模型能力預設", + "description": "選擇一個已知模型來自動設定能力(上下文視窗、最大 token 數、圖片支援等)。選擇「自訂」以手動設定。", + "custom": "自訂(手動設定)", + "searchPlaceholder": "搜尋模型...", + "noResults": "找不到符合的模型。", + "applied": "已套用 {{model}} 的能力設定" + }, "capabilities": "設定自訂 OpenAI 相容模型的功能和定價。請謹慎設定模型功能,因為這會影響 Roo Code 的運作方式。", "maxTokens": { "label": "最大輸出 Token", From 200537978077e5524fa58bba70f4bdd1fc591e45 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 10 Mar 2026 09:27:09 +0000 Subject: [PATCH 4/7] fix: add preserveReasoning flag to kimi-k2.5 model definition --- packages/types/src/providers/moonshot.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/types/src/providers/moonshot.ts b/packages/types/src/providers/moonshot.ts index a825475644b..d0a68d97896 100644 --- a/packages/types/src/providers/moonshot.ts +++ b/packages/types/src/providers/moonshot.ts @@ -62,6 +62,7 @@ export const moonshotModels = { outputPrice: 3.0, // $3.00 per million tokens cacheReadsPrice: 0.1, // $0.10 per million tokens (cache hit) supportsTemperature: true, + preserveReasoning: true, defaultTemperature: 1.0, description: "Kimi K2.5 is the latest generation of Moonshot AI's Kimi series, featuring improved reasoning capabilities and enhanced performance across diverse tasks.", From c43a5a8e359835b4133f98ef82929f80227991bd Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 10 Mar 2026 11:16:54 +0000 Subject: [PATCH 5/7] fix: auto-enable R1 format for models with preserveReasoning in preset picker When selecting a model preset with preserveReasoning (e.g. Kimi K2.5, Kimi K2 thinking), the R1 format setting is now automatically enabled so reasoning/thinking blocks work correctly via OpenAI Compatible endpoints. Also adds visual indicator showing applied capability flags after selecting a preset, and new tests covering the auto-enable behavior. --- .../settings/providers/OpenAICompatible.tsx | 28 +++++++++++++ .../__tests__/OpenAICompatible.spec.tsx | 41 +++++++++++++++++++ webview-ui/src/i18n/locales/en/settings.json | 9 +++- 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx index 9a50aace579..8609652a9d8 100644 --- a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx +++ b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx @@ -64,6 +64,22 @@ export const OpenAICompatible = ({ const [openAiModels, setOpenAiModels] = useState | null>(null) + // Compute applied capability flags for the selected preset + const appliedCapabilityFlags = useMemo(() => { + if (!selectedPresetId) return null + const preset = modelCapabilityPresets.find((p) => `${p.provider}/${p.modelId}` === selectedPresetId) + if (!preset) return null + const flags: string[] = [] + if (preset.info.preserveReasoning) + flags.push(t("settings:providers.customModel.capabilityPreset.flags.reasoning")) + if (preset.info.supportsImages) flags.push(t("settings:providers.customModel.capabilityPreset.flags.images")) + if (preset.info.supportsPromptCache) + flags.push(t("settings:providers.customModel.capabilityPreset.flags.promptCache")) + if (preset.info.supportsTemperature) + flags.push(t("settings:providers.customModel.capabilityPreset.flags.temperature")) + return flags.length > 0 ? flags : null + }, [selectedPresetId, t]) + // Group presets by provider for organized display const groupedPresets = useMemo(() => { const groups: Record = {} @@ -81,11 +97,17 @@ export const OpenAICompatible = ({ if (presetKey === "custom") { setSelectedPresetId(null) setApiConfigurationField("openAiCustomModelInfo", openAiModelInfoSaneDefaults) + setApiConfigurationField("openAiR1FormatEnabled", false) } else { const preset = modelCapabilityPresets.find((p) => `${p.provider}/${p.modelId}` === presetKey) if (preset) { setSelectedPresetId(presetKey) setApiConfigurationField("openAiCustomModelInfo", { ...preset.info }) + + // Auto-enable R1 format for models that use reasoning/thinking blocks + if (preset.info.preserveReasoning) { + setApiConfigurationField("openAiR1FormatEnabled", true) + } } } setPresetPickerOpen(false) @@ -398,6 +420,12 @@ export const OpenAICompatible = ({ + {appliedCapabilityFlags && ( +
+ {t("settings:providers.customModel.capabilityPreset.appliedFlags")}:{" "} + {appliedCapabilityFlags.join(", ")} +
+ )}
diff --git a/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx b/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx index 7422cbd3c0a..e69b8233d96 100644 --- a/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx +++ b/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx @@ -430,4 +430,45 @@ describe("OpenAICompatible Component - Model Capability Presets", () => { }), ) }) + + it("should reset openAiR1FormatEnabled when selecting custom preset", () => { + const apiConfiguration: Partial = {} + + render( + , + ) + + const customItem = screen.getByTestId("command-item-custom") + fireEvent.click(customItem) + + expect(mockSetApiConfigurationField).toHaveBeenCalledWith("openAiR1FormatEnabled", false) + }) + + it("should auto-enable openAiR1FormatEnabled when selecting a model with preserveReasoning", () => { + const apiConfiguration: Partial = {} + + render( + , + ) + + // Click on a Kimi K2.5 model which has preserveReasoning: true + const kimiItem = screen.getByTestId("command-item-Moonshot (Kimi)/kimi-k2.5") + fireEvent.click(kimiItem) + + expect(mockSetApiConfigurationField).toHaveBeenCalledWith("openAiR1FormatEnabled", true) + expect(mockSetApiConfigurationField).toHaveBeenCalledWith( + "openAiCustomModelInfo", + expect.objectContaining({ + preserveReasoning: true, + }), + ) + }) }) diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index a0dcc1a9ce4..066a0dd46a4 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -549,7 +549,14 @@ "custom": "Custom (configure manually)", "searchPlaceholder": "Search models...", "noResults": "No matching models found.", - "applied": "Applied capabilities from {{model}}" + "applied": "Applied capabilities from {{model}}", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control" + } }, "capabilities": "Configure the capabilities and pricing for your custom OpenAI-compatible model. Be careful when specifying the model capabilities, as they can affect how Roo Code performs.", "maxTokens": { From 16dc2d15370836d6178e27e1b110cb3656f93304 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 10 Mar 2026 11:33:06 +0000 Subject: [PATCH 6/7] fix: auto-apply temperature and R1 format from preset, add missing locale translations - Auto-set modelTemperature when selecting a preset with defaultTemperature (e.g. Kimi K2 models require temp=1.0) - Reset openAiR1FormatEnabled to false when selecting non-reasoning models (not just on "custom") - Reset modelTemperature to null when selecting "custom" preset - Add defaultTemp flag to capability display showing auto-applied temperature - Add missing appliedFlags/flags translation keys to all non-EN locales - Add tests for temperature auto-apply and R1 reset behavior --- .../settings/providers/OpenAICompatible.tsx | 18 ++++++++++-- .../__tests__/OpenAICompatible.spec.tsx | 28 +++++++++++++++++-- webview-ui/src/i18n/locales/ca/settings.json | 10 ++++++- webview-ui/src/i18n/locales/de/settings.json | 10 ++++++- webview-ui/src/i18n/locales/en/settings.json | 3 +- webview-ui/src/i18n/locales/es/settings.json | 10 ++++++- webview-ui/src/i18n/locales/fr/settings.json | 10 ++++++- webview-ui/src/i18n/locales/hi/settings.json | 10 ++++++- webview-ui/src/i18n/locales/id/settings.json | 10 ++++++- webview-ui/src/i18n/locales/it/settings.json | 10 ++++++- webview-ui/src/i18n/locales/ja/settings.json | 10 ++++++- webview-ui/src/i18n/locales/ko/settings.json | 10 ++++++- webview-ui/src/i18n/locales/nl/settings.json | 10 ++++++- webview-ui/src/i18n/locales/pl/settings.json | 10 ++++++- .../src/i18n/locales/pt-BR/settings.json | 10 ++++++- webview-ui/src/i18n/locales/ru/settings.json | 10 ++++++- webview-ui/src/i18n/locales/tr/settings.json | 10 ++++++- webview-ui/src/i18n/locales/vi/settings.json | 10 ++++++- .../src/i18n/locales/zh-CN/settings.json | 10 ++++++- .../src/i18n/locales/zh-TW/settings.json | 10 ++++++- 20 files changed, 195 insertions(+), 24 deletions(-) diff --git a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx index 8609652a9d8..268e209e8a0 100644 --- a/webview-ui/src/components/settings/providers/OpenAICompatible.tsx +++ b/webview-ui/src/components/settings/providers/OpenAICompatible.tsx @@ -77,6 +77,12 @@ export const OpenAICompatible = ({ flags.push(t("settings:providers.customModel.capabilityPreset.flags.promptCache")) if (preset.info.supportsTemperature) flags.push(t("settings:providers.customModel.capabilityPreset.flags.temperature")) + if (preset.info.defaultTemperature !== undefined) + flags.push( + t("settings:providers.customModel.capabilityPreset.flags.defaultTemp", { + temp: preset.info.defaultTemperature, + }), + ) return flags.length > 0 ? flags : null }, [selectedPresetId, t]) @@ -98,15 +104,21 @@ export const OpenAICompatible = ({ setSelectedPresetId(null) setApiConfigurationField("openAiCustomModelInfo", openAiModelInfoSaneDefaults) setApiConfigurationField("openAiR1FormatEnabled", false) + setApiConfigurationField("modelTemperature", null) } else { const preset = modelCapabilityPresets.find((p) => `${p.provider}/${p.modelId}` === presetKey) if (preset) { setSelectedPresetId(presetKey) setApiConfigurationField("openAiCustomModelInfo", { ...preset.info }) - // Auto-enable R1 format for models that use reasoning/thinking blocks - if (preset.info.preserveReasoning) { - setApiConfigurationField("openAiR1FormatEnabled", true) + // Auto-enable/disable R1 format based on whether model uses reasoning/thinking blocks + setApiConfigurationField("openAiR1FormatEnabled", !!preset.info.preserveReasoning) + + // Auto-apply default temperature when the model specifies one (e.g. Kimi K2 models require temperature=1.0) + if (preset.info.defaultTemperature !== undefined) { + setApiConfigurationField("modelTemperature", preset.info.defaultTemperature) + } else { + setApiConfigurationField("modelTemperature", null) } } } diff --git a/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx b/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx index e69b8233d96..479a5d6ed8c 100644 --- a/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx +++ b/webview-ui/src/components/settings/providers/__tests__/OpenAICompatible.spec.tsx @@ -431,7 +431,7 @@ describe("OpenAICompatible Component - Model Capability Presets", () => { ) }) - it("should reset openAiR1FormatEnabled when selecting custom preset", () => { + it("should reset openAiR1FormatEnabled and modelTemperature when selecting custom preset", () => { const apiConfiguration: Partial = {} render( @@ -446,9 +446,10 @@ describe("OpenAICompatible Component - Model Capability Presets", () => { fireEvent.click(customItem) expect(mockSetApiConfigurationField).toHaveBeenCalledWith("openAiR1FormatEnabled", false) + expect(mockSetApiConfigurationField).toHaveBeenCalledWith("modelTemperature", null) }) - it("should auto-enable openAiR1FormatEnabled when selecting a model with preserveReasoning", () => { + it("should auto-enable openAiR1FormatEnabled and set temperature when selecting a model with preserveReasoning", () => { const apiConfiguration: Partial = {} render( @@ -459,7 +460,7 @@ describe("OpenAICompatible Component - Model Capability Presets", () => { />, ) - // Click on a Kimi K2.5 model which has preserveReasoning: true + // Click on a Kimi K2.5 model which has preserveReasoning: true and defaultTemperature: 1.0 const kimiItem = screen.getByTestId("command-item-Moonshot (Kimi)/kimi-k2.5") fireEvent.click(kimiItem) @@ -470,5 +471,26 @@ describe("OpenAICompatible Component - Model Capability Presets", () => { preserveReasoning: true, }), ) + // Should auto-apply the default temperature from the model preset + expect(mockSetApiConfigurationField).toHaveBeenCalledWith("modelTemperature", 1.0) + }) + + it("should reset openAiR1FormatEnabled to false when selecting a non-reasoning model", () => { + const apiConfiguration: Partial = {} + + render( + , + ) + + // Click on a DeepSeek model (no preserveReasoning) + const deepseekItems = document.querySelectorAll('[data-testid^="command-item-DeepSeek/"]') + if (deepseekItems.length > 0) { + fireEvent.click(deepseekItems[0]) + expect(mockSetApiConfigurationField).toHaveBeenCalledWith("openAiR1FormatEnabled", false) + } }) }) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index a9bfb5856cb..f2a72dba7d2 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -486,7 +486,15 @@ "custom": "Personalitzat (configura manualment)", "searchPlaceholder": "Cerca models...", "noResults": "No s'han trobat models coincidents.", - "applied": "S'han aplicat les capacitats de {{model}}" + "applied": "S'han aplicat les capacitats de {{model}}", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Configureu les capacitats i preus per al vostre model personalitzat compatible amb OpenAI. Tingueu cura en especificar les capacitats del model, ja que poden afectar com funciona Roo Code.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 738b4790216..ee307eb7cc5 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -486,7 +486,15 @@ "custom": "Benutzerdefiniert (manuell konfigurieren)", "searchPlaceholder": "Modelle suchen...", "noResults": "Keine passenden Modelle gefunden.", - "applied": "Fähigkeiten von {{model}} angewendet" + "applied": "Fähigkeiten von {{model}} angewendet", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Konfiguriere die Fähigkeiten und Preise für dein benutzerdefiniertes OpenAI-kompatibles Modell. Sei vorsichtig bei der Angabe der Modellfähigkeiten, da diese beeinflussen können, wie Roo Code funktioniert.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 066a0dd46a4..f871ce7ebda 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -555,7 +555,8 @@ "reasoning": "Reasoning/Thinking", "images": "Image Support", "promptCache": "Prompt Cache", - "temperature": "Temperature Control" + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" } }, "capabilities": "Configure the capabilities and pricing for your custom OpenAI-compatible model. Be careful when specifying the model capabilities, as they can affect how Roo Code performs.", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 4d1f357ce87..71084f1f007 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -486,7 +486,15 @@ "custom": "Personalizado (configurar manualmente)", "searchPlaceholder": "Buscar modelos...", "noResults": "No se encontraron modelos coincidentes.", - "applied": "Se aplicaron las capacidades de {{model}}" + "applied": "Se aplicaron las capacidades de {{model}}", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Configure las capacidades y precios para su modelo personalizado compatible con OpenAI. Tenga cuidado al especificar las capacidades del modelo, ya que pueden afectar cómo funciona Roo Code.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 07bba69fe85..cc62ae939fa 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -486,7 +486,15 @@ "custom": "Personnalisé (configurer manuellement)", "searchPlaceholder": "Rechercher des modèles...", "noResults": "Aucun modèle correspondant trouvé.", - "applied": "Capacités de {{model}} appliquées" + "applied": "Capacités de {{model}} appliquées", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Configurez les capacités et les prix pour votre modèle personnalisé compatible OpenAI. Soyez prudent lors de la spécification des capacités du modèle, car elles peuvent affecter le fonctionnement de Roo Code.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 71ce16595c4..db96d3b3210 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -486,7 +486,15 @@ "custom": "कस्टम (मैन्युअल रूप से कॉन्फ़िगर करें)", "searchPlaceholder": "मॉडल खोजें...", "noResults": "कोई मेल खाने वाला मॉडल नहीं मिला।", - "applied": "{{model}} से क्षमताएं लागू की गईं" + "applied": "{{model}} से क्षमताएं लागू की गईं", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "अपने कस्टम OpenAI-संगत मॉडल के लिए क्षमताओं और मूल्य निर्धारण को कॉन्फ़िगर करें। मॉडल क्षमताओं को निर्दिष्ट करते समय सावधान रहें, क्योंकि वे Roo Code के प्रदर्शन को प्रभावित कर सकती हैं।", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 40d1086ea89..fd5b5cd95aa 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -486,7 +486,15 @@ "custom": "Kustom (konfigurasi manual)", "searchPlaceholder": "Cari model...", "noResults": "Tidak ada model yang cocok ditemukan.", - "applied": "Kemampuan dari {{model}} diterapkan" + "applied": "Kemampuan dari {{model}} diterapkan", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Konfigurasi kemampuan dan harga untuk model kustom yang kompatibel dengan OpenAI. Hati-hati saat menentukan kemampuan model, karena dapat mempengaruhi performa Roo Code.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index c84a0b24e5a..1c70e527e9f 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -486,7 +486,15 @@ "custom": "Personalizzato (configura manualmente)", "searchPlaceholder": "Cerca modelli...", "noResults": "Nessun modello corrispondente trovato.", - "applied": "Capacità di {{model}} applicate" + "applied": "Capacità di {{model}} applicate", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Configura le capacità e i prezzi del tuo modello personalizzato compatibile con OpenAI. Fai attenzione quando specifichi le capacità del modello, poiché possono influenzare le prestazioni di Roo Code.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 462b905ef96..c59bcdef6db 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -486,7 +486,15 @@ "custom": "カスタム(手動で設定)", "searchPlaceholder": "モデルを検索...", "noResults": "一致するモデルが見つかりません。", - "applied": "{{model}}の機能を適用しました" + "applied": "{{model}}の機能を適用しました", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "カスタムOpenAI互換モデルの機能と価格を設定します。モデルの機能はRoo Codeのパフォーマンスに影響を与える可能性があるため、慎重に指定してください。", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index f28c9372f24..b91bcdedfa9 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -486,7 +486,15 @@ "custom": "사용자 정의 (수동 구성)", "searchPlaceholder": "모델 검색...", "noResults": "일치하는 모델을 찾을 수 없습니다.", - "applied": "{{model}}의 기능이 적용되었습니다" + "applied": "{{model}}의 기능이 적용되었습니다", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "사용자 정의 OpenAI 호환 모델의 기능과 가격을 구성하세요. 모델 기능이 Roo Code의 성능에 영향을 미칠 수 있으므로 신중하게 지정하세요.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 6d43880f622..fdb3594a74e 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -486,7 +486,15 @@ "custom": "Aangepast (handmatig configureren)", "searchPlaceholder": "Modellen zoeken...", "noResults": "Geen overeenkomende modellen gevonden.", - "applied": "Mogelijkheden van {{model}} toegepast" + "applied": "Mogelijkheden van {{model}} toegepast", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Stel de mogelijkheden en prijzen in voor je aangepaste OpenAI-compatibele model. Wees voorzichtig met het opgeven van de modelmogelijkheden, want deze kunnen de prestaties van Roo Code beïnvloeden.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 3e076615a49..60d184c4ed8 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -486,7 +486,15 @@ "custom": "Niestandardowy (konfiguruj ręcznie)", "searchPlaceholder": "Szukaj modeli...", "noResults": "Nie znaleziono pasujących modeli.", - "applied": "Zastosowano możliwości z {{model}}" + "applied": "Zastosowano możliwości z {{model}}", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Skonfiguruj możliwości i ceny swojego niestandardowego modelu zgodnego z OpenAI. Zachowaj ostrożność podczas określania możliwości modelu, ponieważ mogą one wpływać na wydajność Roo Code.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index a3023d80917..93a3be2ee0d 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -486,7 +486,15 @@ "custom": "Personalizado (configurar manualmente)", "searchPlaceholder": "Buscar modelos...", "noResults": "Nenhum modelo correspondente encontrado.", - "applied": "Capacidades de {{model}} aplicadas" + "applied": "Capacidades de {{model}} aplicadas", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Configure as capacidades e preços para seu modelo personalizado compatível com OpenAI. Tenha cuidado ao especificar as capacidades do modelo, pois elas podem afetar como o Roo Code funciona.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 5247ec3f5d9..b76cdefe88b 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -486,7 +486,15 @@ "custom": "Пользовательский (настроить вручную)", "searchPlaceholder": "Поиск моделей...", "noResults": "Подходящие модели не найдены.", - "applied": "Применены возможности из {{model}}" + "applied": "Применены возможности из {{model}}", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Настройте возможности и стоимость вашей пользовательской модели, совместимой с OpenAI. Будьте осторожны при указании возможностей модели, это может повлиять на работу Roo Code.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index ed1dd1ff1fa..e3b8b6be06c 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -486,7 +486,15 @@ "custom": "Özel (manuel yapılandır)", "searchPlaceholder": "Model ara...", "noResults": "Eşleşen model bulunamadı.", - "applied": "{{model}} yetenekleri uygulandı" + "applied": "{{model}} yetenekleri uygulandı", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Özel OpenAI uyumlu modelinizin yeteneklerini ve fiyatlandırmasını yapılandırın. Model yeteneklerini belirtirken dikkatli olun, çünkü bunlar Roo Code'un performansını etkileyebilir.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 20ee9b3cabf..c4fcb0d8cea 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -486,7 +486,15 @@ "custom": "Tùy chỉnh (cấu hình thủ công)", "searchPlaceholder": "Tìm kiếm mô hình...", "noResults": "Không tìm thấy mô hình phù hợp.", - "applied": "Đã áp dụng khả năng từ {{model}}" + "applied": "Đã áp dụng khả năng từ {{model}}", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "Cấu hình các khả năng và giá cả cho mô hình tương thích OpenAI tùy chỉnh của bạn. Hãy cẩn thận khi chỉ định khả năng của mô hình, vì chúng có thể ảnh hưởng đến cách Roo Code hoạt động.", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 997d59f378f..26d884f1d75 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -486,7 +486,15 @@ "custom": "自定义(手动配置)", "searchPlaceholder": "搜索模型...", "noResults": "未找到匹配的模型。", - "applied": "已应用 {{model}} 的能力配置" + "applied": "已应用 {{model}} 的能力配置", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "自定义模型配置注意事项:\n• 确保兼容OpenAI接口规范\n• 错误配置可能导致功能异常\n• 价格参数影响费用统计", "maxTokens": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 0091c520b32..5783aa3301e 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -496,7 +496,15 @@ "custom": "自訂(手動設定)", "searchPlaceholder": "搜尋模型...", "noResults": "找不到符合的模型。", - "applied": "已套用 {{model}} 的能力設定" + "applied": "已套用 {{model}} 的能力設定", + "appliedFlags": "Applied capabilities", + "flags": { + "reasoning": "Reasoning/Thinking", + "images": "Image Support", + "promptCache": "Prompt Cache", + "temperature": "Temperature Control", + "defaultTemp": "Default Temperature: {{temp}}" + } }, "capabilities": "設定自訂 OpenAI 相容模型的功能和定價。請謹慎設定模型功能,因為這會影響 Roo Code 的運作方式。", "maxTokens": { From ac2899d4525e7f1d311657824b98d5b28e8a16e1 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 10 Mar 2026 16:22:36 +0000 Subject: [PATCH 7/7] fix: translate appliedFlags and flags keys in all non-EN locales --- webview-ui/src/i18n/locales/ca/settings.json | 10 +++++----- webview-ui/src/i18n/locales/de/settings.json | 8 ++++---- webview-ui/src/i18n/locales/es/settings.json | 10 +++++----- webview-ui/src/i18n/locales/fr/settings.json | 10 +++++----- webview-ui/src/i18n/locales/hi/settings.json | 10 +++++----- webview-ui/src/i18n/locales/id/settings.json | 8 ++++---- webview-ui/src/i18n/locales/it/settings.json | 10 +++++----- webview-ui/src/i18n/locales/ja/settings.json | 12 ++++++------ webview-ui/src/i18n/locales/ko/settings.json | 12 ++++++------ webview-ui/src/i18n/locales/nl/settings.json | 10 +++++----- webview-ui/src/i18n/locales/pl/settings.json | 10 +++++----- webview-ui/src/i18n/locales/pt-BR/settings.json | 10 +++++----- webview-ui/src/i18n/locales/ru/settings.json | 10 +++++----- webview-ui/src/i18n/locales/tr/settings.json | 10 +++++----- webview-ui/src/i18n/locales/vi/settings.json | 10 +++++----- webview-ui/src/i18n/locales/zh-CN/settings.json | 12 ++++++------ webview-ui/src/i18n/locales/zh-TW/settings.json | 12 ++++++------ 17 files changed, 87 insertions(+), 87 deletions(-) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index f2a72dba7d2..32fa7108eb2 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Cerca models...", "noResults": "No s'han trobat models coincidents.", "applied": "S'han aplicat les capacitats de {{model}}", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Capacitats aplicades", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Raonament/Pensament", + "images": "Suport d'imatges", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Control de temperatura", + "defaultTemp": "Temperatura per defecte: {{temp}}" } }, "capabilities": "Configureu les capacitats i preus per al vostre model personalitzat compatible amb OpenAI. Tingueu cura en especificar les capacitats del model, ja que poden afectar com funciona Roo Code.", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index ee307eb7cc5..93c7fb80609 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Modelle suchen...", "noResults": "Keine passenden Modelle gefunden.", "applied": "Fähigkeiten von {{model}} angewendet", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Angewendete Fähigkeiten", "flags": { "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "images": "Bildunterstützung", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Temperatursteuerung", + "defaultTemp": "Standardtemperatur: {{temp}}" } }, "capabilities": "Konfiguriere die Fähigkeiten und Preise für dein benutzerdefiniertes OpenAI-kompatibles Modell. Sei vorsichtig bei der Angabe der Modellfähigkeiten, da diese beeinflussen können, wie Roo Code funktioniert.", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 71084f1f007..4baa6fb0409 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Buscar modelos...", "noResults": "No se encontraron modelos coincidentes.", "applied": "Se aplicaron las capacidades de {{model}}", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Capacidades aplicadas", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Razonamiento/Pensamiento", + "images": "Soporte de imágenes", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Control de temperatura", + "defaultTemp": "Temperatura predeterminada: {{temp}}" } }, "capabilities": "Configure las capacidades y precios para su modelo personalizado compatible con OpenAI. Tenga cuidado al especificar las capacidades del modelo, ya que pueden afectar cómo funciona Roo Code.", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index cc62ae939fa..d258884aa4a 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Rechercher des modèles...", "noResults": "Aucun modèle correspondant trouvé.", "applied": "Capacités de {{model}} appliquées", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Capacités appliquées", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Raisonnement/Réflexion", + "images": "Support d'images", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Contrôle de température", + "defaultTemp": "Température par défaut : {{temp}}" } }, "capabilities": "Configurez les capacités et les prix pour votre modèle personnalisé compatible OpenAI. Soyez prudent lors de la spécification des capacités du modèle, car elles peuvent affecter le fonctionnement de Roo Code.", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index db96d3b3210..3f037b0c64b 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "मॉडल खोजें...", "noResults": "कोई मेल खाने वाला मॉडल नहीं मिला।", "applied": "{{model}} से क्षमताएं लागू की गईं", - "appliedFlags": "Applied capabilities", + "appliedFlags": "लागू की गई क्षमताएं", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "रीज़निंग/थिंकिंग", + "images": "इमेज सपोर्ट", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "तापमान नियंत्रण", + "defaultTemp": "डिफ़ॉल्ट तापमान: {{temp}}" } }, "capabilities": "अपने कस्टम OpenAI-संगत मॉडल के लिए क्षमताओं और मूल्य निर्धारण को कॉन्फ़िगर करें। मॉडल क्षमताओं को निर्दिष्ट करते समय सावधान रहें, क्योंकि वे Roo Code के प्रदर्शन को प्रभावित कर सकती हैं।", diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index fd5b5cd95aa..e6033197fa1 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Cari model...", "noResults": "Tidak ada model yang cocok ditemukan.", "applied": "Kemampuan dari {{model}} diterapkan", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Kemampuan yang diterapkan", "flags": { "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "images": "Dukungan gambar", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Kontrol temperatur", + "defaultTemp": "Temperatur default: {{temp}}" } }, "capabilities": "Konfigurasi kemampuan dan harga untuk model kustom yang kompatibel dengan OpenAI. Hati-hati saat menentukan kemampuan model, karena dapat mempengaruhi performa Roo Code.", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 1c70e527e9f..fae498fb71f 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Cerca modelli...", "noResults": "Nessun modello corrispondente trovato.", "applied": "Capacità di {{model}} applicate", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Capacità applicate", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Ragionamento/Pensiero", + "images": "Supporto immagini", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Controllo temperatura", + "defaultTemp": "Temperatura predefinita: {{temp}}" } }, "capabilities": "Configura le capacità e i prezzi del tuo modello personalizzato compatibile con OpenAI. Fai attenzione quando specifichi le capacità del modello, poiché possono influenzare le prestazioni di Roo Code.", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index c59bcdef6db..78c3801014b 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "モデルを検索...", "noResults": "一致するモデルが見つかりません。", "applied": "{{model}}の機能を適用しました", - "appliedFlags": "Applied capabilities", + "appliedFlags": "適用された機能", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", - "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "reasoning": "推論/思考", + "images": "画像サポート", + "promptCache": "プロンプトキャッシュ", + "temperature": "Temperature制御", + "defaultTemp": "デフォルトTemperature: {{temp}}" } }, "capabilities": "カスタムOpenAI互換モデルの機能と価格を設定します。モデルの機能はRoo Codeのパフォーマンスに影響を与える可能性があるため、慎重に指定してください。", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index b91bcdedfa9..a0bc6806fdd 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "모델 검색...", "noResults": "일치하는 모델을 찾을 수 없습니다.", "applied": "{{model}}의 기능이 적용되었습니다", - "appliedFlags": "Applied capabilities", + "appliedFlags": "적용된 기능", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", - "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "reasoning": "추론/사고", + "images": "이미지 지원", + "promptCache": "프롬프트 캐시", + "temperature": "Temperature 제어", + "defaultTemp": "기본 Temperature: {{temp}}" } }, "capabilities": "사용자 정의 OpenAI 호환 모델의 기능과 가격을 구성하세요. 모델 기능이 Roo Code의 성능에 영향을 미칠 수 있으므로 신중하게 지정하세요.", diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index fdb3594a74e..fd292d2218c 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Modellen zoeken...", "noResults": "Geen overeenkomende modellen gevonden.", "applied": "Mogelijkheden van {{model}} toegepast", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Toegepaste mogelijkheden", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Redeneren/Denken", + "images": "Afbeeldingsondersteuning", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Temperatuurregeling", + "defaultTemp": "Standaardtemperatuur: {{temp}}" } }, "capabilities": "Stel de mogelijkheden en prijzen in voor je aangepaste OpenAI-compatibele model. Wees voorzichtig met het opgeven van de modelmogelijkheden, want deze kunnen de prestaties van Roo Code beïnvloeden.", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 60d184c4ed8..f76a0874e83 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Szukaj modeli...", "noResults": "Nie znaleziono pasujących modeli.", "applied": "Zastosowano możliwości z {{model}}", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Zastosowane możliwości", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Rozumowanie/Myślenie", + "images": "Obsługa obrazów", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Kontrola temperatury", + "defaultTemp": "Domyślna temperatura: {{temp}}" } }, "capabilities": "Skonfiguruj możliwości i ceny swojego niestandardowego modelu zgodnego z OpenAI. Zachowaj ostrożność podczas określania możliwości modelu, ponieważ mogą one wpływać na wydajność Roo Code.", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 93a3be2ee0d..be387457eb5 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Buscar modelos...", "noResults": "Nenhum modelo correspondente encontrado.", "applied": "Capacidades de {{model}} aplicadas", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Capacidades aplicadas", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Raciocínio/Pensamento", + "images": "Suporte a imagens", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Controle de temperatura", + "defaultTemp": "Temperatura padrão: {{temp}}" } }, "capabilities": "Configure as capacidades e preços para seu modelo personalizado compatível com OpenAI. Tenha cuidado ao especificar as capacidades do modelo, pois elas podem afetar como o Roo Code funciona.", diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index b76cdefe88b..447e8f88ed5 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Поиск моделей...", "noResults": "Подходящие модели не найдены.", "applied": "Применены возможности из {{model}}", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Применённые возможности", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Рассуждение/Мышление", + "images": "Поддержка изображений", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Управление температурой", + "defaultTemp": "Температура по умолчанию: {{temp}}" } }, "capabilities": "Настройте возможности и стоимость вашей пользовательской модели, совместимой с OpenAI. Будьте осторожны при указании возможностей модели, это может повлиять на работу Roo Code.", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index e3b8b6be06c..a3d96d4fac1 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Model ara...", "noResults": "Eşleşen model bulunamadı.", "applied": "{{model}} yetenekleri uygulandı", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Uygulanan yetenekler", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Akıl Yürütme/Düşünme", + "images": "Görüntü desteği", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Sıcaklık kontrolü", + "defaultTemp": "Varsayılan sıcaklık: {{temp}}" } }, "capabilities": "Özel OpenAI uyumlu modelinizin yeteneklerini ve fiyatlandırmasını yapılandırın. Model yeteneklerini belirtirken dikkatli olun, çünkü bunlar Roo Code'un performansını etkileyebilir.", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index c4fcb0d8cea..eab3c751e79 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "Tìm kiếm mô hình...", "noResults": "Không tìm thấy mô hình phù hợp.", "applied": "Đã áp dụng khả năng từ {{model}}", - "appliedFlags": "Applied capabilities", + "appliedFlags": "Khả năng đã áp dụng", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", + "reasoning": "Suy luận/Tư duy", + "images": "Hỗ trợ hình ảnh", "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "temperature": "Điều khiển temperature", + "defaultTemp": "Temperature mặc định: {{temp}}" } }, "capabilities": "Cấu hình các khả năng và giá cả cho mô hình tương thích OpenAI tùy chỉnh của bạn. Hãy cẩn thận khi chỉ định khả năng của mô hình, vì chúng có thể ảnh hưởng đến cách Roo Code hoạt động.", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 26d884f1d75..a4972194664 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -487,13 +487,13 @@ "searchPlaceholder": "搜索模型...", "noResults": "未找到匹配的模型。", "applied": "已应用 {{model}} 的能力配置", - "appliedFlags": "Applied capabilities", + "appliedFlags": "已应用的能力", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", - "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "reasoning": "推理/思考", + "images": "图像支持", + "promptCache": "Prompt 缓存", + "temperature": "Temperature 控制", + "defaultTemp": "默认 Temperature: {{temp}}" } }, "capabilities": "自定义模型配置注意事项:\n• 确保兼容OpenAI接口规范\n• 错误配置可能导致功能异常\n• 价格参数影响费用统计", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 5783aa3301e..37922052a84 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -497,13 +497,13 @@ "searchPlaceholder": "搜尋模型...", "noResults": "找不到符合的模型。", "applied": "已套用 {{model}} 的能力設定", - "appliedFlags": "Applied capabilities", + "appliedFlags": "已套用的能力", "flags": { - "reasoning": "Reasoning/Thinking", - "images": "Image Support", - "promptCache": "Prompt Cache", - "temperature": "Temperature Control", - "defaultTemp": "Default Temperature: {{temp}}" + "reasoning": "推理/思考", + "images": "圖片支援", + "promptCache": "Prompt 快取", + "temperature": "Temperature 控制", + "defaultTemp": "預設 Temperature: {{temp}}" } }, "capabilities": "設定自訂 OpenAI 相容模型的功能和定價。請謹慎設定模型功能,因為這會影響 Roo Code 的運作方式。",