mirror of
https://github.com/farcasclaudiu/openclaw.git
synced 2026-06-28 21:01:43 +03:00
fix: handle 400 status in failover to enable model fallback (#1879)
This commit is contained in:
@@ -15,6 +15,7 @@ Docs: https://docs.openclaw.ai
|
|||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
|
|
||||||
|
- Model failover: treat HTTP 400 errors as failover-eligible, enabling automatic model fallback when providers return bad request errors. (#1879) Thanks @orenyomtov.
|
||||||
- Exec approvals: format forwarded command text as inline/fenced monospace for safer approval scanning across channels. (#11937)
|
- Exec approvals: format forwarded command text as inline/fenced monospace for safer approval scanning across channels. (#11937)
|
||||||
- Config: clamp `maxTokens` to `contextWindow` to prevent invalid model configs. (#5516) Thanks @lailoo.
|
- Config: clamp `maxTokens` to `contextWindow` to prevent invalid model configs. (#5516) Thanks @lailoo.
|
||||||
- Docs: fix language switcher ordering and Japanese locale flag in Mintlify nav. (#12023) Thanks @joshp123.
|
- Docs: fix language switcher ordering and Japanese locale flag in Mintlify nav. (#12023) Thanks @joshp123.
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ describe("failover-error", () => {
|
|||||||
expect(resolveFailoverReasonFromError({ statusCode: "429" })).toBe("rate_limit");
|
expect(resolveFailoverReasonFromError({ statusCode: "429" })).toBe("rate_limit");
|
||||||
expect(resolveFailoverReasonFromError({ status: 403 })).toBe("auth");
|
expect(resolveFailoverReasonFromError({ status: 403 })).toBe("auth");
|
||||||
expect(resolveFailoverReasonFromError({ status: 408 })).toBe("timeout");
|
expect(resolveFailoverReasonFromError({ status: 408 })).toBe("timeout");
|
||||||
|
expect(resolveFailoverReasonFromError({ status: 400 })).toBe("format");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("infers format errors from error messages", () => {
|
it("infers format errors from error messages", () => {
|
||||||
|
|||||||
@@ -160,6 +160,9 @@ export function resolveFailoverReasonFromError(err: unknown): FailoverReason | n
|
|||||||
if (status === 408) {
|
if (status === 408) {
|
||||||
return "timeout";
|
return "timeout";
|
||||||
}
|
}
|
||||||
|
if (status === 400) {
|
||||||
|
return "format";
|
||||||
|
}
|
||||||
|
|
||||||
const code = (getErrorCode(err) ?? "").toUpperCase();
|
const code = (getErrorCode(err) ?? "").toUpperCase();
|
||||||
if (["ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNRESET", "ECONNABORTED"].includes(code)) {
|
if (["ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNRESET", "ECONNABORTED"].includes(code)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user