Relay: log upstream events + forward error envelopes to device for diagnostics
Plan 3 smoke surfaced 'session_ended reason=error' on every wake with no context. The relay now logs every upstream event type at INFO and forwards any upstream 'error' event to the device as 'error code=upstream_<code>' so it appears in the Pi's journal alongside the wake/session_ended pair. Also extends the client's wakeword.predict with per-frame RMS + score diagnostics and the bridge loop with a 5 s heartbeat for triage.
This commit is contained in:
@@ -65,11 +65,15 @@ public class RealtimeSession
|
||||
try
|
||||
{
|
||||
var enabled = _registry.EnabledFor(_cfg.EnabledTools).ToList();
|
||||
_logger.LogInformation(
|
||||
"relay opening session: model={Model} voice={Voice} tools=[{Tools}]",
|
||||
_cfg.Model, _cfg.Voice, string.Join(",", enabled.Select(t => t.Name)));
|
||||
await _upstream.SendJsonAsync(RealtimeEvents.SessionUpdate(_cfg, enabled), ct);
|
||||
|
||||
var ack = await WaitForUpstreamTypeAsync("session.updated", ct);
|
||||
if (ack is null)
|
||||
{
|
||||
_logger.LogWarning("upstream closed before session.updated");
|
||||
_endReason = EndReason.Error;
|
||||
return;
|
||||
}
|
||||
@@ -274,7 +278,25 @@ public class RealtimeSession
|
||||
{
|
||||
var evt = await _upstream.ReceiveJsonAsync(ct);
|
||||
if (evt is null) return null;
|
||||
if ((string?)evt["type"] == type) return evt;
|
||||
var evtType = (string?)evt["type"];
|
||||
_logger.LogInformation("upstream evt={EvtType}", evtType);
|
||||
if (evtType == "error")
|
||||
{
|
||||
var err = evt["error"] as JsonObject;
|
||||
var code = (string?)err?["code"] ?? "unknown";
|
||||
var msg = (string?)err?["message"] ?? evt.ToJsonString();
|
||||
_logger.LogWarning("upstream error code={Code} message={Message}", code, msg);
|
||||
await _output.WriteEnvelopeAsync(new JsonObject
|
||||
{
|
||||
["type"] = "error",
|
||||
["code"] = "upstream_" + code,
|
||||
["message"] = msg,
|
||||
["fatal"] = false,
|
||||
}, ct);
|
||||
_endReason = EndReason.Error;
|
||||
return null;
|
||||
}
|
||||
if (evtType == type) return evt;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user