Skip to content

Commit 4f11a7d

Browse files
committed
feature: support to customize reasoning_effort for AI chat (#2609)
Signed-off-by: leo <longshuang@msn.cn>
1 parent 16b965f commit 4f11a7d

7 files changed

Lines changed: 39 additions & 0 deletions

File tree

src/AI/Agent.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ public async Task GenerateCommitMessageAsync(string repo, string currentBranch,
2121
throw new Exception("Failed to fetch available models from this service. Please check your configuration and try again.");
2222

2323
var options = new ChatCompletionOptions() { Tools = { ChatTools.GetDetailChangesInFile } };
24+
#pragma warning disable OPENAI001
25+
if (!_service.ReasoningEffortLevel.Equals(Options.IgnoredReasoningEffortLevel, StringComparison.OrdinalIgnoreCase))
26+
options.ReasoningEffortLevel = new ChatReasoningEffortLevel(_service.ReasoningEffortLevel);
27+
#pragma warning restore OPENAI001
28+
2429
var userMessageBuilder = new StringBuilder();
2530
userMessageBuilder
2631
.AppendLine("Generate a commit message (follow the rule of conventional commit message) for given git repository.")

src/AI/Options.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
3+
namespace SourceGit.AI
4+
{
5+
public static class Options
6+
{
7+
public static readonly string IgnoredReasoningEffortLevel = "unspecified";
8+
public static readonly List<string> ReasoningEffortLevels = [
9+
IgnoredReasoningEffortLevel,
10+
"none",
11+
"minimal",
12+
"low",
13+
"medium",
14+
"high",
15+
];
16+
}
17+
}

src/AI/Service.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ public bool AutoFetchAvailableModels
5454
set => SetProperty(ref _autoFetchAvailableModels, value);
5555
}
5656

57+
public string ReasoningEffortLevel
58+
{
59+
get => _reasoningEffortLevel;
60+
set => SetProperty(ref _reasoningEffortLevel, value);
61+
}
62+
5763
public string AdditionalPrompt
5864
{
5965
get;
@@ -93,6 +99,7 @@ private OpenAIClient GetOpenAIClient()
9399

94100
private string _name = string.Empty;
95101
private string _model = string.Empty;
102+
private string _reasoningEffortLevel = Options.IgnoredReasoningEffortLevel;
96103
private bool _autoFetchAvailableModels = true;
97104
}
98105
}

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,7 @@
661661
<x:String x:Key="Text.Preferences.AI.Model.AutoFetchAvailableModels" xml:space="preserve">Fetch available model-ids automatically</x:String>
662662
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">Name</x:String>
663663
<x:String x:Key="Text.Preferences.AI.ReadApiKeyFromEnv" xml:space="preserve">Entered value is the name to load API key from ENV</x:String>
664+
<x:String x:Key="Text.Preferences.AI.ReasoningEffortLevel" xml:space="preserve">Reasoning Effort Level</x:String>
664665
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">Server</x:String>
665666
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">APPEARANCE</x:String>
666667
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">Default Font</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,7 @@
665665
<x:String x:Key="Text.Preferences.AI.Model.AutoFetchAvailableModels" xml:space="preserve">自动拉取可用模型列表</x:String>
666666
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">配置名称</x:String>
667667
<x:String x:Key="Text.Preferences.AI.ReadApiKeyFromEnv" xml:space="preserve">从环境变量(填写环境变量名)中读取API密钥</x:String>
668+
<x:String x:Key="Text.Preferences.AI.ReasoningEffortLevel" xml:space="preserve">推理努力等级</x:String>
668669
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">服务地址</x:String>
669670
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">外观配置</x:String>
670671
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">缺省字体</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,7 @@
665665
<x:String x:Key="Text.Preferences.AI.Model.AutoFetchAvailableModels" xml:space="preserve">自動取得可用的模型列表</x:String>
666666
<x:String x:Key="Text.Preferences.AI.Name" xml:space="preserve">名稱</x:String>
667667
<x:String x:Key="Text.Preferences.AI.ReadApiKeyFromEnv" xml:space="preserve">從環境變數中 (輸入環境變數名稱) 讀取 API 金鑰</x:String>
668+
<x:String x:Key="Text.Preferences.AI.ReasoningEffortLevel" xml:space="preserve">推理努力等級</x:String>
668669
<x:String x:Key="Text.Preferences.AI.Server" xml:space="preserve">伺服器</x:String>
669670
<x:String x:Key="Text.Preferences.Appearance" xml:space="preserve">外觀設定</x:String>
670671
<x:String x:Key="Text.Preferences.Appearance.DefaultFont" xml:space="preserve">預設字型</x:String>

src/Views/Preferences.axaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -917,6 +917,13 @@
917917
Content="{DynamicResource Text.Preferences.AI.Model.AutoFetchAvailableModels}"
918918
IsChecked="{Binding AutoFetchAvailableModels, Mode=TwoWay}"/>
919919

920+
<TextBlock Margin="0,8,0,0" Text="{DynamicResource Text.Preferences.AI.ReasoningEffortLevel}"/>
921+
<ComboBox Margin="0,4,0,0"
922+
Height="28"
923+
HorizontalAlignment="Stretch"
924+
ItemsSource="{Binding Source={x:Static ai:Options.ReasoningEffortLevels}}"
925+
SelectedItem="{Binding ReasoningEffortLevel, Mode=TwoWay}"/>
926+
920927
<TextBlock Margin="0,12,0,0" Text="{DynamicResource Text.Preferences.AI.AdditionalPrompt}"/>
921928
<TextBox Height="120"
922929
Margin="0,4,0,0"

0 commit comments

Comments
 (0)