Repository navigation
Weir rounds wait out the public API's rate limit instead of skipping models - #88
Merged
Merged
Conversation
…models The 2026-10-22 rounds through Ephemeris scored only chronos2: the account's burst (20 forecasts, then 10/min) ran out and every later row was skipped on its first 429, because the client treated all 4xx as contract errors. A 429 now waits Retry-After and retries without spending `retries`, up to `rate_limit_wait` (15 min) per call; the forecast keeps its idempotency key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FAm6t3mTkhrKZKke8GzULi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Both 2026-10-22 rounds through the public Ephemeris API scored only chronos2 from the panel:
The public API limits each account to 10 forecasts/min with a burst of 20. A round sends ~25 requests per model, so the burst ran out after chronos2.
_calltreated every 4xx as a contract error and never retried, so the remaining models were each skipped on their first 429.Change: a 429 now waits
Retry-After(clamped 1–120 s, default 6 s) and retries. These waits don't count againstretries, and each call can wait at mostrate_limit_wait(15 min) in total. Rejected requests are not charged, and a forecast reuses its idempotency key across attempts. The transport may return response headers as an optional third element, so existing 2-tuple test transports are unchanged.Cost: about 225 requests per round at 10/min adds roughly 20–25 min. Runs take about 70 min against the 240 min job timeout.
Tests: two new cases (Retry-After honoured with the same key; gives up after the wait budget).
tests/test_paracast_client.pyandtests/test_publish_round.pypass.🤖 Generated with Claude Code
https://claude.ai/code/session_01FAm6t3mTkhrKZKke8GzULi