def test_session_start_is_not_serialised(domain: Domain): tracker = DialogueStateTracker("default", domain.slots) # the retrieved tracker should be empty assert len(tracker.events) == 0 # add SlotSet event tracker.update(SlotSet("slot", "value")) # add the two SessionStarted events and a user event tracker.update(ActionExecuted(ACTION_SESSION_START_NAME)) tracker.update(SessionStarted()) tracker.update( UserUttered("say something", intent={INTENT_NAME_KEY: "some_intent"})) tracker.update(DefinePrevUserUtteredFeaturization(False)) YAMLStoryWriter().dumps( Story.from_events(tracker.events, "some-story01").story_steps) expected = """version: "2.0" stories: - story: some-story01 steps: - slot_was_set: - slot: value - intent: some_intent """ actual = YAMLStoryWriter().dumps( Story.from_events(tracker.events, "some-story01").story_steps) assert actual == expected
async def test_persist_and_read_test_story(tmp_path: Path, default_domain: Domain): graph = await training.extract_story_graph("data/test_stories/stories.md", default_domain) out_path = tmp_path / "persisted_story.md" Story(graph.story_steps).dump_to_file(str(out_path)) recovered_trackers = await training.load_data( str(out_path), default_domain, use_story_concatenation=False, tracker_limit=1000, remove_duplicates=False, ) existing_trackers = await training.load_data( "data/test_stories/stories.md", default_domain, use_story_concatenation=False, tracker_limit=1000, remove_duplicates=False, ) existing_stories = {t.export_stories() for t in existing_trackers} for t in recovered_trackers: story_str = t.export_stories() assert story_str in existing_stories existing_stories.discard(story_str)
def as_story(self, include_source: bool = False) -> "Story": """Dump the tracker as a story in the Rasa Core story format. Returns the dumped tracker as a string.""" from rasa.shared.core.training_data.structures import Story story_name = (f"{self.sender_id} ({self.sender_source})" if include_source else self.sender_id) return Story.from_events(self.applied_events(), story_name)
def test_session_start_is_not_serialised(default_domain: Domain): tracker = DialogueStateTracker("default", default_domain.slots) # the retrieved tracker should be empty assert len(tracker.events) == 0 # add SlotSet event tracker.update(SlotSet("slot", "value")) # add the two SessionStarted events and a user event tracker.update(ActionExecuted(ACTION_SESSION_START_NAME)) tracker.update(SessionStarted()) tracker.update(UserUttered("say something")) # make sure session start is not serialised story = Story.from_events(tracker.events, "some-story01") expected = """## some-story01 - slot{"slot": "value"} * say something """ assert story.as_story_string(flat=True) == expected