Fix Twilio dispose issue.

This commit is contained in:
Haiping Chen 2025-09-23 11:19:03 -05:00
parent 508d20084a
commit 1dbdb67a46
4 changed files with 3 additions and 10 deletions

View file

@ -31,7 +31,6 @@ internal class AsyncWebsocketDataResultEnumerator : IAsyncEnumerator<ClientResul
public ValueTask DisposeAsync() public ValueTask DisposeAsync()
{ {
ArrayPool<byte>.Shared.Return(_buffer, clearArray: true); ArrayPool<byte>.Shared.Return(_buffer, clearArray: true);
_webSocket?.Dispose();
return new ValueTask(Task.CompletedTask); return new ValueTask(Task.CompletedTask);
} }

View file

@ -26,7 +26,6 @@ public class LlmRealtimeSession : IDisposable
public async Task ConnectAsync(Uri uri, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default) public async Task ConnectAsync(Uri uri, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default)
{ {
_disposed = false; _disposed = false;
_webSocket?.Dispose();
_webSocket = new ClientWebSocket(); _webSocket = new ClientWebSocket();
if (!headers.IsNullOrEmpty()) if (!headers.IsNullOrEmpty())

View file

@ -69,7 +69,6 @@ public class RealTimeCompletionProvider : IRealTimeCompletion
_model = realtimeSettings.Model; _model = realtimeSettings.Model;
var settings = settingsService.GetSetting(Provider, _model); var settings = settingsService.GetSetting(Provider, _model);
_session?.Dispose();
_session = new LlmRealtimeSession(_services, new ChatSessionOptions _session = new LlmRealtimeSession(_services, new ChatSessionOptions
{ {
Provider = Provider, Provider = Provider,

View file

@ -23,7 +23,6 @@ public class TwilioStreamMiddleware
{ {
private readonly RequestDelegate _next; private readonly RequestDelegate _next;
private readonly ILogger<TwilioStreamMiddleware> _logger; private readonly ILogger<TwilioStreamMiddleware> _logger;
private BotSharpRealtimeSession _session;
public TwilioStreamMiddleware( public TwilioStreamMiddleware(
RequestDelegate next, RequestDelegate next,
@ -52,7 +51,6 @@ public class TwilioStreamMiddleware
} }
catch (Exception ex) catch (Exception ex)
{ {
_session?.Dispose();
_logger.LogError(ex, $"Error in WebSocket communication: {ex.Message} for conversation {conversationId}"); _logger.LogError(ex, $"Error in WebSocket communication: {ex.Message} for conversation {conversationId}");
} }
return; return;
@ -64,8 +62,7 @@ public class TwilioStreamMiddleware
private async Task HandleWebSocket(IServiceProvider services, string agentId, string conversationId, WebSocket webSocket) private async Task HandleWebSocket(IServiceProvider services, string agentId, string conversationId, WebSocket webSocket)
{ {
_session?.Dispose(); using var session = new BotSharpRealtimeSession(services, webSocket, new ChatSessionOptions
_session = new BotSharpRealtimeSession(services, webSocket, new ChatSessionOptions
{ {
Provider = "BotSharp Twilio Stream", Provider = "BotSharp Twilio Stream",
BufferSize = 1024 * 32, BufferSize = 1024 * 32,
@ -92,7 +89,7 @@ public class TwilioStreamMiddleware
var routing = services.GetRequiredService<IRoutingService>(); var routing = services.GetRequiredService<IRoutingService>();
routing.Context.Push(agentId); routing.Context.Push(agentId);
await foreach (ChatSessionUpdate update in _session.ReceiveUpdatesAsync(CancellationToken.None)) await foreach (ChatSessionUpdate update in session.ReceiveUpdatesAsync(CancellationToken.None))
{ {
var receivedText = update?.RawResponse; var receivedText = update?.RawResponse;
if (string.IsNullOrEmpty(receivedText)) if (string.IsNullOrEmpty(receivedText))
@ -144,8 +141,7 @@ public class TwilioStreamMiddleware
} }
convService.SaveStates(); convService.SaveStates();
await _session.DisconnectAsync(); await session.DisconnectAsync();
_session.Dispose();
} }
private async Task ConnectToModel(IRealtimeHub hub, WebSocket webSocket) private async Task ConnectToModel(IRealtimeHub hub, WebSocket webSocket)