aboutsummaryrefslogtreecommitdiff
path: root/autogpt/models/command_registry.py
diff options
context:
space:
mode:
Diffstat (limited to 'autogpt/models/command_registry.py')
-rw-r--r--autogpt/models/command_registry.py114
1 files changed, 0 insertions, 114 deletions
diff --git a/autogpt/models/command_registry.py b/autogpt/models/command_registry.py
deleted file mode 100644
index f54f4adb5..000000000
--- a/autogpt/models/command_registry.py
+++ /dev/null
@@ -1,114 +0,0 @@
-import importlib
-import inspect
-from typing import Any
-
-from autogpt.command_decorator import AUTO_GPT_COMMAND_IDENTIFIER
-from autogpt.logs import logger
-from autogpt.models.command import Command
-
-
-class CommandRegistry:
- """
- The CommandRegistry class is a manager for a collection of Command objects.
- It allows the registration, modification, and retrieval of Command objects,
- as well as the scanning and loading of command plugins from a specified
- directory.
- """
-
- commands: dict[str, Command]
- commands_aliases: dict[str, Command]
-
- def __init__(self):
- self.commands = {}
- self.commands_aliases = {}
-
- def __contains__(self, command_name: str):
- return command_name in self.commands or command_name in self.commands_aliases
-
- def _import_module(self, module_name: str) -> Any:
- return importlib.import_module(module_name)
-
- def _reload_module(self, module: Any) -> Any:
- return importlib.reload(module)
-
- def register(self, cmd: Command) -> None:
- if cmd.name in self.commands:
- logger.warn(
- f"Command '{cmd.name}' already registered and will be overwritten!"
- )
- self.commands[cmd.name] = cmd
-
- if cmd.name in self.commands_aliases:
- logger.warn(
- f"Command '{cmd.name}' will overwrite alias with the same name of "
- f"'{self.commands_aliases[cmd.name]}'!"
- )
- for alias in cmd.aliases:
- self.commands_aliases[alias] = cmd
-
- def unregister(self, command: Command) -> None:
- if command.name in self.commands:
- del self.commands[command.name]
- for alias in command.aliases:
- del self.commands_aliases[alias]
- else:
- raise KeyError(f"Command '{command.name}' not found in registry.")
-
- def reload_commands(self) -> None:
- """Reloads all loaded command plugins."""
- for cmd_name in self.commands:
- cmd = self.commands[cmd_name]
- module = self._import_module(cmd.__module__)
- reloaded_module = self._reload_module(module)
- if hasattr(reloaded_module, "register"):
- reloaded_module.register(self)
-
- def get_command(self, name: str) -> Command | None:
- if name in self.commands:
- return self.commands[name]
-
- if name in self.commands_aliases:
- return self.commands_aliases[name]
-
- def call(self, command_name: str, **kwargs) -> Any:
- if command := self.get_command(command_name):
- return command(**kwargs)
- raise KeyError(f"Command '{command_name}' not found in registry")
-
- def command_prompt(self) -> str:
- """
- Returns a string representation of all registered `Command` objects for use in a prompt
- """
- commands_list = [
- f"{idx + 1}. {str(cmd)}" for idx, cmd in enumerate(self.commands.values())
- ]
- return "\n".join(commands_list)
-
- def import_commands(self, module_name: str) -> None:
- """
- Imports the specified Python module containing command plugins.
-
- This method imports the associated module and registers any functions or
- classes that are decorated with the `AUTO_GPT_COMMAND_IDENTIFIER` attribute
- as `Command` objects. The registered `Command` objects are then added to the
- `commands` dictionary of the `CommandRegistry` object.
-
- Args:
- module_name (str): The name of the module to import for command plugins.
- """
-
- module = importlib.import_module(module_name)
-
- for attr_name in dir(module):
- attr = getattr(module, attr_name)
- # Register decorated functions
- if hasattr(attr, AUTO_GPT_COMMAND_IDENTIFIER) and getattr(
- attr, AUTO_GPT_COMMAND_IDENTIFIER
- ):
- self.register(attr.command)
- # Register command classes
- elif (
- inspect.isclass(attr) and issubclass(attr, Command) and attr != Command
- ):
- cmd_instance = attr()
- self.register(cmd_instance)