mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-07 07:11:06 +00:00
* fix: escalate to model fallback after rate-limit profile rotation cap Per-model rate limits (e.g. Anthropic Sonnet-only quotas) are not relieved by rotating auth profiles — if all profiles share the same model quota, cycling between them loops forever without falling back to the next model in the configured fallbacks chain. Apply the same rotation-cap pattern introduced for overloaded_error (#58348) to rate_limit errors: - Add `rateLimitedProfileRotations` to auth.cooldowns config (default: 1) - After N profile rotations on a rate_limit error, throw FailoverError to trigger cross-provider model fallback - Add `resolveRateLimitProfileRotationLimit` helper following the same pattern as `resolveOverloadProfileRotationLimit` Fixes #58572 * fix: cap prompt-side rate-limit failover (#58707) (thanks @Forgely3D) * fix: restore latest-main gates for #58707 --------- Co-authored-by: Ember (Forgely3D) <ember@forgely.co> Co-authored-by: Peter Steinberger <steipete@gmail.com>
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
export type AuthProfileConfig = {
|
|
provider: string;
|
|
/**
|
|
* Credential type expected in auth-profiles.json for this profile id.
|
|
* - api_key: static provider API key
|
|
* - oauth: refreshable OAuth credentials (access+refresh+expires)
|
|
* - token: static bearer-style token (optionally expiring; no refresh)
|
|
*/
|
|
mode: "api_key" | "oauth" | "token";
|
|
email?: string;
|
|
displayName?: string;
|
|
};
|
|
|
|
export type AuthConfig = {
|
|
profiles?: Record<string, AuthProfileConfig>;
|
|
order?: Record<string, string[]>;
|
|
cooldowns?: {
|
|
/** Default billing backoff (hours). Default: 5. */
|
|
billingBackoffHours?: number;
|
|
/** Optional per-provider billing backoff (hours). */
|
|
billingBackoffHoursByProvider?: Record<string, number>;
|
|
/** Billing backoff cap (hours). Default: 24. */
|
|
billingMaxHours?: number;
|
|
/**
|
|
* Failure window for backoff counters (hours). If no failures occur within
|
|
* this window, counters reset. Default: 24.
|
|
*/
|
|
failureWindowHours?: number;
|
|
/**
|
|
* Maximum same-provider auth-profile rotations to allow for overloaded
|
|
* errors before escalating to cross-provider model fallback. Default: 1.
|
|
*/
|
|
overloadedProfileRotations?: number;
|
|
/**
|
|
* Fixed delay before retrying an overloaded provider/profile rotation.
|
|
* Default: 0.
|
|
*/
|
|
overloadedBackoffMs?: number;
|
|
/**
|
|
* Maximum same-provider auth-profile rotations to allow for rate-limit
|
|
* errors before escalating to cross-provider model fallback. Default: 1.
|
|
*/
|
|
rateLimitedProfileRotations?: number;
|
|
};
|
|
};
|