This commit is contained in:
Jicheng Lu 2025-04-14 10:45:28 -05:00
parent ccf4b3dd0a
commit d76fef38d0
4 changed files with 13 additions and 3 deletions

View file

@ -13,6 +13,7 @@ public class RealtimeHubConnection
public Func<string, string> OnModelMessageReceived { get; set; } = null!;
public Func<string> OnModelAudioResponseDone { get; set; } = null!;
public Func<string> OnModelUserInterrupted { get; set; } = null!;
public Func<string> OnUserSpeechDetected { get; set; } = () => string.Empty;
public void ResetResponseState()
{

View file

@ -150,6 +150,9 @@ public class RealtimeHub : IRealtimeHub
var data = _conn.OnModelUserInterrupted();
await (responseToUser?.Invoke(data) ?? Task.CompletedTask);
}
var res = _conn.OnUserSpeechDetected();
await (responseToUser?.Invoke(res) ?? Task.CompletedTask);
});
}

View file

@ -263,7 +263,7 @@ public class RealTimeCompletionProvider : IRealTimeCompletion
MaxResponseOutputTokens = realtimeModelSettings.MaxResponseOutputTokens,
TurnDetection = new RealtimeSessionTurnDetection
{
InterruptResponse = false/*,
InterruptResponse = realtimeModelSettings.InterruptResponse/*,
Threshold = realtimeModelSettings.TurnDetection.Threshold,
PrefixPadding = realtimeModelSettings.TurnDetection.PrefixPadding,
SilenceDuration = realtimeModelSettings.TurnDetection.SilenceDuration*/

View file

@ -49,14 +49,20 @@ conn.OnModelAudioResponseDone = () =>
conn.OnModelUserInterrupted = () =>
JsonSerializer.Serialize(new
{
@event = "clear"
@event = "interrupted"
});
conn.OnUserSpeechDetected = () =>
JsonSerializer.Serialize(new
{
@event = "speech-detected"
});
await hub.ConnectToModel(async data =>
{
var response = JsonSerializer.Deserialize<ModelResponseEvent>(data);
if (response.Event == "clear")
if (response.Event == "speech-detected")
{
channel.ClearBuffer();
}