def tracker(self, default_domain): return DialogueStateTracker(UserMessage.DEFAULT_SENDER_ID, default_domain.slots)
def tracker(self, domain_with_mapping): return DialogueStateTracker( UserMessage.DEFAULT_SENDER_ID, domain_with_mapping.slots )
def default_tracker(default_domain): return DialogueStateTracker("my-sender", default_domain.slots)
def framebot_tracker(framebot_domain): return DialogueStateTracker("my-sender-1", framebot_domain.slots)
def template_sender_tracker(default_domain): return DialogueStateTracker("template-sender", default_domain.slots)
def init_tracker(self, sender_id): return DialogueStateTracker( sender_id, self.domain.slots if self.domain else None, max_event_history=self.max_event_history, )
def default_tracker(default_domain): import uuid uid = str(uuid.uuid1()) return DialogueStateTracker(uid, default_domain.slots)
async def test_persist_form_story(tmpdir): domain = Domain.load("data/test_domains/form.yml") tracker = DialogueStateTracker("", domain.slots) story = ("* greet\n" " - utter_greet\n" "* start_form\n" " - some_form\n" ' - form{"name": "some_form"}\n' "* default\n" " - utter_default\n" " - some_form\n" "* stop\n" " - utter_ask_continue\n" "* affirm\n" " - some_form\n" "* stop\n" " - utter_ask_continue\n" " - action_listen\n" "* form: inform\n" " - some_form\n" ' - form{"name": null}\n' "* goodbye\n" " - utter_goodbye\n") # simulate talking to the form events = [ UserUttered(intent={"name": "greet"}), ActionExecuted("utter_greet"), ActionExecuted("action_listen"), # start the form UserUttered(intent={"name": "start_form"}), ActionExecuted("some_form"), Form("some_form"), ActionExecuted("action_listen"), # out of form input UserUttered(intent={"name": "default"}), ActionExecutionRejected("some_form"), ActionExecuted("utter_default"), ActionExecuted("some_form"), ActionExecuted("action_listen"), # out of form input UserUttered(intent={"name": "stop"}), ActionExecutionRejected("some_form"), ActionExecuted("utter_ask_continue"), ActionExecuted("action_listen"), # out of form input but continue with the form UserUttered(intent={"name": "affirm"}), FormValidation(False), ActionExecuted("some_form"), ActionExecuted("action_listen"), # out of form input UserUttered(intent={"name": "stop"}), ActionExecutionRejected("some_form"), ActionExecuted("utter_ask_continue"), ActionExecuted("action_listen"), # form input UserUttered(intent={"name": "inform"}), FormValidation(True), ActionExecuted("some_form"), ActionExecuted("action_listen"), Form(None), UserUttered(intent={"name": "goodbye"}), ActionExecuted("utter_goodbye"), ActionExecuted("action_listen"), ] [tracker.update(e) for e in events] assert story in tracker.export_stories()
] EXAMPLE_DOMAINS = [ DEFAULT_DOMAIN_PATH_WITH_SLOTS, DEFAULT_DOMAIN_PATH_WITH_SLOTS_AND_NO_ACTIONS, DEFAULT_DOMAIN_PATH_WITH_MAPPING, "examples/formbot/domain.yml", "examples/moodbot/domain.yml", "examples/restaurantbot/domain.yml", ] templates = { "utter_ask_rephrase": [{"text": "can you rephrase that?"}], "utter_restart": [{"text": "congrats, you've restarted me!"}], "utter_back": [{"text": "backing up..."}], "utter_invalid": [{"text": "a template referencing an invalid {variable}."}], "utter_buttons": [ { "text": "button message", "buttons": [ {"payload": "button1", "title": "button1"}, {"payload": "button2", "title": "button2"}, ], } ], } template_nlg = TemplatedNaturalLanguageGenerator(templates) default_channel = CollectingOutputChannel() default_domain = Domain.load(DEFAULT_DOMAIN_PATH_WITH_SLOTS) default_nlg = TemplatedNaturalLanguageGenerator(default_domain.templates) default_tracker = DialogueStateTracker("my-sender", default_domain.slots) template_sender_tracker = DialogueStateTracker("template-sender", default_domain.slots)
async def test_restart(default_dispatcher_collecting, default_domain): tracker = DialogueStateTracker("default", default_domain.slots) events = await ActionRestart().run(default_dispatcher_collecting, tracker, default_domain) assert events == [Restarted()]
async def test_remote_action_logs_events(default_dispatcher_collecting, default_domain): tracker = DialogueStateTracker("default", default_domain.slots) endpoint = EndpointConfig("https://example.com/webhooks/actions") remote_action = action.RemoteAction("my_action", endpoint) response = { "events": [{ "event": "slot", "value": "rasa", "name": "name" }], "responses": [{ "text": "test text", "buttons": [{ "title": "cheap", "payload": "cheap" }] }, { "template": "utter_greet" }] } with aioresponses() as mocked: mocked.post('https://example.com/webhooks/actions', payload=response) events = await remote_action.run(default_dispatcher_collecting, tracker, default_domain) r = latest_request(mocked, 'post', "https://example.com/webhooks/actions") assert r assert json_of_latest_request(r) == { 'domain': default_domain.as_dict(), 'next_action': 'my_action', 'sender_id': 'default', 'version': rasa.__version__, 'tracker': { 'latest_message': { 'entities': [], 'intent': {}, 'text': None }, 'active_form': {}, 'latest_action_name': None, 'sender_id': 'default', 'paused': False, 'followup_action': 'action_listen', 'latest_event_time': None, 'slots': { 'name': None }, 'events': [], 'latest_input_channel': None } } assert events == [SlotSet("name", "rasa")] channel = default_dispatcher_collecting.output_channel assert channel.messages == [{ "text": "test text", "recipient_id": "my-sender", "buttons": [{ "title": "cheap", "payload": "cheap" }] }, { "text": "hey there None!", "recipient_id": "my-sender" }]