Beispiel #1
0
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)
Beispiel #2
0
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),
    )
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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),
    )
Beispiel #6
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #11
0
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
Beispiel #12
0
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)
Beispiel #13
0
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)
Beispiel #14
0
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)
Beispiel #15
0
def test_valid_policy_configurations(valid_config):
    assert PolicyEnsemble.from_dict(valid_config)
Beispiel #16
0
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)
Beispiel #17
0
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),
    )
Beispiel #18
0
def test_invalid_policy_configurations(invalid_config):
    with pytest.raises(InvalidPolicyConfig):
        PolicyEnsemble.from_dict(invalid_config)
Beispiel #19
0
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)
Beispiel #20
0
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})