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
};
}