# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.

import os
import sys
import datetime
import shutil

sys.path.insert(0, os.path.abspath("../../cleanlab"))

# doctest setup
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here.
import pathlib

sys.path.insert(0, pathlib.Path(__file__).parents[2].resolve().as_posix())

# Open Graph extension
ogp_site_url = "https://docs.cleanlab.ai"
ogp_image = (
    "https://raw.githubusercontent.com/cleanlab/assets/master/cleanlab/clos-preview-card.png"
)


# -- Project information -----------------------------------------------------

project = "cleanlab"
copyright = f"{datetime.datetime.now().year}, Cleanlab Inc."
author = "Cleanlab Inc."

# -- General configuration ---------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
    "sphinx.ext.napoleon",
    "nbsphinx",
    "sphinx.ext.autodoc",
    "autodocsumm",
    "sphinx.ext.viewcode",
    "sphinx.ext.todo",
    "sphinx_tabs.tabs",
    "sphinx_multiversion",
    "sphinx_copybutton",
    "sphinxcontrib.katex",
    "sphinxcontrib.gtagjs",
    "sphinx_autodoc_typehints",
    "sphinx.ext.doctest",
    "sphinxext.opengraph",
]

numpy_show_class_members = True

# Don't add .txt suffix to source files:
html_sourcelink_suffix = ""

# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ["_build"]

autosummary_generate = True

# set the default role of `name` to make cross references
default_role = "py:obj"

# -- Options for apidoc extension ----------------------------------------------

# apidoc_module_dir = "cleanlab/cleanlab"

# -- Options for todo extension ----------------------------------------------

# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True


# -- Options for Napoleon extension -------------------------------------------

napoleon_google_docstring = False
napoleon_numpy_docstring = True
napoleon_include_init_with_doc = False
napoleon_include_private_with_doc = False
napoleon_include_special_with_doc = True
napoleon_use_admonition_for_examples = False
napoleon_use_admonition_for_notes = False
napoleon_use_admonition_for_references = False
napoleon_use_ivar = False
napoleon_use_param = True
napoleon_use_rtype = False
napoleon_preprocess_types = True
napoleon_type_aliases = None
napoleon_attr_annotations = True

# -- Options for autodoc extension -------------------------------------------

# This value selects what content will be inserted into the main body of an autoclass
# directive
#
# http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#directive-autoclass
autoclass_content = "class"


# Default options to an ..autoXXX directive.
autodoc_default_options = {
    "autosummary": True,
    "members": None,
    "inherited-members": None,
    "show-inheritance": None,
    "special-members": "__call__",
}

# Subclasses should show parent classes docstrings if they don't override them.
autodoc_inherit_docstrings = True

# Order functions displayed by the order of source code
autodoc_member_order = "bysource"

# -- Options for copybutton extension -----------------------------------------

# Strip input prompts when copying code blocks. Supports:
# - Python Repl + continuation prompt
# - Bash prompt
# - ipython + continuation prompt
# - jupyter-console + continuation prompt
copybutton_prompt_text = r">>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: "
copybutton_prompt_is_regexp = True

# -- Options for katex extension -------------------------------------------

if os.getenv("CI") or shutil.which("katex") is not None:
    # requires that the machine have `katex` installed: `npm install -g katex`
    katex_prerender = True

# -- Options for gtagjs extension -------------------------------------------

gtagjs_ids = ["G-EV8RVEFX82"]

# -- Variables Setting ---------------------------------------------------

# Determine doc site URL (DOCS_SITE_URL)
# Check if it's running in production repo
if os.getenv("GITHUB_REPOSITORY") == "cleanlab/cleanlab":
    DOCS_SITE_URL = "/"
else:
    DOCS_SITE_URL = "/cleanlab-docs/"

gh_env_file = os.getenv("GITHUB_ENV")
if gh_env_file is not None:
    with open(gh_env_file, "a") as f:
        f.write(f"\nDOCS_SITE_URL={DOCS_SITE_URL}")  # Set to Environment Var

GITHUB_REPOSITORY_OWNER = os.getenv("GITHUB_REPOSITORY_OWNER") or "cleanlab"
GITHUB_REF_NAME = os.getenv("GITHUB_REF_NAME") or "master"

# Pass additional variables to Jinja templates
html_context = {
    "DOCS_SITE_URL": DOCS_SITE_URL,
    # Add new tags to RELEASE_VERSIONS before release
    # fmt: off
    "RELEASE_VERSIONS": [
        "v2.6.0",
        "v2.5.0",
        "v2.4.0",
        "v2.3.1",
        "v2.3.0",
        "v2.2.0",
        "v2.1.0",
        "v2.0.0",
        "v1.0.1",
    ],
    # fmt: on
}

# -- nbsphinx Configuration ---------------------------------------------------

# This is processed by Jinja2 and inserted before each notebook
nbsphinx_prolog = (
    """
{% set docname = env.doc2path(env.docname, base=None) %}

.. raw:: html

    <style>
        .nbinput .prompt,
        .nboutput .prompt {
            display: none;
        }

        .output_area {
            max-height: 300px;
            overflow: auto;
        }

        .dataframe {
            background: #D7D7D7;
        }

        th {
            color:black;
        }
    </style>

    <script type="text/javascript">
        window.addEventListener('load', () => {
            const h1_element = document.getElementsByTagName("h1");
            h1_element[0].insertAdjacentHTML("afterend", `
            <p>
                <a style="background-color:white;color:black;padding:4px 12px;text-decoration:none;display:inline-block;border-radius:8px;box-shadow:0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 3px 10px 0 rgba(0, 0, 0, 0.19)" href="https://colab.research.google.com/github/"""
    + GITHUB_REPOSITORY_OWNER
    + """/cleanlab-docs/blob/master/"""
    + GITHUB_REF_NAME
    + """/{{ docname|e }}" target="_blank">
                <img src="https://colab.research.google.com/img/colab_favicon_256px.png" alt="" style="width:40px;height:40px;vertical-align:middle">
                <span style="vertical-align:middle">Run in Google Colab</span>
                </a>
            </p>
            `);
        })

    </script>
"""
)

# Change this to "always" before running in the doc's CI/CD server
if os.getenv("CI"):
    nbsphinx_execute = "always"
if os.getenv("SKIP_NOTEBOOKS", "0") != "0":
    nbsphinx_execute = "never"

# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
#
html_theme = "furo"
html_favicon = "https://raw.githubusercontent.com/cleanlab/assets/a4483476d449f2f05a4c7cde329e72358099cc07/cleanlab/cleanlab_favicon.svg"
html_title = "cleanlab"
html_logo = (
    "https://raw.githubusercontent.com/cleanlab/assets/master/cleanlab/cleanlab_logo_only.png"
)
html_theme_options = {
    "footer_icons": [
        {
            "name": "GitHub",
            "url": "https://github.com/cleanlab/cleanlab",
            "html": """
                <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
                    <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
                </svg>
            """,
            "class": "",
        },
    ],
}

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ["_static"]

html_css_files = ["css/custom.css"]

html_sidebars = {
    "**": [
        "brand.html",
        "sidebar/search.html",
        "sidebar/scroll-start.html",
        "sidebar/navigation.html",
        "sidebar/ethical-ads.html",
        "versioning.html",
        "sidebar/scroll-end.html",
    ],
}

docs/source/conf.py
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.

import os
import sys
import datetime
import shutil

sys.path.insert(0, os.path.abspath("../../cleanlab"))

# doctest setup
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here.
import pathlib

sys.path.insert(0, pathlib.Path(__file__).parents[2].resolve().as_posix())

# Open Graph extension
ogp_site_url = "https://docs.cleanlab.ai"
ogp_image = (
    "https://raw.githubusercontent.com/cleanlab/assets/master/cleanlab/clos-preview-card.png"
)


# -- Project information -----------------------------------------------------

project = "cleanlab"
copyright = f"{datetime.datetime.now().year}, Cleanlab Inc."
author = "Cleanlab Inc."

# -- General configuration ---------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
    "sphinx.ext.napoleon",
    "nbsphinx",
    "sphinx.ext.autodoc",
    "autodocsumm",
    "sphinx.ext.viewcode",
    "sphinx.ext.todo",
    "sphinx_tabs.tabs",
    "sphinx_multiversion",
    "sphinx_copybutton",
    "sphinxcontrib.katex",
    "sphinxcontrib.gtagjs",
    "sphinx_jinja",
    "sphinx_autodoc_typehints",
    "sphinx.ext.doctest",
    "sphinxext.opengraph",
]

numpy_show_class_members = True

# Don't add .txt suffix to source files:
html_sourcelink_suffix = ""

# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ["_build"]

autosummary_generate = True

# set the default role of `name` to make cross references
default_role = "py:obj"

# -- Options for apidoc extension ----------------------------------------------

# apidoc_module_dir = "cleanlab/cleanlab"

# -- Options for todo extension ----------------------------------------------

# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True


# -- Options for Napoleon extension -------------------------------------------

napoleon_google_docstring = False
napoleon_numpy_docstring = True
napoleon_include_init_with_doc = False
napoleon_include_private_with_doc = False
napoleon_include_special_with_doc = True
napoleon_use_admonition_for_examples = False
napoleon_use_admonition_for_notes = False
napoleon_use_admonition_for_references = False
napoleon_use_ivar = False
napoleon_use_param = True
napoleon_use_rtype = False
napoleon_preprocess_types = True
napoleon_type_aliases = None
napoleon_attr_annotations = True

# -- Options for autodoc extension -------------------------------------------

# This value selects what content will be inserted into the main body of an autoclass
# directive
#
# http://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#directive-autoclass
autoclass_content = "class"


# Default options to an ..autoXXX directive.
autodoc_default_options = {
    "autosummary": True,
    "members": None,
    "inherited-members": None,
    "show-inheritance": None,
    "special-members": "__call__",
}

# Subclasses should show parent classes docstrings if they don't override them.
autodoc_inherit_docstrings = True

# Order functions displayed by the order of source code
autodoc_member_order = "bysource"

# -- Options for copybutton extension -----------------------------------------

# Strip input prompts when copying code blocks. Supports:
# - Python Repl + continuation prompt
# - Bash prompt
# - ipython + continuation prompt
# - jupyter-console + continuation prompt
copybutton_prompt_text = r">>> |\.\.\. |\$ |In \[\d*\]: | {2,5}\.\.\.: | {5,8}: "
copybutton_prompt_is_regexp = True

# -- Options for katex extension -------------------------------------------

if os.getenv("CI") or shutil.which("katex") is not None:
    # requires that the machine have `katex` installed: `npm install -g katex`
    katex_prerender = True

# -- Options for gtagjs extension -------------------------------------------

gtagjs_ids = ["G-EV8RVEFX82"]

# -- Variables Setting ---------------------------------------------------

# Determine doc site URL (DOCS_SITE_URL)
# Check if it's running in production repo
if os.getenv("GITHUB_REPOSITORY") == "cleanlab/cleanlab":
    DOCS_SITE_URL = "/"
else:
    DOCS_SITE_URL = "/cleanlab-docs/"

gh_env_file = os.getenv("GITHUB_ENV")
if gh_env_file is not None:
    with open(gh_env_file, "a") as f:
        f.write(f"\nDOCS_SITE_URL={DOCS_SITE_URL}")  # Set to Environment Var

GITHUB_REPOSITORY_OWNER = os.getenv("GITHUB_REPOSITORY_OWNER") or "cleanlab"
GITHUB_REF_NAME = os.getenv("GITHUB_REF_NAME") or "master"

# Pass additional variables to Jinja templates
html_context = {
    "DOCS_SITE_URL": DOCS_SITE_URL,
    # Add new tags to RELEASE_VERSIONS before release
    # fmt: off
    "RELEASE_VERSIONS": [
        "v2.6.0",
        "v2.5.0",
        "v2.4.0",
        "v2.3.1",
        "v2.3.0",
        "v2.2.0",
        "v2.1.0",
        "v2.0.0",
        "v1.0.1",
    ],
    # fmt: on
}

# -- nbsphinx Configuration ---------------------------------------------------

# This is processed by Jinja2 and inserted before each notebook
nbsphinx_prolog = (
    """
{% set docname = env.doc2path(env.docname, base=None) %}

.. raw:: html

    <style>
        .nbinput .prompt,
        .nboutput .prompt {
            display: none;
        }

        .output_area {
            max-height: 300px;
            overflow: auto;
        }

        .dataframe {
            background: #D7D7D7;
        }

        th {
            color:black;
        }
    </style>

    <script type="text/javascript">
        window.addEventListener('load', () => {
            const h1_element = document.getElementsByTagName("h1");
            h1_element[0].insertAdjacentHTML("afterend", `
            <p>
                <a style="background-color:white;color:black;padding:4px 12px;text-decoration:none;display:inline-block;border-radius:8px;box-shadow:0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 3px 10px 0 rgba(0, 0, 0, 0.19)" href="https://colab.research.google.com/github/"""
    + GITHUB_REPOSITORY_OWNER
    + """/cleanlab-docs/blob/master/"""
    + GITHUB_REF_NAME
    + """/{{ docname|e }}" target="_blank">
                <img src="https://colab.research.google.com/img/colab_favicon_256px.png" alt="" style="width:40px;height:40px;vertical-align:middle">
                <span style="vertical-align:middle">Run in Google Colab</span>
                </a>
            </p>
            `);
        })

    </script>
"""
)

# Change this to "always" before running in the doc's CI/CD server
if os.getenv("CI"):
    nbsphinx_execute = "always"
if os.getenv("SKIP_NOTEBOOKS", "0") != "0":
    nbsphinx_execute = "never"

# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
#
html_theme = "furo"
html_favicon = "https://raw.githubusercontent.com/cleanlab/assets/a4483476d449f2f05a4c7cde329e72358099cc07/cleanlab/cleanlab_favicon.svg"
html_title = "cleanlab"
html_logo = (
    "https://raw.githubusercontent.com/cleanlab/assets/master/cleanlab/cleanlab_logo_only.png"
)
html_theme_options = {
    "footer_icons": [
        {
            "name": "GitHub",
            "url": "https://github.com/cleanlab/cleanlab",
            "html": """
                <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16">
                    <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
                </svg>
            """,
            "class": "",
        },
    ],
}

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ["_static"]

html_css_files = ["css/custom.css"]

html_sidebars = {
    "**": [
        "brand.html",
        "sidebar/search.html",
        "sidebar/scroll-start.html",
        "sidebar/navigation.html",
        "sidebar/ethical-ads.html",
        "versioning.html",
        "sidebar/scroll-end.html",
    ],
}

docs/source/conf.py
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index 4a43c93cf6..720aeb21dd 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -239,9 +239,13 @@ To contribute a new type of issue that Datalab can automatically detect in any d
 Do not add your new issue type to the set of issues that Datalab detects by default, our team can add it to this default set later on once it's utility has been thoroughly validated.
 
 Don't forget to update the [issue type descriptions guide](https://github.com/cleanlab/cleanlab/blob/master/docs/source/cleanlab/datalab/guide/issue_type_description.rst) with a brief description of your new issue type.
+It is ideal to stick to a format that maintains consistency and readability.
+Generally, the format includes a title, explanation of the issue, required arguments, then any additional information.
+It would be helpful to include a tip for users on how to detect the issue using Datalab.
 
 Try to add tests for this new issue type. It's a good idea to start with some tests in a separate module in the [issue manager test directory](https://github.com/cleanlab/cleanlab/tree/master/tests/datalab/issue_manager). 
 
+
 ## Documentation
 
 You can build the docs from your local cleanlab version by following [these
@@ -249,7 +253,6 @@ instructions](./docs/README.md#build-the-cleanlab-docs-locally).
 
 If editing existing docs or adding new tutorials, please first read through our [guidelines](./docs/README.md#tips-for-editing-docstutorials).
 
-
 ## Documentation style
 
 cleanlab uses [NumPy
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 26fcaac785..881cf2b039 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -12,6 +12,7 @@ sphinx-multiversion==0.2.4
 sphinx-copybutton==0.5.2
 sphinxcontrib-katex==0.9.9
 sphinxcontrib-gtagjs==0.2.1
+sphinx-jinja==2.0.2
 sphinx-autodoc-typehints==1.25.2
 sphinxext-opengraph==0.9.1
 matplotlib==3.7.4
diff --git a/docs/source/cleanlab/datalab/guide/_templates/issue_types_tip.rst b/docs/source/cleanlab/datalab/guide/_templates/issue_types_tip.rst
new file mode 100644
index 0000000000..5b8ee6144f
--- /dev/null
+++ b/docs/source/cleanlab/datalab/guide/_templates/issue_types_tip.rst
@@ -0,0 +1,10 @@
+.. tip::
+
+        This type of issue has the issue name `"{{issue_name}}"`.
+
+        Run a check for this particular kind of issue by calling :py:meth:`Datalab.find_issues() <cleanlab.datalab.datalab.Datalab.find_issues>` like so:
+
+        .. code-block:: python
+
+            # `lab` is a Datalab instance
+            lab.find_issues(..., issue_types = {"{{issue_name}}": {}})
diff --git a/docs/source/cleanlab/datalab/guide/issue_type_description.rst b/docs/source/cleanlab/datalab/guide/issue_type_description.rst
index 21c3bfa3b0..3fb6b5ff55 100644
--- a/docs/source/cleanlab/datalab/guide/issue_type_description.rst
+++ b/docs/source/cleanlab/datalab/guide/issue_type_description.rst
@@ -41,8 +41,8 @@ Label Issue
 Examples whose given label is estimated to be potentially incorrect (e.g. due to annotation error) are flagged as having label issues.
 Datalab estimates which examples appear mislabeled as well as a numeric label quality score for each, which quantifies the likelihood that an example is correctly labeled.
 
-For now, Datalab can only detect label issues in a multi-class classification dataset.
-The cleanlab library has alternative methods you can us to detect label issues in other types of datasets (multi-label, multi-annotator, token classification, etc.).
+For now, Datalab can only detect label issues in multi-class classification datasets, regression datasets, and multi-label classification datasets.
+The cleanlab library has alternative methods you can us to detect label issues in other types of datasets (multi-annotator, token classification, etc.).
 
 Label issues are calculated based on provided `pred_probs` from a trained model. If you do not provide this argument, but you do provide `features`, then a K Nearest Neighbor model will be fit to produce `pred_probs` based on your `features`. Otherwise if neither `pred_probs` nor `features` is provided, then this type of issue will not be considered.
 For the most accurate results, provide out-of-sample `pred_probs` which can be obtained for a dataset via `cross-validation <https://docs.cleanlab.ai/stable/tutorials/pred_probs_cross_val.html>`_.
@@ -53,6 +53,12 @@ To handle mislabeled examples, you can either filter out the data with label iss
 
 Learn more about the method used to detect label issues in our paper: `Confident Learning: Estimating Uncertainty in Dataset Labels <https://arxiv.org/abs/1911.00068>`_
 
+.. jinja ::
+
+    {% with issue_name = "label" %}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
+
 
 Outlier Issue
 -------------
@@ -73,6 +79,12 @@ Closely inspect them and consider removing some outliers that may be negatively
 
 Learn more about the methods used to detect outliers in our article: `Out-of-Distribution Detection via Embeddings or Predictions <https://cleanlab.ai/blog/outlier-detection/>`_
 
+.. jinja ::
+
+    {% with issue_name = "outlier" %}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
+
 (Near) Duplicate Issue
 ----------------------
 
@@ -94,6 +106,11 @@ Including near-duplicate examples in a dataset may negatively impact a ML model'
 In particular, it is questionable to include examples in a test dataset which are (nearly) duplicated in the corresponding training dataset.
 More generally, examples which happen to be duplicated can affect the final modeling results much more than other examples — so you should at least be aware of their presence.
 
+.. jinja ::
+
+    {% with issue_name = "near_duplicate" %}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
 
 Non-IID Issue
 -------------
@@ -113,6 +130,12 @@ The assumption that examples in a dataset are Independent and Identically Distri
 
 For datasets with low non-IID score, you should consider why your data are not IID and act accordingly. For example, if the data distribution is drifting over time, consider employing a time-based train/test split instead of a random partition.  Note that shuffling the data ahead of time will ensure a good non-IID score, but this is not always a fix to the underlying problem (e.g. future deployment data may stem from a different distribution, or you may overlook the fact that examples influence each other). We thus recommend **not** shuffling your data to be able to diagnose this issue if it exists.
 
+.. jinja ::
+
+    {% with issue_name = "non_iid" %}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
+
 Class Imbalance Issue
 ---------------------
 
@@ -122,6 +145,12 @@ In a dataset identified as having class imbalance, the class imbalance quality s
 
 Class imbalance in a dataset can lead to subpar model performance for the under-represented class. Consider collecting more data from the under-represented class, or at least take special care while modeling via techniques like over/under-sampling, SMOTE, asymmetric class weighting, etc.
 
+.. jinja ::
+
+    {% with issue_name = "class_imbalance" %}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
+
 Image-specific Issues
 ---------------------
 
@@ -130,19 +159,30 @@ Specifically, low-quality images which are too: dark/bright, blurry, low informa
 Descriptions of these image-specific issues are provided in the `CleanVision package <https://github.com/cleanlab/cleanvision>`_ and its documentation.
 
 Underperforming Group Issue
-------------------------------
+---------------------------
 
 An underperforming group refers to a cluster of similar examples (i.e. a slice) in the dataset for which the ML model predictions are poor.  The examples in this underperforming group may have noisy labels or feature values, or the trained ML model may not have learned how to properly handle them (consider collecting more data from this subpopulation or up-weighting the existing data from this group).
 
-Underperforming Group issues are detected based on provided `features`  and `pred_probs`.
+Underperforming Group issues are detected based on one of:
+
+- provided `pred_probs` and `features`,
+- provided `pred_probs` and `knn_graph`, or
+- provided `pred_probs` and `cluster_ids`. (This option is for advanced users, see the `FAQ <../../../tutorials/faq.html#How-do-I-specify-pre-computed-data-slices/clusters-when-detecting-the-Underperforming-Group-Issue?>`_ for more details.)
+
 If you do not provide both these arguments, this type of issue will not be considered.
 
 To find the underperforming group, Cleanlab clusters the data using the provided `features` and determines the cluster `c` with the lowest average model predictive performance. Model predictive performance is evaluated via the model's self-confidence of the given labels, calculated using :py:func:`rank.get_self_confidence_for_each_label <cleanlab.rank.get_self_confidence_for_each_label>`. Suppose the average predictive power across the full dataset is `r` and is `q` within a cluster of examples. This cluster is considered to be an underperforming group if `q/r` falls below a threshold. A dataset suffers from the Underperforming Group issue if there exists such a cluster within it.
 The underperforming group quality score is equal to `q/r` for examples belonging to the underperforming group, and is equal to 1 for all other examples.
 Advanced users:  If you have pre-computed cluster assignments for each example in the dataset, you can pass them explicitly to :py:meth:`Datalab.find_issues <cleanlab.datalab.datalab.Datalab.find_issues>` using the `cluster_ids` key in the `issue_types` dict argument.  This is useful for tabular datasets where you want to group/slice the data based on a categorical column. An integer encoding of the categorical column can be passed as cluster assignments for finding the underperforming group, based on the data slices you define.
 
+.. jinja ::
+
+    {% with issue_name = "underperforming_group" %}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
+
 Null Issue
------------
+----------
 
 Examples identified with the null issue correspond to rows that have null/missing values across all feature columns (i.e. the entire row is missing values).
 
@@ -154,15 +194,27 @@ equals the average of the individual examples' quality scores.
 Presence of null examples in the dataset can lead to errors when training ML models. It can also
 result in the model learning incorrect patterns due to the null values.
 
+.. jinja ::
+
+    {% with issue_name = "null"%}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
+
 Data Valuation Issue
 --------------------
 
 The examples in the dataset with lowest data valuation scores contribute least to a trained ML model's performance (those whose value falls below a threshold are flagged with this type of issue).
 
-Data valuation issues can only be detected based on a provided `knn_graph`` (or one pre-computed during the computation of other issue types).  If you do not provide this argument and there isn't a `knn_graph` already stored in the Datalab object, this type of issue will not be considered.
+Data valuation issues can only be detected based on a provided `knn_graph` (or one pre-computed during the computation of other issue types).  If you do not provide this argument and there isn't a `knn_graph` already stored in the Datalab object, this type of issue will not be considered.
 
 The data valuation score is an approximate Data Shapley value, calculated based on the labels of the top k nearest neighbors of an example. The details of this KNN-Shapley value could be found in the papers: `Efficient Task-Specific Data Valuation for Nearest Neighbor Algorithms <https://arxiv.org/abs/1908.08619>`_ and `Scalability vs. Utility: Do We Have to Sacrifice One for the Other in Data Importance Quantification? <https://arxiv.org/abs/1911.07128>`_.
 
+.. jinja ::
+
+    {% with issue_name = "data_valuation"%}
+    {% include "cleanlab/datalab/guide/_templates/issue_types_tip.rst" %}
+    {% endwith %}
+
 Optional Issue Parameters
 =========================
 
@@ -176,7 +228,7 @@ Appropriate defaults are used for any parameters you do not specify, so no need
         "label": label_kwargs, "outlier": outlier_kwargs,
         "near_duplicate": near_duplicate_kwargs, "non_iid": non_iid_kwargs,
         "class_imbalance": class_imbalance_kwargs, "underperforming_group": underperforming_group_kwargs,
-        "null": null_kwargs
+        "null": null_kwargs, "data_valuation": data_valuation_kwargs,
     }
 
 
@@ -284,7 +336,7 @@ Imbalance Issue Parameters
     For more information, view the source code of:  :py:class:`datalab.internal.issue_manager.imbalance.ClassImbalanceIssueManager <cleanlab.datalab.internal.issue_manager.imbalance.ClassImbalanceIssueManager>`.
 
 Underperforming Group Issue Parameters
---------------------------
+--------------------------------------
 
 .. code-block:: python
 
@@ -318,7 +370,7 @@ Null Issue Parameters
     For more information, view the source code of:  :py:class:`datalab.internal.issue_manager.null.NullIssueManager <cleanlab.datalab.internal.issue_manager.null.NullIssueManager>`.
 
 Data Valuation Issue Parameters
---------------------------
+-------------------------------
 
 .. code-block:: python
 
@@ -331,7 +383,7 @@ Data Valuation Issue Parameters
     For more information, view the source code of:  :py:class:`datalab.internal.issue_manager.data_valuation.DataValuationIssueManager <cleanlab.datalab.internal.issue_manager.data_valuation.DataValuationIssueManager>`.
 
 Image Issue Parameters
---------------------------
+----------------------
 
 To customize optional parameters for specific image issue types, you can provide a dictionary format corresponding to each image issue. The following codeblock demonstrates how to specify optional parameters for all image issues. However, it's important to note that providing optional parameters for specific image issues is not mandatory. If no specific parameters are provided, defaults will be used for those issues.
 
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 0f0f1b1b4d..25d7758f7b 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -54,6 +54,7 @@
     "sphinx_copybutton",
     "sphinxcontrib.katex",
     "sphinxcontrib.gtagjs",
+    "sphinx_jinja",
     "sphinx_autodoc_typehints",
     "sphinx.ext.doctest",
     "sphinxext.opengraph",

exact issue name should be listed for each issue type in the Datalab Issue Type Guide
Otherwise it's hard to know how to run an audit for this issue type (eg. data valuation say).
