diff options
Diffstat (limited to 'autogpts/autogpt/autogpt/plugins')
-rw-r--r-- | autogpts/autogpt/autogpt/plugins/__init__.py | 68 | ||||
-rw-r--r-- | autogpts/autogpt/autogpt/plugins/plugins_config.py | 18 |
2 files changed, 47 insertions, 39 deletions
diff --git a/autogpts/autogpt/autogpt/plugins/__init__.py b/autogpts/autogpt/autogpt/plugins/__init__.py index 534c2f2d1..0b08a62e4 100644 --- a/autogpts/autogpt/autogpt/plugins/__init__.py +++ b/autogpts/autogpt/autogpt/plugins/__init__.py @@ -11,7 +11,7 @@ import zipfile from pathlib import Path from typing import TYPE_CHECKING, List from urllib.parse import urlparse -from zipimport import zipimporter +from zipimport import ZipImportError, zipimporter import openapi_python_client import requests @@ -26,7 +26,7 @@ from autogpt.models.base_open_ai_plugin import BaseOpenAIPlugin logger = logging.getLogger(__name__) -def inspect_zip_for_modules(zip_path: str, debug: bool = False) -> list[str]: +def inspect_zip_for_modules(zip_path: str) -> list[str]: """ Inspect a zipfile for a modules. @@ -78,12 +78,13 @@ def fetch_openai_plugins_manifest_and_spec(config: Config) -> dict: if response.status_code == 200: manifest = response.json() if manifest["schema_version"] != "v1": - logger.warn( - f"Unsupported manifest version: {manifest['schem_version']} for {url}" + logger.warning( + "Unsupported manifest version: " + f"{manifest['schem_version']} for {url}" ) continue if manifest["api"]["type"] != "openapi": - logger.warn( + logger.warning( f"Unsupported API type: {manifest['api']['type']} for {url}" ) continue @@ -91,11 +92,11 @@ def fetch_openai_plugins_manifest_and_spec(config: Config) -> dict: manifest, f"{openai_plugin_client_dir}/ai-plugin.json" ) else: - logger.warn( + logger.warning( f"Failed to fetch manifest for {url}: {response.status_code}" ) except requests.exceptions.RequestException as e: - logger.warn(f"Error while requesting manifest from {url}: {e}") + logger.warning(f"Error while requesting manifest from {url}: {e}") else: logger.info(f"Manifest for {url} already exists") manifest = json.load(open(f"{openai_plugin_client_dir}/ai-plugin.json")) @@ -127,16 +128,14 @@ def create_directory_if_not_exists(directory_path: str) -> bool: logger.debug(f"Created directory: {directory_path}") return True except OSError as e: - logger.warn(f"Error creating directory {directory_path}: {e}") + logger.warning(f"Error creating directory {directory_path}: {e}") return False else: logger.info(f"Directory {directory_path} already exists") return True -def initialize_openai_plugins( - manifests_specs: dict, config: Config, debug: bool = False -) -> dict: +def initialize_openai_plugins(manifests_specs: dict, config: Config) -> dict: """ Initialize OpenAI plugins. Args: @@ -168,7 +167,7 @@ def initialize_openai_plugins( config=_config, ) if client_results: - logger.warn( + logger.warning( f"Error creating OpenAPI client: {client_results[0].header} \n" f" details: {client_results[0].detail}" ) @@ -188,9 +187,7 @@ def initialize_openai_plugins( return manifests_specs -def instantiate_openai_plugin_clients( - manifests_specs_clients: dict, config: Config, debug: bool = False -) -> dict: +def instantiate_openai_plugin_clients(manifests_specs_clients: dict) -> dict: """ Instantiates BaseOpenAIPlugin instances for each OpenAI plugin. Args: @@ -207,7 +204,7 @@ def instantiate_openai_plugin_clients( return plugins -def scan_plugins(config: Config, debug: bool = False) -> List[AutoGPTPluginTemplate]: +def scan_plugins(config: Config) -> List[AutoGPTPluginTemplate]: """Scan the plugins directory for plugins and loads them. Args: @@ -234,14 +231,16 @@ def scan_plugins(config: Config, debug: bool = False) -> List[AutoGPTPluginTempl try: __import__(qualified_module_name) - except: + except ImportError: logger.error(f"Failed to load {qualified_module_name}") continue plugin = sys.modules[qualified_module_name] if not plugins_config.is_enabled(plugin_module_name): - logger.warn( - f"Plugin folder {plugin_module_name} found but not configured. If this is a legitimate plugin, please add it to plugins_config.yaml (key: {plugin_module_name})." + logger.warning( + f"Plugin folder {plugin_module_name} found but not configured. " + "If this is a legitimate plugin, please add it to plugins_config.yaml " + f"(key: {plugin_module_name})." ) continue @@ -254,7 +253,7 @@ def scan_plugins(config: Config, debug: bool = False) -> List[AutoGPTPluginTempl # Zip-based plugins for plugin in plugins_path.glob("*.zip"): - if moduleList := inspect_zip_for_modules(str(plugin), debug): + if moduleList := inspect_zip_for_modules(str(plugin)): for module in moduleList: plugin = Path(plugin) module = Path(module) @@ -262,8 +261,9 @@ def scan_plugins(config: Config, debug: bool = False) -> List[AutoGPTPluginTempl zipped_package = zipimporter(str(plugin)) try: zipped_module = zipped_package.load_module(str(module.parent)) - except: + except ZipImportError: logger.error(f"Failed to load {str(module.parent)}") + continue for key in dir(zipped_module): if key.startswith("__"): @@ -283,37 +283,41 @@ def scan_plugins(config: Config, debug: bool = False) -> List[AutoGPTPluginTempl if plugin_configured and plugin_enabled: logger.debug( - f"Loading plugin {plugin_name}. Enabled in plugins_config.yaml." + f"Loading plugin {plugin_name}. " + "Enabled in plugins_config.yaml." ) loaded_plugins.append(a_module()) elif plugin_configured and not plugin_enabled: logger.debug( - f"Not loading plugin {plugin_name}. Disabled in plugins_config.yaml." + f"Not loading plugin {plugin_name}. " + "Disabled in plugins_config.yaml." ) elif not plugin_configured: - logger.warn( - f"Not loading plugin {plugin_name}. Key '{plugin_name}' was not found in plugins_config.yaml. " - f"Zipped plugins should use the class name ({plugin_name}) as the key." + logger.warning( + f"Not loading plugin {plugin_name}. " + f"No entry for '{plugin_name}' in plugins_config.yaml. " + "Note: Zipped plugins should use the class name " + f"({plugin_name}) as the key." ) else: if ( module_name := getattr(a_module, "__name__", str(a_module)) ) != "AutoGPTPluginTemplate": logger.debug( - f"Skipping '{module_name}' because it doesn't subclass AutoGPTPluginTemplate." + f"Skipping '{module_name}' because it doesn't subclass " + "AutoGPTPluginTemplate." ) # OpenAI plugins if config.plugins_openai: manifests_specs = fetch_openai_plugins_manifest_and_spec(config) if manifests_specs.keys(): - manifests_specs_clients = initialize_openai_plugins( - manifests_specs, config, debug - ) + manifests_specs_clients = initialize_openai_plugins(manifests_specs, config) for url, openai_plugin_meta in manifests_specs_clients.items(): if not plugins_config.is_enabled(url): - logger.warn( - f"OpenAI Plugin {plugin_module_name} found but not configured" + plugin_name = openai_plugin_meta["manifest"]["name_for_model"] + logger.warning( + f"OpenAI Plugin {plugin_name} found but not configured" ) continue diff --git a/autogpts/autogpt/autogpt/plugins/plugins_config.py b/autogpts/autogpt/autogpt/plugins/plugins_config.py index cc255035a..0494b6e38 100644 --- a/autogpts/autogpt/autogpt/plugins/plugins_config.py +++ b/autogpts/autogpt/autogpt/plugins/plugins_config.py @@ -42,16 +42,17 @@ class PluginsConfig(BaseModel): plugins_denylist, plugins_allowlist, ) - if type(config_data) != dict: + if type(config_data) is not dict: logger.error( - f"Expected plugins config to be a dict, got {type(config_data)}, continuing without plugins" + f"Expected plugins config to be a dict, got {type(config_data)}." + " Continuing without plugins." ) return empty_config return cls(plugins=config_data) except BaseException as e: logger.error( - f"Plugin config is invalid, continuing without plugins. Error: {e}" + f"Plugin config is invalid. Continuing without plugins. Error: {e}" ) return empty_config @@ -63,7 +64,7 @@ class PluginsConfig(BaseModel): plugins_allowlist: list[str], ) -> dict[str, PluginConfig]: if not plugins_config_file.is_file(): - logger.warn("plugins_config.yaml does not exist, creating base config.") + logger.warning("plugins_config.yaml does not exist, creating base config.") cls.create_empty_plugins_config( plugins_config_file, plugins_denylist, @@ -75,13 +76,13 @@ class PluginsConfig(BaseModel): plugins = {} for name, plugin in plugins_config.items(): - if type(plugin) == dict: + if type(plugin) is dict: plugins[name] = PluginConfig( name=name, enabled=plugin.get("enabled", False), config=plugin.get("config", {}), ) - elif type(plugin) == PluginConfig: + elif isinstance(plugin, PluginConfig): plugins[name] = plugin else: raise ValueError(f"Invalid plugin config data type: {type(plugin)}") @@ -93,7 +94,10 @@ class PluginsConfig(BaseModel): plugins_denylist: list[str], plugins_allowlist: list[str], ): - """Create an empty plugins_config.yaml file. Fill it with values from old env variables.""" + """ + Create an empty plugins_config.yaml file. + Fill it with values from old env variables. + """ base_config = {} logger.debug(f"Legacy plugin denylist: {plugins_denylist}") |