Commit Graph
6 Commits
Author SHA1 Message Date
Ettore Di Giacinto f45bb1aa41 feat(failover): probe remote targets over HTTP and local ones over gRPC
Remote liveness uses /v1/models, which every OpenAI-compatible upstream
serves. Recovery sends one minimal request for the target's usecase.

Assisted-by: Claude:claude-opus-5-5
2026-09-26 15:55:43 +00:00
Ettore Di Giacinto 86a9597893 feat(failover): schedule liveness and recovery probes
Idle targets get a liveness probe each interval, recovering targets an
inference probe. Cold local targets are never loaded to be probed.

Assisted-by: Claude:claude-opus-5-5
2026-09-26 15:48:05 +00:00
Ettore Di Giacinto b403a8e1c6 fix(failover): emit chain.switched when leaving degraded in place
recomputeLocked only fired the event on an active-target change or on
entering degraded. When the active target itself recovered while every
target was down, the chain silently left degraded with no event, so
SSE/realtime consumers tracking chain.switched.state got stuck on
"degraded".

Assisted-by: Claude:claude-opus-5-5
2026-09-26 15:45:41 +00:00
Ettore Di Giacinto 5601692f55 fix(failover): satisfy lint on the manager package
errcheck flagged two side-effect-only m.Plan calls in tests, and unused
flagged close(), which Task 5's probe scheduler wires in.

Assisted-by: Claude:claude-opus-5-5
2026-09-26 15:41:24 +00:00
Ettore Di Giacinto 929085a030 feat(failover): add chain manager with trip, fail-back and pins
Health is tracked per target and the active target per chain. Fail-back
waits for recovery probes and a minimum time on the fallback.

Assisted-by: Claude:claude-opus-5-5
2026-09-26 15:40:35 +00:00
Ettore Di Giacinto e13e7ea8fa feat(failover): add types and retryable error classification
Assisted-by: Claude:claude-opus-5-5
2026-09-26 15:35:47 +00:00