From 9febf00795296d4d0b846404bfc55809f77b73a0 Mon Sep 17 00:00:00 2001 From: Jicheng Lu <103353@smsassist.com> Date: Mon, 28 Apr 2025 17:23:25 -0500 Subject: [PATCH] exclude conclude log when init --- .../BotSharp.Abstraction/Loggers/IContentGeneratingHook.cs | 2 +- .../BotSharp.Abstraction/MLTasks/IRealTimeCompletion.cs | 2 +- .../BotSharp.Core.Realtime/Services/RealtimeHub.cs | 2 +- src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs | 4 ++-- .../BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs | 4 +++- .../Providers/Realtime/RealTimeCompletionProvider.cs | 4 ++-- .../Providers/Realtime/RealTimeCompletionProvider.cs | 6 ++---- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Infrastructure/BotSharp.Abstraction/Loggers/IContentGeneratingHook.cs b/src/Infrastructure/BotSharp.Abstraction/Loggers/IContentGeneratingHook.cs index c4f63450..03b69f5f 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Loggers/IContentGeneratingHook.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Loggers/IContentGeneratingHook.cs @@ -47,5 +47,5 @@ public interface IContentGeneratingHook /// /// /// - Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions) => Task.CompletedTask; + Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions, bool isInit = false) => Task.CompletedTask; } diff --git a/src/Infrastructure/BotSharp.Abstraction/MLTasks/IRealTimeCompletion.cs b/src/Infrastructure/BotSharp.Abstraction/MLTasks/IRealTimeCompletion.cs index 5800c836..11174356 100644 --- a/src/Infrastructure/BotSharp.Abstraction/MLTasks/IRealTimeCompletion.cs +++ b/src/Infrastructure/BotSharp.Abstraction/MLTasks/IRealTimeCompletion.cs @@ -24,7 +24,7 @@ public interface IRealTimeCompletion Task SendEventToModel(object message); Task Disconnect(); - Task UpdateSession(RealtimeHubConnection conn); + Task UpdateSession(RealtimeHubConnection conn, bool isInit = false); Task InsertConversationItem(RoleDialogModel message); Task RemoveConversationItem(string itemId); Task TriggerModelInference(string? instructions = null); diff --git a/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs b/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs index 64b63e46..b81fe0f5 100644 --- a/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs +++ b/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs @@ -47,7 +47,7 @@ public class RealtimeHub : IRealtimeHub onModelReady: async () => { // Not TriggerModelInference, waiting for user utter. - var instruction = await _completer.UpdateSession(_conn); + var instruction = await _completer.UpdateSession(_conn, isInit: true); var data = _conn.OnModelReady(); await (init?.Invoke(data) ?? Task.CompletedTask); await HookEmitter.Emit(_services, async hook => await hook.OnModelReady(agent, _completer)); diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs b/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs index e19d3fe5..90318ff2 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs @@ -109,9 +109,9 @@ public class ChatStreamMiddleware private async Task SendEventToUser(WebSocket webSocket, string message) { - var buffer = Encoding.UTF8.GetBytes(message); - if (!webSocket.CloseStatus.HasValue) + if (webSocket.State == WebSocketState.Open) { + var buffer = Encoding.UTF8.GetBytes(message); await webSocket.SendAsync(new ArraySegment(buffer), WebSocketMessageType.Text, true, CancellationToken.None); } } diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs index 069b6fc2..c5d6b15c 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/Hooks/StreamingLogHook.cs @@ -85,7 +85,7 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR await SendContentLog(conversationId, input); } - public async Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions) + public async Task OnSessionUpdated(Agent agent, string instruction, FunctionDef[] functions, bool isInit = false) { var conversationId = _state.GetConversationId(); if (string.IsNullOrEmpty(conversationId)) return; @@ -98,6 +98,8 @@ public class StreamingLogHook : ConversationHookBase, IContentGeneratingHook, IR } _logger.LogInformation(log); + if (isInit) return; + var message = new RoleDialogModel(AgentRole.Assistant, log) { MessageId = _routingCtx.MessageId diff --git a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Realtime/RealTimeCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Realtime/RealTimeCompletionProvider.cs index de262d80..98896ac3 100644 --- a/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Realtime/RealTimeCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.GoogleAI/Providers/Realtime/RealTimeCompletionProvider.cs @@ -238,7 +238,7 @@ public class GoogleRealTimeProvider : IRealTimeCompletion //todo Send Audio Chunks to Model, Botsharp RealTime Implementation seems to be incomplete } - public async Task UpdateSession(RealtimeHubConnection conn) + public async Task UpdateSession(RealtimeHubConnection conn, bool isInit = false) { var convService = _services.GetRequiredService(); var conv = await convService.GetConversation(conn.ConversationId); @@ -278,7 +278,7 @@ public class GoogleRealTimeProvider : IRealTimeCompletion }).ToArray(); await HookEmitter.Emit(_services, - async hook => { await hook.OnSessionUpdated(agent, prompt, functions); }); + async hook => { await hook.OnSessionUpdated(agent, prompt, functions, isInit); }); if (_settings.Gemini.UseGoogleSearch) { diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs index a863d8c1..064718b4 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs @@ -264,7 +264,7 @@ public class RealTimeCompletionProvider : IRealTimeCompletion await _session.SendEventToModel(message); } - public async Task UpdateSession(RealtimeHubConnection conn) + public async Task UpdateSession(RealtimeHubConnection conn, bool isInit = false) { var convService = _services.GetRequiredService(); var conv = await convService.GetConversation(conn.ConversationId); @@ -328,13 +328,11 @@ public class RealTimeCompletionProvider : IRealTimeCompletion await HookEmitter.Emit(_services, async hook => { - await hook.OnSessionUpdated(agent, instruction, functions); + await hook.OnSessionUpdated(agent, instruction, functions, isInit); }); await SendEventToModel(sessionUpdate); - await Task.Delay(300); - return instruction; }