diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 4df72a587d4..e00dbf75083 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -11,6 +11,7 @@ This project adheres to `Semantic Versioning`_ starting with version 1.0.
 
 Added
 -----
+- `FallbackPolicy` can now be configured to trigger when the difference between confidences of two predicted intents is too narrow
 - throw error during training when triggers are defined in the domain without
   ``MappingPolicy`` being present in the policy ensemble
 
diff --git a/docs/core/policies.rst b/docs/core/policies.rst
index 89d71db64be..bd990037709 100644
--- a/docs/core/policies.rst
+++ b/docs/core/policies.rst
@@ -406,9 +406,11 @@ Fallback Policy
 ^^^^^^^^^^^^^^^
 
 The ``FallbackPolicy`` invokes a :ref:`fallback action
-<fallback-actions>` if the intent recognition
-has a confidence below ``nlu_threshold`` or if none of the dialogue
-policies predict an action with confidence higher than ``core_threshold``.
+<fallback-actions>` if at least one of the following occurs:
+1. The intent recognition has a confidence below ``nlu_threshold``.
+2. The highest ranked intent differs in confidence with the second highest ranked intent
+by less than ``ambiguity_threshold``.
+3. None of the dialogue policies predict an action with confidence higher than ``core_threshold``.
 
 **Configuration:**
 
@@ -420,6 +422,7 @@ policies predict an action with confidence higher than ``core_threshold``.
       policies:
         - name: "FallbackPolicy"
           nlu_threshold: 0.3
+          ambiguity_threshold: 0.1
           core_threshold: 0.3
           fallback_action_name: 'action_default_fallback'
 
@@ -427,6 +430,10 @@ policies predict an action with confidence higher than ``core_threshold``.
     | ``nlu_threshold``          | Min confidence needed to accept an NLU      |
     |                            | prediction                                  |
     +----------------------------+---------------------------------------------+
+    | ``ambiguity_threshold``    | Min amount by which the confidence of the   |
+    |                            | top intent must exceed that of the second   |
+    |                            | highest ranked intent.                      |
+    +----------------------------+---------------------------------------------+
     | ``core_threshold``         | Min confidence needed to accept an action   |
     |                            | prediction from Rasa Core                   |
     +----------------------------+---------------------------------------------+
@@ -446,7 +453,8 @@ policies predict an action with confidence higher than ``core_threshold``.
 
        fallback = FallbackPolicy(fallback_action_name="action_default_fallback",
                                  core_threshold=0.3,
-                                 nlu_threshold=0.3)
+                                 nlu_threshold=0.3,
+                                 ambiguity_threshold=0.1)
 
        agent = Agent("domain.yml", policies=[KerasPolicy(), fallback])
 
@@ -462,7 +470,8 @@ Two-Stage Fallback Policy
 The ``TwoStageFallbackPolicy`` handles low NLU confidence in multiple stages
 by trying to disambiguate the user input.
 
-- If a NLU prediction has a low confidence score, the user is asked to affirm
+- If an NLU prediction has a low confidence score or is not significantly higher
+  than the second highest ranked prediction, the user is asked to affirm
   the classification of the intent.
 
     - If they affirm, the story continues as if the intent was classified
@@ -494,6 +503,7 @@ by trying to disambiguate the user input.
         policies:
           - name: TwoStageFallbackPolicy
             nlu_threshold: 0.3
+            ambiguity_threshold: 0.1
             core_threshold: 0.3
             fallback_core_action_name: "action_default_fallback"
             fallback_nlu_action_name: "action_default_fallback"
@@ -503,6 +513,10 @@ by trying to disambiguate the user input.
     | ``nlu_threshold``             | Min confidence needed to accept an NLU   |
     |                               | prediction                               |
     +-------------------------------+------------------------------------------+
+    | ``ambiguity_threshold``       | Min amount by which the confidence of the|
+    |                               | top intent must exceed that of the second|
+    |                               | highest ranked intent.                   |
+    +--------------------------------------------------------------------------+
     | ``core_threshold``            | Min confidence needed to accept an action|
     |                               | prediction from Rasa Core                |
     +-------------------------------+------------------------------------------+
diff --git a/rasa/core/policies/fallback.py b/rasa/core/policies/fallback.py
index aa96235da5b..e0f1cf036ac 100644
--- a/rasa/core/policies/fallback.py
+++ b/rasa/core/policies/fallback.py
@@ -1,7 +1,7 @@
 import json
 import logging
 import os
-from typing import Any, List, Text
+from typing import Any, List, Text, Optional, Dict, Tuple
 
 from rasa.core.actions.action import ACTION_LISTEN_NAME
 
@@ -30,6 +30,7 @@ class FallbackPolicy(Policy):
         self,
         priority: int = 4,
         nlu_threshold: float = 0.3,
+        ambiguity_threshold: float = 0.1,
         core_threshold: float = 0.3,
         fallback_action_name: Text = "action_default_fallback",
     ) -> None:
@@ -43,11 +44,14 @@ class FallbackPolicy(Policy):
             nlu_threshold: minimum threshold for NLU confidence.
                 If intent prediction confidence is lower than this,
                 predict fallback action with confidence 1.0.
+            ambiguity_threshold: threshold for minimum difference
+                between confidences of the top two predictions
             fallback_action_name: name of the action to execute as a fallback
         """
         super(FallbackPolicy, self).__init__(priority=priority)
 
         self.nlu_threshold = nlu_threshold
+        self.ambiguity_threshold = ambiguity_threshold
         self.core_threshold = core_threshold
         self.fallback_action_name = fallback_action_name
 
@@ -61,20 +65,62 @@ class FallbackPolicy(Policy):
 
         pass
 
+    def nlu_confidence_below_threshold(
+        self, nlu_data: Dict[Text, Any]
+    ) -> Tuple[bool, float]:
+        """Check if the highest confidence is lower than ``nlu_threshold``."""
+
+        # if NLU interpreter does not provide confidence score,
+        # it is set to 1.0 here in order
+        # to not override standard behaviour
+        nlu_confidence = nlu_data.get("intent", {}).get("confidence", 1.0)
+        return (nlu_confidence < self.nlu_threshold, nlu_confidence)
+
+    def nlu_prediction_ambiguous(
+        self, nlu_data: Dict[Text, Any]
+    ) -> Tuple[bool, Optional[float]]:
+        """Check if top 2 confidences are closer than ``ambiguity_threshold``."""
+        intents = nlu_data.get("intent_ranking", [])
+        if len(intents) >= 2:
+            first_confidence = intents[0].get("confidence", 1.0)
+            second_confidence = intents[1].get("confidence", 1.0)
+            difference = first_confidence - second_confidence
+            return (difference < self.ambiguity_threshold, difference)
+        return (False, None)
+
     def should_nlu_fallback(
-        self, nlu_confidence: float, last_action_name: Text
+        self, nlu_data: Dict[Text, Any], last_action_name: Text
     ) -> bool:
-        """Checks if fallback action should be predicted.
+        """Check if fallback action should be predicted.
 
         Checks for:
         - predicted NLU confidence is lower than ``nlu_threshold``
+        - difference in top 2 NLU confidences lower than ``ambiguity_threshold``
         - last action is action listen
         """
+        if last_action_name != ACTION_LISTEN_NAME:
+            return False
 
-        return (
-            nlu_confidence < self.nlu_threshold
-            and last_action_name == ACTION_LISTEN_NAME
-        )
+        below_threshold, nlu_confidence = self.nlu_confidence_below_threshold(nlu_data)
+        ambiguous_prediction, confidence_delta = self.nlu_prediction_ambiguous(nlu_data)
+
+        if below_threshold:
+            logger.debug(
+                "NLU confidence {} is lower "
+                "than NLU threshold {:.2f}. "
+                "".format(nlu_confidence, self.nlu_threshold)
+            )
+            return True
+        elif ambiguous_prediction:
+            logger.debug(
+                "The difference in NLU confidences "
+                "for the top two intents ({}) is lower than "
+                "the ambiguity threshold {:.2f}. "
+                "".format(confidence_delta, self.ambiguity_threshold)
+            )
+            return True
+
+        return False
 
     def fallback_scores(self, domain, fallback_score=1.0):
         """Prediction scores used if a fallback is necessary."""
@@ -95,22 +141,12 @@ class FallbackPolicy(Policy):
 
         nlu_data = tracker.latest_message.parse_data
 
-        # if NLU interpreter does not provide confidence score,
-        # it is set to 1.0 here in order
-        # to not override standard behaviour
-        nlu_confidence = nlu_data.get("intent", {}).get("confidence", 1.0)
-
         if tracker.latest_action_name == self.fallback_action_name:
             result = [0.0] * domain.num_actions
             idx = domain.index_for_action(ACTION_LISTEN_NAME)
             result[idx] = 1.0
 
-        elif self.should_nlu_fallback(nlu_confidence, tracker.latest_action_name):
-            logger.debug(
-                "NLU confidence {} is lower "
-                "than NLU threshold {:.2f}. "
-                "".format(nlu_confidence, self.nlu_threshold)
-            )
+        elif self.should_nlu_fallback(nlu_data, tracker.latest_action_name):
             result = self.fallback_scores(domain)
 
         else:
@@ -135,6 +171,7 @@ class FallbackPolicy(Policy):
         meta = {
             "priority": self.priority,
             "nlu_threshold": self.nlu_threshold,
+            "ambiguity_threshold": self.ambiguity_threshold,
             "core_threshold": self.core_threshold,
             "fallback_action_name": self.fallback_action_name,
         }
diff --git a/rasa/core/policies/two_stage_fallback.py b/rasa/core/policies/two_stage_fallback.py
index b93e51cefb5..7765cedc9f4 100644
--- a/rasa/core/policies/two_stage_fallback.py
+++ b/rasa/core/policies/two_stage_fallback.py
@@ -52,6 +52,7 @@ class TwoStageFallbackPolicy(FallbackPolicy):
         self,
         priority: int = 4,
         nlu_threshold: float = 0.3,
+        ambiguity_threshold: float = 0.1,
         core_threshold: float = 0.3,
         fallback_core_action_name: Text = ACTION_DEFAULT_FALLBACK_NAME,
         fallback_nlu_action_name: Text = ACTION_DEFAULT_FALLBACK_NAME,
@@ -63,6 +64,8 @@ class TwoStageFallbackPolicy(FallbackPolicy):
             nlu_threshold: minimum threshold for NLU confidence.
                 If intent prediction confidence is lower than this,
                 predict fallback action with confidence 1.0.
+            ambiguity_threshold: threshold for minimum difference
+                between confidences of the top two predictions
             core_threshold: if NLU confidence threshold is met,
                 predict fallback action with confidence
                 `core_threshold`. If this is the highest confidence in
@@ -75,7 +78,11 @@ class TwoStageFallbackPolicy(FallbackPolicy):
                  to detect that the user denies the suggested intents.
         """
         super(TwoStageFallbackPolicy, self).__init__(
-            priority, nlu_threshold, core_threshold, fallback_core_action_name
+            priority,
+            nlu_threshold,
+            ambiguity_threshold,
+            core_threshold,
+            fallback_core_action_name,
         )
 
         self.fallback_nlu_action_name = fallback_nlu_action_name
@@ -107,10 +114,9 @@ class TwoStageFallbackPolicy(FallbackPolicy):
         """
 
         nlu_data = tracker.latest_message.parse_data
-        nlu_confidence = nlu_data["intent"].get("confidence", 1.0)
         last_intent_name = nlu_data["intent"].get("name", None)
         should_nlu_fallback = self.should_nlu_fallback(
-            nlu_confidence, tracker.latest_action_name
+            nlu_data, tracker.latest_action_name
         )
         user_rephrased = has_user_rephrased(tracker)
 
@@ -200,6 +206,7 @@ class TwoStageFallbackPolicy(FallbackPolicy):
         meta = {
             "priority": self.priority,
             "nlu_threshold": self.nlu_threshold,
+            "ambiguity_threshold": self.ambiguity_threshold,
             "core_threshold": self.core_threshold,
             "fallback_core_action_name": self.fallback_action_name,
             "fallback_nlu_action_name": self.fallback_nlu_action_name,

FallbackPolicy should jump in when the top n intents have similar confidence
Right now it only jumps in if the NLU confidence is below a certain threshold. It should however also jump in if the top 2 intents have a confidence of 0.98 and 0.80 for example.
I've already started looking into this for the rasa-demo
diff --git a/tests/core/test_policies.py b/tests/core/test_policies.py
index ffa1e5ba61f..8c1f12cb405 100644
--- a/tests/core/test_policies.py
+++ b/tests/core/test_policies.py
@@ -198,19 +198,33 @@ class TestFallbackPolicy(PolicyTestCollection):
         return p
 
     @pytest.mark.parametrize(
-        "nlu_confidence, last_action_name, should_nlu_fallback",
+        "top_confidence, all_confidences, last_action_name, should_nlu_fallback",
         [
-            (0.1, "some_action", False),
-            (0.1, "action_listen", True),
-            (0.9, "some_action", False),
-            (0.9, "action_listen", False),
+            (0.1, [0.1], "some_action", False),
+            (0.1, [0.1], "action_listen", True),
+            (0.9, [0.9, 0.1], "some_action", False),
+            (0.9, [0.9, 0.1], "action_listen", False),
+            (0.4, [0.4, 0.35], "some_action", False),
+            (0.4, [0.4, 0.35], "action_listen", True),
+            (0.9, [0.9, 0.85], "action_listen", True),
         ],
     )
     def test_should_nlu_fallback(
-        self, trained_policy, nlu_confidence, last_action_name, should_nlu_fallback
+        self,
+        trained_policy,
+        top_confidence,
+        all_confidences,
+        last_action_name,
+        should_nlu_fallback,
     ):
+        nlu_data = {
+            "intent": {"confidence": top_confidence},
+            "intent_ranking": [
+                {"confidence": confidence} for confidence in all_confidences
+            ],
+        }
         assert (
-            trained_policy.should_nlu_fallback(nlu_confidence, last_action_name)
+            trained_policy.should_nlu_fallback(nlu_data, last_action_name)
             is should_nlu_fallback
         )
 

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-localserver pytest-sanic responses freezegun nbsphinx aioresponses moto
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
absl-py==1.4.0
aiofiles==0.8.0
aiohttp==3.5.4
aioresponses==0.7.6
alabaster==0.7.13
anyio==3.6.2
APScheduler==3.6.0
astor==0.8.1
async-generator==1.10
async-timeout==3.0.1
attrs==22.2.0
Babel==2.11.0
backports.zoneinfo==0.2.1
bleach==4.1.0
boto3==1.23.10
botocore==1.26.10
cached-property==1.5.2
certifi==2021.5.30
cffi==1.15.1
chardet==3.0.4
charset-normalizer==3.0.1
click==7.1.2
colorclass==2.2.0
coloredlogs==10.0
colorhash==1.0.2
ConfigArgParse==0.15.2
contextvars==2.4
coverage==6.2
cryptography==40.0.2
cycler==0.11.0
dataclasses==0.8
decorator==5.1.1
defusedxml==0.7.1
docopt==0.6.2
docutils==0.15.2
entrypoints==0.4
fakeredis==1.0.3
fbmessenger==6.0.0
Flask==1.1.4
Flask-Cors==3.0.10
freezegun==1.2.2
future==0.18.3
gast==0.6.0
gevent==1.4.0
greenlet==2.0.2
grpcio==1.48.2
h11==0.12.0
h5py==3.1.0
httpcore==0.14.7
httptools==0.6.0
httpx==0.22.0
humanfriendly==10.0
idna==2.8
idna-ssl==1.1.0
imagesize==1.4.1
immutables==0.19
importlib-metadata==4.8.3
importlib-resources==5.4.0
iniconfig==1.1.1
ipython-genutils==0.2.0
itsdangerous==1.1.0
Jinja2==2.11.3
jmespath==0.10.0
jsonpickle==1.1
jsonschema==2.6.0
jupyter-client==7.1.2
jupyter-core==4.9.2
jupyterlab-pygments==0.1.2
kafka-python==1.4.6
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
kiwisolver==1.3.1
Markdown==3.3.7
MarkupSafe==2.0.1
matplotlib==3.0.3
mattermostwrapper==2.1
mistune==0.8.4
mock==5.2.0
moto==4.0.13
multidict==4.7.6
nbclient==0.5.9
nbconvert==6.0.7
nbformat==5.1.3
nbsphinx==0.8.8
nest-asyncio==1.6.0
networkx==2.3
numpy==1.16.3
packaging==19.2
pandocfilters==1.5.1
pika==1.0.1
pluggy==1.0.0
prompt-toolkit==2.0.10
protobuf==3.19.6
psycopg2-binary==2.8.2
py==1.11.0
pycparser==2.21
pydot==1.4.1
Pygments==2.14.0
PyJWT==2.4.0
pykwalify==1.7.0
pymongo==3.8.0
pyparsing==3.1.4
PySocks==1.7.1
pytest==7.0.1
pytest-cov==4.0.0
pytest-localserver==0.9.0.post0
pytest-sanic==1.7.1
python-crfsuite==0.9.10
python-dateutil==2.8.0
python-engineio==4.11.2
python-socketio==4.0.1
python-telegram-bot==11.1.0
pytz==2019.1
pytz-deprecation-shim==0.1.0.post0
PyYAML==6.0.1
pyzmq==25.1.2
questionary==1.1.1
-e git+https://github.com/RasaHQ/rasa.git@78001f20347fb712609a5e6c6e1ef8ddac4b1cc9#egg=rasa
rasa-sdk==1.1.1
redis==3.3.5
requests==2.22.0
requests-toolbelt==1.0.0
responses==0.17.0
rfc3986==1.5.0
rocketchat-API==0.6.31
ruamel.yaml==0.15.94
s3transfer==0.5.2
sanic==19.3.1
Sanic-Cors==0.9.8
sanic-jwt==1.3.1
Sanic-Plugins-Framework==0.9.5
scikit-learn==0.20.2
scipy==1.2.1
simple-websocket==1.1.0
simplejson==3.16.0
six==1.17.0
sklearn-crfsuite==0.3.6
slackclient==1.3.1
sniffio==1.2.0
snowballstemmer==2.2.0
sortedcontainers==2.4.0
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
SQLAlchemy==1.3.24
tabulate==0.8.10
tensorboard==1.13.1
tensorflow==1.13.1
tensorflow-estimator==1.13.0
termcolor==1.1.0
terminaltables==3.1.0
testpath==0.6.0
tomli==1.2.3
tornado==6.1
tqdm==4.31.0
traitlets==4.3.3
twilio==6.26.3
typing_extensions==4.1.1
tzdata==2025.2
tzlocal==4.2
ujson==4.3.0
urllib3==1.25.11
uvloop==0.14.0
wcwidth==0.2.13
webencodings==0.5.1
webexteamssdk==1.1.1
websocket-client==0.54.0
websockets==6.0
Werkzeug==1.0.1
wsproto==1.0.0
xmltodict==0.14.2
yarl==1.7.2
zipp==3.6.0

name: rasa
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - absl-py==1.4.0
      - aiofiles==0.8.0
      - aiohttp==3.5.4
      - aioresponses==0.7.6
      - alabaster==0.7.13
      - anyio==3.6.2
      - apscheduler==3.6.0
      - astor==0.8.1
      - async-generator==1.10
      - async-timeout==3.0.1
      - attrs==22.2.0
      - babel==2.11.0
      - backports-zoneinfo==0.2.1
      - bleach==4.1.0
      - boto3==1.23.10
      - botocore==1.26.10
      - cached-property==1.5.2
      - cffi==1.15.1
      - chardet==3.0.4
      - charset-normalizer==3.0.1
      - click==7.1.2
      - colorclass==2.2.0
      - coloredlogs==10.0
      - colorhash==1.0.2
      - configargparse==0.15.2
      - contextvars==2.4
      - coverage==6.2
      - cryptography==40.0.2
      - cycler==0.11.0
      - dataclasses==0.8
      - decorator==5.1.1
      - defusedxml==0.7.1
      - docopt==0.6.2
      - docutils==0.15.2
      - entrypoints==0.4
      - fakeredis==1.0.3
      - fbmessenger==6.0.0
      - flask==1.1.4
      - flask-cors==3.0.10
      - freezegun==1.2.2
      - future==0.18.3
      - gast==0.6.0
      - gevent==1.4.0
      - greenlet==2.0.2
      - grpcio==1.48.2
      - h11==0.12.0
      - h5py==3.1.0
      - httpcore==0.14.7
      - httptools==0.6.0
      - httpx==0.22.0
      - humanfriendly==10.0
      - idna==2.8
      - idna-ssl==1.1.0
      - imagesize==1.4.1
      - immutables==0.19
      - importlib-metadata==4.8.3
      - importlib-resources==5.4.0
      - iniconfig==1.1.1
      - ipython-genutils==0.2.0
      - itsdangerous==1.1.0
      - jinja2==2.11.3
      - jmespath==0.10.0
      - jsonpickle==1.1
      - jsonschema==2.6.0
      - jupyter-client==7.1.2
      - jupyter-core==4.9.2
      - jupyterlab-pygments==0.1.2
      - kafka-python==1.4.6
      - keras-applications==1.0.8
      - keras-preprocessing==1.1.2
      - kiwisolver==1.3.1
      - markdown==3.3.7
      - markupsafe==2.0.1
      - matplotlib==3.0.3
      - mattermostwrapper==2.1
      - mistune==0.8.4
      - mock==5.2.0
      - moto==4.0.13
      - multidict==4.7.6
      - nbclient==0.5.9
      - nbconvert==6.0.7
      - nbformat==5.1.3
      - nbsphinx==0.8.8
      - nest-asyncio==1.6.0
      - networkx==2.3
      - numpy==1.16.3
      - packaging==19.2
      - pandocfilters==1.5.1
      - pika==1.0.1
      - pluggy==1.0.0
      - prompt-toolkit==2.0.10
      - protobuf==3.19.6
      - psycopg2-binary==2.8.2
      - py==1.11.0
      - pycparser==2.21
      - pydot==1.4.1
      - pygments==2.14.0
      - pyjwt==2.4.0
      - pykwalify==1.7.0
      - pymongo==3.8.0
      - pyparsing==3.1.4
      - pysocks==1.7.1
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pytest-localserver==0.9.0.post0
      - pytest-sanic==1.7.1
      - python-crfsuite==0.9.10
      - python-dateutil==2.8.0
      - python-engineio==4.11.2
      - python-socketio==4.0.1
      - python-telegram-bot==11.1.0
      - pytz==2019.1
      - pytz-deprecation-shim==0.1.0.post0
      - pyyaml==6.0.1
      - pyzmq==25.1.2
      - questionary==1.1.1
      - rasa-sdk==1.1.1
      - redis==3.3.5
      - requests==2.22.0
      - requests-toolbelt==1.0.0
      - responses==0.17.0
      - rfc3986==1.5.0
      - rocketchat-api==0.6.31
      - ruamel-yaml==0.15.94
      - s3transfer==0.5.2
      - sanic==19.3.1
      - sanic-cors==0.9.8
      - sanic-jwt==1.3.1
      - sanic-plugins-framework==0.9.5
      - scikit-learn==0.20.2
      - scipy==1.2.1
      - simple-websocket==1.1.0
      - simplejson==3.16.0
      - six==1.17.0
      - sklearn-crfsuite==0.3.6
      - slackclient==1.3.1
      - sniffio==1.2.0
      - snowballstemmer==2.2.0
      - sortedcontainers==2.4.0
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - sqlalchemy==1.3.24
      - tabulate==0.8.10
      - tensorboard==1.13.1
      - tensorflow==1.13.1
      - tensorflow-estimator==1.13.0
      - termcolor==1.1.0
      - terminaltables==3.1.0
      - testpath==0.6.0
      - tomli==1.2.3
      - tornado==6.1
      - tqdm==4.31.0
      - traitlets==4.3.3
      - twilio==6.26.3
      - typing-extensions==4.1.1
      - tzdata==2025.2
      - tzlocal==4.2
      - ujson==4.3.0
      - urllib3==1.25.11
      - uvloop==0.14.0
      - wcwidth==0.2.13
      - webencodings==0.5.1
      - webexteamssdk==1.1.1
      - websocket-client==0.54.0
      - websockets==6.0
      - werkzeug==1.0.1
      - wsproto==1.0.0
      - xmltodict==0.14.2
      - yarl==1.7.2
      - zipp==3.6.0
prefix: /opt/conda/envs/rasa

tests/core/test_policies.py::TestFallbackPolicy::test_should_nlu_fallback[0.1-all_confidences0-some_action-False] tests/core/test_policies.py::TestFallbackPolicy::test_should_nlu_fallback[0.1-all_confidences1-action_listen-True] tests/core/test_policies.py::TestFallbackPolicy::test_should_nlu_fallback[0.9-all_confidences2-some_action-False] tests/core/test_policies.py::TestFallbackPolicy::test_should_nlu_fallback[0.9-all_confidences3-action_listen-False] tests/core/test_policies.py::TestFallbackPolicy::test_should_nlu_fallback[0.4-all_confidences4-some_action-False] tests/core/test_policies.py::TestFallbackPolicy::test_should_nlu_fallback[0.4-all_confidences5-action_listen-True] tests/core/test_policies.py::TestFallbackPolicy::test_should_nlu_fallback[0.9-all_confidences6-action_listen-True]
tests/core/test_policies.py::TestKerasPolicy::test_persist_and_load tests/core/test_policies.py::TestKerasPolicy::test_tf_config tests/core/test_policies.py::TestKerasPolicyWithTfConfig::test_persist_and_load tests/core/test_policies.py::TestKerasPolicyWithTfConfig::test_tf_config
[ tests/core/test_policies.py::TestKerasPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestKerasPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestKerasPolicyWithTfConfig::test_prediction_on_empty_tracker tests/core/test_policies.py::TestKerasPolicyWithTfConfig::test_persist_and_load_empty_policy tests/core/test_policies.py::TestFallbackPolicy::test_persist_and_load tests/core/test_policies.py::TestFallbackPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestFallbackPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestFallbackPolicy::test_tf_config tests/core/test_policies.py::TestMappingPolicy::test_persist_and_load tests/core/test_policies.py::TestMappingPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestMappingPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestMappingPolicy::test_tf_config tests/core/test_policies.py::TestMappingPolicy::test_predict_mapped_action[intent_mapping0] tests/core/test_policies.py::TestMappingPolicy::test_predict_mapped_action[intent_mapping1] tests/core/test_policies.py::TestMappingPolicy::test_predict_mapped_action[intent_mapping2] tests/core/test_policies.py::TestMappingPolicy::test_predict_mapped_action[intent_mapping3] tests/core/test_policies.py::TestMappingPolicy::test_predict_action_listen[intent_mapping0] tests/core/test_policies.py::TestMappingPolicy::test_predict_action_listen[intent_mapping1] tests/core/test_policies.py::TestMappingPolicy::test_predict_action_listen[intent_mapping2] tests/core/test_policies.py::TestMappingPolicy::test_predict_action_listen[intent_mapping3] tests/core/test_policies.py::TestMappingPolicy::test_do_not_follow_other_policy[intent_mapping0] tests/core/test_policies.py::TestMappingPolicy::test_do_not_follow_other_policy[intent_mapping1] tests/core/test_policies.py::TestMappingPolicy::test_do_not_follow_other_policy[intent_mapping2] tests/core/test_policies.py::TestMappingPolicy::test_do_not_follow_other_policy[intent_mapping3] tests/core/test_policies.py::TestMemoizationPolicy::test_persist_and_load tests/core/test_policies.py::TestMemoizationPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestMemoizationPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestMemoizationPolicy::test_tf_config tests/core/test_policies.py::TestMemoizationPolicy::test_memorise tests/core/test_policies.py::TestMemoizationPolicy::test_memorise_with_nlu tests/core/test_policies.py::TestAugmentedMemoizationPolicy::test_persist_and_load tests/core/test_policies.py::TestAugmentedMemoizationPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestAugmentedMemoizationPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestAugmentedMemoizationPolicy::test_tf_config tests/core/test_policies.py::TestSklearnPolicy::test_persist_and_load tests/core/test_policies.py::TestSklearnPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestSklearnPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestSklearnPolicy::test_tf_config tests/core/test_policies.py::TestSklearnPolicy::test_additional_train_args_do_not_raise tests/core/test_policies.py::TestSklearnPolicy::test_cv_none_does_not_trigger_search tests/core/test_policies.py::TestSklearnPolicy::test_cv_not_none_param_grid_none_triggers_search_without_params tests/core/test_policies.py::TestSklearnPolicy::test_cv_not_none_param_grid_none_triggers_search_with_params tests/core/test_policies.py::TestSklearnPolicy::test_missing_classes_filled_correctly tests/core/test_policies.py::TestSklearnPolicy::test_train_kwargs_are_set_on_model tests/core/test_policies.py::TestSklearnPolicy::test_train_with_shuffle_false tests/core/test_policies.py::TestEmbeddingPolicyNoAttention::test_persist_and_load tests/core/test_policies.py::TestEmbeddingPolicyNoAttention::test_prediction_on_empty_tracker tests/core/test_policies.py::TestEmbeddingPolicyNoAttention::test_persist_and_load_empty_policy tests/core/test_policies.py::TestEmbeddingPolicyNoAttention::test_tf_config tests/core/test_policies.py::TestEmbeddingPolicyAttentionBeforeRNN::test_persist_and_load tests/core/test_policies.py::TestEmbeddingPolicyAttentionBeforeRNN::test_prediction_on_empty_tracker tests/core/test_policies.py::TestEmbeddingPolicyAttentionBeforeRNN::test_persist_and_load_empty_policy tests/core/test_policies.py::TestEmbeddingPolicyAttentionBeforeRNN::test_tf_config tests/core/test_policies.py::TestEmbeddingPolicyAttentionAfterRNN::test_persist_and_load tests/core/test_policies.py::TestEmbeddingPolicyAttentionAfterRNN::test_prediction_on_empty_tracker tests/core/test_policies.py::TestEmbeddingPolicyAttentionAfterRNN::test_persist_and_load_empty_policy tests/core/test_policies.py::TestEmbeddingPolicyAttentionAfterRNN::test_tf_config tests/core/test_policies.py::TestEmbeddingPolicyAttentionBoth::test_persist_and_load tests/core/test_policies.py::TestEmbeddingPolicyAttentionBoth::test_prediction_on_empty_tracker tests/core/test_policies.py::TestEmbeddingPolicyAttentionBoth::test_persist_and_load_empty_policy tests/core/test_policies.py::TestEmbeddingPolicyAttentionBoth::test_tf_config tests/core/test_policies.py::TestEmbeddingPolicyWithTfConfig::test_persist_and_load tests/core/test_policies.py::TestEmbeddingPolicyWithTfConfig::test_prediction_on_empty_tracker tests/core/test_policies.py::TestEmbeddingPolicyWithTfConfig::test_persist_and_load_empty_policy tests/core/test_policies.py::TestEmbeddingPolicyWithTfConfig::test_tf_config tests/core/test_policies.py::TestFormPolicy::test_persist_and_load tests/core/test_policies.py::TestFormPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestFormPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestFormPolicy::test_tf_config tests/core/test_policies.py::TestFormPolicy::test_memorise tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_persist_and_load tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_prediction_on_empty_tracker tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_persist_and_load_empty_policy tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_tf_config tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_ask_affirmation tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_affirmation tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_ask_rephrase tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_successful_rephrasing tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_affirm_rephrased_intent tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_affirmed_rephrasing tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_denied_rephrasing_affirmation tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_rephrasing_instead_affirmation tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_unknown_instead_affirmation tests/core/test_policies.py::TestTwoStageFallbackPolicy::test_listen_after_hand_off
CHANGELOG.rst docs/core/policies.rst rasa/core/policies/two_stage_fallback.py rasa/core/policies/fallback.py
CHANGELOG.rst docs/core/policies.rst rasa/core/policies/two_stage_fallback.py rasa/core/policies/fallback.py