diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs b/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs index e9459650..990edcdf 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/ChatStreamMiddleware.cs @@ -92,15 +92,19 @@ public class ChatStreamMiddleware } } - _session?.Disconnect(); - _session?.Dispose(); + + await _session.Disconnect(); + _session.Dispose(); } private async Task ConnectToModel(IRealtimeHub hub, WebSocket webSocket) { await hub.ConnectToModel(async data => { - await _session.SendEvent(data); + if (_session != null) + { + await _session.SendEvent(data); + } }); } diff --git a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs index 12618493..10d18462 100644 --- a/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs +++ b/src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs @@ -52,10 +52,12 @@ public class RealTimeCompletionProvider : IRealTimeCompletion { _session.Dispose(); } + _session = new LlmRealtimeSession(_services, new ChatSessionOptions { JsonOptions = _botsharpOptions.JsonSerializerOptions }); + await _session.ConnectAsync( uri: new Uri($"wss://api.openai.com/v1/realtime?model={_model}"), headers: new Dictionary @@ -79,7 +81,11 @@ public class RealTimeCompletionProvider : IRealTimeCompletion public async Task Disconnect() { - _session?.Disconnect(); + if (_session != null) + { + await _session.Disconnect(); + _session.Dispose(); + } } public async Task AppenAudioBuffer(string message) @@ -139,7 +145,8 @@ public class RealTimeCompletionProvider : IRealTimeCompletion }); } - private async Task ReceiveMessage(RealtimeHubConnection conn, + private async Task ReceiveMessage( + RealtimeHubConnection conn, Action onModelReady, Action onModelAudioDeltaReceived, Action onModelAudioResponseDone,