Пример #1
0
def test_deprecation_warning_active_form():
    form = {"name": "my form"}
    state = {"events": [], "sender_id": "old", "active_loop": form}
    tracker = Tracker.from_dict(state)

    with pytest.warns(DeprecationWarning):
        assert tracker.active_form == form
Пример #2
0
    async def run(self, action_call: Dict[Text,
                                          Any]) -> Optional[Dict[Text, Any]]:
        from rasa_sdk.interfaces import Tracker

        action_name = action_call.get("next_action")
        if action_name:
            logger.debug(f"Received request to run '{action_name}'")
            action = self.actions.get(action_name)
            if not action:
                raise ActionNotFoundException(action_name)

            tracker_json = action_call.get("tracker")
            domain = action_call.get("domain", {})
            tracker = Tracker.from_dict(tracker_json)
            dispatcher = CollectingDispatcher()

            if utils.is_coroutine_action(action):
                events = await action(dispatcher, tracker, domain)
            else:
                events = action(dispatcher, tracker, domain)

            if not events:
                # make sure the action did not just return `None`...
                events = []

            validated_events = self.validate_events(events, action_name)
            logger.debug(f"Finished running '{action_name}'")
            return self._create_api_response(validated_events,
                                             dispatcher.messages)
        else:
            logger.warning("Received an action call without an action.")
Пример #3
0
    async def generic_action(self, request):
        action_name = request.get("next_action")
        if action_name:
            _LOGGER.debug("Received request to run '{}'".format(action_name))

            tracker_json = request.get("tracker")
            domain = request.get("domain", {})
            tracker = Tracker.from_dict(tracker_json)
            dispatcher = CollectingDispatcher()

            if action_name.endswith("_form"):
                intent_id = action_name[:-5]
                intent = await self.asm.memory.get(
                    self.config['skill-id'] + "_intents", intent_id)
                gfa = GenericFormAction()
                gfa.set_name(action_name)
                gfa.set_intent(intent)
                gfa.set_domain(domain)
                gfa.set_memory(self.asm.memory)
                events = gfa.run(dispatcher, tracker, domain)

            if not events:
                # make sure the action did not just return `None`...
                events = []

            validated_events = self.validate_events(events, action_name)
            _LOGGER.debug("Finished running '{}'".format(action_name))
        else:
            _LOGGER.warning("Received an action call without an action.")

        return {"events": validated_events, "responses": dispatcher.messages}
Пример #4
0
    def run(self, action_call):
        action_name = action_call.get("next_action")
        if action_name:
            logger.debug("Received request to run '{}'".format(action_name))
            action = self.actions.get(action_name)
            if not action:
                raise Exception(
                    "No registered Action found for name '{}'.".format(action_name)
                )

            tracker_json = action_call.get("tracker")
            domain = action_call.get("domain", {})
            tracker = Tracker.from_dict(tracker_json)
            dispatcher = CollectingDispatcher()

            events = action(dispatcher, tracker, domain)
            if not events:
                # make sure the action did not just return `None`...
                events = []

            validated_events = self.validate_events(events, action_name)
            logger.debug("Finished running '{}'".format(action_name))
            return self._create_api_response(validated_events, dispatcher.messages)
        else:
            logger.warning("Received an action call without an action.")
Пример #5
0
    async def process_actions(self, action_call):
        from rasa_sdk.interfaces import Tracker

        action_name = action_call.get("next_action")
        if action_name and action_name.strip():
            logger.debug(f"Received request to run '{action_name}'")

            tracker_json = action_call["tracker"]
            domain = action_call.get("domain", {})
            tracker = Tracker.from_dict(tracker_json)
            dispatcher = CollectingDispatcher()

            events = await ActionProcessor.process_action(
                dispatcher, tracker, domain, action_name)

            if not events:
                events = []

            validated_events = ActionExecutor.validate_events(
                events, action_name)
            logger.debug(f"Finished running '{action_name}'")
            return ActionExecutor._create_api_response(validated_events,
                                                       dispatcher.messages)

        logger.warning("Received an action call without an action.")
        return None
Пример #6
0
def test_tracker_with_slots():
    form = {"name": "my form"}
    state = {"events": [], "sender_id": "old", "active_loop": form}
    tracker = Tracker.from_dict(state)

    tracker.add_slots([SlotSet("my slot", 5), SlotSet("my slot 2", None)])

    assert tracker.slots["my slot"] == 5
    assert tracker.slots["my slot 2"] is None
Пример #7
0
def test_active_loop_in_tracker_state():
    form = {"name": "my form"}
    state = {"events": [], "sender_id": "old", "active_loop": form}
    tracker = Tracker.from_dict(state)

    assert tracker.current_state()["active_loop"] == form
Пример #8
0
def test_parsing_of_trackers_with_old_active_form_field():
    form = {"name": "my form"}
    state = {"events": [], "sender_id": "old", "active_form": form}
    tracker = Tracker.from_dict(state)

    assert tracker.active_loop == form
Пример #9
0
def test_tracker_active_loop_parsing(active_loop: Dict):
    state = {"events": [], "sender_id": "old", "active_loop": active_loop}
    tracker = Tracker.from_dict(state)

    assert tracker.active_loop == active_loop