async def test_run_end_to_end_utterance_action(): end_to_end_utterance = "Hi" domain = Domain.from_yaml( textwrap.dedent(f""" actions: - my_action {KEY_E2E_ACTIONS}: - {end_to_end_utterance} - Bye Bye """)) e2e_action = action.action_for_name_or_text("Hi", domain, None) events = await e2e_action.run( CollectingOutputChannel(), TemplatedNaturalLanguageGenerator(domain.templates), DialogueStateTracker.from_events("sender", evts=[]), domain, ) assert events == [ BotUttered( end_to_end_utterance, { "elements": None, "quick_replies": None, "buttons": None, "attachment": None, "image": None, "custom": None, }, {}, ) ]
def test_domain_action_instantiation(): domain = Domain( intents=[{ "chitchat": { "is_retrieval_intent": True } }], entities=[], slots=[], templates={}, action_names=["my_module.ActionTest", "utter_test", "utter_chitchat"], forms={}, ) instantiated_actions = [ action.action_for_name_or_text(action_name, domain, None) for action_name in domain.action_names_or_texts ] assert len(instantiated_actions) == 14 assert instantiated_actions[0].name() == ACTION_LISTEN_NAME assert instantiated_actions[1].name() == ACTION_RESTART_NAME assert instantiated_actions[2].name() == ACTION_SESSION_START_NAME assert instantiated_actions[3].name() == ACTION_DEFAULT_FALLBACK_NAME assert instantiated_actions[4].name() == ACTION_DEACTIVATE_LOOP_NAME assert instantiated_actions[5].name() == ACTION_REVERT_FALLBACK_EVENTS_NAME assert instantiated_actions[6].name( ) == ACTION_DEFAULT_ASK_AFFIRMATION_NAME assert instantiated_actions[7].name() == ACTION_DEFAULT_ASK_REPHRASE_NAME assert instantiated_actions[8].name() == ACTION_TWO_STAGE_FALLBACK_NAME assert instantiated_actions[9].name() == ACTION_BACK_NAME assert instantiated_actions[10].name() == RULE_SNIPPET_ACTION_NAME assert instantiated_actions[11].name() == "my_module.ActionTest" assert instantiated_actions[12].name() == "utter_test" assert instantiated_actions[13].name() == "utter_chitchat"
async def _ask_for_slot( self, domain: Domain, nlg: NaturalLanguageGenerator, output_channel: OutputChannel, slot_name: Text, tracker: DialogueStateTracker, ) -> List[Event]: logger.debug(f"Request next slot '{slot_name}'") action_to_ask_for_next_slot = self._name_of_utterance(domain, slot_name) if not action_to_ask_for_next_slot: # Use a debug log as the user might have asked as part of a custom action logger.debug( f"There was no action found to ask for slot '{slot_name}' " f"name to be filled." ) return [] action_to_ask_for_next_slot = action.action_for_name_or_text( action_to_ask_for_next_slot, domain, self.action_endpoint ) return await action_to_ask_for_next_slot.run( output_channel, nlg, tracker, domain )
def test_get_form_action_if_not_in_forms(): form_action_name = "my_business_logic" domain = Domain.from_yaml( textwrap.dedent(""" actions: - my_action """)) with pytest.raises(ActionNotFoundException): assert not action.action_for_name_or_text(form_action_name, domain, None)
async def _ask_rephrase( self, output_channel: OutputChannel, nlg: NaturalLanguageGenerator, tracker: DialogueStateTracker, domain: Domain, ) -> List[Event]: rephrase = action.action_for_name_or_text( ACTION_DEFAULT_ASK_REPHRASE_NAME, domain, self._action_endpoint) return await rephrase.run(output_channel, nlg, tracker, domain)
async def _ask_affirm( self, output_channel: OutputChannel, nlg: NaturalLanguageGenerator, tracker: DialogueStateTracker, domain: Domain, ) -> List[Event]: affirm_action = action.action_for_name_or_text( ACTION_DEFAULT_ASK_AFFIRMATION_NAME, domain, self._action_endpoint) return await affirm_action.run(output_channel, nlg, tracker, domain)
async def _give_up( self, output_channel: OutputChannel, nlg: NaturalLanguageGenerator, tracker: DialogueStateTracker, domain: Domain, ) -> List[Event]: fallback = action.action_for_name_or_text( ACTION_DEFAULT_FALLBACK_NAME, domain, self._action_endpoint ) return await fallback.run(output_channel, nlg, tracker, domain)
def test_overridden_form_action(): form_action_name = "my_business_logic" domain = Domain.from_yaml( textwrap.dedent(f""" actions: - my_action - {form_action_name} forms: {form_action_name}: """)) actual = action.action_for_name_or_text(form_action_name, domain, None) assert isinstance(actual, RemoteAction)
def test_get_form_action_with_rasa_open_source_1_forms(): form_action_name = "my_business_logic" with pytest.warns(FutureWarning): domain = Domain.from_yaml( textwrap.dedent(f""" actions: - my_action forms: - {form_action_name} """)) actual = action.action_for_name_or_text(form_action_name, domain, None) assert isinstance(actual, RemoteAction)
def test_get_form_action(slot_mapping: Text): form_action_name = "my_business_logic" domain = Domain.from_yaml( textwrap.dedent(f""" actions: - my_action forms: {form_action_name}: {slot_mapping} """)) actual = action.action_for_name_or_text(form_action_name, domain, None) assert isinstance(actual, FormAction)
def test_get_end_to_end_utterance_action(end_to_end_utterance: Text): domain = Domain.from_yaml( textwrap.dedent(f""" actions: - my_action {KEY_E2E_ACTIONS}: - {end_to_end_utterance} - Bye Bye """)) actual = action.action_for_name_or_text(end_to_end_utterance, domain, None) assert isinstance(actual, ActionEndToEndResponse) assert actual.name() == end_to_end_utterance