def from_dict( cls, sender_id: Text, events_as_dict: List[Dict[Text, Any]], slots: Optional[List[Slot]] = None, max_event_history: Optional[int] = None, ) -> "DialogueStateTracker": """Create a tracker from dump. The dump should be an array of dumped events. When restoring the tracker, these events will be replayed to recreate the state.""" evts = events.deserialise_events(events_as_dict) return cls.from_events(sender_id, evts, slots, max_event_history)
def test_put_tracker(rasa_app: SanicTestClient): data = [event.as_dict() for event in test_events] _, response = rasa_app.put( "/conversations/pushtracker/tracker/events", json=data, headers={"Content-Type": rasa.server.JSON_CONTENT_TYPE}, ) content = response.json assert response.status == 200 assert len(content["events"]) == len(test_events) assert content["sender_id"] == "pushtracker" _, tracker_response = rasa_app.get("/conversations/pushtracker/tracker") tracker = tracker_response.json assert tracker is not None evts = tracker.get("events") assert events.deserialise_events(evts) == test_events
async def run( self, output_channel: "OutputChannel", nlg: "NaturalLanguageGenerator", tracker: "DialogueStateTracker", domain: "Domain", ) -> List[Event]: json_body = self._action_call_format(tracker, domain) if not self.action_endpoint: logger.error("The model predicted the custom action '{}', " "but you didn't configure an endpoint to " "run this custom action. Please take a look at " "the docs and set an endpoint configuration via the " "--endpoints flag. " "{}/core/actions" "".format(self.name(), DOCS_BASE_URL)) raise Exception("Failed to execute custom action.") try: logger.debug("Calling action endpoint to run action '{}'.".format( self.name())) response = await self.action_endpoint.request( json=json_body, method="post", timeout=DEFAULT_REQUEST_TIMEOUT) self._validate_action_result(response) events_json = response.get("events", []) responses = response.get("responses", []) bot_messages = await self._utter_responses(responses, output_channel, nlg, tracker) evts = events.deserialise_events(events_json) return bot_messages + evts except ClientResponseError as e: if e.status == 400: response_data = json.loads(e.text) exception = ActionExecutionRejection( response_data["action_name"], response_data.get("error")) logger.error(exception.message) raise exception else: raise Exception("Failed to execute custom action.") from e except aiohttp.ClientConnectionError as e: logger.error("Failed to run custom action '{}'. Couldn't connect " "to the server at '{}'. Is the server running? " "Error: {}".format(self.name(), self.action_endpoint.url, e)) raise Exception("Failed to execute custom action.") except aiohttp.ClientError as e: # not all errors have a status attribute, but # helpful to log if they got it # noinspection PyUnresolvedReferences status = getattr(e, "status", None) logger.error("Failed to run custom action '{}'. Action server " "responded with a non 200 status code of {}. " "Make sure your action server properly runs actions " "and returns a 200 once the action is executed. " "Error: {}".format(self.name(), status, e)) raise Exception("Failed to execute custom action.")