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
This commit is contained in:
Roo Code 2026-03-10 11:33:06 +00:00
parent c43a5a8e35
commit 16dc2d1537
20 changed files with 195 additions and 24 deletions

View file

@ -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)
}
}
}

View file

@ -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<ProviderSettings> = {}
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<ProviderSettings> = {}
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<ProviderSettings> = {}
render(
<OpenAICompatible
apiConfiguration={apiConfiguration as ProviderSettings}
setApiConfigurationField={mockSetApiConfigurationField}
organizationAllowList={mockOrganizationAllowList}
/>,
)
// 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)
}
})
})

View file

@ -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": {

View file

@ -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": {

View file

@ -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.",

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {

View file

@ -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": {