Will Miao
034660d8c4
feat(downloads): return structured 429 rate-limit responses with retry_after
...
On a CivitAI/CivArchive 429, download-model and download-model-get now
return HTTP 429 with {"reason": "rate_limited", "retry_after": N}
instead of a generic 500 string, and the queue row goes back to
"queued" rather than history as failed — so queue drivers can
auto-pause and retry later instead of burning through the queue.
- new DownloadRateLimitError carrying retry_after/host (opt-in via
raise_on_rate_limit on Downloader; other call sites keep the legacy
string behavior)
- fail-fast pre-flight gate in DownloadManager consults
RateLimitCoordinator before acquiring the semaphore slot: hosts in
cooldown get an immediate structured 429, no HTTP request attempted
- best-effort 429 detection for the aria2 backend
2026-10-02 21:16:06 +08:00
..
2026-09-28 21:25:48 +08:00
2026-09-02 14:33:44 +08:00
2026-09-14 21:24:57 +08:00
2026-09-25 18:44:06 +08:00
2026-09-01 21:14:30 +08:00
2026-08-08 20:12:59 +08:00
2026-08-08 20:12:59 +08:00
2026-09-14 20:39:10 +08:00
2026-09-25 23:29:30 +08:00
2026-09-29 07:20:12 +08:00
2026-08-08 20:12:59 +08:00
2026-03-18 21:10:56 +08:00
2026-09-28 21:11:38 +08:00
2026-08-08 20:12:59 +08:00
2026-08-08 20:12:59 +08:00
2026-10-01 08:55:47 +08:00
2026-08-08 20:12:59 +08:00
2026-08-27 07:58:48 +08:00
2026-08-08 20:12:59 +08:00
2026-09-06 22:23:48 +08:00
2026-08-28 22:24:07 +08:00
2026-09-15 09:07:56 +08:00
2026-08-27 07:58:48 +08:00
2026-04-20 15:54:30 +08:00
2025-10-13 21:30:23 +08:00
2026-09-19 09:04:24 +08:00
2026-08-08 15:20:43 +08:00
2026-10-02 10:34:59 +08:00
2026-10-02 21:16:06 +08:00
2026-10-02 21:16:06 +08:00
2026-09-13 11:30:57 +08:00
2026-08-25 08:19:54 +08:00
2026-10-02 10:34:59 +08:00
2026-08-25 17:38:09 +08:00
2026-03-26 18:00:04 +08:00
2026-10-02 21:16:06 +08:00
2026-02-03 21:32:15 +08:00
2026-08-08 20:12:59 +08:00
2026-08-08 20:12:59 +08:00
2026-09-12 15:56:47 +08:00
2026-04-12 20:29:01 +08:00
2026-08-08 20:12:59 +08:00
2026-08-08 20:12:59 +08:00
2026-08-08 20:12:59 +08:00
2026-09-14 10:27:33 +08:00
2026-09-19 05:49:01 +08:00
2026-05-26 06:02:17 +08:00
2025-11-29 08:13:55 +08:00
2026-08-08 20:12:59 +08:00
2026-09-16 08:23:13 +08:00
2025-10-18 21:19:09 +08:00
2026-08-19 17:51:31 +08:00
2026-09-26 12:07:03 +08:00
2026-09-01 21:14:30 +08:00
2026-09-19 09:04:24 +08:00
2026-09-06 22:23:48 +08:00
2026-08-23 10:09:55 +08:00
2026-08-08 20:12:59 +08:00
2026-08-08 20:12:59 +08:00
2026-02-02 08:30:59 +08:00
2026-10-01 08:55:47 +08:00
2026-09-25 23:29:30 +08:00
2025-10-11 22:42:24 +08:00
2026-08-03 15:02:49 +08:00
2026-09-25 23:29:30 +08:00
2026-08-25 20:36:46 +08:00
2026-09-17 07:47:07 +08:00
2026-08-08 20:12:59 +08:00
2026-09-13 07:59:28 +08:00
2026-08-27 19:32:17 +08:00
2026-08-08 20:12:59 +08:00
2026-09-18 00:05:47 +08:00
2026-09-25 23:29:30 +08:00
2026-08-08 20:12:59 +08:00
2026-08-27 10:08:32 +08:00
2026-09-18 00:09:34 +08:00
2026-08-31 10:01:18 +08:00
2026-01-22 10:25:03 +08:00
2026-08-30 16:28:41 +08:00
2026-08-24 17:23:20 +08:00
2026-08-27 19:32:17 +08:00
2026-08-25 17:38:17 +08:00
2026-09-13 07:59:28 +08:00
2026-09-29 09:03:26 +08:00
2025-10-24 15:17:12 +08:00
2026-09-15 09:07:56 +08:00
2026-09-02 22:01:44 +08:00
2026-08-08 20:12:59 +08:00
2026-08-08 20:12:59 +08:00
2026-09-12 11:25:51 +08:00
2026-08-08 20:12:59 +08:00
2026-10-02 09:58:01 +08:00
2026-07-04 14:06:50 +08:00
2026-08-08 20:12:59 +08:00
2026-05-20 22:48:44 +08:00
2026-02-05 22:36:30 +08:00
2026-10-01 10:16:34 +08:00
2026-09-05 16:56:20 +08:00
2026-07-26 18:33:31 +08:00