From b556040d8fb64ed53e74f4915809d5a3c32565d8 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Tue, 12 Aug 2025 10:22:19 -0500 Subject: [PATCH] add reasoning effort level --- Directory.Packages.props | 2 +- .../Agents/Constants/LlmConstant.cs | 1 + .../Agents/Models/AgentLlmConfig.cs | 7 +++++ .../Models/AgentLlmConfigMongoElement.cs | 7 +++-- .../Providers/Chat/ChatCompletionProvider.cs | 31 ++++++++++++++++++- .../BotSharp.Plugin.Qdrant/QdrantDb.cs | 2 +- 6 files changed, 45 insertions(+), 5 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 4b4500203..d5721a141 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -46,7 +46,7 @@ - + diff --git a/src/Infrastructure/BotSharp.Abstraction/Agents/Constants/LlmConstant.cs b/src/Infrastructure/BotSharp.Abstraction/Agents/Constants/LlmConstant.cs index 3919ca571..e45c8b153 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Agents/Constants/LlmConstant.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Agents/Constants/LlmConstant.cs @@ -3,4 +3,5 @@ namespace BotSharp.Abstraction.Agents.Constants; public static class LlmConstant { public const int DEFAULT_MAX_OUTPUT_TOKEN = 1024; + public const string DEFAULT_REASONING_EFFORT_LEVEL = "low"; } diff --git a/src/Infrastructure/BotSharp.Abstraction/Agents/Models/AgentLlmConfig.cs b/src/Infrastructure/BotSharp.Abstraction/Agents/Models/AgentLlmConfig.cs index f1df3a012..75e3aa93b 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Agents/Models/AgentLlmConfig.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Agents/Models/AgentLlmConfig.cs @@ -34,4 +34,11 @@ public class AgentLlmConfig [JsonPropertyName("max_output_tokens")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public int? MaxOutputTokens { get; set; } + + /// + /// Reasoning effort level + /// + [JsonPropertyName("reasoning_effort_level")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string? ReasoningEffortLevel { get; set; } } diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Models/AgentLlmConfigMongoElement.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Models/AgentLlmConfigMongoElement.cs index 21c99e345..63bc3b20b 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Models/AgentLlmConfigMongoElement.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Models/AgentLlmConfigMongoElement.cs @@ -10,6 +10,7 @@ public class AgentLlmConfigMongoElement public bool IsInherit { get; set; } public int MaxRecursionDepth { get; set; } public int? MaxOutputTokens { get; set; } + public string? ReasoningEffortLevel { get; set; } public static AgentLlmConfigMongoElement? ToMongoElement(AgentLlmConfig? config) { @@ -21,7 +22,8 @@ public class AgentLlmConfigMongoElement Model = config.Model, IsInherit = config.IsInherit, MaxRecursionDepth = config.MaxRecursionDepth, - MaxOutputTokens = config.MaxOutputTokens + MaxOutputTokens = config.MaxOutputTokens, + ReasoningEffortLevel = config.ReasoningEffortLevel }; } @@ -35,7 +37,8 @@ public class AgentLlmConfigMongoElement Model = config.Model, IsInherit = config.IsInherit, MaxRecursionDepth = config.MaxRecursionDepth, - MaxOutputTokens = config.MaxOutputTokens + MaxOutputTokens = config.MaxOutputTokens, + ReasoningEffortLevel = config.ReasoningEffortLevel }; } } diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs index 9eec0c1e4..c9318d79c 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Chat/ChatCompletionProvider.cs @@ -504,13 +504,42 @@ private ChatCompletionOptions InitChatCompletionOption(Agent agent) ? tokens : agent.LlmConfig?.MaxOutputTokens ?? LlmConstant.DEFAULT_MAX_OUTPUT_TOKEN; + var level = state.GetState("reasoning_effort_level") + .IfNullOrEmptyAs(agent?.LlmConfig?.ReasoningEffortLevel ?? string.Empty) + .IfNullOrEmptyAs(LlmConstant.DEFAULT_REASONING_EFFORT_LEVEL); + var reasoningEffortLevel = ParseReasoningEffortLevel(level); + return new ChatCompletionOptions() { Temperature = temperature, - MaxOutputTokenCount = maxTokens + MaxOutputTokenCount = maxTokens, + ReasoningEffortLevel = reasoningEffortLevel }; } + private ChatReasoningEffortLevel? ParseReasoningEffortLevel(string? level) + { + if (string.IsNullOrWhiteSpace(level) || !_defaultTemperature.ContainsKey(_model)) + { + return null; + } + + var effortLevel = ChatReasoningEffortLevel.Low; + switch (level.ToLower()) + { + case "medium": + effortLevel = ChatReasoningEffortLevel.Medium; + break; + case "high": + effortLevel = ChatReasoningEffortLevel.High; + break; + default: + break; + } + + return effortLevel; + } + public void SetModelName(string model) { _model = model; diff --git a/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs b/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs index 660f2d978..eb83ca0e8 100644 --- a/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs +++ b/src/Plugins/BotSharp.Plugin.Qdrant/QdrantDb.cs @@ -629,7 +629,7 @@ public async Task DeleteCollectionShapshot(string collectionName, string s return new OrderBy { Key = sort.Field, - Direction = sort.Order == "asc" ? Direction.Asc : Direction.Desc + Direction = sort.Order.IsEqualTo("asc") ? Direction.Asc : Direction.Desc }; }