async def _update_tracker_session( self, tracker: DialogueStateTracker, output_channel: OutputChannel, ) -> None: """Check the current session in `tracker` and update it if expired. An 'action_session_start' is run if the latest tracker session has expired, or if the tracker does not yet contain any events (only those after the last restart are considered). Args: tracker: Tracker to inspect. output_channel: Output channel for potential utterances in a custom `ActionSessionStart`. """ if not tracker.applied_events() or self._has_session_expired(tracker): logger.debug( f"Starting a new session for conversation ID '{tracker.sender_id}'." ) await self._run_action( action=self._get_action(ACTION_SESSION_START_NAME), tracker=tracker, output_channel=output_channel, nlg=self.nlg, ) self.tracker_store.save(tracker)
async def _update_tracker_session( self, tracker: DialogueStateTracker, output_channel: OutputChannel, metadata: Optional[Dict] = None, ) -> None: """Check the current session in `tracker` and update it if expired. An 'action_session_start' is run if the latest tracker session has expired, or if the tracker does not yet contain any events (only those after the last restart are considered). Args: metadata: Data sent from client associated with the incoming user message. tracker: Tracker to inspect. output_channel: Output channel for potential utterances in a custom `ActionSessionStart`. """ if not tracker.applied_events() or self._has_session_expired(tracker): logger.debug( f"Starting a new session for conversation ID '{tracker.sender_id}'." ) if metadata: tracker.events.append(SessionStarted(metadata=metadata)) await self._run_action( action=self._get_action(ACTION_SESSION_START_NAME, tracker), # bf tracker=tracker, output_channel=output_channel, nlg=self.nlg, )
def _is_reminder_still_valid(tracker: DialogueStateTracker, reminder_event: ReminderScheduled) -> bool: """Check if the conversation has been restarted after reminder.""" for e in reversed(tracker.applied_events()): if MessageProcessor._is_reminder(e, reminder_event.name): return True return False # not found in applied events --> has been restarted
async def _revert_fallback_events( self, output_channel: OutputChannel, nlg: NaturalLanguageGenerator, tracker: DialogueStateTracker, domain: Domain, events_so_far: List[Event], ) -> List[Event]: revert_events = [UserUtteranceReverted(), UserUtteranceReverted()] temp_tracker = DialogueStateTracker.from_events( tracker.sender_id, tracker.applied_events() + events_so_far + revert_events) while temp_tracker.latest_message and not await self.is_done( output_channel, nlg, temp_tracker, domain, []): temp_tracker.update(revert_events[-1]) revert_events.append(UserUtteranceReverted()) return revert_events