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
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)
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)
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)
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)
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)
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