diff --git a/extension/reviewbotext/compat/conditions.py b/extension/reviewbotext/compat/conditions.py
new file mode 100644
index 0000000000000000000000000000000000000000..d1bd6f455e39803275328af60d10a8559bbb28ec
--- /dev/null
+++ b/extension/reviewbotext/compat/conditions.py
@@ -0,0 +1,72 @@
+"""Compatibility imports related to conditions.
+
+Version Added:
+    4.1
+"""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
+
+
+try:
+    # Review Board >= 7.1
+    from reviewboard.reviews.conditions import review_request_condition_choices
+    from reviewboard.reviews.forms import ReviewRequestConditionsField
+except ImportError:
+    # Review Board < 7.1
+    if TYPE_CHECKING:
+        assert False
+        from djblets.conditions.choices import ConditionChoices
+    else:
+        from django.utils.translation import gettext_lazy as _
+        from djblets.forms.fields import ConditionsField
+        from djblets.util.typing import StrOrPromise
+        from reviewboard.reviews.conditions import \
+            ReviewRequestConditionChoices
+
+
+        review_request_condition_choices = ReviewRequestConditionChoices()
+
+        class ReviewRequestConditionsField(ConditionsField):
+            """Compatibility field for selecting review request conditions.
+
+            This can be removed once Review Board 7.1 or higher is required.
+
+            Version Added:
+                4.1
+            """
+
+            def __init__(
+                self,
+                *,
+                choices: ConditionChoices = review_request_condition_choices,
+                label: StrOrPromise = _('Conditions'),
+                **kwargs,
+            ) -> None:
+                """Initialize the field.
+
+                Args:
+                    choices (djblets.conditions.choices.ConditionChoices or type or
+                            callable):
+                        The registry of choices available for the conditions.
+
+                        This defaults to the standard review request condition
+                        choices. It can be overridden to provide a more
+                        specialized list of conditions.
+
+                    label (str, optional):
+                        A custom label to use for this field.
+
+                    **kwargs (dict):
+                        Keyword arguments to pass to the parent class.
+                """
+                super().__init__(choices=review_request_condition_choices,
+                                 label=label,
+                                 **kwargs)
+
+
+__all__ = (
+    'ReviewRequestConditionsField',
+    'review_request_condition_choices',
+)
diff --git a/extension/reviewbotext/forms.py b/extension/reviewbotext/forms.py
index ddcd315a6c1cf3b7a7a031217cd995155e0cf88a..37482c595de0f08b85d2927580e9c70e0eb4a441 100644
--- a/extension/reviewbotext/forms.py
+++ b/extension/reviewbotext/forms.py
@@ -7,11 +7,10 @@ from typing import TYPE_CHECKING
 from django import forms
 from django.core.exceptions import ValidationError
 from django.utils.translation import gettext, gettext_lazy as _
-from djblets.forms.fields import ConditionsField
 from reviewboard.integrations.forms import IntegrationConfigForm
-from reviewboard.reviews.conditions import ReviewRequestConditionChoices
 from reviewboard.reviews.models import StatusUpdate
 
+from reviewbotext.compat.conditions import ReviewRequestConditionsField
 from reviewbotext.models import Tool
 from reviewbotext.widgets import ToolOptionsWidget
 
@@ -41,10 +40,7 @@ class ReviewBotConfigForm(IntegrationConfigForm):
     MAX_COMMENTS_DEFAULT = 30
 
     #: When to run this configuration.
-    conditions = ConditionsField(
-        ReviewRequestConditionChoices,
-        label=_('Conditions'),
-        required=False)
+    conditions = ReviewRequestConditionsField(required=False)
 
     #: What to run when this configuration matches.
     tool = forms.ModelChoiceField(
