From 7001ced694da1078c34f0edbff9ac20c103502ed Mon Sep 17 00:00:00 2001 From: Will Miao Date: Sat, 13 Jun 2026 18:01:13 +0800 Subject: [PATCH] fix(rate-limit): respect server retry_after instead of capping at 30s --- py/services/model_metadata_provider.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/py/services/model_metadata_provider.py b/py/services/model_metadata_provider.py index 754a0696..abf87b78 100644 --- a/py/services/model_metadata_provider.py +++ b/py/services/model_metadata_provider.py @@ -81,7 +81,11 @@ class _RateLimitRetryHelper: def _calculate_delay(self, retry_after: Optional[float], attempt: int) -> float: if retry_after is not None: - return min(self._max_delay, max(0.0, retry_after)) + # Cap at 1800s (30 min) as a safety ceiling. The old 30s cap was + # too low — CivArchive can return retry_after ~1500s, causing all + # retries to fail. A generous ceiling protects against pathological + # server values while still respecting the server's guidance. + return min(1800.0, max(0.0, retry_after)) base_delay = self._base_delay * (2 ** max(0, attempt - 1)) jitter_span = base_delay * self._jitter_ratio