mirror of
https://github.com/aljazceru/Auto-GPT.git
synced 2025-12-27 02:44:22 +01:00
Rough sketching out of a hello world using our refactored autogpt library. See the tracking issue here: #4770. # Run instructions There are two client applications for Auto-GPT included. ## CLI Application 🌟 **This is the reference application I'm working with for now** 🌟 The first app is a straight CLI application. I have not done anything yet to port all the friendly display stuff from the `logger.typewriter_log` logic. - [Entry Point](https://github.com/Significant-Gravitas/Auto-GPT/blob/re-arch/hello-world/autogpt/core/runner/cli_app/cli.py) - [Client Application](https://github.com/Significant-Gravitas/Auto-GPT/blob/re-arch/hello-world/autogpt/core/runner/cli_app/main.py) To run, you first need a settings file. Run ``` python REPOSITORY_ROOT/autogpt/core/runner/cli_app/cli.py make-settings ``` where `REPOSITORY_ROOT` is the root of the Auto-GPT repository on your machine. This will write a file called `default_agent_settings.yaml` with all the user-modifiable configuration keys to `~/auto-gpt/default_agent_settings.yml` and make the `auto-gpt` directory in your user directory if it doesn't exist). At a bare minimum, you'll need to set `openai.credentials.api_key` to your OpenAI API Key to run the model. You can then run Auto-GPT with ``` python REPOSITORY_ROOT/autogpt/core/runner/cli_app/cli.py make-settings ``` to launch the interaction loop. ## CLI Web App The second app is still a CLI, but it sets up a local webserver that the client application talks to rather than invoking calls to the Agent library code directly. This application is essentially a sketch at this point as the folks who were driving it have had less time (and likely not enough clarity) to proceed. - [Entry Point](https://github.com/Significant-Gravitas/Auto-GPT/blob/re-arch/hello-world/autogpt/core/runner/cli_web_app/cli.py) - [Client Application](https://github.com/Significant-Gravitas/Auto-GPT/blob/re-arch/hello-world/autogpt/core/runner/cli_web_app/client/client.py) - [Server API](https://github.com/Significant-Gravitas/Auto-GPT/blob/re-arch/hello-world/autogpt/core/runner/cli_web_app/server/api.py) To run, you still need to generate a default configuration. You can do ``` python REPOSITORY_ROOT/autogpt/core/runner/cli_web_app/cli.py make-settings ``` It invokes the same command as the bare CLI app, so follow the instructions above about setting your API key. To run, do ``` python REPOSITORY_ROOT/autogpt/core/runner/cli_web_app/cli.py client ``` This will launch a webserver and then start the client cli application to communicate with it. ⚠️ I am not actively developing this application. It is a very good place to get involved if you have web application design experience and are looking to get involved in the re-arch. --------- Co-authored-by: David Wurtz <davidjwurtz@gmail.com> Co-authored-by: Media <12145726+rihp@users.noreply.github.com> Co-authored-by: Richard Beales <rich@richbeales.net> Co-authored-by: Daryl Rodrigo <darylrodrigo@gmail.com> Co-authored-by: Daryl Rodrigo <daryl@orkestro.com> Co-authored-by: Swifty <craigswift13@gmail.com> Co-authored-by: Nicholas Tindle <nick@ntindle.com> Co-authored-by: Merwane Hamadi <merwanehamadi@gmail.com>
97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
import logging
|
|
|
|
from autogpt.core.ability.base import Ability, AbilityConfiguration, AbilityRegistry
|
|
from autogpt.core.ability.builtins import BUILTIN_ABILITIES
|
|
from autogpt.core.ability.schema import AbilityResult
|
|
from autogpt.core.configuration import Configurable, SystemConfiguration, SystemSettings
|
|
from autogpt.core.memory.base import Memory
|
|
from autogpt.core.plugin.simple import SimplePluginService
|
|
from autogpt.core.resource.model_providers import (
|
|
LanguageModelProvider,
|
|
ModelProviderName,
|
|
)
|
|
from autogpt.core.workspace.base import Workspace
|
|
|
|
|
|
class AbilityRegistryConfiguration(SystemConfiguration):
|
|
"""Configuration for the AbilityRegistry subsystem."""
|
|
|
|
abilities: dict[str, AbilityConfiguration]
|
|
|
|
|
|
class AbilityRegistrySettings(SystemSettings):
|
|
configuration: AbilityRegistryConfiguration
|
|
|
|
|
|
class SimpleAbilityRegistry(AbilityRegistry, Configurable):
|
|
default_settings = AbilityRegistrySettings(
|
|
name="simple_ability_registry",
|
|
description="A simple ability registry.",
|
|
configuration=AbilityRegistryConfiguration(
|
|
abilities={
|
|
ability_name: ability.default_configuration
|
|
for ability_name, ability in BUILTIN_ABILITIES.items()
|
|
},
|
|
),
|
|
)
|
|
|
|
def __init__(
|
|
self,
|
|
settings: AbilityRegistrySettings,
|
|
logger: logging.Logger,
|
|
memory: Memory,
|
|
workspace: Workspace,
|
|
model_providers: dict[ModelProviderName, LanguageModelProvider],
|
|
):
|
|
self._configuration = settings.configuration
|
|
self._logger = logger
|
|
self._memory = memory
|
|
self._workspace = workspace
|
|
self._model_providers = model_providers
|
|
self._abilities = []
|
|
for (
|
|
ability_name,
|
|
ability_configuration,
|
|
) in self._configuration.abilities.items():
|
|
self.register_ability(ability_name, ability_configuration)
|
|
|
|
def register_ability(
|
|
self, ability_name: str, ability_configuration: AbilityConfiguration
|
|
) -> None:
|
|
ability_class = SimplePluginService.get_plugin(ability_configuration.location)
|
|
ability_args = {
|
|
"logger": self._logger.getChild(ability_name),
|
|
"configuration": ability_configuration,
|
|
}
|
|
if ability_configuration.packages_required:
|
|
# TODO: Check packages are installed and maybe install them.
|
|
pass
|
|
if ability_configuration.memory_provider_required:
|
|
ability_args["memory"] = self._memory
|
|
if ability_configuration.workspace_required:
|
|
ability_args["workspace"] = self._workspace
|
|
if ability_configuration.language_model_required:
|
|
ability_args["language_model_provider"] = self._model_providers[
|
|
ability_configuration.language_model_required.provider_name
|
|
]
|
|
ability = ability_class(**ability_args)
|
|
self._abilities.append(ability)
|
|
|
|
def list_abilities(self) -> list[str]:
|
|
return [
|
|
f"{ability.name()}: {ability.description()}" for ability in self._abilities
|
|
]
|
|
|
|
def dump_abilities(self) -> list[dict]:
|
|
return [ability.dump() for ability in self._abilities]
|
|
|
|
def get_ability(self, ability_name: str) -> Ability:
|
|
for ability in self._abilities:
|
|
if ability.name() == ability_name:
|
|
return ability
|
|
raise ValueError(f"Ability '{ability_name}' not found.")
|
|
|
|
async def perform(self, ability_name: str, **kwargs) -> AbilityResult:
|
|
ability = self.get_ability(ability_name)
|
|
return await ability(**kwargs)
|