code: def exponential_backoff_retry(
      f, retry_exceptions, initial_retry_delay_s, max_retries
  ) -> None:
      retry_cnt = 0
      retry_delay_s = initial_retry_delay_s
      while True:
          try:
              return f()
          except retry_exceptions as e:
              retry_cnt += 1
              if retry_cnt > max_retries:
                  raise
              logger.exception(
                  f"Retry function call failed due to {e} "
                  f"in {retry_delay_s} seconds..."
              )
              time.sleep(retry_delay_s)
              retry_delay_s *= 2
  
imports: import collections
  import hashlib
  import json
  import os
  import random
  import string
  import subprocess
  import time
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple
  import requests
  from ray_release.logger import logger
label_desc: Use image node_id 12 for calling a global function with example usage: exponential_backoff_retry(f, retry_exceptions, initial_retry_delay_s, max_retries) and returns: f