docs: def call_with_retry(func: Callable, exceptions, max_retries: int,
                      logger: Logger, *args, **kwargs):
      """Call a function and retry it on failure."""
      attempt = 0
      while True:
          try:
              return func(*args, **kwargs)
          except exceptions as e:
              attempt += 1
              if attempt >= max_retries:
                  raise
  
              delay = exponential_backoff(attempt, cap=60)
              logger.warning('%s: retrying in %s', e, delay)
              time.sleep(delay.total_seconds())