diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index 8983dda0d..eb110c2cb 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "dcdf97685b6020d89c53980cf0c0d3522f4b77f8", - "syncedAt": "2026-04-25T17:19:49.477Z" + "sha": "80739731dddfea97bb989eaaa75470d708c2d1c7", + "syncedAt": "2026-04-25T17:23:04.197Z" } diff --git a/docs/concepts/model-failover.md b/docs/concepts/model-failover.md index 14a7a859a..55a417117 100644 --- a/docs/concepts/model-failover.md +++ b/docs/concepts/model-failover.md @@ -129,15 +129,18 @@ validation failures) are treated as failover‑worthy and use the same cooldowns OpenAI-compatible stop-reason errors such as `Unhandled stop reason: error`, `stop reason: error`, and `reason: error` are classified as timeout/failover signals. -Provider-scoped generic server text can also land in that timeout bucket when -the source matches a known transient pattern. For example, Anthropic bare -`An unknown error occurred` and JSON `api_error` payloads with transient server -text such as `internal server error`, `unknown error, 520`, `upstream error`, -or `backend error` are treated as failover-worthy timeouts. OpenRouter-specific -generic upstream text such as bare `Provider returned error` is also treated as -timeout only when the provider context is actually OpenRouter. Generic internal -fallback text such as `LLM request failed with an unknown error.` stays -conservative and does not trigger failover by itself. +Generic server text can also land in that timeout bucket when the source matches +a known transient pattern. For example, the bare pi-ai stream-wrapper message +`An unknown error occurred` is treated as failover-worthy for every provider +because pi-ai emits it when provider streams end with `stopReason: "aborted"` or +`stopReason: "error"` without specific details. JSON `api_error` payloads with +transient server text such as `internal server error`, `unknown error, 520`, +`upstream error`, or `backend error` are also treated as failover-worthy +timeouts. +OpenRouter-specific generic upstream text such as bare `Provider returned error` +is treated as timeout only when the provider context is actually OpenRouter. +Generic internal fallback text such as `LLM request failed with an unknown +error.` stays conservative and does not trigger failover by itself. Some provider SDKs may otherwise sleep for a long `Retry-After` window before returning control to OpenClaw. For Stainless-based SDKs such as Anthropic and