Exemple #1
0
    async def add_chitchat_to_story(self,
                                    story,
                                    domain: Domain,
                                    indexes: List,
                                    interpreter: "NaturalLanguageInterpreter" = RegexInterpreter()):
        # Delete Indexes, if they greater then the length of the story or lower 0
        indexes = sorted(set(indexes))
        indexes = [i for i in indexes if i >= 0 and i < len(story.events)]
        to_add = 0
        for index in indexes:
            index += to_add
            # get last Utter
            last_utter = None
            if index - 1 >= 0:
                last_utter = story.events[index - 1]

            # Intent
            intent = 'asdfwe'
            parse_data = await interpreter.parse(intent)
            utterance = UserUttered(
                intent, parse_data.get("intent"), parse_data.get("entities"), parse_data
            )
            intent_name = utterance.intent.get("name")
            if domain and intent_name not in domain.intents:
                raise_warning(
                    f"Found unknown intent '{intent_name}'. "
                    "Please, make sure that all intents are "
                    "listed in your domain yaml.",
                    UserWarning,
                )
            # Utter
            # Copyied at dsl.py
            # def add_event(self, event_name, parameters):
            parameters = {}
            event_name = "utter_asdfwe"
            # add 'name' only if event is not a SlotSet,
            # because there might be a slot with slot_key='name'
            parameters["name"] = event_name

            parsed_events = Event.from_story_string(
                event_name, parameters, default=ActionExecuted
            )
            if parsed_events is None:
                raise StoryParseError(
                    "Unknown event '{}'. It is Neither an event "
                    "nor an action).".format(event_name)
                )

            # Add to Story
            story.events.insert(index, utterance)
            index += 1
            to_add += 1
            for parsed_event in parsed_events:
                story.events.insert(index, parsed_event)
                index += 1
                to_add += 1

            if last_utter and self.helper.get_param('consultation', False):
                story.events.insert(index, last_utter)
        return story
Exemple #2
0
 async def _add_user_messages(self, messages, line_num):
     if not self.current_step_builder:
         raise StoryParseError("User message '{}' at invalid location. "
                               "Expected story start.".format(messages))
     parsed_messages = await asyncio.gather(
         *[self._parse_message(m, line_num) for m in messages])
     self.current_step_builder.add_user_messages(parsed_messages)
Exemple #3
0
 async def _add_user_messages(self, messages: List[Text],
                              line_num: int) -> None:
     if not self.current_step_builder:
         raise StoryParseError("User message '{}' at invalid location. "
                               "Expected story start.".format(messages))
     parsed_messages = [self._parse_message(m, line_num) for m in messages]
     self.current_step_builder.add_user_messages(parsed_messages,
                                                 self.unfold_or_utterances)
Exemple #4
0
    def _add_checkpoint(self, name: Text,
                        conditions: Optional[Dict[Text, Any]]) -> None:

        # Ensure story part already has a name
        if not self.current_step_builder:
            raise StoryParseError("Checkpoint '{}' is at an invalid location. "
                                  "Expected a story start.".format(name))

        self.current_step_builder.add_checkpoint(name, conditions)
Exemple #5
0
    def add_event(self, event_name, parameters):

        # add 'name' only if event is not a SlotSet,
        # because there might be a slot with slot_key='name'
        if "name" not in parameters and event_name != SlotSet.type_name:
            parameters["name"] = event_name

        parsed_events = Event.from_story_string(event_name, parameters,
                                                default=ActionExecuted)
        if parsed_events is None:
            raise StoryParseError("Unknown event '{}'. It is Neither an event "
                                  "nor an action).".format(event_name))
        if self.current_step_builder is None:
            raise StoryParseError("Failed to handle event '{}'. There is no "
                                  "started story block available. "
                                  "".format(event_name))

        for p in parsed_events:
            self.current_step_builder.add_event(p)
Exemple #6
0
    async def _add_e2e_messages(self, e2e_messages: List[Text],
                                line_num: int) -> None:
        if not self.current_step_builder:
            raise StoryParseError("End-to-end message '{}' at invalid "
                                  "location. Expected story start."
                                  "".format(e2e_messages))

        parsed_messages = []
        for m in e2e_messages:
            message = self.parse_e2e_message(m)
            parsed = self._parse_message(message.get(TEXT), line_num)
            parsed_messages.append(parsed)
        self.current_step_builder.add_user_messages(parsed_messages)
Exemple #7
0
    async def add_e2e_messages(self, e2e_messages, line_num):
        if not self.current_step_builder:
            raise StoryParseError("End-to-end message '{}' at invalid "
                                  "location. Expected story start."
                                  "".format(e2e_messages))
        e2e_reader = EndToEndReader()
        parsed_messages = []
        for m in e2e_messages:
            message = e2e_reader._parse_item(m)
            parsed = await self._parse_message(message.text, line_num)

            parsed.parse_data["true_intent"] = message.data["true_intent"]
            parsed.parse_data["true_entities"] = \
                message.data.get("entities") or []
            parsed_messages.append(parsed)
        self.current_step_builder.add_user_messages(parsed_messages)
    def create_action(self, action_name):
        # Utter
        # Copyied at dsl.py
        # def add_event(self, event_name, parameters):
        parameters = {}
        # add 'name' only if event is not a SlotSet,
        # because there might be a slot with slot_key='name'
        parameters["name"] = action_name

        parsed_events = Event.from_story_string(action_name,
                                                parameters,
                                                default=ActionExecuted)
        if parsed_events is None:
            raise StoryParseError("Unknown event '{}'. It is Neither an event "
                                  "nor an action).".format(action_name))
        return parsed_events