From ee758e02ece517a67847c25a88d5fb2341c1ba7a Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Wed, 10 Sep 2025 14:31:03 -0500 Subject: [PATCH] add reasoning effort in chart plot --- .../Functions/PlotChartFn.cs | 21 +++++++++++++++---- .../Settings/ChartHandlerSettings.cs | 1 + .../util-chart-plot_instruction.liquid | 2 +- src/WebStarter/appsettings.json | 4 +++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.ChartHandler/Functions/PlotChartFn.cs b/src/Plugins/BotSharp.Plugin.ChartHandler/Functions/PlotChartFn.cs index 870566e07..bd4feb0a1 100644 --- a/src/Plugins/BotSharp.Plugin.ChartHandler/Functions/PlotChartFn.cs +++ b/src/Plugins/BotSharp.Plugin.ChartHandler/Functions/PlotChartFn.cs @@ -36,10 +36,7 @@ public async Task Execute(RoleDialogModel message) Id = agent.Id, Name = agent.Name, Instruction = inst, - LlmConfig = new AgentLlmConfig - { - MaxOutputTokens = _settings?.ChartPlot?.MaxOutputTokens ?? 8192 - }, + LlmConfig = GetLlmConfig(), TemplateDict = new Dictionary { { "plotting_requirement", args?.PlottingRequirement ?? string.Empty }, @@ -147,4 +144,20 @@ private string GetChartPlotInstruction(string agentId) return (provider, model); } + + private AgentLlmConfig GetLlmConfig() + { + var maxOutputTokens = _settings?.ChartPlot?.MaxOutputTokens ?? 8192; + var reasoningEffortLevel = _settings?.ChartPlot?.ReasoningEffortLevel ?? "minimal"; + + var state = _services.GetRequiredService(); + maxOutputTokens = int.TryParse(state.GetState("chart_plot_max_output_tokens"), out var tokens) ? tokens : maxOutputTokens; + reasoningEffortLevel = state.GetState("chart_plot_reasoning_effort_level").IfNullOrEmptyAs(reasoningEffortLevel); + + return new AgentLlmConfig + { + MaxOutputTokens = maxOutputTokens, + ReasoningEffortLevel = reasoningEffortLevel + }; + } } diff --git a/src/Plugins/BotSharp.Plugin.ChartHandler/Settings/ChartHandlerSettings.cs b/src/Plugins/BotSharp.Plugin.ChartHandler/Settings/ChartHandlerSettings.cs index 4e0316219..ad13e0eff 100644 --- a/src/Plugins/BotSharp.Plugin.ChartHandler/Settings/ChartHandlerSettings.cs +++ b/src/Plugins/BotSharp.Plugin.ChartHandler/Settings/ChartHandlerSettings.cs @@ -10,4 +10,5 @@ public class ChartPlotSetting public string? LlmProvider { get; set; } public string? LlmModel { get; set; } public int? MaxOutputTokens { get; set; } + public string? ReasoningEffortLevel { get; set; } } diff --git a/src/Plugins/BotSharp.Plugin.ChartHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-chart-plot_instruction.liquid b/src/Plugins/BotSharp.Plugin.ChartHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-chart-plot_instruction.liquid index 7721493f3..2c23b4413 100644 --- a/src/Plugins/BotSharp.Plugin.ChartHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-chart-plot_instruction.liquid +++ b/src/Plugins/BotSharp.Plugin.ChartHandler/data/agents/6745151e-6d46-4a02-8de4-1c4f21c7da95/templates/util-chart-plot_instruction.liquid @@ -19,7 +19,7 @@ You must strictly follow the "Hard Requirements", "Render Requirements", "Code R * Ensure the chart fully expands and scales to the entire screen when fullscreen is active. * fullscreenBtn must be a fully-formed object {show: true, name, title, icon: 'path://M3 3 H9 V5 H5 V9 H3 Z M15 3 H21 V9 H19 V5 H15 Z M3 15 H5 V19 H9 V21 H3 Z M19 15 H21 V21 H15 V19 H19 Z', onclick}. * When using "chart.setOption" to define the fullscreen button, DO NOT use "graphic". Include the fullscreenBtn object in toolbox.feature with name 'myFullscreen'. -** Initialize the chart with explicit non-zero width (at least 800px) and non-zero height (at least 500px). +** You must initialize the chart with explicit non-zero width (at least 800px) and non-zero height (at least 500px). ***** Render Requirements ***** diff --git a/src/WebStarter/appsettings.json b/src/WebStarter/appsettings.json index 8800c3800..893e8fa2e 100644 --- a/src/WebStarter/appsettings.json +++ b/src/WebStarter/appsettings.json @@ -320,7 +320,9 @@ "ChartHandler": { "ChartPlot": { "LlmProvider": "openai", - "LlmModel": "gpt-5" + "LlmModel": "gpt-5", + "MaxOutputTokens": 8192, + "ReasoningEffortLevel": "minimal" } },