增强 Codex 用量读取重试

This commit is contained in:
Codex 2026-06-24 11:03:45 +08:00
parent 2ab6a4e4b0
commit 704f8a4e5d

View File

@ -548,12 +548,13 @@ class CodexRateLimitReader:
if now < self.next_refresh: if now < self.next_refresh:
return self.cached return self.cached
self.next_refresh = now + self.refresh_seconds
if not self._ensure_started(): if not self._ensure_started():
self.next_refresh = now + min(10.0, self.refresh_seconds)
return self.cached return self.cached
request_id = self._send("account/rateLimits/read") request_id = self._send("account/rateLimits/read")
if request_id is None: if request_id is None:
self.next_refresh = now + min(10.0, self.refresh_seconds)
return self.cached return self.cached
message = self._wait_for(request_id, 8.0) message = self._wait_for(request_id, 8.0)
@ -561,8 +562,10 @@ class CodexRateLimitReader:
rate_limits = result.get("rateLimits") if isinstance(result, dict) else None rate_limits = result.get("rateLimits") if isinstance(result, dict) else None
if not isinstance(rate_limits, dict): if not isinstance(rate_limits, dict):
self._stop() self._stop()
self.next_refresh = now + min(10.0, self.refresh_seconds)
return self.cached return self.cached
self.next_refresh = now + self.refresh_seconds
primary = rate_limits.get("primary") or {} primary = rate_limits.get("primary") or {}
secondary = rate_limits.get("secondary") or {} secondary = rate_limits.get("secondary") or {}
reset_credits = result.get("rateLimitResetCredits") or {} reset_credits = result.get("rateLimitResetCredits") or {}
@ -624,20 +627,23 @@ class CodexRateLimitReader:
if now < self.next_usage_refresh: if now < self.next_usage_refresh:
return self.usage_cached return self.usage_cached
self.next_usage_refresh = now + self.usage_refresh_seconds
if not self._ensure_started(): if not self._ensure_started():
self.next_usage_refresh = now + min(15.0, self.usage_refresh_seconds)
return self.usage_cached return self.usage_cached
request_id = self._send("account/usage/read") request_id = self._send("account/usage/read")
if request_id is None: if request_id is None:
self.next_usage_refresh = now + min(15.0, self.usage_refresh_seconds)
return self.usage_cached return self.usage_cached
message = self._wait_for(request_id, 8.0) message = self._wait_for(request_id, 8.0)
result = message.get("result") if message else None result = message.get("result") if message else None
buckets = result.get("dailyUsageBuckets") if isinstance(result, dict) else None buckets = result.get("dailyUsageBuckets") if isinstance(result, dict) else None
if not isinstance(buckets, list) or not buckets: if not isinstance(buckets, list) or not buckets:
self.next_usage_refresh = now + min(15.0, self.usage_refresh_seconds)
return self.usage_cached return self.usage_cached
self.next_usage_refresh = now + self.usage_refresh_seconds
self.usage_cached = self._daily_bars_from_buckets(buckets) self.usage_cached = self._daily_bars_from_buckets(buckets)
return self.usage_cached return self.usage_cached