in neuron-explainer/neuron_explainer/api_client.py [0:0]
def decorate(f: Callable) -> Callable:
assert asyncio.iscoroutinefunction(f)
@wraps(f)
async def f_retry(*args: Any, **kwargs: Any) -> None:
delay_s = init_delay_s
for i in range(max_tries):
try:
return await f(*args, **kwargs)
except Exception as err:
if not retry_on(err) or i == max_tries - 1:
raise
jittered_delay = random.uniform(delay_s * (1 - jitter), delay_s * (1 + jitter))
await asyncio.sleep(jittered_delay)
delay_s = min(delay_s * backoff_multiplier, max_delay_s)
return f_retry