fix: 延长 Sub2API 错误冷却时间
This commit is contained in:
@@ -41,9 +41,6 @@ if (parsed.pool?.defaultTempUnschedulable?.enabled === true) {
|
||||
assertCondition(rules.every((rule) => Number.isInteger(rule.statusCode) && (rule.statusCode ?? 0) >= 100 && (rule.statusCode ?? 0) <= 599), "temporary unschedulable rules must declare valid HTTP status codes", rules);
|
||||
assertCondition(rules.every((rule) => Array.isArray(rule.keywords) && rule.keywords.length > 0), "temporary unschedulable rules must declare non-empty keywords", rules);
|
||||
assertCondition(rules.every((rule) => Number.isInteger(rule.durationMinutes) && (rule.durationMinutes ?? 0) > 0), "temporary unschedulable rules must declare positive cooldown durations", rules);
|
||||
const gateway502Rule = rules.find((rule) => rule.statusCode === 502);
|
||||
const gateway502Keywords = new Set((gateway502Rule?.keywords ?? []).map((keyword) => keyword.toLowerCase()));
|
||||
assertCondition(gateway502Keywords.has("bad gateway") && gateway502Keywords.has("upstream request failed"), "502 temporary-unschedulable rule must catch generic gateway failures", gateway502Rule);
|
||||
}
|
||||
assertCondition(typeof parsed.localCodex?.responsesSmokeModel === "string" && parsed.localCodex.responsesSmokeModel.length > 0, "localCodex.responsesSmokeModel must be declared for Responses smoke validation", parsed.localCodex);
|
||||
|
||||
@@ -54,7 +51,6 @@ console.log(JSON.stringify({
|
||||
"pool owner concurrency covers the YAML account capacity set",
|
||||
"optional WebSocket mode overrides use supported values",
|
||||
"temporary unschedulable rules are structurally valid when enabled",
|
||||
"generic 502 gateway failures cool down the selected account",
|
||||
"Responses smoke model is YAML-declared",
|
||||
],
|
||||
}));
|
||||
|
||||
@@ -646,44 +646,44 @@ export function defaultCodexTempUnschedulablePolicy(): CodexTempUnschedulablePol
|
||||
{
|
||||
statusCode: 401,
|
||||
keywords: ["unauthorized", "invalid api key", "invalid_api_key", "authentication"],
|
||||
durationMinutes: 30,
|
||||
description: "Credential/auth failures should leave the scheduler quickly and retry after a cooldown.",
|
||||
durationMinutes: 120,
|
||||
description: "Credential/auth failures should leave the scheduler quickly and retry after a two-hour cooldown.",
|
||||
},
|
||||
{
|
||||
statusCode: 403,
|
||||
keywords: ["forbidden", "access denied", "quota", "billing", "capacity"],
|
||||
durationMinutes: 30,
|
||||
description: "Permission, quota, or account-state failures should fail over to another account.",
|
||||
durationMinutes: 120,
|
||||
description: "Permission, quota, or account-state failures should fail over to another account for at least two hours.",
|
||||
},
|
||||
{
|
||||
statusCode: 429,
|
||||
keywords: ["capacity", "rate limit", "rate_limit", "quota", "too many requests", "overloaded", "resource_exhausted"],
|
||||
durationMinutes: 10,
|
||||
description: "Capacity and rate-limit responses should cool down this account and use another account.",
|
||||
durationMinutes: 120,
|
||||
description: "Capacity and rate-limit responses should cool down this account for at least two hours and use another account.",
|
||||
},
|
||||
{
|
||||
statusCode: 500,
|
||||
keywords: ["capacity", "overloaded", "temporarily unavailable", "temporary", "upstream"],
|
||||
durationMinutes: 5,
|
||||
description: "Transient upstream server failures should prefer another account for a short period.",
|
||||
durationMinutes: 120,
|
||||
description: "Transient upstream server failures should prefer another account for at least two hours.",
|
||||
},
|
||||
{
|
||||
statusCode: 502,
|
||||
keywords: ["capacity", "overloaded", "temporarily unavailable", "temporary", "upstream", "bad gateway", "upstream request failed", "websocket dial", "handshake response"],
|
||||
durationMinutes: 5,
|
||||
description: "Gateway upstream failures should prefer another account for a short period.",
|
||||
durationMinutes: 120,
|
||||
description: "Gateway upstream failures should prefer another account for at least two hours.",
|
||||
},
|
||||
{
|
||||
statusCode: 503,
|
||||
keywords: ["capacity", "overloaded", "temporarily unavailable", "temporary", "upstream"],
|
||||
durationMinutes: 5,
|
||||
description: "Service unavailable responses should prefer another account for a short period.",
|
||||
durationMinutes: 120,
|
||||
description: "Service unavailable responses should prefer another account for at least two hours.",
|
||||
},
|
||||
{
|
||||
statusCode: 529,
|
||||
keywords: ["capacity", "overloaded", "temporarily unavailable", "temporary"],
|
||||
durationMinutes: 10,
|
||||
description: "Provider overloaded responses should cool down this account and use another account.",
|
||||
durationMinutes: 120,
|
||||
description: "Provider overloaded responses should cool down this account for at least two hours and use another account.",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user