Spaces:
Sleeping
Sleeping
Add 10s delay between provider fallbacks after rate limit (429)
Browse filesWhen a provider returns 429 rate limit error, wait 10 seconds
before trying the next provider in the cascade. This prevents
rapid-fire requests that trigger rate limits on all providers.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- src/llm_client.py +13 -0
src/llm_client.py
CHANGED
|
@@ -68,8 +68,15 @@ class LLMClient:
|
|
| 68 |
"""
|
| 69 |
errors = []
|
| 70 |
providers_failed = []
|
|
|
|
| 71 |
|
| 72 |
for provider in self.providers:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
print(f"Attempting LLM call with {provider['name']}...")
|
| 74 |
start_time = time.perf_counter()
|
| 75 |
|
|
@@ -91,11 +98,17 @@ class LLMClient:
|
|
| 91 |
errors.append(f"{provider['name']}: {error}")
|
| 92 |
providers_failed.append({"name": provider['name'], "error": error})
|
| 93 |
print(f"Provider {provider['name']} failed: {error}")
|
|
|
|
|
|
|
|
|
|
| 94 |
|
| 95 |
except Exception as e:
|
| 96 |
errors.append(f"{provider['name']}: {str(e)}")
|
| 97 |
providers_failed.append({"name": provider['name'], "error": str(e)})
|
| 98 |
print(f"Provider {provider['name']} exception: {e}")
|
|
|
|
|
|
|
|
|
|
| 99 |
|
| 100 |
return None, None, f"All LLM providers failed: {'; '.join(errors)}", providers_failed
|
| 101 |
|
|
|
|
| 68 |
"""
|
| 69 |
errors = []
|
| 70 |
providers_failed = []
|
| 71 |
+
last_was_rate_limited = False
|
| 72 |
|
| 73 |
for provider in self.providers:
|
| 74 |
+
# Add delay before trying next provider if previous one was rate limited
|
| 75 |
+
if last_was_rate_limited:
|
| 76 |
+
print(f"Waiting 10s before trying {provider['name']} (rate limit cooldown)...")
|
| 77 |
+
time.sleep(10)
|
| 78 |
+
last_was_rate_limited = False
|
| 79 |
+
|
| 80 |
print(f"Attempting LLM call with {provider['name']}...")
|
| 81 |
start_time = time.perf_counter()
|
| 82 |
|
|
|
|
| 98 |
errors.append(f"{provider['name']}: {error}")
|
| 99 |
providers_failed.append({"name": provider['name'], "error": error})
|
| 100 |
print(f"Provider {provider['name']} failed: {error}")
|
| 101 |
+
# Check if this was a rate limit error
|
| 102 |
+
if error and "429" in str(error):
|
| 103 |
+
last_was_rate_limited = True
|
| 104 |
|
| 105 |
except Exception as e:
|
| 106 |
errors.append(f"{provider['name']}: {str(e)}")
|
| 107 |
providers_failed.append({"name": provider['name'], "error": str(e)})
|
| 108 |
print(f"Provider {provider['name']} exception: {e}")
|
| 109 |
+
# Check if this was a rate limit error
|
| 110 |
+
if "429" in str(e):
|
| 111 |
+
last_was_rate_limited = True
|
| 112 |
|
| 113 |
return None, None, f"All LLM providers failed: {'; '.join(errors)}", providers_failed
|
| 114 |
|