Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(agent, forge): Move library code from autogpt to forge #7106

Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
f8ae03b
WIP Remove old plugin system
kcze Apr 22, 2024
232c39a
Merge branch 'master' into kpczerwinski/open-657-remove-old-plugin-sy…
kcze Apr 23, 2024
88c0e56
Update `poetry.lock` and `pyproject.toml`
kcze Apr 23, 2024
348081c
WIP Move code to `forge`
kcze Apr 24, 2024
b640f72
WIP Fix imports
kcze Apr 25, 2024
8a0b8d9
Cleanup `forge` file structure
kcze Apr 26, 2024
77f2605
Update imports
kcze Apr 26, 2024
b0dd654
Update tests
kcze Apr 27, 2024
aabb0a5
Restore some `forge` files
kcze Apr 28, 2024
4c353e9
Restore `forge` file structure
kcze Apr 28, 2024
b4f8b4f
Update `__init__.py`s
kcze Apr 28, 2024
f221a27
Move tests to `forge`
kcze Apr 28, 2024
8fb3c22
Merge branch 'master' into kpczerwinski/open-656-move-components-to-f…
kcze Apr 28, 2024
e549ea1
Lint
kcze Apr 28, 2024
b2bab68
Merge branch 'master' into kpczerwinski/open-656-move-components-to-f…
kcze May 2, 2024
61893e1
Move `autogpt/logs` and `autogpt/speech`
kcze May 4, 2024
ca1f571
Merge branch 'master' into kpczerwinski/open-656-move-components-to-f…
kcze May 6, 2024
6a7c2cb
Move providers, fix imports
kcze May 6, 2024
0db3418
Fix tests
kcze May 7, 2024
214166a
Fix circular deps
kcze May 7, 2024
3196695
Lint and fixes
kcze May 7, 2024
ea9d6b0
Update
kcze May 7, 2024
5fa755f
Merge branch 'master' into kpczerwinski/open-656-move-components-to-f…
kcze May 7, 2024
7592821
Updates
kcze May 9, 2024
4d90dd6
Move and rename files
kcze May 10, 2024
2341b4a
Merge branch 'master' into kpczerwinski/open-656-move-components-to-f…
kcze May 10, 2024
4fdde69
Fix circular imports
kcze May 11, 2024
d2c85ac
Update poetry dependencies
kcze May 11, 2024
f31942c
Lint
kcze May 11, 2024
ffd6377
Update component ordering
kcze May 11, 2024
baf02c1
Move `Action*` models to `forge/models/action.py`
kcze May 12, 2024
2433453
Merge branch 'kpczerwinski/open-909-decouple-components' into kpczerw…
kcze May 12, 2024
6c1e8a3
Fix import
kcze May 12, 2024
84808e2
refactor: Move `forge.json.model` to `forge.models.json_schema`
Pwuts May 14, 2024
60da74e
fix mentions of AutoGPT in forge/
Pwuts May 14, 2024
2833815
fix usages of click.prompt
Pwuts May 14, 2024
3dad9e5
Rename web_search and web_selenium to web.search and web.selenium
Pwuts May 14, 2024
4775d3b
Rename event_history_component.py to action_history.py
Pwuts May 14, 2024
9681973
Merge branch 'master' into kpczerwinski/open-656-move-components-to-f…
Pwuts May 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 0 additions & 3 deletions autogpts/autogpt/.env.template
Expand Up @@ -44,9 +44,6 @@ OPENAI_API_KEY=your-openai-api-key
## AI_SETTINGS_FILE - Specifies which AI Settings file to use, relative to the AutoGPT root directory. (defaults to ai_settings.yaml)
# AI_SETTINGS_FILE=ai_settings.yaml

## PLUGINS_CONFIG_FILE - The path to the plugins_config.yaml file, relative to the AutoGPT root directory. (Default plugins_config.yaml)
# PLUGINS_CONFIG_FILE=plugins_config.yaml

## PROMPT_SETTINGS_FILE - Specifies which Prompt Settings file to use, relative to the AutoGPT root directory. (defaults to prompt_settings.yaml)
# PROMPT_SETTINGS_FILE=prompt_settings.yaml

Expand Down
7 changes: 0 additions & 7 deletions autogpts/autogpt/agbenchmark_config/benchmarks.py
Expand Up @@ -5,7 +5,6 @@

from autogpt.agent_manager.agent_manager import AgentManager
from autogpt.agents.agent import Agent, AgentConfiguration, AgentSettings
from autogpt.agents.prompt_strategies.one_shot import OneShotAgentPromptStrategy
from autogpt.app.main import _configure_openai_provider, run_interaction_loop
from autogpt.config import AIProfile, ConfigBuilder
from autogpt.file_storage import FileStorageBackendName, get_storage
Expand Down Expand Up @@ -38,10 +37,6 @@ def bootstrap_agent(task: str, continuous_mode: bool) -> Agent:
ai_goals=[task],
)

agent_prompt_config = OneShotAgentPromptStrategy.default_configuration.copy(
deep=True
)
agent_prompt_config.use_functions_api = config.openai_functions
agent_settings = AgentSettings(
name=Agent.default_settings.name,
agent_id=AgentManager.generate_id("AutoGPT-benchmark"),
Expand All @@ -52,9 +47,7 @@ def bootstrap_agent(task: str, continuous_mode: bool) -> Agent:
smart_llm=config.smart_llm,
allow_fs_access=not config.restrict_to_workspace,
use_functions_api=config.openai_functions,
plugins=config.plugins,
),
prompt_config=agent_prompt_config,
history=Agent.default_settings.history.copy(deep=True),
)

Expand Down
11 changes: 3 additions & 8 deletions autogpts/autogpt/autogpt/agent_factory/configurators.py
@@ -1,11 +1,10 @@
from typing import Optional

from forge.config import AIDirectives, AIProfile, Config
from forge.file_storage.base import FileStorage

from autogpt.agents.agent import Agent, AgentConfiguration, AgentSettings
from autogpt.config import AIDirectives, AIProfile, Config
from autogpt.core.resource.model_providers import ChatModelProvider
from autogpt.file_storage.base import FileStorage
from autogpt.logs.config import configure_chat_plugins
from autogpt.plugins import scan_plugins


def create_agent(
Expand Down Expand Up @@ -65,9 +64,6 @@ def _configure_agent(
" must be specified"
)

app_config.plugins = scan_plugins(app_config)
configure_chat_plugins(app_config)

agent_state = state or create_agent_state(
agent_id=agent_id,
task=task,
Expand Down Expand Up @@ -105,7 +101,6 @@ def create_agent_state(
smart_llm=app_config.smart_llm,
allow_fs_access=not app_config.restrict_to_workspace,
use_functions_api=app_config.openai_functions,
plugins=app_config.plugins,
),
history=Agent.default_settings.history.copy(deep=True),
)
10 changes: 5 additions & 5 deletions autogpts/autogpt/autogpt/agent_factory/generators.py
Expand Up @@ -2,17 +2,17 @@

from typing import TYPE_CHECKING

from autogpt.config.ai_directives import AIDirectives
from autogpt.file_storage.base import FileStorage

from .configurators import _configure_agent
from .profile_generator import generate_agent_profile_for_task
from forge.config import AIDirectives
from forge.file_storage.base import FileStorage

if TYPE_CHECKING:
from autogpt.agents.agent import Agent
from autogpt.config import Config
from autogpt.core.resource.model_providers.schema import ChatModelProvider

from .configurators import _configure_agent
from .profile_generator import generate_agent_profile_for_task
ntindle marked this conversation as resolved.
Show resolved Hide resolved


async def generate_agent_for_task(
agent_id: str,
Expand Down
7 changes: 4 additions & 3 deletions autogpts/autogpt/autogpt/agent_factory/profile_generator.py
@@ -1,8 +1,10 @@
import json
import logging

from autogpt.config import AIDirectives, AIProfile, Config
from autogpt.core.configuration import SystemConfiguration, UserConfigurable
from forge.config import AIDirectives, AIProfile, Config
from forge.config.schema import SystemConfiguration, UserConfigurable
from forge.json.schema import JSONSchema

from autogpt.core.prompting import (
ChatPrompt,
LanguageModelClassification,
Expand All @@ -14,7 +16,6 @@
ChatModelProvider,
CompletionModelFunction,
)
from autogpt.core.utils.json_schema import JSONSchema

logger = logging.getLogger(__name__)

Expand Down
3 changes: 2 additions & 1 deletion autogpts/autogpt/autogpt/agent_manager/agent_manager.py
Expand Up @@ -3,8 +3,9 @@
import uuid
from pathlib import Path

from forge.file_storage.base import FileStorage

from autogpt.agents.agent import AgentSettings
from autogpt.file_storage.base import FileStorage


class AgentManager:
Expand Down
4 changes: 0 additions & 4 deletions autogpts/autogpt/autogpt/agents/__init__.py
@@ -1,4 +0,0 @@
from .agent import Agent
from .base import AgentThoughts, BaseAgent, CommandArgs, CommandName

__all__ = ["BaseAgent", "Agent", "CommandName", "CommandArgs", "AgentThoughts"]
68 changes: 34 additions & 34 deletions autogpts/autogpt/autogpt/agents/agent.py
Expand Up @@ -6,26 +6,50 @@
from typing import TYPE_CHECKING, Optional

import sentry_sdk
from forge.agent.protocols import (
AfterExecute,
AfterParse,
CommandProvider,
DirectiveProvider,
MessageProvider,
)
from forge.command.command import Command, CommandOutput
from forge.components.code_executor.code_executor import CodeExecutorComponent
from forge.components.context.context import ContextComponent
from forge.components.event_history.action_history import (
ActionErrorResult,
ActionInterruptedByHuman,
ActionResult,
ActionSuccessResult,
)
from forge.components.event_history.event_history import EventHistoryComponent
from forge.components.file_manager.file_manager import FileManagerComponent
from forge.components.git_operations.git_operations import GitOperationsComponent
from forge.components.image_gen.image_gen import ImageGeneratorComponent
from forge.components.system.system import SystemComponent
from forge.components.user_interaction.user_interaction import UserInteractionComponent
from forge.components.watchdog.watchdog import WatchdogComponent
from forge.components.web_search.web_search import WebSearchComponent
from forge.components.web_selenium.web_selenium import WebSeleniumComponent
from forge.config.schema import Configurable
from forge.file_storage.base import FileStorage
from forge.utils.exceptions import (
AgentException,
AgentTerminated,
CommandExecutionError,
InvalidArgumentError,
UnknownCommandError,
)
from pydantic import Field

from autogpt.agents.prompt_strategies.one_shot import OneShotAgentPromptStrategy
from autogpt.commands.execute_code import CodeExecutorComponent
from autogpt.commands.git_operations import GitOperationsComponent
from autogpt.commands.image_gen import ImageGeneratorComponent
from autogpt.commands.system import SystemComponent
from autogpt.commands.user_interaction import UserInteractionComponent
from autogpt.commands.web_search import WebSearchComponent
from autogpt.commands.web_selenium import WebSeleniumComponent
from autogpt.components.event_history import EventHistoryComponent
from autogpt.core.configuration import Configurable
from autogpt.core.prompting import ChatPrompt
from autogpt.core.resource.model_providers import ChatMessage, ChatModelProvider
from autogpt.core.resource.model_providers.schema import (
AssistantChatMessage,
ChatModelResponse,
)
from autogpt.core.runner.client_lib.logging.helpers import dump_prompt
from autogpt.file_storage.base import FileStorage
from autogpt.llm.providers.openai import get_openai_command_specs
from autogpt.logs.log_cycle import (
CURRENT_CONTEXT_FILE_NAME,
Expand All @@ -34,37 +58,13 @@
LogCycleHandler,
)
from autogpt.logs.utils import fmt_kwargs
from autogpt.models.action_history import (
ActionErrorResult,
ActionInterruptedByHuman,
ActionResult,
ActionSuccessResult,
)
from autogpt.models.command import Command, CommandOutput
from autogpt.utils.exceptions import (
AgentException,
AgentTerminated,
CommandExecutionError,
InvalidArgumentError,
UnknownCommandError,
)

from .base import (
BaseAgent,
BaseAgentConfiguration,
BaseAgentSettings,
ThoughtProcessOutput,
)
from .features.agent_file_manager import FileManagerComponent
from .features.context import ContextComponent
from .features.watchdog import WatchdogComponent
from .protocols import (
AfterExecute,
AfterParse,
CommandProvider,
DirectiveProvider,
MessageProvider,
)

if TYPE_CHECKING:
from autogpt.config import Config
Expand Down
48 changes: 17 additions & 31 deletions autogpts/autogpt/autogpt/agents/base.py
Expand Up @@ -15,36 +15,37 @@
overload,
)

from auto_gpt_plugin_template import AutoGPTPluginTemplate
from colorama import Fore
from pydantic import BaseModel, Field, validator

if TYPE_CHECKING:
from autogpt.core.resource.model_providers.schema import (
ChatModelInfo,
)

from autogpt.agents import protocols as _protocols
from autogpt.agents.components import (
from forge.agent import protocols as _protocols
from forge.agent.components import (
AgentComponent,
ComponentEndpointError,
EndpointPipelineError,
)
from autogpt.config import ConfigBuilder
from autogpt.config.ai_directives import AIDirectives
from autogpt.config.ai_profile import AIProfile
from autogpt.core.configuration import (
from forge.components.event_history.action_history import (
ActionResult,
EpisodicActionHistory,
)
from forge.config import AIDirectives, AIProfile
from forge.config.schema import (
Configurable,
SystemConfiguration,
SystemSettings,
UserConfigurable,
)
from forge.prompts.prompt import DEFAULT_TRIGGERING_PROMPT
from pydantic import BaseModel, Field, validator

if TYPE_CHECKING:
from autogpt.core.resource.model_providers.schema import (
ChatModelInfo,
)

from autogpt.config import ConfigBuilder
from autogpt.core.resource.model_providers.openai import (
OPEN_AI_CHAT_MODELS,
OpenAIModelName,
)
from autogpt.models.action_history import ActionResult, EpisodicActionHistory
from autogpt.prompts.prompt import DEFAULT_TRIGGERING_PROMPT

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -96,21 +97,6 @@ class BaseAgentConfiguration(SystemConfiguration):
summary_max_tlength: Optional[int] = None
# TODO: move to ActionHistoryConfiguration

plugins: list[AutoGPTPluginTemplate] = Field(default_factory=list, exclude=True)

class Config:
arbitrary_types_allowed = True # Necessary for plugins

@validator("plugins", each_item=True)
def validate_plugins(cls, p: AutoGPTPluginTemplate | Any):
assert issubclass(
p.__class__, AutoGPTPluginTemplate
), f"{p} does not subclass AutoGPTPluginTemplate"
assert (
p.__class__.__name__ != "AutoGPTPluginTemplate"
), f"Plugins must subclass AutoGPTPluginTemplate; {p} is a template instance"
return p

@validator("use_functions_api")
def validate_openai_functions(cls, v: bool, values: dict[str, Any]):
if v:
Expand Down
13 changes: 6 additions & 7 deletions autogpts/autogpt/autogpt/agents/prompt_strategies/one_shot.py
Expand Up @@ -6,10 +6,13 @@
from logging import Logger

import distro
from autogpts.autogpt.autogpt.agents.base import ThoughtProcessOutput
from forge.config.schema import SystemConfiguration, UserConfigurable
from forge.json.parsing import extract_dict_from_json
from forge.json.schema import JSONSchema
from forge.prompts.utils import format_numbered_list
from forge.utils.exceptions import InvalidAgentResponseError

from autogpt.agents.base import ThoughtProcessOutput
from autogpt.config import AIDirectives, AIProfile
from autogpt.core.configuration.schema import SystemConfiguration, UserConfigurable
from autogpt.core.prompting import (
ChatPrompt,
LanguageModelClassification,
Expand All @@ -20,10 +23,6 @@
ChatMessage,
CompletionModelFunction,
)
from autogpt.core.utils.json_schema import JSONSchema
from autogpt.core.utils.json_utils import extract_dict_from_json
from autogpt.prompts.utils import format_numbered_list
from autogpt.utils.exceptions import InvalidAgentResponseError


class OneShotAgentPromptConfiguration(SystemConfiguration):
Expand Down
16 changes: 9 additions & 7 deletions autogpts/autogpt/autogpt/app/agent_protocol_server.py
Expand Up @@ -10,8 +10,13 @@
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import RedirectResponse, StreamingResponse
from fastapi.staticfiles import StaticFiles
from forge.sdk.db import AgentDB
from forge.sdk.errors import NotFoundError
from forge.agent.agent_protocol import base_router
from forge.components.event_history.action_history import (
ActionErrorResult,
ActionSuccessResult,
)
from forge.database.agent_db import AgentDB
from forge.file_storage import FileStorage
from forge.sdk.middlewares import AgentMiddleware
from forge.sdk.model import (
Artifact,
Expand All @@ -23,7 +28,8 @@
TaskRequestBody,
TaskStepsListResponse,
)
from forge.sdk.routes.agent_protocol import base_router
from forge.utils.const import DEFAULT_ASK_COMMAND, DEFAULT_FINISH_COMMAND
from forge.utils.exceptions import AgentFinished, NotFoundError
from hypercorn.asyncio import serve as hypercorn_serve
from hypercorn.config import Config as HypercornConfig
from sentry_sdk import set_user
Expand All @@ -36,11 +42,7 @@
from autogpt.core.resource.model_providers import ChatModelProvider
from autogpt.core.resource.model_providers.openai import OpenAIProvider
from autogpt.core.resource.model_providers.schema import ModelProviderBudget
from autogpt.file_storage import FileStorage
from autogpt.logs.utils import fmt_kwargs
from autogpt.models.action_history import ActionErrorResult, ActionSuccessResult
from autogpt.utils.exceptions import AgentFinished
from autogpt.utils.utils import DEFAULT_ASK_COMMAND, DEFAULT_FINISH_COMMAND

logger = logging.getLogger(__name__)

Expand Down