code: def extract_instance_attr_doc(cls, attr):
      code = inspect.getsource(cls.__init__)
      lines = [line.strip() for line in code.split("\n")]
      i = None
      for i, line in enumerate(lines):  # noqa: B007
          if line.startswith("self." + attr + ":") or line.startswith(
              "self." + attr + " ="
          ):
              break
      if i is None:
          raise NameError(f"Could not find {attr} in {cls.__name__}")
      start_line = lines.index('"""', i)
      end_line = lines.index('"""', start_line + 1)
      for j in range(i + 1, start_line):
          if lines[j].startswith("self."):
              raise ValueError(
                  f"Found another attribute before docstring for {attr} in {cls.__name__}: "
                  + lines[j]
                  + "\n start:"
                  + lines[i]
              )
      doc_string = " ".join(lines[start_line + 1 : end_line])
      return doc_string
  
file_path: gradio/client/python/gradio_client/documentation.py
imports: from __future__ import annotations
  import inspect
  from typing import Callable
label_desc: Use image node_id 2 for calling a global function with example usage: extract_instance_attr_doc(cls, attr) and returns: doc_string