From a1c73d045a819ff1468a4bcbea8b1a139746782c Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Sat, 15 Mar 2025 09:29:46 -0500 Subject: [PATCH] Fix Push dialogs into model context --- .../Services/RealtimeHub.cs | 18 +++++++++++------- .../Controllers/TwilioStreamController.cs | 2 +- .../Services/TwilioService.cs | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs b/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs index 22f331ee..55378b01 100644 --- a/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs +++ b/src/Infrastructure/BotSharp.Core.Realtime/Services/RealtimeHub.cs @@ -99,13 +99,7 @@ public class RealtimeHub : IRealtimeHub onModelReady: async () => { // Not TriggerModelInference, waiting for user utter. - await _completer.UpdateSession(_conn); - - // Push dialogs into model context - foreach (var message in dialogs) - { - await _completer.InsertConversationItem(message); - } + var instruction = await _completer.UpdateSession(_conn); // Trigger model inference if there is no audio file in the conversation if (!states.ContainsState("init_audio_file")) @@ -119,6 +113,16 @@ public class RealtimeHub : IRealtimeHub await _completer.TriggerModelInference("Reply based on the conversation context."); } } + else + { + // Push dialogs into model context + foreach (var message in dialogs) + { + await _completer.InsertConversationItem(message); + } + + await _completer.TriggerModelInference($"{instruction}\r\n\r\nAssist user without repeating your previous statement."); + } }, onModelAudioDeltaReceived: async (audioDeltaData, itemId) => { diff --git a/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioStreamController.cs b/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioStreamController.cs index 8fea9bb4..6960f489 100644 --- a/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioStreamController.cs +++ b/src/Plugins/BotSharp.Plugin.Twilio/Controllers/TwilioStreamController.cs @@ -55,7 +55,7 @@ public class TwilioStreamController : TwilioController if (request.InitAudioFile != null) { - instruction.SpeechPaths.Add($"twilio/voice/speeches/{request.ConversationId}/{request.InitAudioFile}"); + instruction.SpeechPaths.Add(request.InitAudioFile); } await HookEmitter.Emit(_services, async hook => diff --git a/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs b/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs index 8ef9f8e6..082a0721 100644 --- a/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs +++ b/src/Plugins/BotSharp.Plugin.Twilio/Services/TwilioService.cs @@ -208,7 +208,7 @@ public class TwilioService } else { - response.Play(new Uri($"{_settings.CallbackHost}/{speechPath}")); + response.Play(new Uri($"{_settings.CallbackHost}/twilio/voice/speeches/{conversationalVoiceResponse.ConversationId}/{speechPath}")); } } }