Repository: rasahq/rasa
Issue: Initial slot values break rule policy by being integrated into all rules by default

### Rasa Open Source version

3.2.4

### Rasa SDK version

3.2.0

### Python version

3.7

### What operating system are you using?

Linux, OSX

### What happened?

Was trying to build a concept bot with some basic task switching logic and noticed I couldn't get certain rules to work. After some bug hunting I found that initial slot values are implicitly integrated into all rules. Thus, if you change the initial value during the conversation, none of your rules will apply anymore: 🥳🎉

### Minimal example to reproduce:

### nlu
```yaml
version: "3.1"

nlu:
- intent: greet
  examples: |
    - hey
    - hello
    - hi
    - hello there
    - good morning
    - good evening
    - moin
    - hey there
    - let's go
    - hey dude
    - goodmorning
    - goodevening
    - good afternoon

- intent: goodbye
  examples: |
    - cu
    - good by
    - cee you later
    - good night
    - bye
    - goodbye
    - have a nice day
    - see you around
    - bye bye
    - see you later
```

### rules
```yaml
version: "3.1"

rules:

- rule: Say hi!
  steps:
    - intent: greet
    - action: utter_greet

- rule: Say goodbye anytime the user says goodbye
  steps:
  - intent: goodbye
  - action: utter_goodbye
```

### config: default

### domain
```yaml
version: "3.1"

intents:
  - greet
  - goodbye

slots:
  has_said_hi:
    type: bool
    initial_value: false # commenting this out will make the rules work again
    mappings:
      - type: from_intent
        value: true
        intent: greet

responses:
  utter_greet:
  - text: "Hey! How are you?"

  utter_goodbye:
  - text: "Bye"

session_config:
  session_expiration_time: 60
  carry_over_slots_to_new_session: true
```

When you have a look at the rules that are produced with and without initial value for the slot `has_said_hi` you will see the following:

### rules in the trained rule_policy.json (from the model tar.gz) without initial value:
```
    "rules": {
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"user\\": {\\"intent\\": \\"goodbye\\"}}]": "utter_goodbye",
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"user\\": {\\"intent\\": \\"goodbye\\"}}, {\\"prev_action\\": {\\"action_name\\": \\"utter_goodbye\\"}, \\"user\\": {\\"intent\\": \\"goodbye\\"}}]": "action_listen",
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"user\\": {\\"intent\\": \\"greet\\"}}]": "utter_greet",
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"user\\": {\\"intent\\": \\"greet\\"}}, {\\"prev_action\\": {\\"action_name\\": \\"utter_greet\\"}, \\"user\\": {\\"intent\\": \\"greet\\"}}]": "action_listen"
    },
```

### rules in the trained rule_policy.json (from the model tar.gz) with initial value:
```
    "rules": {
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"slots\\": {\\"has_said_hi\\": [1.0, 0.0]}, \\"user\\": {\\"intent\\": \\"goodbye\\"}}]": "utter_goodbye",
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"slots\\": {\\"has_said_hi\\": [1.0, 0.0]}, \\"user\\": {\\"intent\\": \\"goodbye\\"}}, {\\"prev_action\\": {\\"action_name\\": \\"utter_goodbye\\"}, \\"slots\\": {\\"has_said_hi\\": [1.0, 0.0]}, \\"user\\": {\\"intent\\": \\"goodbye\\"}}]": "action_listen",
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"slots\\": {\\"has_said_hi\\": [1.0, 0.0]}, \\"user\\": {\\"intent\\": \\"greet\\"}}]": "utter_greet",
      "[{\\"prev_action\\": {\\"action_name\\": \\"action_listen\\"}, \\"slots\\": {\\"has_said_hi\\": [1.0, 0.0]}, \\"user\\": {\\"intent\\": \\"greet\\"}}, {\\"prev_action\\": {\\"action_name\\": \\"utter_greet\\"}, \\"slots\\": {\\"has_said_hi\\": [1.0, 0.0]}, \\"user\\": {\\"intent\\": \\"greet\\"}}]": "action_listen"
    }
```

As you can see the initial value for `has_said_hi` was incorporated into all rules as `[1.0, 0.0]` which is the boolean slot representation for `false`. 

What you will experience when you train this bot is the following: the greet rule won't work. What happens is that the slot has_said_hi get's filled, and afterwards there are no applicable rules and the bot will reset the previous user message (unsetting the slot again). So you can get a good bye but never get the bot to greet you back.

I think it's quite a serious bug, as it basically renders rules almost useless when using slots with initial values and it is super surprising that initial values are causing this. Instead, initial values should not be incorporated into rules.



### Command / Request

```shell
`rasa train` with the provided example config

`rasa shell -vv` to interact with the bot and see debug info.
```


### Relevant log output

```shell
Bot loaded. Type a message and press enter (use '/stop' to exit):
Your input ->  hi
2022-07-28 10:27:30 DEBUG    rasa.core.lock_store  - Issuing ticket for conversation 'a4fa8fc9e981468499d002ae25a30667'.
2022-07-28 10:27:30 DEBUG    rasa.core.lock_store  - Acquiring lock for conversation 'a4fa8fc9e981468499d002ae25a30667'.
2022-07-28 10:27:30 DEBUG    rasa.core.lock_store  - Acquired lock for conversation 'a4fa8fc9e981468499d002ae25a30667'.
2022-07-28 10:27:30 DEBUG    rasa.core.tracker_store  - Could not find tracker for conversation ID 'a4fa8fc9e981468499d002ae25a30667'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Starting a new session for conversation ID 'a4fa8fc9e981468499d002ae25a30667'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Policy prediction ended with events '[]'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Action 'action_session_start' ended with events '[<rasa.shared.core.events.SessionStarted object at 0x7f572869afd0>, ActionExecuted(action: action_listen, policy:
 None, confidence: None)]'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Current slot values:
        has_said_hi: False
        session_started_metadata: None
2022-07-28 10:27:30 DEBUG    rasa.engine.runner.dask  - Running graph with inputs: {'__message__': [<rasa.core.channels.channel.UserMessage object at 0x7f56985cb210>]}, targets: ['run_RegexMessageHandler'] and ExecutionContext(model_id='8923f28deae949efb9c00d8482a594b5', should_add_diagnostic_data=False, is_finetuning=False, node_name=None).
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'nlu_message_converter' running 'NLUMessageConverter.convert_user_message'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_WhitespaceTokenizer0' running 'WhitespaceTokenizer.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_RegexFeaturizer1' running 'RegexFeaturizer.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_LexicalSyntacticFeaturizer2' running 'LexicalSyntacticFeaturizer.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_CountVectorsFeaturizer3' running 'CountVectorsFeaturizer.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_CountVectorsFeaturizer4' running 'CountVectorsFeaturizer.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_DIETClassifier5' running 'DIETClassifier.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_EntitySynonymMapper6' running 'EntitySynonymMapper.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_ResponseSelector7' running 'ResponseSelector.process'.
2022-07-28 10:27:30 DEBUG    rasa.nlu.classifiers.diet_classifier  - There is no trained model for 'ResponseSelector': The component is either not trained or didn't receive enough training data.
2022-07-28 10:27:30 DEBUG    rasa.nlu.selectors.response_selector  - Adding following selector key to message property: default
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_FallbackClassifier8' running 'FallbackClassifier.process'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'domain_provider' running 'DomainProvider.provide_inference'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_RegexMessageHandler' running 'RegexMessageHandler.process'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Received user message 'hi' with intent '{'name': 'greet', 'confidence': 1.0}' and entities '[]'
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Logged UserUtterance - tracker now has 4 events.
2022-07-28 10:27:30 DEBUG    rasa.core.actions.action  - Validating extracted slots: has_said_hi
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Default action 'action_extract_slots' was executed, resulting in 1 events: SlotSet(key: has_said_hi, value: True)
2022-07-28 10:27:30 DEBUG    rasa.engine.runner.dask  - Running graph with inputs: {'__tracker__': <rasa.shared.core.trackers.DialogueStateTracker object at 0x7f56c80b69d0>}, targets: ['select_prediction'] and ExecutionContext(model_id='8923f28deae949efb9c00d8482a594b5', should_add_diagnostic_data=False, is_finetuning=False, node_name=None).
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'rule_only_data_provider' running 'RuleOnlyDataProvider.provide'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'domain_provider' running 'DomainProvider.provide_inference'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_MemoizationPolicy0' running 'MemoizationPolicy.predict_action_probabilities'.
2022-07-28 10:27:30 DEBUG    rasa.core.policies.memoization  - Current tracker state:
[state 1] user intent: greet | previous action name: action_listen
2022-07-28 10:27:30 DEBUG    rasa.core.policies.memoization  - There is no memorised next action
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_RulePolicy1' running 'RulePolicy.predict_action_probabilities'.
2022-07-28 10:27:30 DEBUG    rasa.core.policies.rule_policy  - Current tracker state:
[state 0] slots: {'has_said_hi': (1.0, 0.0)}
[state 1] user text: hi | previous action name: action_listen | slots: {'has_said_hi': (1.0, 1.0)}
2022-07-28 10:27:30 DEBUG    rasa.core.policies.rule_policy  - There is no applicable rule.
2022-07-28 10:27:30 DEBUG    rasa.core.policies.rule_policy  - Current tracker state:
[state 0] slots: {'has_said_hi': (1.0, 0.0)}
[state 1] user intent: greet | previous action name: action_listen | slots: {'has_said_hi': (1.0, 1.0)}
2022-07-28 10:27:30 DEBUG    rasa.core.policies.rule_policy  - There is no applicable rule.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_TEDPolicy3' running 'TEDPolicy.predict_action_probabilities'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'run_UnexpecTEDIntentPolicy2' running 'UnexpecTEDIntentPolicy.predict_action_probabilities'.
2022-07-28 10:27:30 DEBUG    rasa.engine.graph  - Node 'select_prediction' running 'DefaultPolicyPredictionEnsemble.combine_predictions_from_kwargs'.
2022-07-28 10:27:30 DEBUG    rasa.core.policies.ensemble  - Made prediction using user intent.
2022-07-28 10:27:30 DEBUG    rasa.core.policies.ensemble  - Added `DefinePrevUserUtteredFeaturization(False)` event.
2022-07-28 10:27:30 DEBUG    rasa.core.policies.ensemble  - Predicted next action using RulePolicy.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Predicted next action 'action_default_fallback' with confidence 0.30.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Policy prediction ended with events '[<rasa.shared.core.events.DefinePrevUserUtteredFeaturization object at 0x7f56982be350>]'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Action 'action_default_fallback' ended with events '[<rasa.shared.core.events.UserUtteranceReverted object at 0x7f56985a1410>]'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Current slot values:
        has_said_hi: False
        session_started_metadata: None
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Predicted next action 'action_listen' with confidence 1.00.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Policy prediction ended with events '[]'.
2022-07-28 10:27:30 DEBUG    rasa.core.processor  - Action 'action_listen' ended with events '[]'.
2022-07-28 10:27:30 DEBUG    rasa.core.lock_store  - Deleted lock for conversation 'a4fa8fc9e981468499d002ae25a30667'.
Your input ->
```
```


Changed files:
rasa/core/featurizers/tracker_featurizers.py, rasa/core/policies/rule_policy.py, rasa/shared/core/trackers.py, rasa/shared/core/generator.py, rasa/shared/core/domain.py

diff --git a/rasa/core/featurizers/tracker_featurizers.py b/rasa/core/featurizers/tracker_featurizers.py
index 2565bfecccf..8d9c5362c2b 100644
--- a/rasa/core/featurizers/tracker_featurizers.py
+++ b/rasa/core/featurizers/tracker_featurizers.py
@@ -77,7 +77,6 @@ class TrackerFeaturizer:
     def _create_states(
         tracker: DialogueStateTracker,
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_rule_only_turns: bool = False,
         rule_only_data: Optional[Dict[Text, Any]] = None,
     ) -> List[State]:
@@ -86,7 +85,6 @@ class TrackerFeaturizer:
         Args:
             tracker: The tracker to transform to states.
             domain: The domain of the tracker.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_rule_only_turns: If `True` ignore dialogue turns that are present
                 only in rules.
             rule_only_data: Slots and loops,
@@ -97,7 +95,6 @@ class TrackerFeaturizer:
         """
         return tracker.past_states(
             domain,
-            omit_unset_slots=omit_unset_slots,
             ignore_rule_only_turns=ignore_rule_only_turns,
             rule_only_data=rule_only_data,
         )
@@ -221,15 +218,13 @@ class TrackerFeaturizer:
         self,
         trackers: List[DialogueStateTracker],
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_action_unlikely_intent: bool = False,
     ) -> Tuple[List[List[State]], List[List[Text]]]:
-        """Transforms trackers to states and labels.
+        self.labels__ = """Transforms trackers to states and labels.
 
         Args:
             trackers: The trackers to transform.
             domain: The domain.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_action_unlikely_intent: Whether to remove `action_unlikely_intent`
                 from training states.
 
@@ -243,7 +238,6 @@ class TrackerFeaturizer:
         ) = self.training_states_labels_and_entities(
             trackers,
             domain,
-            omit_unset_slots=omit_unset_slots,
             ignore_action_unlikely_intent=ignore_action_unlikely_intent,
         )
         return trackers_as_states, trackers_as_labels
@@ -253,7 +247,6 @@ class TrackerFeaturizer:
         self,
         trackers: List[DialogueStateTracker],
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_action_unlikely_intent: bool = False,
     ) -> Tuple[List[List[State]], List[List[Text]], List[List[Dict[Text, Any]]]]:
         """Transforms trackers to states, labels, and entity data.
@@ -261,7 +254,6 @@ class TrackerFeaturizer:
         Args:
             trackers: The trackers to transform.
             domain: The domain.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_action_unlikely_intent: Whether to remove `action_unlikely_intent`
                 from training states.
 
@@ -518,7 +510,6 @@ class FullDialogueTrackerFeaturizer(TrackerFeaturizer):
         self,
         trackers: List[DialogueStateTracker],
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_action_unlikely_intent: bool = False,
     ) -> Tuple[List[List[State]], List[List[Text]], List[List[Dict[Text, Any]]]]:
         """Transforms trackers to states, action labels, and entity data.
@@ -526,7 +517,6 @@ class FullDialogueTrackerFeaturizer(TrackerFeaturizer):
         Args:
             trackers: The trackers to transform.
             domain: The domain.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_action_unlikely_intent: Whether to remove `action_unlikely_intent`
                 from training states.
 
@@ -548,9 +538,7 @@ class FullDialogueTrackerFeaturizer(TrackerFeaturizer):
             disable=rasa.shared.utils.io.is_logging_disabled(),
         )
         for tracker in pbar:
-            states = self._create_states(
-                tracker, domain, omit_unset_slots=omit_unset_slots
-            )
+            states = self._create_states(tracker, domain)
             events = tracker.applied_events()
 
             if ignore_action_unlikely_intent:
@@ -719,7 +707,6 @@ class MaxHistoryTrackerFeaturizer(TrackerFeaturizer):
         self,
         trackers: List[DialogueStateTracker],
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_action_unlikely_intent: bool = False,
     ) -> Tuple[List[List[State]], List[List[Text]], List[List[Dict[Text, Any]]]]:
         """Transforms trackers to states, action labels, and entity data.
@@ -727,7 +714,6 @@ class MaxHistoryTrackerFeaturizer(TrackerFeaturizer):
         Args:
             trackers: The trackers to transform.
             domain: The domain.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_action_unlikely_intent: Whether to remove `action_unlikely_intent`
                 from training states.
 
@@ -756,7 +742,6 @@ class MaxHistoryTrackerFeaturizer(TrackerFeaturizer):
             for states, label, entities in self._extract_examples(
                 tracker,
                 domain,
-                omit_unset_slots=omit_unset_slots,
                 ignore_action_unlikely_intent=ignore_action_unlikely_intent,
             ):
 
@@ -782,7 +767,6 @@ class MaxHistoryTrackerFeaturizer(TrackerFeaturizer):
         self,
         tracker: DialogueStateTracker,
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_action_unlikely_intent: bool = False,
     ) -> Iterator[Tuple[List[State], List[Text], List[Dict[Text, Any]]]]:
         """Creates an iterator over training examples from a tracker.
@@ -790,16 +774,13 @@ class MaxHistoryTrackerFeaturizer(TrackerFeaturizer):
         Args:
             trackers: The tracker from which to extract training examples.
             domain: The domain of the training data.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_action_unlikely_intent: Whether to remove `action_unlikely_intent`
                 from training states.
 
         Returns:
             An iterator over example states, labels, and entity data.
         """
-        tracker_states = self._create_states(
-            tracker, domain, omit_unset_slots=omit_unset_slots
-        )
+        tracker_states = self._create_states(tracker, domain)
         events = tracker.applied_events()
 
         if ignore_action_unlikely_intent:
@@ -955,7 +936,6 @@ class IntentMaxHistoryTrackerFeaturizer(MaxHistoryTrackerFeaturizer):
         self,
         trackers: List[DialogueStateTracker],
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_action_unlikely_intent: bool = False,
     ) -> Tuple[List[List[State]], List[List[Text]], List[List[Dict[Text, Any]]]]:
         """Transforms trackers to states, intent labels, and entity data.
@@ -963,7 +943,6 @@ class IntentMaxHistoryTrackerFeaturizer(MaxHistoryTrackerFeaturizer):
         Args:
             trackers: The trackers to transform.
             domain: The domain.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_action_unlikely_intent: Whether to remove `action_unlikely_intent`
                 from training states.
 
@@ -995,7 +974,6 @@ class IntentMaxHistoryTrackerFeaturizer(MaxHistoryTrackerFeaturizer):
             for states, label, entities in self._extract_examples(
                 tracker,
                 domain,
-                omit_unset_slots=omit_unset_slots,
                 ignore_action_unlikely_intent=ignore_action_unlikely_intent,
             ):
 
@@ -1036,7 +1014,6 @@ class IntentMaxHistoryTrackerFeaturizer(MaxHistoryTrackerFeaturizer):
         self,
         tracker: DialogueStateTracker,
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_action_unlikely_intent: bool = False,
     ) -> Iterator[Tuple[List[State], List[Text], List[Dict[Text, Any]]]]:
         """Creates an iterator over training examples from a tracker.
@@ -1044,16 +1021,13 @@ class IntentMaxHistoryTrackerFeaturizer(MaxHistoryTrackerFeaturizer):
         Args:
             tracker: The tracker from which to extract training examples.
             domain: The domain of the training data.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_action_unlikely_intent: Whether to remove `action_unlikely_intent`
                 from training states.
 
         Returns:
             An iterator over example states, labels, and entity data.
         """
-        tracker_states = self._create_states(
-            tracker, domain, omit_unset_slots=omit_unset_slots
-        )
+        tracker_states = self._create_states(tracker, domain)
         events = tracker.applied_events()
 
         if ignore_action_unlikely_intent:
diff --git a/rasa/core/policies/rule_policy.py b/rasa/core/policies/rule_policy.py
index 81fd7976979..657bc4349e8 100644
--- a/rasa/core/policies/rule_policy.py
+++ b/rasa/core/policies/rule_policy.py
@@ -747,7 +747,7 @@ class RulePolicy(MemoizationPolicy):
             rule_trackers_as_states,
             rule_trackers_as_actions,
         ) = self.featurizer.training_states_and_labels(
-            rule_trackers, domain, omit_unset_slots=True
+            rule_trackers, domain
         )
 
         rules_lookup = self._create_lookup_from_states(
diff --git a/rasa/shared/core/domain.py b/rasa/shared/core/domain.py
index 4ccbe8b1d4b..91219c473aa 100644
--- a/rasa/shared/core/domain.py
+++ b/rasa/shared/core/domain.py
@@ -1179,14 +1179,12 @@ class Domain:
 
     @staticmethod
     def _get_slots_sub_state(
-        tracker: "DialogueStateTracker", omit_unset_slots: bool = False
+        tracker: "DialogueStateTracker"
     ) -> SubState:
         """Sets all set slots with the featurization of the stored value.
 
         Args:
             tracker: dialog state tracker containing the dialog so far
-            omit_unset_slots: If `True` do not include the initial values of slots.
-
         Returns:
             a mapping of slot names to their featurization
         """
@@ -1197,9 +1195,7 @@ class Domain:
             # included in featurised sub-states.
             # Note that this condition checks if the slot itself is None. An unset slot
             # will be a Slot object and its `value` attribute will be None.
-            if slot is not None and slot.as_feature():
-                if omit_unset_slots and not slot.has_been_set:
-                    continue
+            if slot is not None and slot.as_feature() and slot.has_been_set:
                 if slot.value == rasa.shared.core.constants.SHOULD_NOT_BE_SET:
                     slots[slot_name] = rasa.shared.core.constants.SHOULD_NOT_BE_SET
                 elif any(slot.as_feature()):
@@ -1249,22 +1245,17 @@ class Domain:
         }
 
     def get_active_state(
-        self, tracker: "DialogueStateTracker", omit_unset_slots: bool = False
-    ) -> State:
+        self, tracker: "DialogueStateTracker") -> State:
         """Given a dialogue tracker, makes a representation of current dialogue state.
 
         Args:
             tracker: dialog state tracker containing the dialog so far
-            omit_unset_slots: If `True` do not include the initial values of slots.
-
         Returns:
             A representation of the dialogue's current state.
         """
         state = {
             rasa.shared.core.constants.USER: self._get_user_sub_state(tracker),
-            rasa.shared.core.constants.SLOTS: self._get_slots_sub_state(
-                tracker, omit_unset_slots=omit_unset_slots
-            ),
+            rasa.shared.core.constants.SLOTS: self._get_slots_sub_state(tracker),
             rasa.shared.core.constants.PREVIOUS_ACTION: self._get_prev_action_sub_state(
                 tracker
             ),
@@ -1317,7 +1308,6 @@ class Domain:
     def states_for_tracker_history(
         self,
         tracker: "DialogueStateTracker",
-        omit_unset_slots: bool = False,
         ignore_rule_only_turns: bool = False,
         rule_only_data: Optional[Dict[Text, Any]] = None,
     ) -> List[State]:
@@ -1325,7 +1315,6 @@ class Domain:
 
         Args:
             tracker: Dialogue state tracker containing the dialogue so far.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_rule_only_turns: If True ignore dialogue turns that are present
                 only in rules.
             rule_only_data: Slots and loops,
@@ -1355,7 +1344,7 @@ class Domain:
                 if turn_was_hidden:
                     continue
 
-            state = self.get_active_state(tr, omit_unset_slots=omit_unset_slots)
+            state = self.get_active_state(tr)
 
             if ignore_rule_only_turns:
                 # clean state from only rule features
diff --git a/rasa/shared/core/generator.py b/rasa/shared/core/generator.py
index 15aca08c067..69fc8376ead 100644
--- a/rasa/shared/core/generator.py
+++ b/rasa/shared/core/generator.py
@@ -101,13 +101,12 @@ class TrackerWithCachedStates(DialogueStateTracker):
         return tracker
 
     def past_states_for_hashing(
-        self, domain: Domain, omit_unset_slots: bool = False
+        self, domain: Domain
     ) -> Deque[FrozenState]:
-        """Generates and caches the past states of this tracker based on the history.
+        self.states_ = """Generates and caches the past states of this tracker based on the history.
 
         Args:
             domain: a :class:`rasa.shared.core.domain.Domain`
-            omit_unset_slots: If `True` do not include the initial values of slots.
 
         Returns:
             A list of states
@@ -121,7 +120,7 @@ class TrackerWithCachedStates(DialogueStateTracker):
         # from the events
         states_for_hashing = self._states_for_hashing
         if not states_for_hashing:
-            states = super().past_states(domain, omit_unset_slots=omit_unset_slots)
+            states = super().past_states(domain)
             states_for_hashing = deque(self.freeze_current_state(s) for s in states)
 
         self._states_for_hashing = states_for_hashing
@@ -138,7 +137,6 @@ class TrackerWithCachedStates(DialogueStateTracker):
     def past_states(
         self,
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_rule_only_turns: bool = False,
         rule_only_data: Optional[Dict[Text, Any]] = None,
     ) -> List[State]:
@@ -146,7 +144,6 @@ class TrackerWithCachedStates(DialogueStateTracker):
 
         Args:
             domain: The Domain.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_rule_only_turns: If True ignore dialogue turns that are present
                 only in rules.
             rule_only_data: Slots and loops,
@@ -156,7 +153,7 @@ class TrackerWithCachedStates(DialogueStateTracker):
             a list of states
         """
         states_for_hashing = self.past_states_for_hashing(
-            domain, omit_unset_slots=omit_unset_slots
+            domain
         )
         return self._unfreeze_states(states_for_hashing)
 
diff --git a/rasa/shared/core/trackers.py b/rasa/shared/core/trackers.py
index 6a0545129fe..a80aaf30531 100644
--- a/rasa/shared/core/trackers.py
+++ b/rasa/shared/core/trackers.py
@@ -297,7 +297,6 @@ class DialogueStateTracker:
     def past_states(
         self,
         domain: Domain,
-        omit_unset_slots: bool = False,
         ignore_rule_only_turns: bool = False,
         rule_only_data: Optional[Dict[Text, Any]] = None,
     ) -> List[State]:
@@ -305,7 +304,6 @@ class DialogueStateTracker:
 
         Args:
             domain: The Domain.
-            omit_unset_slots: If `True` do not include the initial values of slots.
             ignore_rule_only_turns: If True ignore dialogue turns that are present
                 only in rules.
             rule_only_data: Slots and loops,
@@ -316,7 +314,6 @@ class DialogueStateTracker:
         """
         return domain.states_for_tracker_history(
             self,
-            omit_unset_slots=omit_unset_slots,
             ignore_rule_only_turns=ignore_rule_only_turns,
             rule_only_data=rule_only_data,
         )