def run(self, conversation: Conversation): conversation.flow_position.append(self._id) goto_position = conversation.get_first_goto_position(self) if goto_position is not None: if goto_position == self._id: goto_position = conversation.get_first_goto_position(self) else: raise Exception() print("start_folder_runner,_id=%s" % (self._id)) for index, child in enumerate(self.children): if goto_position is None or index >= goto_position: conversation.flow_position.append(index) if isinstance(child, Output): child.run(conversation) elif isinstance(child, Search): child.run(conversation) elif isinstance(child, Default): child.run(conversation) else: raise NotImplementedError(type(child)) conversation.flow_position.pop() conversation.flow_position.pop()
def run(self, conversation: Conversation): from dialog.elements.goto import Goto from dialog.elements.output import Output from dialog.elements.action import Action handled = False conversation.flow_position.append(self._id) goto_position = conversation.get_first_goto_position(self) if goto_position is not None: if goto_position == self._id: goto_position = conversation.get_first_goto_position(self) else: raise Exception() if self.grammar.run(conversation): for index, child in enumerate(self.children): if goto_position is None or index >= goto_position: conversation.flow_position.append(index) if isinstance(child, Action): child.run(conversation) elif isinstance(child, Output): child.run(conversation) elif isinstance(child, Goto): child.run(conversation) else: raise NotImplementedError(type(child)) conversation.flow_position.pop() handled = True conversation.flow_position.pop() return handled
def run(self, conversation: Conversation): conversation.flow_position.append(self._id) goto_position = conversation.get_first_goto_position(self) if goto_position is not None: if goto_position == self._id: goto_position = conversation.get_first_goto_position(self) else: raise Exception() for index, child in enumerate(self.children): if goto_position is None or index >= goto_position: conversation.flow_position.append(index) if isinstance(child, Prompt): child.run(conversation) elif isinstance(child, GetUserInput): child.run(conversation) elif isinstance(child, Output): child.run(conversation) elif isinstance(child, Goto): child.run(conversation) elif isinstance(child, Input): child.run(conversation) elif isinstance(child, Action): child.run(conversation) else: raise NotImplementedError(child) conversation.flow_position.pop() conversation.flow_position.pop()
def run(self, conversation: Conversation): from dialog.elements import Input, Goto, Folder goto_position = conversation.get_first_goto_position(self) conversation.flow_position.append(self._id) if goto_position is None: raise GetUserInputException(conversation, self) else: if goto_position == self._id: # so now it needs to look through the possible responses goto_position = conversation.get_first_goto_position(self) else: raise Exception() for index, child in enumerate(self.children): if goto_position is None or index >= goto_position: conversation.flow_position.append(index) if isinstance(child, Input): # from dialog.runners.input import InputRunner child.run(conversation) elif isinstance(child, Goto): child.run(conversation) elif isinstance(child, Folder): child.run(conversation) else: raise NotImplementedError(type(child)) conversation.flow_position.pop() conversation.flow_position.pop()
def run(self, conversation: Conversation): from dialog.elements.action import Action from dialog.elements.output import Output from dialog.elements.get_user_input import GetUserInput from dialog.elements.folder import Folder from dialog.elements.search import Search from dialog.elements.get_user_input import GetUserInputException if conversation.flow_position is not None: conversation.goto_position = deque(copy(conversation.flow_position)) conversation.flow_position = [] if conversation.flow_goto_position is not None: # conversation.goto_position = None goto_object = self.ref_ids[conversation.flow_goto_position] try: goto_object.run(conversation) except GetUserInputException as get_user_input: return get_user_input except GotoException as goto_exception: return self.run(conversation) pass # raise NotImplementedError() else: try: self.flow.run(conversation) except GotoException as goto_exception: return self.run(conversation) except GetUserInputException as get_user_input: return get_user_input
def run(self, conversation: Conversation): from dialog.elements import Prompt, GetUserInput, Output, Goto, Action, Input conversation.flow_position.append(self._id) goto_position = conversation.get_first_goto_position(self) if goto_position is not None: if goto_position == self._id: goto_position = conversation.get_first_goto_position(self) else: raise Exception() search_object = self.dialog.ref_ids[self.ref] input_handled = False for index, child in enumerate(search_object.children): if goto_position is None or index >= goto_position: conversation.flow_position.append(index) if isinstance(child, Prompt): child.run(conversation) elif isinstance(child, GetUserInput): child.run(conversation) elif isinstance(child, Output): child.run(conversation) elif isinstance(child, Goto): child.run(conversation) elif isinstance(child, Action): child.run(conversation) elif isinstance(child, Input): if not input_handled: input_handled = child.run(conversation) else: raise NotImplementedError(child) conversation.flow_position.pop() conversation.flow_position.pop()
def run(self, conversation: Conversation): conversation.flow_position = [] conversation.flow_goto_position = self.ref if self.ref in self.dialog.ref_ids: goto_object = self.dialog.ref_ids[self.ref] raise GotoException(conversation) else: raise Exception("can not find,id=%s" % self.ref)
def test_trailing_match(self): conversation = Conversation() conversation.user_input = "hi my name is Rob" actual = Target.run( Mock(), conversation, RegExGrammarItem(pattern=r"\w*My name is (\w+)", dynamic_field_assignments=["user_known_as"])) self.assertTrue(actual) self.assertDictEqual({'user_known_as': 'Rob'}, conversation.current_input_context)
def test_trailing_match(self): conversation = Conversation() conversation.user_input = "hi my name is Rob" actual = Target.run( Mock(), conversation, RegExGrammarItem(pattern=r"\w*My name is (\w+)", dynamic_field_assignments=["user_known_as"]) ) self.assertTrue(actual) self.assertDictEqual( {'user_known_as': 'Rob'}, conversation.current_input_context )
def run(self, conversation: Conversation): matches = re.findall(self.pattern, conversation.user_input, self.flags) if not any(matches): return False elif any(matches) and self.dynamic_field_assignments is None: return True elif len(matches) == len(self.dynamic_field_assignments): assignments = zip(self.dynamic_field_assignments, matches) conversation.current_input_context = {} for key, value in assignments: conversation.current_input_context[key] = value return True else: return False
def run(self, conversation: Conversation): # conversation.flow_position.append(flow._id) goto_position = conversation.get_first_goto_position(self) for index, folder in enumerate(self.folders): if goto_position is None or index >= goto_position: conversation.flow_position.append(index) folder.run(conversation) conversation.flow_position.pop()
def run(self, conversation: Conversation): conversation.flow_position.append(self._id) goto_position = conversation.get_first_goto_position(self) if goto_position is not None: if goto_position == self._id: goto_position = conversation.get_first_goto_position(self) else: raise Exception() for index, child in enumerate(self.children): if goto_position is None or index >= goto_position: conversation.flow_position.append(index) if isinstance(child, Output): child.run(conversation) else: # for now seems important to only have default on here raise NotImplementedError(child) conversation.flow_position.pop() conversation.flow_position.pop()
def run(self, conversation: Conversation): if self.entity_id not in self.dialog.entity_dict: raise Exception() entity_grammar = self.dialog.entity_dict[self.entity_id] search_term = conversation.user_input.strip().lower() if search_term in entity_grammar: conversation.current_input_context = { self.dynamic_field_assignment: entity_grammar[search_term].value } return True else: return False
from dialog.schema.flow import Flow from dialog.schema.variables import Variables dialog = Dialog( flow=Flow().create(), entities=Entities().create(), variables=Variables().create() # { # "folder": [ # MainFolder.create(), # LibraryFolder.create(), # GlobalFolder.create(), # ConceptFolder.create() # ] # } # ), # Entities().create(), # Variables().create() ) user_input = dialog.entry_point(Conversation()) user_input.conversation.user_input = "My name is Rob" after_name_input = dialog.entry_point(user_input.conversation) user_input.conversation.user_input = "Yes" after_yes_shoes_input = dialog.entry_point(user_input.conversation) user_input.conversation.user_input = "high heels" after_style_input = dialog.entry_point(user_input.conversation) pass