From 1c58638306ea4e259eaeb07b877fee9b720e5744 Mon Sep 17 00:00:00 2001 From: Leon Yu <105097@lessen.com> Date: Wed, 6 Aug 2025 15:40:50 -0500 Subject: [PATCH 1/2] add end time --- .../Repositories/Filters/ConversationFilter.cs | 1 + .../Repository/MongoRepository.Conversation.cs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs b/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs index b94876c3..e274adb7 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Repositories/Filters/ConversationFilter.cs @@ -16,6 +16,7 @@ public class ConversationFilter public string? ChannelId { get; set; } public string? UserId { get; set; } public DateTime? StartTime { get; set; } + public DateTime? EndTime { get; set; } /// /// Agent task id diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs index d0da6fbf..fb424f02 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Conversation.cs @@ -393,6 +393,10 @@ public partial class MongoRepository { convFilters.Add(convBuilder.Gte(x => x.CreatedTime, filter.StartTime.Value)); } + if (filter?.EndTime != null) + { + convFilters.Add(convBuilder.Lte(x => x.CreatedTime, filter.EndTime.Value)); + } if (filter?.Tags != null && filter.Tags.Any()) { convFilters.Add(convBuilder.AnyIn(x => x.Tags, filter.Tags)); From df0423d917966370c2de3ffbd1edbd37b62d8ff7 Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Thu, 7 Aug 2025 15:38:16 -0500 Subject: [PATCH 2/2] Update IRealtimeHook --- .../Realtime/IRealtimeHook.cs | 15 ++++++++---- .../Services/RealtimeHub.cs | 24 +++++++++---------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Infrastructure/BotSharp.Abstraction/Realtime/IRealtimeHook.cs b/src/Infrastructure/BotSharp.Abstraction/Realtime/IRealtimeHook.cs index 51d7383a..b4fed514 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Realtime/IRealtimeHook.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Realtime/IRealtimeHook.cs @@ -6,8 +6,15 @@ namespace BotSharp.Abstraction.Realtime; public interface IRealtimeHook : IHookBase { - Task OnModelReady(Agent agent, IRealTimeCompletion completer); - string[] OnModelTranscriptPrompt(Agent agent); - Task OnTranscribeCompleted(RoleDialogModel message, TranscriptionData data); - Task ShouldReconnect(RealtimeHubConnection conn) => Task.FromResult(false); + Task OnModelReady(Agent agent, IRealTimeCompletion completer) + => Task.CompletedTask; + + string[] OnModelTranscriptPrompt(Agent agent) + => []; + + Task OnTranscribeCompleted(RoleDialogModel message, TranscriptionData data) + => Task.CompletedTask; + + Task ShouldReconnect(RealtimeHubConnection conn, RoleDialogModel message) + => Task.FromResult(false); } diff --git a/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs b/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs index 0ff601e1..8c057b95 100644 --- a/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs +++ b/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs @@ -100,6 +100,17 @@ public class RealtimeHub : IRealtimeHub } await routing.InvokeFunction(message.FunctionName, message, options: new() { From = InvokeSource.Llm }); + + var hooks = _services.GetHooks(_conn.CurrentAgentId); + foreach (var hook in hooks) + { + if (await hook.ShouldReconnect(_conn, message)) + { + await _completer.Reconnect(_conn); + _logger.LogWarning("Reconnecting to model due to function call: {FunctionName}", message.FunctionName); + break; + } + } } else { @@ -117,19 +128,6 @@ public class RealtimeHub : IRealtimeHub } } } - - var isReconnect = false; - var realtimeHooks = _services.GetHooks(_conn.CurrentAgentId); - foreach (var hook in realtimeHooks) - { - isReconnect = await hook.ShouldReconnect(_conn); - if (isReconnect) break; - } - - if (isReconnect) - { - await _completer.Reconnect(_conn); - } }, onConversationItemCreated: async response => {