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, string> OnModelMessageReceived { get; set; } = null!;
public Func<string> OnModelAudioResponseDone { get; set; } = null!; public Func<string> OnModelAudioResponseDone { get; set; } = null!;
public Func<string> OnModelUserInterrupted { get; set; } = null!; public Func<string> OnModelUserInterrupted { get; set; } = null!;
public Func<string> OnUserSpeechDetected { get; set; } = () => string.Empty;
public void ResetResponseState() public void ResetResponseState()
{ {

View file

@ -150,6 +150,9 @@ public class RealtimeHub : IRealtimeHub
var data = _conn.OnModelUserInterrupted(); var data = _conn.OnModelUserInterrupted();
await (responseToUser?.Invoke(data) ?? Task.CompletedTask); 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, MaxResponseOutputTokens = realtimeModelSettings.MaxResponseOutputTokens,
TurnDetection = new RealtimeSessionTurnDetection TurnDetection = new RealtimeSessionTurnDetection
{ {
InterruptResponse = false/*, InterruptResponse = realtimeModelSettings.InterruptResponse/*,
Threshold = realtimeModelSettings.TurnDetection.Threshold, Threshold = realtimeModelSettings.TurnDetection.Threshold,
PrefixPadding = realtimeModelSettings.TurnDetection.PrefixPadding, PrefixPadding = realtimeModelSettings.TurnDetection.PrefixPadding,
SilenceDuration = realtimeModelSettings.TurnDetection.SilenceDuration*/ SilenceDuration = realtimeModelSettings.TurnDetection.SilenceDuration*/

View file

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