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()
{
ArrayPool<byte>.Shared.Return(_buffer, clearArray: true);
_webSocket?.Dispose();
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)
{
_disposed = false;
_webSocket?.Dispose();
_webSocket = new ClientWebSocket();
if (!headers.IsNullOrEmpty())

View file

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

View file

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