Diagnostics: surface upstream WS close reason + break the null-spin loop
The Pi journal showed 170 000 'upstream silent NxN' messages within one second — i.e. ReceiveJsonAsync was returning null in zero time, so the upstream WS to OpenAI was closed. The relay was spinning until idle watchdog (30 s) fired. Add IRealtimeUpstream.IsClosed + CloseReason, populated by OpenAIRealtimeUpstream from the close status / WS exception, and have PumpAsync stop on close and forward error code=upstream_closed message=close status=<X> desc=<Y> to the device. Closes the spin AND gives us the OpenAI close reason.
This commit is contained in:
@@ -13,6 +13,8 @@ public class ScriptedRealtimeUpstream : IRealtimeUpstream
|
||||
Channel.CreateUnbounded<JsonObject>(new UnboundedChannelOptions { SingleWriter = true });
|
||||
|
||||
public IList<JsonObject> Sent { get; } = new List<JsonObject>();
|
||||
public bool IsClosed => _toRelay.Reader.Completion.IsCompleted;
|
||||
public string? CloseReason => IsClosed ? "scripted upstream closed" : null;
|
||||
|
||||
public Task SendJsonAsync(JsonObject envelope, CancellationToken ct)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user