def _user_intent_from_step( self, step: Dict[Text, Any]) -> Tuple[Text, Optional[Text]]: try: user_intent = step.get(KEY_USER_INTENT, "").strip() except AttributeError: rasa.shared.utils.io.raise_warning( f"Issue found in '{self.source_name}':\n" f"Missing intent value in {self._get_item_title()} step: {step} .", docs=self._get_docs_link(), ) user_intent = "" if not user_intent and KEY_USER_MESSAGE not in step: rasa.shared.utils.io.raise_warning( f"Issue found in '{self.source_name}':\n" f"User utterance cannot be empty. " f"This {self._get_item_title()} step will be skipped:\n" f"{step}", docs=self._get_docs_link(), ) if user_intent.startswith(INTENT_MESSAGE_PREFIX): rasa.shared.utils.io.raise_warning( f"Issue found in '{self.source_name}':\n" f"User intent '{user_intent}' starts with " f"'{INTENT_MESSAGE_PREFIX}'. This is not required.", docs=self._get_docs_link(), ) # Remove leading slash user_intent = user_intent[1:] # StoryStep should never contain a full retrieval intent, only the base intent. # However, users can specify full retrieval intents in their test stories file # for the NLU testing purposes. base_intent, response_key = Message.separate_intent_response_key( user_intent) if response_key and not self.is_test_stories_file(self.source_name): rasa.shared.utils.io.raise_warning( f"Issue found in '{self.source_name}' while parsing story " f"{self._get_item_title()}:\n" f"User intent '{user_intent}' is a full retrieval intent. " f"Stories shouldn't contain full retrieval intents. " f"Rasa Open Source will only use base intent '{base_intent}' " f"for training.", docs=self._get_docs_link(), ) return (base_intent, user_intent) if response_key else (base_intent, None)
def _validate_that_utterance_is_in_domain(self, utterance: UserUttered) -> None: intent_name = utterance.intent.get(INTENT_NAME_KEY) # check if this is a retrieval intent # in this case check only for the base intent in domain intent_name = Message.separate_intent_response_key(intent_name)[0] if not self.domain: logger.debug("Skipped validating if intent is in domain as domain " "is `None`.") return if intent_name not in self.domain.intents: rasa.shared.utils.io.raise_warning( f"Issue found in '{self.source_name}': \n" f"Found intent '{intent_name}' in stories which is not part of the " f"domain.", docs=DOCS_URL_STORIES, )