示例#1
0
def test_invalid_policy_configurations(invalid_config):
    with pytest.raises(InvalidPolicyConfig):
        PolicyEnsemble.from_dict(invalid_config)
示例#2
0
def test_valid_policy_configurations(valid_config):
    assert PolicyEnsemble.from_dict(valid_config)
示例#3
0
def test_ensemble_from_dict():
    def check_memoization(p):
        assert p.max_history == 5

    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)

    def check_fallback(p):
        assert p.fallback_action_name == 'action_default_fallback'
        assert p.nlu_threshold == 0.7
        assert p.core_threshold == 0.7

    ensemble_dict = {
        'policies': [{
            'epochs':
            50,
            'name':
            'KerasPolicy',
            'featurizer': [{
                'max_history':
                5,
                'name':
                'MaxHistoryTrackerFeaturizer',
                'state_featurizer': [{
                    'name': 'BinarySingleStateFeaturizer'
                }]
            }]
        }, {
            'max_history': 5,
            'name': 'MemoizationPolicy'
        }, {
            'core_threshold': 0.7,
            'name': 'FallbackPolicy',
            'nlu_threshold': 0.7,
            'fallback_action_name': 'action_default_fallback'
        }, {
            'name': 'FormPolicy'
        }]
    }
    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) \
                and not isinstance(policy, FormPolicy):
            check_memoization(policy)
        elif isinstance(policy, KerasPolicy):
            check_keras(policy)
        elif isinstance(policy, FallbackPolicy):
            check_fallback(policy)