Skip to content

Commit 5ebf9f7

Browse files
author
Haiping Chen
committed
Model response timeout
1 parent 871aeff commit 5ebf9f7

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

src/Plugins/BotSharp.Plugin.OpenAI/Providers/Realtime/RealTimeCompletionProvider.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,28 @@ private async Task ReceiveMessage(RealtimeHubConnection conn,
144144
Action onUserInterrupted)
145145
{
146146
var buffer = new byte[1024 * 32];
147-
WebSocketReceiveResult result;
147+
// Model response timeout
148+
var timeout = 30;
149+
WebSocketReceiveResult? result = default;
148150

149151
do
150152
{
151153
Array.Clear(buffer, 0, buffer.Length);
152-
result = await _webSocket.ReceiveAsync(
153-
new ArraySegment<byte>(buffer), CancellationToken.None);
154+
155+
var taskWorker = _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
156+
var taskTimer = Task.Delay(1000 * timeout);
157+
var completedTask = await Task.WhenAny(taskWorker, taskTimer);
158+
159+
if (completedTask == taskWorker)
160+
{
161+
result = taskWorker.Result;
162+
}
163+
else
164+
{
165+
_logger.LogWarning($"Timeout {timeout} seconds waiting for Model response.");
166+
await TriggerModelInference("Response user immediately");
167+
continue;
168+
}
154169

155170
// Convert received data to text/audio (Twilio sends Base64-encoded audio)
156171
string receivedText = Encoding.UTF8.GetString(buffer, 0, result.Count);
@@ -187,7 +202,6 @@ private async Task ReceiveMessage(RealtimeHubConnection conn,
187202
{
188203
_logger.LogInformation($"{response.Type}: {receivedText}");
189204
var data = JsonSerializer.Deserialize<ResponseAudioTranscript>(receivedText);
190-
await Task.Delay(1000);
191205
onModelAudioTranscriptDone(data.Transcript);
192206
}
193207
else if (response.Type == "response.audio.delta")

0 commit comments

Comments
 (0)