code: def coroutine_timeout(seconds):
      def decorator(func):
          @wraps(func)
          async def wrapper(*args, **kwargs):
              try:
                  if asyncio.iscoroutinefunction(func):
                      return await asyncio.wait_for(
                          func(*args, **kwargs), timeout=seconds
                      )
                  else:
                      raise TypeError(
                          f"Function {func.__name__} is not a coroutine function"
                      )
              except asyncio.TimeoutError:
                  raise_timeout_error(seconds)
  
          return wrapper
  
      return decorator
  
file_path: fiftyone/fiftyone/operators/decorators.py
imports: import asyncio
  from cachetools.keys import hashkey
  from contextlib import contextmanager
  from functools import wraps
  import signal
  import os
  import fiftyone
  from fiftyone.plugins.core import _iter_plugin_metadata_files
label_desc: Use image node_id 1 for calling a global function with example usage: coroutine_timeout(seconds) and returns: decorator, wrapper, unknown