AutoGPT

Форк
0
/
test_plugins.py 
125 строк · 4.4 Кб
1
import os
2

3
import yaml
4

5
from autogpt.config.config import Config
6
from autogpt.plugins import inspect_zip_for_modules, scan_plugins
7
from autogpt.plugins.plugin_config import PluginConfig
8
from autogpt.plugins.plugins_config import PluginsConfig
9

10
PLUGINS_TEST_DIR = "tests/unit/data/test_plugins"
11
PLUGIN_TEST_ZIP_FILE = "Auto-GPT-Plugin-Test-master.zip"
12
PLUGIN_TEST_INIT_PY = "Auto-GPT-Plugin-Test-master/src/auto_gpt_vicuna/__init__.py"
13
PLUGIN_TEST_OPENAI = "https://weathergpt.vercel.app/"
14

15

16
def test_scan_plugins_openai(config: Config):
17
    config.plugins_openai = [PLUGIN_TEST_OPENAI]
18
    plugins_config = config.plugins_config
19
    plugins_config.plugins[PLUGIN_TEST_OPENAI] = PluginConfig(
20
        name=PLUGIN_TEST_OPENAI, enabled=True
21
    )
22

23
    # Test that the function returns the correct number of plugins
24
    result = scan_plugins(config)
25
    assert len(result) == 1
26

27

28
def test_scan_plugins_generic(config: Config):
29
    # Test that the function returns the correct number of plugins
30
    plugins_config = config.plugins_config
31
    plugins_config.plugins["auto_gpt_guanaco"] = PluginConfig(
32
        name="auto_gpt_guanaco", enabled=True
33
    )
34
    plugins_config.plugins["AutoGPTPVicuna"] = PluginConfig(
35
        name="AutoGPTPVicuna", enabled=True
36
    )
37
    result = scan_plugins(config)
38
    plugin_class_names = [plugin.__class__.__name__ for plugin in result]
39

40
    assert len(result) == 2
41
    assert "AutoGPTGuanaco" in plugin_class_names
42
    assert "AutoGPTPVicuna" in plugin_class_names
43

44

45
def test_scan_plugins_not_enabled(config: Config):
46
    # Test that the function returns the correct number of plugins
47
    plugins_config = config.plugins_config
48
    plugins_config.plugins["auto_gpt_guanaco"] = PluginConfig(
49
        name="auto_gpt_guanaco", enabled=True
50
    )
51
    plugins_config.plugins["auto_gpt_vicuna"] = PluginConfig(
52
        name="auto_gptp_vicuna", enabled=False
53
    )
54
    result = scan_plugins(config)
55
    plugin_class_names = [plugin.__class__.__name__ for plugin in result]
56

57
    assert len(result) == 1
58
    assert "AutoGPTGuanaco" in plugin_class_names
59
    assert "AutoGPTPVicuna" not in plugin_class_names
60

61

62
def test_inspect_zip_for_modules():
63
    result = inspect_zip_for_modules(str(f"{PLUGINS_TEST_DIR}/{PLUGIN_TEST_ZIP_FILE}"))
64
    assert result == [PLUGIN_TEST_INIT_PY]
65

66

67
def test_create_base_config(config: Config):
68
    """
69
    Test the backwards-compatibility shim to convert old plugin allow/deny list
70
    to a config file.
71
    """
72
    config.plugins_allowlist = ["a", "b"]
73
    config.plugins_denylist = ["c", "d"]
74

75
    os.remove(config.plugins_config_file)
76
    plugins_config = PluginsConfig.load_config(
77
        plugins_config_file=config.plugins_config_file,
78
        plugins_denylist=config.plugins_denylist,
79
        plugins_allowlist=config.plugins_allowlist,
80
    )
81

82
    # Check the structure of the plugins config data
83
    assert len(plugins_config.plugins) == 4
84
    assert plugins_config.get("a").enabled
85
    assert plugins_config.get("b").enabled
86
    assert not plugins_config.get("c").enabled
87
    assert not plugins_config.get("d").enabled
88

89
    # Check the saved config file
90
    with open(config.plugins_config_file, "r") as saved_config_file:
91
        saved_config = yaml.load(saved_config_file, Loader=yaml.SafeLoader)
92

93
    assert saved_config == {
94
        "a": {"enabled": True, "config": {}},
95
        "b": {"enabled": True, "config": {}},
96
        "c": {"enabled": False, "config": {}},
97
        "d": {"enabled": False, "config": {}},
98
    }
99

100

101
def test_load_config(config: Config):
102
    """
103
    Test that the plugin config is loaded correctly from the plugins_config.yaml file.
104
    """
105
    # Create a test config and write it to disk
106
    test_config = {
107
        "a": {"enabled": True, "config": {"api_key": "1234"}},
108
        "b": {"enabled": False, "config": {}},
109
    }
110
    with open(config.plugins_config_file, "w+") as f:
111
        f.write(yaml.dump(test_config))
112

113
    # Load the config from disk
114
    plugins_config = PluginsConfig.load_config(
115
        plugins_config_file=config.plugins_config_file,
116
        plugins_denylist=config.plugins_denylist,
117
        plugins_allowlist=config.plugins_allowlist,
118
    )
119

120
    # Check that the loaded config is equal to the test config
121
    assert len(plugins_config.plugins) == 2
122
    assert plugins_config.get("a").enabled
123
    assert plugins_config.get("a").config == {"api_key": "1234"}
124
    assert not plugins_config.get("b").enabled
125
    assert plugins_config.get("b").config == {}
126

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.