diff --git a/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Text/TextCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Text/TextCompletionProvider.cs index 538bbfaa3..1bcabd20e 100644 --- a/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Text/TextCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.AzureOpenAI/Providers/Text/TextCompletionProvider.cs @@ -50,12 +50,14 @@ public async Task GetCompletion(string text, string agentId, string mess MessageId = messageId }; - Task.WaitAll(contentHooks.Select(hook => - hook.BeforeGenerating(agent, + foreach (var hook in contentHooks) + { + await hook.BeforeGenerating(agent, new List { message - })).ToArray()); + }); + } var state = _services.GetRequiredService(); var temperature = float.Parse(state.GetState("temperature", "0.0")); @@ -80,15 +82,17 @@ public async Task GetCompletion(string text, string agentId, string mess MessageId = messageId }; - Task.WaitAll(contentHooks.Select(hook => - hook.AfterGenerated(responseMessage, new TokenStatsModel - { - Prompt = text, - Provider = Provider, - Model = _model, - TextInputTokens = response?.Usage?.PromptTokens ?? 0, - TextOutputTokens = response?.Usage?.CompletionTokens ?? 0 - })).ToArray()); + foreach (var hook in contentHooks) + { + await hook.AfterGenerated(responseMessage, new TokenStatsModel + { + Prompt = text, + Provider = Provider, + Model = _model, + TextInputTokens = response?.Usage?.PromptTokens ?? 0, + TextOutputTokens = response?.Usage?.CompletionTokens ?? 0 + }); + } return completion.Trim(); } diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Text/TextCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Text/TextCompletionProvider.cs index fd3cb5a1e..54db04a75 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Text/TextCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Text/TextCompletionProvider.cs @@ -39,12 +39,14 @@ public async Task GetCompletion(string text, string agentId, string mess MessageId = messageId }; - Task.WaitAll(contentHooks.Select(hook => - hook.BeforeGenerating(agent, + foreach (var hook in contentHooks) + { + await hook.BeforeGenerating(agent, new List { message - })).ToArray()); + }); + } var state = _services.GetRequiredService(); var temperature = float.Parse(state.GetState("temperature", "0.0")); @@ -68,15 +70,18 @@ public async Task GetCompletion(string text, string agentId, string mess CurrentAgentId = agentId, MessageId = messageId }; - Task.WaitAll(contentHooks.Select(hook => - hook.AfterGenerated(responseMessage, new TokenStatsModel - { - Prompt = text, - Provider = Provider, - Model = _model, - TextInputTokens = response.Usage?.PromptTokens ?? 0, - TextOutputTokens = response.Usage?.CompletionTokens ?? 0 - })).ToArray()); + + foreach (var hook in contentHooks) + { + await hook.AfterGenerated(responseMessage, new TokenStatsModel + { + Prompt = text, + Provider = Provider, + Model = _model, + TextInputTokens = response.Usage?.PromptTokens ?? 0, + TextOutputTokens = response.Usage?.CompletionTokens ?? 0 + }); + } return completion.Trim(); } diff --git a/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.User.cs b/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.User.cs index 9d65d00fd..e3c0b8aec 100644 --- a/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.User.cs +++ b/src/Plugins/BotSharp.Plugin.TencentCos/Services/TencentCosService.User.cs @@ -4,10 +4,10 @@ namespace BotSharp.Plugin.TencentCos.Services; public partial class TencentCosService { - public string GetUserAvatar() + public async Task GetUserAvatar() { var db = _services.GetRequiredService(); - var user = db.GetUserById(_user.Id); + var user = await db.GetUserById(_user.Id); var dir = GetUserAvatarDir(user?.Id); if (!ExistDirectory(dir)) return string.Empty; @@ -16,14 +16,14 @@ public string GetUserAvatar() return found; } - public bool SaveUserAvatar(FileDataModel file) + public async Task SaveUserAvatar(FileDataModel file) { if (file == null || string.IsNullOrEmpty(file.FileData)) return false; try { var db = _services.GetRequiredService(); - var user = db.GetUserById(_user.Id); + var user = await db.GetUserById(_user.Id); var dir = GetUserAvatarDir(user?.Id); if (string.IsNullOrEmpty(dir)) return false; diff --git a/tests/BotSharp.LLM.Tests/Core/NullConversationStateService.cs b/tests/BotSharp.LLM.Tests/Core/NullConversationStateService.cs index bed47b246..dd4f5a753 100644 --- a/tests/BotSharp.LLM.Tests/Core/NullConversationStateService.cs +++ b/tests/BotSharp.LLM.Tests/Core/NullConversationStateService.cs @@ -17,9 +17,9 @@ public string GetConversationId() return "fake-conversation-id"; } - public Dictionary Load(string conversationId, bool isReadOnly = false) + public Task> Load(string conversationId, bool isReadOnly = false) { - return new Dictionary { { "Key", "Value" } }; + return Task.FromResult(new Dictionary { { "Key", "Value" } }); } public string GetState(string name, string defaultValue = "") @@ -61,9 +61,9 @@ public void CleanStates(params string[] excludedStates) } - public void Save() + public Task Save() { - + return Task.CompletedTask; } public ConversationState GetCurrentState() diff --git a/tests/BotSharp.LLM.Tests/Core/NullFileStorageService.cs b/tests/BotSharp.LLM.Tests/Core/NullFileStorageService.cs index 566d33e42..10236d0c5 100644 --- a/tests/BotSharp.LLM.Tests/Core/NullFileStorageService.cs +++ b/tests/BotSharp.LLM.Tests/Core/NullFileStorageService.cs @@ -94,14 +94,14 @@ public bool DeleteConversationFiles(IEnumerable conversationIds) return true; } - public string GetUserAvatar() + public Task GetUserAvatar() { - return "FakeUserAvatar.png"; + return Task.FromResult("FakeUserAvatar.png"); } - public bool SaveUserAvatar(FileDataModel file) + public Task SaveUserAvatar(FileDataModel file) { - return true; + return Task.FromResult(true); } public bool SaveSpeechFile(string conversationId, string fileName, BinaryData data) diff --git a/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs b/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs index add520c70..06780627b 100644 --- a/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs +++ b/tests/BotSharp.LLM.Tests/Core/TestAgentService.cs @@ -112,9 +112,9 @@ public Task> GetUserAgents(string userId) return Task.FromResult(new List { new UserAgent() }); } - public PluginDef GetPlugin(string agentId) + public Task GetPlugin(string agentId) { - return new PluginDef(); + return Task.FromResult(new PluginDef()); } public Task> GetAgentUtilityOptions()