def process_user_utterance(user_utterance: UserUttered) -> OrderedDict: """Converts a single user utterance into an ordered dict. Args: user_utterance: Original user utterance object. Returns: Dict with a user utterance. """ result = CommentedMap() result[KEY_USER_INTENT] = user_utterance.intent["name"] if hasattr(user_utterance, "inline_comment"): result.yaml_add_eol_comment(user_utterance.inline_comment(), KEY_USER_INTENT) if (YAMLStoryWriter._text_is_real_message(user_utterance) and user_utterance.text): result[KEY_USER_MESSAGE] = LiteralScalarString(user_utterance.text) if len(user_utterance.entities): entities = [] for entity in user_utterance.entities: if entity["value"]: entities.append( OrderedDict([(entity["entity"], entity["value"])])) else: entities.append(entity["entity"]) result[KEY_ENTITIES] = entities return result
def process_user_utterance( user_utterance: UserUttered, is_test_story: bool = False ) -> OrderedDict: """Converts a single user utterance into an ordered dict. Args: user_utterance: Original user utterance object. is_test_story: Identifies if the user utterance should be added to the final YAML or not. Returns: Dict with a user utterance. """ result = CommentedMap() if user_utterance.intent_name and not user_utterance.use_text_for_featurization: result[KEY_USER_INTENT] = user_utterance.intent_name if hasattr(user_utterance, "inline_comment"): result.yaml_add_eol_comment( user_utterance.inline_comment(), KEY_USER_INTENT ) if user_utterance.text and ( # We only print the utterance text if it was an end-to-end prediction user_utterance.use_text_for_featurization # or if we want to print a conversation test story. or is_test_story ): result[KEY_USER_MESSAGE] = LiteralScalarString( rasa.shared.core.events.format_message( user_utterance.text, user_utterance.intent_name, user_utterance.entities, ) ) if len(user_utterance.entities) and not is_test_story: entities = [] for entity in user_utterance.entities: if entity["value"]: entities.append(OrderedDict([(entity["entity"], entity["value"])])) else: entities.append(entity["entity"]) result[KEY_ENTITIES] = entities return result
def process_user_utterance(user_utterance: UserUttered, is_test_story: bool = False) -> OrderedDict: """Converts a single user utterance into an ordered dict. Args: user_utterance: Original user utterance object. is_test_story: Identifies if the user utterance should be added to the final YAML or not. Returns: Dict with a user utterance. """ result = CommentedMap() if user_utterance.intent_name and not user_utterance.use_text_for_featurization: result[KEY_USER_INTENT] = ( user_utterance.full_retrieval_intent_name if user_utterance.full_retrieval_intent_name else user_utterance.intent_name) entities = [] if len(user_utterance.entities) and not is_test_story: for entity in user_utterance.entities: if "value" in entity: if hasattr(user_utterance, "inline_comment_for_entity"): # FIXME: to fix this type issue, WronglyClassifiedUserUtterance # needs to be imported but it's currently outside # of `rasa.shared` for predicted in user_utterance.predicted_entities: # type: ignore[attr-defined] # noqa: E501 if predicted["start"] == entity["start"]: commented_entity = user_utterance.inline_comment_for_entity( # type: ignore[attr-defined] # noqa: E501 predicted, entity) if commented_entity: entity_map = CommentedMap([ (entity["entity"], entity["value"]) ]) entity_map.yaml_add_eol_comment( commented_entity, entity["entity"]) entities.append(entity_map) else: entities.append( OrderedDict([(entity["entity"], entity["value"])])) else: entities.append( OrderedDict([(entity["entity"], entity["value"])])) else: entities.append(entity["entity"]) result[KEY_ENTITIES] = entities if hasattr(user_utterance, "inline_comment"): # FIXME: to fix this type issue, WronglyClassifiedUserUtterance needs to # be imported but it's currently outside of `rasa.shared` comment = user_utterance.inline_comment( # type: ignore[attr-defined] force_comment_generation=not entities) if comment: result.yaml_add_eol_comment(comment, KEY_USER_INTENT) if user_utterance.text and ( # We only print the utterance text if it was an end-to-end prediction user_utterance.use_text_for_featurization # or if we want to print a conversation test story. or is_test_story): result[KEY_USER_MESSAGE] = LiteralScalarString( rasa.shared.core.events.format_message( user_utterance.text, user_utterance.intent_name, user_utterance.entities, )) return result