From 6c676dabd57a19895e23064ee779de43cec9cfd0 Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Tue, 20 Feb 2024 14:37:32 -0600 Subject: [PATCH 1/2] Fix stream log. --- .../Hooks/StreamingLogHook.cs | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs index 1fe704a3..3bbdd3b0 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs @@ -1,7 +1,10 @@ +using BotSharp.Abstraction.Agents; using BotSharp.Abstraction.Agents.Models; +using BotSharp.Abstraction.Conversations.Models; using BotSharp.Abstraction.Loggers; using BotSharp.Abstraction.Loggers.Models; using BotSharp.Abstraction.Repositories; +using BotSharp.Core.Agents.Services; using Microsoft.AspNetCore.SignalR; namespace BotSharp.Plugin.ChatHub.Hooks; @@ -54,9 +57,20 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook public override async Task OnFunctionExecuted(RoleDialogModel message) { - + var agentService = _services.GetRequiredService(); + var conversationId = _state.GetConversationId(); + var agent = await agentService.LoadAgent(message.CurrentAgentId); + var log = $"[{agent?.Name}]: {message.FunctionName}({message.FunctionArgs}) => {message.Content}"; + log += $"\r\n<== MessageId: {message.MessageId}"; + await _chatHub.Clients.User(_user.Id).SendAsync("OnConversationContentLogGenerated", BuildContentLog(conversationId, agent?.Name, log, message)); } + /// + /// Used to log prompt + /// + /// + /// + /// public async Task AfterGenerated(RoleDialogModel message, TokenStatsModel tokenStats) { if (!_convSettings.ShowVerboseLog) return; @@ -66,20 +80,32 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook var agent = await agentService.LoadAgent(message.CurrentAgentId); await _chatHub.Clients.User(_user.Id).SendAsync("OnConversationContentLogGenerated", BuildContentLog(conversationId, agent?.Name, tokenStats.Prompt, message)); - - var log = message.Role == AgentRole.Function ? - $"[{agent?.Name}]: {message.FunctionName}({message.FunctionArgs})" : - $"[{agent?.Name}]: {message.Content}"; - log += $"\r\n<== MessageId: {message.MessageId}"; - await _chatHub.Clients.User(_user.Id).SendAsync("OnConversationContentLogGenerated", BuildContentLog(conversationId, agent?.Name, log, message)); } + /// + /// Used to log final response + /// + /// + /// public override async Task OnResponseGenerated(RoleDialogModel message) { var conv = _services.GetRequiredService(); var state = _services.GetRequiredService(); await _chatHub.Clients.User(_user.Id).SendAsync("OnConversateStateLogGenerated", BuildStateLog(conv.ConversationId, state.GetStates(), message)); + + if (message.Role == AgentRole.Assistant) + { + var agentService = _services.GetRequiredService(); + var agent = await agentService.LoadAgent(message.CurrentAgentId); + var log = $"[{agent?.Name}]: {message.Content}"; + if (message.RichContent != null) + { + log += $"\r\n{message.RichContent}"; + } + log += $"\r\n<== MessageId: {message.MessageId}"; + await _chatHub.Clients.User(_user.Id).SendAsync("OnConversationContentLogGenerated", BuildContentLog(conv.ConversationId, agent?.Name, log, message)); + } } private string BuildContentLog(string conversationId, string? name, string content, RoleDialogModel message) From dd4816681cb98971db6e78afc0e4fd0c65561252 Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Tue, 20 Feb 2024 14:38:49 -0600 Subject: [PATCH 2/2] Fix image data issue. --- .../BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs | 8 ++++++-- .../Hooks/WebDriverConversationHook.cs | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs index 3bbdd3b0..e3f1a903 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs @@ -3,9 +3,12 @@ using BotSharp.Abstraction.Agents.Models; using BotSharp.Abstraction.Conversations.Models; using BotSharp.Abstraction.Loggers; using BotSharp.Abstraction.Loggers.Models; +using BotSharp.Abstraction.Messaging.Models.RichContent; +using BotSharp.Abstraction.Messaging; using BotSharp.Abstraction.Repositories; using BotSharp.Core.Agents.Services; using Microsoft.AspNetCore.SignalR; +using Microsoft.VisualBasic; namespace BotSharp.Plugin.ChatHub.Hooks; @@ -99,9 +102,10 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook var agentService = _services.GetRequiredService(); var agent = await agentService.LoadAgent(message.CurrentAgentId); var log = $"[{agent?.Name}]: {message.Content}"; - if (message.RichContent != null) + if (message.RichContent != null && message.RichContent.Message.RichType != "text") { - log += $"\r\n{message.RichContent}"; + var richContent = JsonSerializer.Serialize(message.RichContent, _serializerOptions); + log += $"\r\n{richContent}"; } log += $"\r\n<== MessageId: {message.MessageId}"; await _chatHub.Clients.User(_user.Id).SendAsync("OnConversationContentLogGenerated", BuildContentLog(conv.ConversationId, agent?.Name, log, message)); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Hooks/WebDriverConversationHook.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Hooks/WebDriverConversationHook.cs index 66030f88..39929aba 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Hooks/WebDriverConversationHook.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Hooks/WebDriverConversationHook.cs @@ -17,7 +17,11 @@ public class WebDriverConversationHook : ConversationHookBase // load screenshot if (dialog.Role == AgentRole.Assistant) { - dialog.Data = "data:image/png;base64," + webDriverService.GetScreenshotBase64(dialog.MessageId); + var image64 = webDriverService.GetScreenshotBase64(dialog.MessageId); + if (image64 != null) + { + dialog.Data = $"data:image/png;base64,{image64}"; + } } await base.OnDialogRecordLoaded(dialog);