Fix Twilio dispose issue.
This commit is contained in:
parent
508d20084a
commit
1dbdb67a46
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue