def test_rule_and_params(self): domain = XMLDomainReader.extract_domain(TestRuleAndParams.domain_file) system = DialogueSystem(domain) system.get_settings().show_gui = False system.start_system() assert system.get_content("theta_moves").to_continuous().get_function().get_mean()[0] == pytest.approx(0.2, abs=0.02) assert system.get_content("a_u^p").get_prob("I want left") == pytest.approx(0.12, abs=0.03) assert len(system.get_state().get_chance_node("theta_moves").get_output_node_ids()) == 1 assert system.get_state().has_chance_node("movements") assert isinstance(system.get_state().get_chance_node("movements").get_distrib(), AnchoredRule) t = CategoricalTableBuilder("a_u") t.add_row("I want left", 0.8) t.add_row("I want forward", 0.1) system.add_content(t.build()) assert len(system.get_state().get_chance_node("theta_moves").get_output_node_ids()) == 0 assert not system.get_state().has_chance_node("movements") assert system.get_content("theta_moves").to_continuous().get_function().get_mean()[0] == pytest.approx(2.0 / 6.0, abs=0.07) system.add_content("a_m", "turning left") assert system.get_content("a_u^p").get_prob("I want left") == pytest.approx(0.23, abs=0.04) assert len(system.get_state().get_chance_node("theta_moves").get_output_node_ids()) == 1
def test_3(self): system = DialogueSystem(TestRule2.domain) system.get_settings().show_gui = False system.detach_module(ForwardPlanner) eq_factor = EquivalenceDistribution.none_prob EquivalenceDistribution.none_prob = 0.1 old_prune_threshold = StatePruner.value_pruning_threshold StatePruner.value_pruning_threshold = 0.0 system.start_system() TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(A)", 0.6) TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(B)", -2.6) builder = CategoricalTableBuilder("a_u") builder.add_row("Ask(B)", 0.8) builder.add_row("None", 0.2) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) system.add_content(builder.build()) TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(A)", -4.35) TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(B)", 2.357) EquivalenceDistribution.none_prob = eq_factor StatePruner.value_pruning_threshold = old_prune_threshold
def test_IS2013(self): domain = XMLDomainReader.extract_domain(TestLearning.domain_file) params = XMLStateReader.extract_bayesian_network(TestLearning.parameters_file, "parameters") domain.set_parameters(params) system = DialogueSystem(domain) system.get_settings().show_gui = False system.detach_module(ForwardPlanner) Settings.nr_samples = Settings.nr_samples * 3 Settings.max_sampling_time = Settings.max_sampling_time * 10 system.start_system() init_mean = system.get_content("theta_1").to_continuous().get_function().get_mean() builder = CategoricalTableBuilder("a_u") builder.add_row("Move(Left)", 1.0) builder.add_row("Move(Right)", 0.0) builder.add_row("None", 0.0) system.add_content(builder.build()) system.get_state().remove_nodes(system.get_state().get_utility_node_ids()) system.get_state().remove_nodes(system.get_state().get_action_node_ids()) after_mean = system.get_content("theta_1").to_continuous().get_function().get_mean() assert after_mean[0] - init_mean[0] > 0.04 assert after_mean[1] - init_mean[1] < 0.04 assert after_mean[2] - init_mean[2] < 0.04 assert after_mean[3] - init_mean[3] < 0.04 assert after_mean[4] - init_mean[4] < 0.04 assert after_mean[5] - init_mean[5] < 0.04 assert after_mean[6] - init_mean[6] < 0.04 assert after_mean[7] - init_mean[7] < 0.04 Settings.nr_samples = int(Settings.nr_samples / 3) Settings.max_sampling_time = Settings.max_sampling_time / 10
def test_planning4(self): system = DialogueSystem(TestPlanning.domain3) system.get_settings().show_gui = False system.get_settings().horizon = 3 system.start_system() t1 = CategoricalTableBuilder("a_u") t1.add_row("Ask(Coffee)", 0.95) t1.add_row("Ask(Tea)", 0.02) system.add_content(t1.build()) TestPlanning.inference.check_prob(system.get_state(), "a_m", "Do(Coffee)", 1.0)
def test_param_4(self): system = DialogueSystem(TestParameters.domain1) system.detach_module(ForwardPlanner) system.get_settings().show_gui = False system.start_system() rules = TestParameters.domain1.get_models()[1].get_rules() outputs = rules[0].get_output(Assignment("u_u", "my name is")) o = Effect(BasicEffect("u_u^p", "Pierre")) assert isinstance(outputs.get_parameter(o), SingleParameter) input = Assignment("theta_5", ValueFactory.create("[0.36, 0.24, 0.40]")) assert outputs.get_parameter(o).get_value(input) == pytest.approx(0.36, abs=0.01) system.get_state().remove_nodes(system.get_state().get_action_node_ids()) system.get_state().remove_nodes(system.get_state().get_utility_node_ids()) system.add_content("u_u", "my name is") system.get_state().remove_nodes(system.get_state().get_action_node_ids()) system.get_state().remove_nodes(system.get_state().get_utility_node_ids()) system.add_content("u_u", "Pierre") system.get_state().remove_nodes(system.get_state().get_action_node_ids()) system.get_state().remove_nodes(system.get_state().get_utility_node_ids()) system.add_content("u_u", "my name is") system.get_state().remove_nodes(system.get_state().get_action_node_ids()) system.get_state().remove_nodes(system.get_state().get_utility_node_ids()) system.add_content("u_u", "Pierre") assert system.get_state().query_prob("theta_5").to_continuous().get_function().get_mean()[0] == pytest.approx(0.3, abs=0.12)
def test_1(self): system = DialogueSystem(TestRule2.domain) eq_factor = EquivalenceDistribution.none_prob EquivalenceDistribution.none_prob = 0.1 old_prune_threshold = StatePruner.value_pruning_threshold StatePruner.value_pruning_threshold = 0.0 system.get_settings().show_gui = False system.detach_module(ForwardPlanner) system.start_system() TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(A)", 0.63) TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(B)", 0.27) TestRule2.inference.check_prob(system.get_state(), "a_u^p", "None", 0.1) builder = CategoricalTableBuilder("a_u") builder.add_row("Ask(B)", 0.8) builder.add_row("None", 0.2) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) system.add_content(builder.build()) TestRule2.inference.check_prob(system.get_state(), "i_u", "Want(A)", 0.090) TestRule2.inference.check_prob(system.get_state(), "i_u", "Want(B)", 0.91) TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(B)", 0.91 * 0.9) TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(A)", 0.09 * 0.9) TestRule2.inference.check_prob(system.get_state(), "a_u^p", "None", 0.1) TestRule2.inference.check_prob(system.get_state(), "a_u", "Ask(B)", 0.918) TestRule2.inference.check_prob(system.get_state(), "a_u", "None", 0.081) EquivalenceDistribution.none_prob = eq_factor StatePruner.value_pruning_threshold = old_prune_threshold
def test_param_2(self): InferenceChecks.exact_threshold = 0.1 system = DialogueSystem(TestParameters.domain1) system.detach_module(ForwardPlanner) system.get_settings().show_gui = False assert system.get_state().has_chance_node("theta_3") TestParameters.inference.check_cdf(system.get_state(), "theta_3", 0.6, 0.0) TestParameters.inference.check_cdf(system.get_state(), "theta_3", 0.8, 0.5) TestParameters.inference.check_cdf(system.get_state(), "theta_3", 0.95, 1.0) system.start_system() system.add_content("u_u", "brilliant") distrib = system.get_content("a_u") assert distrib.get_prob("approval") == pytest.approx(0.8, abs=0.05)
def test_2(self): system = DialogueSystem(TestRule2.domain) system.get_settings().show_gui = False system.detach_module(ForwardPlanner) eq_factor = EquivalenceDistribution.none_prob EquivalenceDistribution.none_prob = 0.1 old_prune_threshold = StatePruner.value_pruning_threshold StatePruner.value_pruning_threshold = 0.0 system.start_system() TestRule2.inference.check_prob(system.get_state(), "u_u2^p", "Do A", 0.216) TestRule2.inference.check_prob(system.get_state(), "u_u2^p", "Please do C", 0.027) TestRule2.inference.check_prob(system.get_state(), "u_u2^p", "Could you do B?", 0.054) TestRule2.inference.check_prob(system.get_state(), "u_u2^p", "Could you do A?", 0.162) TestRule2.inference.check_prob(system.get_state(), "u_u2^p", "none", 0.19) builder = CategoricalTableBuilder("u_u2") builder.add_row("Please do B", 0.4) builder.add_row("Do B", 0.4) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) system.add_content(builder.build()) TestRule2.inference.check_prob(system.get_state(), "i_u2", "Want(B)", 0.654) TestRule2.inference.check_prob(system.get_state(), "i_u2", "Want(A)", 0.1963) TestRule2.inference.check_prob(system.get_state(), "i_u2", "Want(C)", 0.0327) TestRule2.inference.check_prob(system.get_state(), "i_u2", "none", 0.1168) EquivalenceDistribution.none_prob = eq_factor StatePruner.value_pruning_threshold = old_prune_threshold
def test_param_1(self): InferenceChecks.exact_threshold = 0.1 system = DialogueSystem(TestParameters.domain1) system.detach_module(ForwardPlanner) system.get_settings().show_gui = False assert system.get_state().has_chance_node("theta_1") TestParameters.inference.check_cdf(system.get_state(), "theta_1", 0.5, 0.5) TestParameters.inference.check_cdf(system.get_state(), "theta_1", 5., 0.99) TestParameters.inference.check_cdf(system.get_state(), "theta_2", 1., 0.07) TestParameters.inference.check_cdf(system.get_state(), "theta_2", 2., 0.5) system.start_system() system.add_content("u_u", "hello there") utils = ((SamplingAlgorithm()).query_util(system.get_state(), "u_m'")) assert utils.get_util(Assignment("u_m'", "yeah yeah talk to my hand")) > 0 assert utils.get_util(Assignment("u_m'", "so interesting!")) > 1.7 assert utils.get_util(Assignment("u_m'", "yeah yeah talk to my hand")) < utils.get_util(Assignment("u_m'", "so interesting!")) assert len(system.get_state().get_node_ids()) == 11
def test_6(self): InferenceChecks.exact_threshold = 0.06 system = DialogueSystem(TestRule1.domain) system.detach_module(ForwardPlanner) system.get_settings().show_gui = False system.start_system() builder = CategoricalTableBuilder("var1") builder.add_row("value2", 0.9) system.add_content(builder.build()) TestRule1.inference.check_prob(system.get_state(), "o", "and we have var1=value2", 0.9) TestRule1.inference.check_prob(system.get_state(), "o", "and we have localvar=value1", 0.05) TestRule1.inference.check_prob(system.get_state(), "o", "and we have localvar=value3", 0.04) StatePruner.enable_reduction = True
def test_param_5(self): system = DialogueSystem(TestParameters.domain2) system.detach_module(ForwardPlanner) system.get_settings().show_gui = False system.start_system() rules = TestParameters.domain2.get_models()[0].get_rules() outputs = rules[0].get_output(Assignment("u_u", "brilliant")) o = Effect(BasicEffect("a_u", "approval")) assert isinstance(outputs.get_parameter(o), ComplexParameter) input = Assignment([Assignment("theta_6", 2.1), Assignment("theta_7", 1.3)]) assert outputs.get_parameter(o).get_value(input) == pytest.approx(0.74, abs=0.01) system.get_state().remove_nodes(system.get_state().get_action_node_ids()) system.get_state().remove_nodes(system.get_state().get_utility_node_ids()) system.add_content("u_u", "brilliant") assert system.get_state().query_prob("theta_6").to_continuous().get_function().get_mean()[0] == pytest.approx(1.0, abs=0.08) assert system.get_content("a_u").get_prob("approval") == pytest.approx(0.63, abs=0.08) assert system.get_content("a_u").get_prob("irony") == pytest.approx(0.3, abs=0.08)
def test_param1(self): domain = XMLDomainReader.extract_domain(TestDemo.domain_file) params = XMLStateReader.extract_bayesian_network( TestDemo.param_file, "parameters") domain.set_parameters(params) system = DialogueSystem(domain) system.get_settings().show_gui = False system.detach_module(ForwardPlanner) system.get_settings().show_gui = False system.start_system() system.add_content("a_m", "AskRepeat") t = CategoricalTableBuilder("a_u") t.add_row("DoA", 0.7) t.add_row("a_u", 0.2) t.add_row("a_u", 0.1) system.add_content(t.build()) for i in range(3000): print((system.get_state().get_chance_node("theta").sample() ).get_array()[0])
def test_domain(self): system = DialogueSystem( XMLDomainReader.extract_domain( "test/data/example-step-by-step_params.xml")) system.detach_module(ForwardPlanner) system.get_settings().show_gui = False system.start_system() o1 = CategoricalTableBuilder("u_u") o1.add_row("move a little bit left", 0.4) o1.add_row("please move a little right", 0.3) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Left)")) == pytest.approx(-0.1, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("move a little bit left", 0.5) o1.add_row("please move a little left", 0.2) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Left)")) == pytest.approx(0.2, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("now move right please", 0.8) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Right)")) == pytest.approx(0.3, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("move left", 0.7) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Left)")) == pytest.approx(0.2, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("turn left", 0.32) o1.add_row("move left again", 0.3) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Left)")) == pytest.approx(0.1, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("and do that again", 0.0) system.add_content(o1.build()) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("turn left", 1.0) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Left)")) == pytest.approx(0.5, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("turn right", 0.4) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Right)")) == pytest.approx(-0.1, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("please turn right", 0.8) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Right)")) == pytest.approx(0.3, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids()) o1 = CategoricalTableBuilder("u_u") o1.add_row("and turn a bit left", 0.3) o1.add_row("move a bit left", 0.3) system.add_content(o1.build()) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3) assert system.get_state().query_util(["a_m'"]).get_util( Assignment("a_m'", "Move(Left)")) == pytest.approx(0.1, abs=0.15) system.get_state().remove_nodes( system.get_state().get_action_node_ids()) system.get_state().remove_nodes( system.get_state().get_utility_node_ids())
def test1(self): domain = XMLDomainReader.extract_domain(TestIncremental.domain_file) system = DialogueSystem(domain) # NEED GUI & Recording system.get_settings().show_gui = False # system.get_settings().recording = Settings.Recording.ALL system.start_system() system.add_content(system.get_settings().user_speech, "busy") system.add_incremental_content(SingleValueDistribution("u_u", "go"), False) sleep(0.1) assert ValueFactory.create("go") in system.get_content( "u_u").get_values() t = CategoricalTableBuilder("u_u") t.add_row("forward", 0.7) t.add_row("backward", 0.2) system.add_incremental_content(t.build(), True) sleep(0.1) assert ValueFactory.create("go forward") in system.get_content( "u_u").get_values() assert system.get_content("u_u").get_prob( "go backward") == pytest.approx(0.2, abs=0.001) assert system.get_state().has_chance_node("nlu") system.add_content(system.get_settings().user_speech, "None") assert len(system.get_state().get_chance_nodes()) == 7 system.add_incremental_content( SingleValueDistribution("u_u", "please"), True) assert system.get_state().get_evidence().contains_pair( "=_a_u", ValueFactory.create(True)) assert system.get_content("u_u").get_prob( "go please") == pytest.approx(0.1, abs=0.001) assert system.get_state().has_chance_node("nlu") system.get_state().set_as_committed("u_u") assert not system.get_state().has_chance_node("nlu") t2 = CategoricalTableBuilder("u_u") t2.add_row("I said go backward", 0.3) system.add_incremental_content(t2.build(), True) assert system.get_content("a_u").get_prob( "Request(Backward)") == pytest.approx(0.82, abs=0.05) assert ValueFactory.create("I said go backward") in system.get_content( "u_u").get_values() assert system.get_state().has_chance_node("nlu") system.get_state().set_as_committed("u_u") assert not system.get_state().has_chance_node("nlu") system.add_incremental_content( SingleValueDistribution("u_u", "yes that is right"), False) assert ValueFactory.create("yes that is right") in system.get_content( "u_u").get_values()
def test_demo(self): domain = XMLDomainReader.extract_domain(TestDemo.domain_file2) system = DialogueSystem(domain) system.get_settings().show_gui = False system.start_system() assert len(system.get_state().get_chance_nodes()) == 5 t = CategoricalTableBuilder("u_u") t.add_row("hello there", 0.7) t.add_row("hello", 0.2) updates = system.add_content(t.build()) assert updates.issuperset({"a_u", "a_m", "u_m"}) assert str(system.get_content("u_m").get_best()) == "Hi there" t2 = dict() t2["move forward"] = 0.06 system.add_user_input(t2) assert not system.get_state().has_chance_node("u_m") t2 = dict() t2["move forward"] = 0.45 system.add_user_input(t2) assert str( system.get_content("u_m").get_best()) == "OK, moving Forward" t = CategoricalTableBuilder("u_u") t.add_row("now do that again", 0.3) t.add_row("move backward", 0.22) t.add_row("move a bit to the left", 0.22) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "Sorry, could you repeat?" t = CategoricalTableBuilder("u_u") t.add_row("do that one more time", 0.65) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "OK, moving Forward" system.add_content(SingleValueDistribution("perceived", "[BlueObj]")) t = CategoricalTableBuilder("u_u") t.add_row("what do you see", 0.6) t.add_row("do you see it", 0.3) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "I see a blue cylinder" t = CategoricalTableBuilder("u_u") t.add_row("pick up the blue object", 0.75) t.add_row("turn left", 0.12) system.add_content(t.build()) assert str(system.get_content( "u_m").get_best()) == "OK, picking up the blue object" system.add_content(SingleValueDistribution("perceived", "[]")) system.add_content(SingleValueDistribution("carried", "[BlueObj]")) t = CategoricalTableBuilder("u_u") t.add_row("now please move a bit forward", 0.21) t.add_row("move backward a little bit", 0.13) system.add_content(t.build()) assert str(system.get_content( "u_m").get_best()) == "Should I move a bit forward?" t = CategoricalTableBuilder("u_u") t.add_row("yes", 0.8) t.add_row("move backward", 0.1) system.add_content(t.build()) assert str(system.get_content( "u_m").get_best()) == "OK, moving Forward a little bit" t = CategoricalTableBuilder("u_u") t.add_row("and now move forward", 0.21) t.add_row("move backward", 0.09) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "Should I move forward?" t = CategoricalTableBuilder("u_u") t.add_row("no", 0.6) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "Should I move backward?" t = CategoricalTableBuilder("u_u") t.add_row("yes", 0.5) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "OK, moving Backward" t = CategoricalTableBuilder("u_u") t.add_row("now what can you see now?", 0.7) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "I do not see anything" t = CategoricalTableBuilder("u_u") t.add_row("please release the object", 0.5) system.add_content(t.build()) assert str(system.get_content( "u_m").get_best()) == "OK, putting down the object" t = CategoricalTableBuilder("u_u") t.add_row("something unexpected", 0.7) system.add_content(t.build()) assert not system.get_state().has_chance_node("u_m") t = CategoricalTableBuilder("u_u") t.add_row("goodbye", 0.7) system.add_content(t.build()) assert str( system.get_content("u_m").get_best()) == "Bye, see you next time"