From 24be87b52d6eadb13c54b049b4af0b4103176a87 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Tue, 16 Sep 2025 19:57:13 -0500 Subject: [PATCH] fix audio and excel --- .../Functions/HandleAudioRequestFn.cs | 23 ++++++-- .../Functions/HandleExcelRequestFn.cs | 59 +++++++++++++------ .../Functions/ReadImageFn.cs | 4 +- 3 files changed, 59 insertions(+), 27 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs b/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs index e27b4054..23a8e60d 100644 --- a/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs +++ b/src/Plugins/BotSharp.Plugin.AudioHandler/Functions/HandleAudioRequestFn.cs @@ -1,3 +1,4 @@ +using BotSharp.Abstraction.Routing; using BotSharp.Core.Infrastructures; using Microsoft.AspNetCore.StaticFiles; @@ -35,10 +36,15 @@ public class HandleAudioRequestFn : IFunctionCallback { var args = JsonSerializer.Deserialize(message.FunctionArgs, _options.JsonSerializerOptions); var conv = _serviceProvider.GetRequiredService(); + var routingCtx = _serviceProvider.GetRequiredService(); + + var wholeDialogs = routingCtx.GetDialogs(); + if (wholeDialogs.IsNullOrEmpty()) + { + wholeDialogs = conv.GetDialogHistory(); + } - var wholeDialogs = conv.GetDialogHistory(); var dialogs = AssembleFiles(conv.ConversationId, wholeDialogs); - var response = await GetResponeFromDialogs(dialogs); message.Content = response; return true; @@ -52,18 +58,23 @@ public class HandleAudioRequestFn : IFunctionCallback } var messageId = dialogs.Select(x => x.MessageId).Distinct().ToList(); - var audioMessageFiles = _fileStorage.GetMessageFiles(convId, messageId, options: new() + var audioFiles = _fileStorage.GetMessageFiles(convId, messageId, options: new() { Sources = [FileSource.User], ContentTypes = _audioContentTypes }); - audioMessageFiles = audioMessageFiles.Where(x => x.ContentType.Contains("audio")).ToList(); + audioFiles = audioFiles.Where(x => x.ContentType.Contains("audio")).ToList(); foreach (var dialog in dialogs) { - var found = audioMessageFiles.Where(x => x.MessageId == dialog.MessageId).ToList(); - if (found.IsNullOrEmpty()) continue; + var found = audioFiles.Where(x => x.MessageId == dialog.MessageId + && x.FileSource.IsEqualTo(FileSource.User)).ToList(); + + if (found.IsNullOrEmpty() || !dialog.IsFromUser) + { + continue; + } dialog.Files = found.Select(x => new BotSharpFile { diff --git a/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs b/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs index b65401fd..41507427 100644 --- a/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs +++ b/src/Plugins/BotSharp.Plugin.ExcelHandler/Functions/HandleExcelRequestFn.cs @@ -1,11 +1,12 @@ -using System.Linq.Dynamic.Core; using BotSharp.Abstraction.Files.Enums; using BotSharp.Abstraction.Files.Models; using BotSharp.Abstraction.Files.Utilities; +using BotSharp.Abstraction.Routing; using BotSharp.Plugin.ExcelHandler.Models; using BotSharp.Plugin.ExcelHandler.Services; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; +using System.Linq.Dynamic.Core; namespace BotSharp.Plugin.ExcelHandler.Functions; @@ -49,14 +50,20 @@ public class HandleExcelRequestFn : IFunctionCallback { var args = JsonSerializer.Deserialize(message.FunctionArgs, _options.JsonSerializerOptions); var conv = _serviceProvider.GetRequiredService(); - + var states = _serviceProvider.GetRequiredService(); + var routingCtx = _serviceProvider.GetRequiredService(); if (_excelMimeTypes.IsNullOrEmpty()) { _excelMimeTypes = FileUtility.GetMimeFileTypes(new List { "excel", "spreadsheet" }).ToHashSet(); } - var dialogs = conv.GetDialogHistory(); + var dialogs = routingCtx.GetDialogs(); + if (dialogs.IsNullOrEmpty()) + { + dialogs = conv.GetDialogHistory(); + } + var isExcelExist = AssembleFiles(conv.ConversationId, dialogs); if (!isExcelExist) { @@ -65,30 +72,43 @@ public class HandleExcelRequestFn : IFunctionCallback } var resultList = GetResponeFromDialogs(dialogs); - var states = _serviceProvider.GetRequiredService(); - message.Content = GenerateSqlExecutionSummary(resultList); states.SetState("excel_import_result",message.Content); - + dialogs.ForEach(x => x.Files = null); return true; } #region Private Methods - private bool AssembleFiles(string convId, List dialogs) + private bool AssembleFiles(string conversationId, List dialogs) { - if (dialogs.IsNullOrEmpty()) return false; - - var messageId = dialogs.Select(x => x.MessageId).Distinct().ToList(); - var contentType = FileUtility.GetContentFileTypes(mimeTypes: _excelMimeTypes); - var excelMessageFiles = _fileStorage.GetMessageFiles(convId, messageId, FileSourceType.User, contentType); - - if (excelMessageFiles.IsNullOrEmpty()) return false; - - dialogs.ForEach(dialog => + if (dialogs.IsNullOrEmpty()) { - var found = excelMessageFiles.Where(y => y.MessageId == dialog.MessageId).ToList(); - if (found.IsNullOrEmpty()) return; + return false; + } + + var messageIds = dialogs.Select(x => x.MessageId).Distinct().ToList(); + var contentTypes = FileUtility.GetContentFileTypes(mimeTypes: _excelMimeTypes); + var excelFiles = _fileStorage.GetMessageFiles(conversationId, messageIds, options: new() + { + Sources = [FileSource.User], + ContentTypes = contentTypes + }); + + if (excelFiles.IsNullOrEmpty()) + { + return false; + } + + foreach (var dialog in dialogs) + { + var found = excelFiles.Where(x => x.MessageId == dialog.MessageId + && x.FileSource.IsEqualTo(FileSource.User)).ToList(); + + if (found.IsNullOrEmpty() || !dialog.IsFromUser) + { + continue; + } dialog.Files = found.Select(x => new BotSharpFile { @@ -96,7 +116,8 @@ public class HandleExcelRequestFn : IFunctionCallback FileUrl = x.FileUrl, FileStorageUrl = x.FileStorageUrl }).ToList(); - }); + } + return true; } diff --git a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs index 05848c99..639f3004 100644 --- a/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs +++ b/src/Plugins/BotSharp.Plugin.FileHandler/Functions/ReadImageFn.cs @@ -82,11 +82,11 @@ public class ReadImageFn : IFunctionCallback if (found.IsNullOrEmpty()) continue; var targets = found; - if (dialog.Role == AgentRole.User) + if (dialog.IsFromUser) { targets = found.Where(x => x.FileSource.IsEqualTo(FileSource.User)).ToList(); } - else if (dialog.Role == AgentRole.Assistant || dialog.Role == AgentRole.Model) + else if (dialog.IsFromAssistant) { targets = found.Where(x => x.FileSource.IsEqualTo(FileSource.Bot)).ToList(); }