From e3da6db9d7ca98a8d762a4bef1306d1ec13fa75a Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Tue, 23 Apr 2024 16:27:09 -0500 Subject: [PATCH] refine multilanguage log --- .../Controllers/ConversationController.cs | 13 ++++----- .../Conversations/ChatResponseModel.cs | 7 ----- .../Hooks/ChatHubConversationHook.cs | 6 ++--- .../Hooks/StreamingLogHook.cs | 27 ++++++++++++++----- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs b/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs index 04e61773a..2f00911d1 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/Controllers/ConversationController.cs @@ -83,8 +83,7 @@ public async Task> GetDialogs([FromRoute] string ConversationId = conversationId, MessageId = message.MessageId, CreatedAt = message.CreatedAt, - Text = message.Content, - SecondaryText = message.SecondaryContent, + Text = !string.IsNullOrEmpty(message.SecondaryContent) ? message.SecondaryContent : message.Content, Data = message.Data, Sender = UserViewModel.FromUser(user) }); @@ -97,8 +96,7 @@ public async Task> GetDialogs([FromRoute] string ConversationId = conversationId, MessageId = message.MessageId, CreatedAt = message.CreatedAt, - Text = message.Content, - SecondaryText = message.SecondaryContent, + Text = !string.IsNullOrEmpty(message.SecondaryContent) ? message.SecondaryContent : message.Content, Function = message.FunctionName, Data = message.Data, Sender = new UserViewModel @@ -106,8 +104,7 @@ public async Task> GetDialogs([FromRoute] string FirstName = agent.Name, Role = message.Role, }, - RichContent = message.RichContent, - SecondaryRichContent = message.SecondaryRichContent + RichContent = message.SecondaryRichContent ?? message.RichContent }); } } @@ -180,9 +177,9 @@ await conv.SendMessage(agentId, inputMsg, replyMessage: input.Postback, async msg => { - response.Text = msg.Content; + response.Text = !string.IsNullOrEmpty(msg.SecondaryContent) ? msg.SecondaryContent : msg.Content; response.Function = msg.FunctionName; - response.RichContent = msg.RichContent; + response.RichContent = msg.SecondaryRichContent ?? msg.RichContent; response.Instruction = msg.Instruction; response.Data = msg.Data; }, diff --git a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs index 869038008..cf71b8f93 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Conversations/ChatResponseModel.cs @@ -21,9 +21,6 @@ public class ChatResponseModel : InstructResult [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public FunctionCallFromLlm? Instruction { get; set; } - [JsonPropertyName("secondary_text")] - public string? SecondaryText { get; set; } - /// /// Rich message for UI rendering /// @@ -31,10 +28,6 @@ public class ChatResponseModel : InstructResult [JsonPropertyName("rich_content")] public RichContent? RichContent { get; set; } - [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - [JsonPropertyName("secondary_rich_content")] - public RichContent? SecondaryRichContent { get; set; } - [JsonPropertyName("created_at")] public DateTime CreatedAt { get; set; } = DateTime.UtcNow; } diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs index 0ebff14c5..3b14494b7 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/ChatHubConversationHook.cs @@ -45,7 +45,7 @@ public override async Task OnMessageReceived(RoleDialogModel message) { ConversationId = conv.ConversationId, MessageId = message.MessageId, - Text = message.Content, + Text = !string.IsNullOrEmpty(message.SecondaryContent) ? message.SecondaryContent : message.Content, Sender = UserViewModel.FromUser(sender) }); @@ -71,9 +71,9 @@ public override async Task OnResponseGenerated(RoleDialogModel message) { ConversationId = conv.ConversationId, MessageId = message.MessageId, - Text = message.Content, + Text = !string.IsNullOrEmpty(message.SecondaryContent) ? message.SecondaryContent : message.Content, Function = message.FunctionName, - RichContent = message.RichContent, + RichContent = message.SecondaryRichContent ?? message.RichContent, Data = message.Data, Sender = new UserViewModel() { diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs index e1b5fd0fe..26e894c72 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs @@ -7,6 +7,8 @@ using BotSharp.Abstraction.Repositories; using BotSharp.Abstraction.Routing; using Microsoft.AspNetCore.SignalR; +using System.Text.Encodings.Web; +using System.Text.Unicode; namespace BotSharp.Plugin.ChatHub.Hooks; @@ -45,7 +47,7 @@ public StreamingLogHook( public override async Task OnMessageReceived(RoleDialogModel message) { var conversationId = _state.GetConversationId(); - var log = $"{message.Content}"; + var log = $"{GetMessageContent(message)}"; var input = new ContentLogInputModel(conversationId, message) { @@ -59,7 +61,7 @@ public override async Task OnMessageReceived(RoleDialogModel message) public override async Task OnPostbackMessageReceived(RoleDialogModel message, PostbackMessageModel replyMsg) { var conversationId = _state.GetConversationId(); - var log = $"{message.Content}"; + var log = $"{GetMessageContent(message)}"; var replyContent = JsonSerializer.Serialize(replyMsg, _options.JsonSerializerOptions); log += $"\r\n```json\r\n{replyContent}\r\n```"; @@ -183,10 +185,18 @@ public override async Task OnResponseGenerated(RoleDialogModel message) if (message.Role == AgentRole.Assistant) { var agent = await _agentService.LoadAgent(message.CurrentAgentId); - var log = $"{message.Content}"; - if (message.RichContent != null) + var log = $"{GetMessageContent(message)}"; + if (message.RichContent != null || message.SecondaryRichContent != null) { - var richContent = JsonSerializer.Serialize(message.RichContent, _options.JsonSerializerOptions); + var jsonOptions = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + AllowTrailingCommas = true, + WriteIndented = true, + Encoder = JavaScriptEncoder.Create(UnicodeRanges.All) + }; + var richContent = JsonSerializer.Serialize(message.SecondaryRichContent ?? message.RichContent, jsonOptions); log += $"\r\n```json\r\n{richContent}\r\n```"; } @@ -204,7 +214,7 @@ public override async Task OnResponseGenerated(RoleDialogModel message) public override async Task OnTaskCompleted(RoleDialogModel message) { var conversationId = _state.GetConversationId(); - var log = $"{message.Content}"; + var log = $"{GetMessageContent(message)}"; var agent = await _agentService.LoadAgent(message.CurrentAgentId); var input = new ContentLogInputModel(conversationId, message) @@ -479,4 +489,9 @@ private string BuildAgentQueueChangedLog(string conversationId, string log) return JsonSerializer.Serialize(model, _options.JsonSerializerOptions); } + + private string GetMessageContent(RoleDialogModel message) + { + return !string.IsNullOrEmpty(message.SecondaryContent) ? message.SecondaryContent : message.Content; + } }