def test_temporary_tracker(): extra_slot = "some_slot" sender_id = "test" domain = Domain.from_yaml( f""" version: "2.0" slots: {extra_slot}: type: unfeaturized """ ) previous_events = [ActionExecuted(ACTION_LISTEN_NAME)] old_tracker = DialogueStateTracker.from_events( sender_id, previous_events, slots=domain.slots ) new_events = [Restarted()] form_action = FormAction("some name", None) temp_tracker = form_action._temporary_tracker(old_tracker, new_events, domain) assert extra_slot in temp_tracker.slots.keys() assert list(temp_tracker.events) == [ *previous_events, SlotSet(REQUESTED_SLOT), ActionExecuted(form_action.name()), *new_events, ]
def _get_events_since_last_user_uttered( tracker: "DialogueStateTracker", ) -> List[SlotSet]: # TODO: Better way to get this latest_message index is through an instance # variable, eg. tracker.latest_message_index index_from_end = next( (i for i, event in enumerate(reversed(tracker.events)) if event == Restarted() or event == tracker.latest_message), len(tracker.events) - 1, ) index = len(tracker.events) - index_from_end - 1 events_since_last_user_uttered = [ event for event in itertools.islice(tracker.events, index, None) if isinstance(event, SlotSet) ] return events_since_last_user_uttered