From ff2b1da2d9d59630fbe76db020a9bfae672857ec Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Thu, 9 Oct 2025 17:23:51 -0500 Subject: [PATCH 1/2] skip file selection if there is only 1 image. --- .../Files/Services/Instruct/FileInstructService.Image.cs | 6 +++--- .../Services/Instruct/FileInstructService.SelectFile.cs | 6 +++++- .../BotSharp.Core/Infrastructures/CompletionProvider.cs | 2 +- .../BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs | 4 ++-- .../Functions/GenerateImageFn.cs | 4 ++-- .../BotSharp.Plugin.FileHandler/Helpers/AiResponseHelper.cs | 6 +++--- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.Image.cs b/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.Image.cs index b43f9b61..a58813ee 100644 --- a/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.Image.cs +++ b/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.Image.cs @@ -49,7 +49,7 @@ public partial class FileInstructService var instruction = await GetAgentTemplate(innerAgentId, options?.TemplateName); var textContent = text.IfNullOrEmptyAs(instruction).IfNullOrEmptyAs(string.Empty); - var completion = CompletionProvider.GetImageCompletion(_services, provider: options?.Provider ?? "openai", model: options?.Model ?? "gpt-image-1"); + var completion = CompletionProvider.GetImageCompletion(_services, provider: options?.Provider ?? "openai", model: options?.Model ?? "gpt-image-1-mini"); var message = await completion.GetImageGeneration(new Agent() { Id = innerAgentId, @@ -124,7 +124,7 @@ public partial class FileInstructService var innerAgentId = options?.AgentId ?? Guid.Empty.ToString(); var instruction = await GetAgentTemplate(innerAgentId, options?.TemplateName); - var completion = CompletionProvider.GetImageCompletion(_services, provider: options?.Provider ?? "openai", model: options?.Model ?? "gpt-image-1"); + var completion = CompletionProvider.GetImageCompletion(_services, provider: options?.Provider ?? "openai", model: options?.Model ?? "gpt-image-1-mini"); var binary = await DownloadFile(image); // Convert image @@ -173,7 +173,7 @@ public partial class FileInstructService var innerAgentId = options?.AgentId ?? Guid.Empty.ToString(); var instruction = await GetAgentTemplate(innerAgentId, options?.TemplateName); - var completion = CompletionProvider.GetImageCompletion(_services, provider: options?.Provider ?? "openai", model: options?.Model ?? "gpt-image-1"); + var completion = CompletionProvider.GetImageCompletion(_services, provider: options?.Provider ?? "openai", model: options?.Model ?? "gpt-image-1-mini"); var imageBinary = await DownloadFile(image); var maskBinary = await DownloadFile(mask); diff --git a/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.SelectFile.cs b/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.SelectFile.cs index 3b0b724a..65ea5705 100644 --- a/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.SelectFile.cs +++ b/src/Infrastructure/BotSharp.Core/Files/Services/Instruct/FileInstructService.SelectFile.cs @@ -80,6 +80,10 @@ public partial class FileInstructService { return res; } + else if (files.Count() == 1) + { + return files; + } var agentService = _services.GetRequiredService(); var llmProviderService = _services.GetRequiredService(); @@ -115,7 +119,7 @@ public partial class FileInstructService }).ToList(); var agentId = !string.IsNullOrWhiteSpace(options.AgentId) ? options.AgentId : BuiltInAgentId.FileAssistant; - var template = !string.IsNullOrWhiteSpace(options.Template) ? options.Template : "select_chat_file_instruction"; + var template = !string.IsNullOrWhiteSpace(options.Template) ? options.Template : "select-chat-file_instruction"; var prompt = db.GetAgentTemplate(agentId, template); var data = new Dictionary diff --git a/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs b/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs index ed99e0dd..60645bcf 100644 --- a/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs +++ b/src/Infrastructure/BotSharp.Core/Infrastructures/CompletionProvider.cs @@ -213,7 +213,7 @@ public class CompletionProvider model = agentConfig?.Model ?? agentSetting.LlmConfig?.Model; if (state.ContainsState("model")) { - model = state.GetState("model", model ?? "gpt-image-1"); + model = state.GetState("model", model ?? "gpt-image-1-mini"); } else if (state.ContainsState("model_id") || !string.IsNullOrEmpty(modelId)) { diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs index 670261ac..9d7521ac 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/EditImageFn.cs @@ -137,7 +137,7 @@ public class EditImageFn : IFunctionCallback LlmConfig = new AgentLlmConfig { Provider = llmConfig?.Provider ?? "openai", - Model = llmConfig?.Model ?? "gpt-4o-mini", + Model = llmConfig?.Model ?? "gpt-5-mini", MaxOutputTokens = llmConfig?.MaxOutputTokens, ReasoningEffortLevel = llmConfig?.ReasoningEffortLevel } @@ -168,7 +168,7 @@ public class EditImageFn : IFunctionCallback } provider = "openai"; - model = "gpt-image-1"; + model = "gpt-image-1-mini"; return (provider, model); } diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs index 33fa8e81..132b1861 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/GenerateImageFn.cs @@ -101,7 +101,7 @@ public class GenerateImageFn : IFunctionCallback LlmConfig = new AgentLlmConfig { Provider = llmConfig?.Provider ?? "openai", - Model = llmConfig?.Model ?? "gpt-4o-mini", + Model = llmConfig?.Model ?? "gpt-5-mini", MaxOutputTokens = llmConfig?.MaxOutputTokens, ReasoningEffortLevel = llmConfig?.ReasoningEffortLevel } @@ -132,7 +132,7 @@ public class GenerateImageFn : IFunctionCallback } provider = "openai"; - model = "gpt-image-1"; + model = "gpt-image-1-mini"; return (provider, model); } diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Helpers/AiResponseHelper.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Helpers/AiResponseHelper.cs index 6937c657..a45db570 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/Helpers/AiResponseHelper.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Helpers/AiResponseHelper.cs @@ -21,11 +21,11 @@ internal static class AiResponseHelper internal static async Task GetImageGenerationResponse(IServiceProvider services, Agent agent, string description) { - var text = $"Please generate a user-friendly response from the following description to " + - $"inform user that you have completed the required image: {description}"; + var text = $"Please generate a user-friendly and short response from the following description to " + + $"inform user that the required image is generated : {description}"; var provider = agent?.LlmConfig?.Provider ?? "openai"; - var model = agent?.LlmConfig?.Model ?? "gpt-4o-mini"; + var model = agent?.LlmConfig?.Model ?? "gpt-5-mini"; var completion = CompletionProvider.GetChatCompletion(services, provider: provider, model: model); var response = await completion.GetChatCompletions(agent, [new RoleDialogModel(AgentRole.User, text)]); return response.Content; From 728a37dd02725cc8c2429f76ed495df9e2b7d989 Mon Sep 17 00:00:00 2001 From: "nick.yi" Date: Fri, 10 Oct 2025 11:10:32 +0800 Subject: [PATCH 2/2] add Alignment for ButtonTemplateMessage --- .../Messaging/Enums/AlignmentEnum.cs | 20 +++++++++++++++++++ .../Template/ButtonTemplateMessage.cs | 3 +++ 2 files changed, 23 insertions(+) create mode 100644 src/Infrastructure/BotSharp.Abstraction/Messaging/Enums/AlignmentEnum.cs diff --git a/src/Infrastructure/BotSharp.Abstraction/Messaging/Enums/AlignmentEnum.cs b/src/Infrastructure/BotSharp.Abstraction/Messaging/Enums/AlignmentEnum.cs new file mode 100644 index 00000000..7ffb9acb --- /dev/null +++ b/src/Infrastructure/BotSharp.Abstraction/Messaging/Enums/AlignmentEnum.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BotSharp.Abstraction.Messaging.Enums +{ + public static class AlignmentEnum + { + public const string TopLeft = "topLeft"; + public const string BottomLeft = "bottomLeft"; + + public const string TopRight = "topRight"; + public const string BottomRight = "bottomRight"; + + public const string TopCenter = "topCenter"; + public const string BottomCenter = "bottomCenter"; + } +} diff --git a/src/Infrastructure/BotSharp.Abstraction/Messaging/Models/RichContent/Template/ButtonTemplateMessage.cs b/src/Infrastructure/BotSharp.Abstraction/Messaging/Models/RichContent/Template/ButtonTemplateMessage.cs index 0d8470d7..adf78338 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Messaging/Models/RichContent/Template/ButtonTemplateMessage.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Messaging/Models/RichContent/Template/ButtonTemplateMessage.cs @@ -20,4 +20,7 @@ public class ButtonTemplateMessage : IRichMessage, ITemplateMessage [JsonPropertyName("is_horizontal")] public bool IsHorizontal { get; set; } + + [JsonPropertyName("alignment")] + public string Alignment { get; set; } = AlignmentEnum.TopLeft; }