def test_two_stage_fallback_without_deny_suggestion(domain, policy_config): with pytest.raises(InvalidDomain) as execinfo: Agent( domain=Domain.from_dict(domain), policies=PolicyEnsemble.from_dict(policy_config), ) assert "The intent 'out_of_scope' must be present" in str(execinfo.value)
def test_rule_policy_valid(domain: Dict[Text, Any], policy_config: Dict[Text, Any]): # no exception should be thrown Agent( domain=Domain.from_dict(domain), policies=PolicyEnsemble.from_dict(policy_config), )
def test_trigger_without_mapping_policy(domain, policy_config): with pytest.raises(InvalidDomain) as execinfo: Agent( domain=Domain.from_dict(domain), policies=PolicyEnsemble.from_dict(policy_config), ) assert "haven't added the MappingPolicy" in str(execinfo.value)
def test_form_without_form_policy(policy_config: Dict[Text, List[Text]]): with pytest.raises(InvalidDomain) as execinfo: Agent( domain=Domain.from_dict({"forms": ["restaurant_form"]}), policies=PolicyEnsemble.from_dict(policy_config), ) assert "haven't added the FormPolicy" in str(execinfo.value)
def test_forms_with_suited_policy(): policy_config = {"policies": [{"name": RulePolicy.__name__}]} # Doesn't raise Agent( domain=Domain.from_dict({"forms": {"restaurant_form": {}}}), policies=PolicyEnsemble.from_dict(policy_config), )
def test_ensemble_from_dict(): def check_memoization(p): assert p.max_history == 5 assert p.priority == 3 def check_rule(p): assert p.max_history == DEFAULT_MAX_HISTORY assert p.priority == 1 ensemble_dict = { "policies": [ {"max_history": 5, "priority": 3, "name": "MemoizationPolicy"}, {"name": "RulePolicy", "priority": 1}, ] } ensemble = PolicyEnsemble.from_dict(ensemble_dict) # Check if all policies are present assert len(ensemble) == 2 # MemoizationPolicy is parent of RulePolicy assert any( [ isinstance(p, MemoizationPolicy) and not isinstance(p, RulePolicy) for p in ensemble ] ) assert any([isinstance(p, RulePolicy) for p in ensemble]) # Verify policy configurations for policy in ensemble: if isinstance(policy, MemoizationPolicy): if isinstance(policy, RulePolicy): check_rule(policy) else: check_memoization(policy)
def test_form_without_form_policy(domain: Dict[Text, Any], policy_config: Dict[Text, Any]): with pytest.raises(InvalidDomain) as execinfo: Agent( domain=Domain.from_dict(domain), policies=PolicyEnsemble.from_dict(policy_config), ) assert "haven't added the FormPolicy" in str(execinfo.value)
def test_rule_policy_without_fallback_action_present(domain: Dict[Text, Any], policy_config: Dict[Text, Any]): with pytest.raises(InvalidDomain) as execinfo: Agent( domain=Domain.from_dict(domain), policies=PolicyEnsemble.from_dict(policy_config), ) assert RulePolicy.__name__ in execinfo.value.message
def test_ensemble_from_dict(): def check_memoization(p): assert p.max_history == 5 assert p.priority == 3 def check_fallback(p): assert p.fallback_action_name == "action_default_fallback" assert p.nlu_threshold == 0.7 assert p.core_threshold == 0.7 assert p.priority == 2 def check_form(p): assert p.priority == 1 ensemble_dict = { "policies": [ { "max_history": 5, "priority": 3, "name": "MemoizationPolicy" }, { "core_threshold": 0.7, "priority": 2, "name": "FallbackPolicy", "nlu_threshold": 0.7, "fallback_action_name": "action_default_fallback", }, { "name": "FormPolicy", "priority": 1 }, ] } ensemble = PolicyEnsemble.from_dict(ensemble_dict) # Check if all policies are present assert len(ensemble) == 3 # MemoizationPolicy is parent of FormPolicy assert any([ isinstance(p, MemoizationPolicy) and not isinstance(p, FormPolicy) for p in ensemble ]) assert any([isinstance(p, FallbackPolicy) for p in ensemble]) assert any([isinstance(p, FormPolicy) for p in ensemble]) # Verify policy configurations for policy in ensemble: if isinstance(policy, MemoizationPolicy): if isinstance(policy, FormPolicy): check_form(policy) else: check_memoization(policy) elif isinstance(policy, FallbackPolicy): check_fallback(policy)
def load(config_file: Union[Text, Dict]) -> List["Policy"]: """Load policy data stored in the specified file.""" from rasa.core.policies.ensemble import PolicyEnsemble config_data = {} if isinstance(config_file, str) and os.path.isfile(config_file): config_data = rasa.shared.utils.io.read_model_configuration(config_file) elif isinstance(config_file, Dict): config_data = config_file return PolicyEnsemble.from_dict(config_data)
def test_from_dict_does_not_change_passed_dict_parameter(): config = { "policies": [ { "name": "TEDPolicy", "featurizer": [ { "name": "MaxHistoryTrackerFeaturizer", "max_history": 5, "state_featurizer": [{"name": "BinarySingleStateFeaturizer"}], } ], } ] } config_copy = copy.deepcopy(config) PolicyEnsemble.from_dict(config_copy) assert config == config_copy
def load(config_file: Optional[Text]) -> List["Policy"]: """Load policy data stored in the specified file.""" from rasa.core.policies.ensemble import PolicyEnsemble if config_file and os.path.isfile(config_file): config_data = rasa.utils.io.read_config_file(config_file) else: raise ValueError("You have to provide a valid path to a config file. " "The file '{}' could not be found." "".format(os.path.abspath(config_file))) return PolicyEnsemble.from_dict(config_data)
def load(config_file: Optional[Union[Text, Dict]]) -> List["Policy"]: """Load policy data stored in the specified file.""" from rasa.core.policies.ensemble import PolicyEnsemble if not config_file: raise ValueError("You have to provide a valid path to a config file. " "The file '{}' could not be found." "".format(os.path.abspath(config_file))) config_data = {} if isinstance(config_file, str) and os.path.isfile(config_file): config_data = rasa.shared.utils.io.read_config_file(config_file) elif isinstance(config_file, Dict): config_data = config_file return PolicyEnsemble.from_dict(config_data)
def load(config_file: Optional[Union[Text, Dict]]) -> List["Policy"]: """Load policy data stored in the specified file.""" from rasa.core.policies.ensemble import PolicyEnsemble if not config_file: raise FileNotFoundException( f"The provided configuration file path does not seem to be valid. " f"The file '{os.path.abspath(config_file)}' could not be found.") config_data = {} if isinstance(config_file, str) and os.path.isfile(config_file): config_data = rasa.shared.utils.io.read_config_file(config_file) elif isinstance(config_file, Dict): config_data = config_file return PolicyEnsemble.from_dict(config_data)
def test_valid_policy_configurations(valid_config): assert PolicyEnsemble.from_dict(valid_config)
def test_ensemble_from_dict(): def check_memoization(p): assert p.max_history == 5 assert p.priority == 3 def check_keras(p): featurizer = p.featurizer state_featurizer = featurizer.state_featurizer # Assert policy assert p.epochs == 50 # Assert featurizer assert isinstance(featurizer, MaxHistoryTrackerFeaturizer) assert featurizer.max_history == 5 # Assert state_featurizer assert isinstance(state_featurizer, BinarySingleStateFeaturizer) assert p.priority == 4 def check_fallback(p): assert p.fallback_action_name == 'action_default_fallback' assert p.nlu_threshold == 0.7 assert p.core_threshold == 0.7 assert p.priority == 2 def check_form(p): assert p.priority == 1 ensemble_dict = { 'policies': [{ 'epochs': 50, 'name': 'KerasPolicy', 'priority': 4, 'featurizer': [{ 'max_history': 5, 'name': 'MaxHistoryTrackerFeaturizer', 'state_featurizer': [{ 'name': 'BinarySingleStateFeaturizer' }] }] }, { 'max_history': 5, 'priority': 3, 'name': 'MemoizationPolicy' }, { 'core_threshold': 0.7, 'priority': 2, 'name': 'FallbackPolicy', 'nlu_threshold': 0.7, 'fallback_action_name': 'action_default_fallback' }, { 'name': 'FormPolicy', 'priority': 1 }] } ensemble = PolicyEnsemble.from_dict(ensemble_dict) # Check if all policies are present assert len(ensemble) == 4 # MemoizationPolicy is parent of FormPolicy assert any([ isinstance(p, MemoizationPolicy) and not isinstance(p, FormPolicy) for p in ensemble ]) assert any([isinstance(p, KerasPolicy) for p in ensemble]) assert any([isinstance(p, FallbackPolicy) for p in ensemble]) assert any([isinstance(p, FormPolicy) for p in ensemble]) # Verify policy configurations for policy in ensemble: if isinstance(policy, MemoizationPolicy): if isinstance(policy, FormPolicy): check_form(policy) else: check_memoization(policy) elif isinstance(policy, KerasPolicy): check_keras(policy) elif isinstance(policy, FallbackPolicy): check_fallback(policy)
def test_forms_with_suited_policy(policy_config: Dict[Text, List[Text]]): # Doesn't raise Agent( domain=Domain.from_dict({"forms": ["restaurant_form"]}), policies=PolicyEnsemble.from_dict(policy_config), )
def test_invalid_policy_configurations(invalid_config): with pytest.raises(InvalidPolicyConfig): PolicyEnsemble.from_dict(invalid_config)
def test_ensemble_from_dict(): def check_memoization(p): assert p.max_history == 5 assert p.priority == 3 def check_keras(p): featurizer = p.featurizer state_featurizer = featurizer.state_featurizer # Assert policy assert p.epochs == 50 # Assert featurizer assert isinstance(featurizer, MaxHistoryTrackerFeaturizer) assert featurizer.max_history == 5 # Assert state_featurizer assert isinstance(state_featurizer, BinarySingleStateFeaturizer) assert p.priority == 4 def check_fallback(p): assert p.fallback_action_name == "action_default_fallback" assert p.nlu_threshold == 0.7 assert p.core_threshold == 0.7 assert p.priority == 2 def check_form(p): assert p.priority == 1 ensemble_dict = { "policies": [ { "epochs": 50, "name": "KerasPolicy", "priority": 4, "featurizer": [{ "max_history": 5, "name": "MaxHistoryTrackerFeaturizer", "state_featurizer": [{ "name": "BinarySingleStateFeaturizer" }], }], }, { "max_history": 5, "priority": 3, "name": "MemoizationPolicy" }, { "core_threshold": 0.7, "priority": 2, "name": "FallbackPolicy", "nlu_threshold": 0.7, "fallback_action_name": "action_default_fallback", }, { "name": "FormPolicy", "priority": 1 }, ] } ensemble = PolicyEnsemble.from_dict(ensemble_dict) # Check if all policies are present assert len(ensemble) == 4 # MemoizationPolicy is parent of FormPolicy assert any([ isinstance(p, MemoizationPolicy) and not isinstance(p, FormPolicy) for p in ensemble ]) assert any([isinstance(p, KerasPolicy) for p in ensemble]) assert any([isinstance(p, FallbackPolicy) for p in ensemble]) assert any([isinstance(p, FormPolicy) for p in ensemble]) # Verify policy configurations for policy in ensemble: if isinstance(policy, MemoizationPolicy): if isinstance(policy, FormPolicy): check_form(policy) else: check_memoization(policy) elif isinstance(policy, KerasPolicy): check_keras(policy) elif isinstance(policy, FallbackPolicy): check_fallback(policy)
def test_mutual_exclusion_of_rule_policy_and_old_rule_like_policies( policies: List[Text], ): policy_config = [{"name": policy_name} for policy_name in policies] with pytest.raises(InvalidPolicyConfig): PolicyEnsemble.from_dict({"policies": policy_config})