From 7a3a67cbcfcd85809af77fa3cbe49b58c1bea9f0 Mon Sep 17 00:00:00 2001 From: yyhhyyyyyy Date: Wed, 13 Aug 2025 12:24:26 +0800 Subject: [PATCH 1/2] feat: add reasoning_effort parameter support for gpt-oss models - add reasoning effort UI support across all components --- .../configPresenter/modelDefaultSettings.ts | 18 +-- .../configPresenter/providerModelSettings.ts | 18 +-- .../providers/ollamaProvider.ts | 3 +- src/renderer/src/components/ChatConfig.vue | 104 ++++++++++++++++++ src/renderer/src/components/NewThread.vue | 10 +- src/renderer/src/components/TitleView.vue | 89 ++++++++++++++- .../components/settings/ModelConfigDialog.vue | 8 +- 7 files changed, 224 insertions(+), 26 deletions(-) diff --git a/src/main/presenter/configPresenter/modelDefaultSettings.ts b/src/main/presenter/configPresenter/modelDefaultSettings.ts index 0a452e7aa..6b0c19b11 100644 --- a/src/main/presenter/configPresenter/modelDefaultSettings.ts +++ b/src/main/presenter/configPresenter/modelDefaultSettings.ts @@ -671,24 +671,26 @@ export const defaultModelsSettings: DefaultModelSetting[] = [ { id: 'gpt-oss-120b', name: 'GPT OSS 120B', - temperature: 0.7, - maxTokens: 131000, - contextLength: 131000, + temperature: 0.6, + maxTokens: 32000, + contextLength: 128000, match: ['gpt-oss-120b'], vision: false, functionCall: true, - reasoning: false + reasoning: true, + reasoningEffort: 'medium' }, { id: 'gpt-oss-20b', name: 'GPT OSS 20B', - temperature: 0.7, - maxTokens: 33000, - contextLength: 131000, + temperature: 0.6, + maxTokens: 16000, + contextLength: 128000, match: ['gpt-oss-20b'], vision: false, functionCall: true, - reasoning: false + reasoning: true, + reasoningEffort: 'medium' }, { id: 'o4-mini-high', diff --git a/src/main/presenter/configPresenter/providerModelSettings.ts b/src/main/presenter/configPresenter/providerModelSettings.ts index b5af6cd05..b0d82dc53 100644 --- a/src/main/presenter/configPresenter/providerModelSettings.ts +++ b/src/main/presenter/configPresenter/providerModelSettings.ts @@ -377,24 +377,26 @@ export const providerModelSettings: Record 0 diff --git a/src/renderer/src/components/ChatConfig.vue b/src/renderer/src/components/ChatConfig.vue index c433907c5..aae03d02b 100644 --- a/src/renderer/src/components/ChatConfig.vue +++ b/src/renderer/src/components/ChatConfig.vue @@ -9,6 +9,13 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/comp import { useLanguageStore } from '@/stores/language' import { Input } from '@/components/ui/input' import { Switch } from '@/components/ui/switch' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue +} from '@/components/ui/select' // Define props to receive config from parent const props = defineProps<{ @@ -21,6 +28,8 @@ const props = defineProps<{ thinkingBudget?: number modelId?: string providerId?: string + reasoningEffort?: 'minimal' | 'low' | 'medium' | 'high' + verbosity?: 'low' | 'medium' | 'high' }>() const systemPrompt = defineModel('systemPrompt') @@ -30,6 +39,8 @@ const emit = defineEmits<{ 'update:contextLength': [value: number] 'update:maxTokens': [value: number] 'update:thinkingBudget': [value: number | undefined] + 'update:reasoningEffort': [value: 'minimal' | 'low' | 'medium' | 'high'] + 'update:verbosity': [value: 'low' | 'medium' | 'high'] // 'update:artifacts': [value: 0 | 1] }>() @@ -78,6 +89,11 @@ const isGPT5Model = computed(() => { return modelId.startsWith('gpt-5') }) +// 判断模型是否支持 reasoningEffort 参数 +const supportsReasoningEffort = computed(() => { + return props.reasoningEffort !== undefined +}) + // 当前显示的思考预算值 const displayThinkingBudget = computed({ get: () => { @@ -276,6 +292,94 @@ const handleDynamicThinkingToggle = (enabled: boolean) => { + +
+
+ + + + + + + + +

{{ t('settings.model.modelConfig.reasoningEffort.description') }}

+
+
+
+
+ +
+ + +
+
+ + + + + + + + +

{{ t('settings.model.modelConfig.verbosity.description') }}

+
+
+
+
+ +
+ -
+ +
@@ -494,6 +494,10 @@ const isGPT5Model = computed(() => { return modelId.startsWith('gpt-5') }) +const supportsReasoningEffort = computed(() => { + return 'reasoningEffort' in config.value +}) + // 是否显示思考预算配置 const showThinkingBudget = computed(() => { const isGemini = props.providerId === 'gemini' From 9ce4d76b4ec5eacb25193d71247a2f05e1166915 Mon Sep 17 00:00:00 2001 From: yyhhyyyyyy Date: Wed, 13 Aug 2025 13:47:32 +0800 Subject: [PATCH 2/2] fix: preserve user reasoning effort settings and improve display logic --- src/renderer/src/components/TitleView.vue | 8 ++++++-- .../src/components/settings/ModelConfigDialog.vue | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/components/TitleView.vue b/src/renderer/src/components/TitleView.vue index c7c6718e6..ca294ea6a 100644 --- a/src/renderer/src/components/TitleView.vue +++ b/src/renderer/src/components/TitleView.vue @@ -116,12 +116,16 @@ const loadModelConfig = async () => { try { const config = await configPresenter.getModelDefaultConfig(modelId, providerId) if (config.reasoningEffort !== undefined) { - reasoningEffort.value = config.reasoningEffort + if (reasoningEffort.value === undefined) { + reasoningEffort.value = config.reasoningEffort + } } else { reasoningEffort.value = undefined } if (config.verbosity !== undefined) { - verbosity.value = config.verbosity + if (verbosity.value === undefined) { + verbosity.value = config.verbosity + } } else { verbosity.value = undefined } diff --git a/src/renderer/src/components/settings/ModelConfigDialog.vue b/src/renderer/src/components/settings/ModelConfigDialog.vue index 107cc65c8..8ab18d652 100644 --- a/src/renderer/src/components/settings/ModelConfigDialog.vue +++ b/src/renderer/src/components/settings/ModelConfigDialog.vue @@ -495,7 +495,7 @@ const isGPT5Model = computed(() => { }) const supportsReasoningEffort = computed(() => { - return 'reasoningEffort' in config.value + return config.value.reasoningEffort !== undefined }) // 是否显示思考预算配置