Merge pull request #1127 from iceljc/features/refine-vector-store

add reasoning settings
This commit is contained in:
iceljc 2025-08-12 11:34:59 -05:00 committed by GitHub
commit 4e13310884
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 32 additions and 22 deletions

View file

@ -46,7 +46,7 @@
<PackageVersion Include="Whisper.net.Runtime" Version="1.8.1" />
<PackageVersion Include="NCrontab" Version="3.3.3" />
<PackageVersion Include="Azure.AI.OpenAI" Version="2.2.0-beta.5" />
<PackageVersion Include="OpenAI" Version="2.2.0-beta.4" />
<PackageVersion Include="OpenAI" Version="2.3.0" />
<PackageVersion Include="MailKit" Version="4.11.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.8" />
<PackageVersion Include="MySql.Data" Version="9.0.0" />

View file

@ -47,7 +47,15 @@ public class LlmModelSetting
/// </summary>
public int Dimension { get; set; }
public LlmCost Cost { get; set; } = new();
/// <summary>
/// Settings for reasoning model
/// </summary>
public ReasoningSetting? Reasoning { get; set; }
/// <summary>
/// Settings for llm cost
/// </summary>
public LlmCostSetting Cost { get; set; } = new();
public override string ToString()
{
@ -55,10 +63,16 @@ public class LlmModelSetting
}
}
public class ReasoningSetting
{
public float Temperature { get; set; } = 1.0f;
public string? EffortLevel { get; set; }
}
/// <summary>
/// Cost per 1K tokens
/// </summary>
public class LlmCost
public class LlmCostSetting
{
// Input
public float TextInputCost { get; set; } = 0f;

View file

@ -1,3 +1,4 @@
#pragma warning disable OPENAI001
using BotSharp.Abstraction.Hooks;
using BotSharp.Abstraction.MessageHub.Models;
using BotSharp.Core.Infrastructures.Streams;
@ -15,16 +16,6 @@ public class ChatCompletionProvider : IChatCompletion
protected string _model;
private List<string> renderedInstructions = [];
private readonly Dictionary<string, float> _defaultTemperature = new()
{
{ "o3", 1.0f },
{ "o3-mini", 1.0f },
{ "o4-mini", 1.0f },
{ "gpt-5", 1.0f },
{ "gpt-5-mini", 1.0f },
{ "gpt-5-nano", 1.0f }
};
public virtual string Provider => "openai";
public string Model => _model;
@ -493,22 +484,24 @@ public class ChatCompletionProvider : IChatCompletion
private ChatCompletionOptions InitChatCompletionOption(Agent agent)
{
var state = _services.GetRequiredService<IConversationStateService>();
var settingsService = _services.GetRequiredService<ILlmProviderService>();
var settings = settingsService.GetSetting(Provider, _model);
ChatReasoningEffortLevel? reasoningEffortLevel = null;
var temperature = float.Parse(state.GetState("temperature", "0.0"));
if (_defaultTemperature.ContainsKey(_model))
if (settings?.Reasoning != null)
{
temperature = _defaultTemperature[_model];
temperature = settings.Reasoning.Temperature;
var level = state.GetState("reasoning_effort_level")
.IfNullOrEmptyAs(agent?.LlmConfig?.ReasoningEffortLevel ?? string.Empty)
.IfNullOrEmptyAs(settings?.Reasoning?.EffortLevel ?? string.Empty);
reasoningEffortLevel = ParseReasoningEffortLevel(level);
}
var maxTokens = int.TryParse(state.GetState("max_tokens"), out var tokens)
? 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,
@ -519,14 +512,17 @@ public class ChatCompletionProvider : IChatCompletion
private ChatReasoningEffortLevel? ParseReasoningEffortLevel(string? level)
{
if (string.IsNullOrWhiteSpace(level) || !_defaultTemperature.ContainsKey(_model))
if (string.IsNullOrWhiteSpace(level))
{
return null;
}
var effortLevel = ChatReasoningEffortLevel.Low;
var effortLevel = new ChatReasoningEffortLevel("minimal");
switch (level.ToLower())
{
case "low":
effortLevel = ChatReasoningEffortLevel.Low;
break;
case "medium":
effortLevel = ChatReasoningEffortLevel.Medium;
break;