def tracker_from_dialogue_file(filename, domain=None): dialogue = read_dialogue_file(filename) dialogue_topics = set([Topic(t.topic) for t in dialogue.events if isinstance(t, TopicSet)]) if domain is not None: domain = domain else: domain = TemplateDomain.load("examples/default_domain.yml") domain.topics.extend(dialogue_topics) tracker = DialogueStateTracker(dialogue.name, domain.slots, domain.topics, domain.default_topic) tracker.update_from_dialogue(dialogue) return tracker
def test_persist_and_load(self, trained_policy, default_domain, tmpdir): trained_policy.persist(tmpdir.strpath) loaded = trained_policy.__class__.load(tmpdir.strpath, trained_policy.featurizer, trained_policy.max_history) stories = extract_stories_from_file( "data/dsl_stories/stories_defaultdomain.md", default_domain) for story in stories: tracker = DialogueStateTracker("default", default_domain.slots) dialogue = story.as_dialogue("default", default_domain) tracker.update_from_dialogue(dialogue) predicted_probabilities = loaded.predict_action_probabilities( tracker, default_domain) actual_probabilities = trained_policy.predict_action_probabilities( tracker, default_domain) assert predicted_probabilities == actual_probabilities
def test_tracker_duplicate(): filename = "data/test_dialogues/inform_no_change.json" dialogue = read_dialogue_file(filename) dialogue_topics = set( [Topic(t.topic) for t in dialogue.events if isinstance(t, TopicSet)]) domain.topics.extend(dialogue_topics) tracker = DialogueStateTracker(dialogue.name, domain.slots, domain.topics, domain.default_topic) tracker.update_from_dialogue(dialogue) num_actions = len([ event for event in dialogue.events if isinstance(event, ActionExecuted) ]) # There is always one duplicated tracker more than we have actions, # as the tracker also gets duplicated for the # action that would be next (but isn't part of the operations) assert len(list(tracker.generate_all_prior_states())) == num_actions + 1