def handle_reminder(self, reminder_event, dispatcher): # type: (ReminderScheduled, Dispatcher) -> None """Handle a reminder that is triggered asynchronously.""" def has_message_after_reminder(tracker): """If the user sent a message after the reminder got scheduled - it might be better to cancel it.""" for e in reversed(tracker.events): if isinstance(e, ReminderScheduled) and e.name == \ reminder_event.name: return False elif isinstance(e, UserUttered): return True return True # tracker has probably been restarted tracker = self._get_tracker(dispatcher.sender_id) if (reminder_event.kill_on_user_message and has_message_after_reminder(tracker)): logger.debug("Canceled reminder because it is outdated. " "(event: {} id: {})".format( reminder_event.action_name, reminder_event.name)) else: # necessary for proper featurization, otherwise the previous # unrelated message would influence featurization tracker.update(UserUttered.empty()) action = self.domain.action_for_name(reminder_event.action_name) should_continue = self._run_action(action, tracker, dispatcher) if should_continue: user_msg = UserMessage(None, dispatcher.output_channel, dispatcher.sender_id) self._predict_and_execute_next_action(user_msg, tracker) # save tracker state to continue conversation from this state self._save_tracker(tracker)
def handle_reminder(self, reminder_event, dispatcher): # type: (ReminderScheduled, Dispatcher) -> None """Handle a reminder that is triggered asynchronously.""" tracker = self._get_tracker(dispatcher.sender_id) if not tracker: logger.warning("Failed to retrieve or create tracker for sender " "'{}'.".format(dispatcher.sender_id)) return None if (reminder_event.kill_on_user_message and self._has_message_after_reminder(tracker, reminder_event) or not self._is_reminder_still_valid(tracker, reminder_event)): logger.debug("Canceled reminder because it is outdated. " "(event: {} id: {})".format( reminder_event.action_name, reminder_event.name)) else: # necessary for proper featurization, otherwise the previous # unrelated message would influence featurization tracker.update(UserUttered.empty()) action = self._get_action(reminder_event.action_name) should_continue = self._run_action(action, tracker, dispatcher) if should_continue: user_msg = UserMessage(None, dispatcher.output_channel, dispatcher.sender_id) self._predict_and_execute_next_action(user_msg, tracker) # save tracker state to continue conversation from this state self._save_tracker(tracker)
def _reset(self): # type: () -> None """Reset tracker to initial state - doesn't delete events though!.""" self._reset_slots() self._paused = False self.latest_action_name = None self.latest_message = UserUttered.empty() self.latest_bot_utterance = BotUttered.empty() self.followup_action = ACTION_LISTEN_NAME
def _reset(self): # type: () -> None """Reset tracker to initial state - doesn't delete events though!.""" self._reset_slots() self._paused = False self.latest_action_name = None self.latest_message = UserUttered.empty() self.latest_bot_utterance = BotUttered.empty() self.follow_up_action = ACTION_LISTEN_NAME
def _reset(self): # type: () -> None """Reset tracker to initial state - doesn't delete events though!.""" self._reset_slots() self._paused = False self.latest_action_name = None self.latest_message = UserUttered.empty() self.follow_up_action = None self._topic_stack = utils.TopicStack(self.topics, [], self.default_topic)
def handle_reminder(self, reminder_event, dispatcher): # type: (ReminderScheduled, Dispatcher) -> None """Handle a reminder that is triggered asynchronously.""" def has_message_after_reminder(evts): """If the user sent a message after the reminder got scheduled - it might be better to cancel it.""" for e in reversed(evts): if (isinstance(e, ReminderScheduled) and e.name == reminder_event.name): return False elif isinstance(e, UserUttered) and e.text: return True return True # tracker has probably been restarted tracker = self._get_tracker(dispatcher.sender_id) if not tracker: logger.warning("Failed to retrieve or create tracker for sender " "'{}'.".format(dispatcher.sender_id)) return None if (reminder_event.kill_on_user_message and has_message_after_reminder(tracker.events)): logger.debug("Canceled reminder because it is outdated. " "(event: {} id: {})".format(reminder_event.action_name, reminder_event.name)) else: # necessary for proper featurization, otherwise the previous # unrelated message would influence featurization tracker.update(UserUttered.empty()) action = self._get_action(reminder_event.action_name) should_continue = self._run_action(action, tracker, dispatcher) if should_continue: user_msg = UserMessage(None, dispatcher.output_channel, dispatcher.sender_id) self._predict_and_execute_next_action(user_msg, tracker) # save tracker state to continue conversation from this state self._save_tracker(tracker)