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
6 changes: 3 additions & 3 deletions autogpts/autogpt/autogpt/agent_factory/profile_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
from forge.config.ai_directives import AIDirectives
from forge.config.ai_profile import AIProfile
from forge.config.config import Config
from forge.config.schema import SystemConfiguration, UserConfigurable
from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema
from forge.llm.prompting import ChatPrompt, LanguageModelClassification, PromptStrategy
from forge.llm.providers.schema import (
AssistantChatMessage,
ChatMessage,
ChatModelProvider,
CompletionModelFunction,
)
from forge.prompts import ChatPrompt, LanguageModelClassification, PromptStrategy
from forge.models.config import SystemConfiguration, UserConfigurable

logger = logging.getLogger(__name__)

Expand Down
48 changes: 26 additions & 22 deletions autogpts/autogpt/autogpt/agents/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,40 +15,35 @@
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,
EpisodicActionHistory,
from forge.components.action_history.event_history_component import (
EventHistoryComponent,
)
from forge.components.event_history.event_history import EventHistoryComponent
from forge.components.action_history.model import EpisodicActionHistory
from forge.components.code_executor.code_executor import CodeExecutorComponent
from forge.components.context.context import AgentContext, ContextComponent
from forge.components.file_manager import FileManagerComponent
from forge.components.git_operations import GitOperationsComponent
from forge.components.image_gen import ImageGeneratorComponent
from forge.components.system import SystemComponent
from forge.components.user_interaction import UserInteractionComponent
from forge.components.watchdog import WatchdogComponent
from forge.components.web_search import WebSearchComponent
from forge.components.web_selenium import WebSeleniumComponent
from forge.config.schema import Configurable
from forge.components.web_search import WebSearchComponent, WebSeleniumComponent
from forge.file_storage.base import FileStorage
from forge.llm.prompting.schema import ChatPrompt
from forge.llm.providers import (
AssistantFunctionCall,
ChatMessage,
ChatModelProvider,
ChatModelResponse,
)
from forge.llm.providers.utils import function_specs_from_commands
from forge.logging.log_cycle import (
CURRENT_CONTEXT_FILE_NAME,
NEXT_ACTION_FILE_NAME,
USER_INPUT_FILE_NAME,
LogCycleHandler,
from forge.models.action import (
ActionErrorResult,
ActionInterruptedByHuman,
ActionResult,
ActionSuccessResult,
)
from forge.prompts import ChatPrompt
from forge.models.config import Configurable
from forge.utils.exceptions import (
AgentException,
AgentTerminated,
Expand All @@ -57,11 +52,18 @@
)
from pydantic import Field

from autogpt.agents.prompt_strategies.one_shot import (
from autogpt.app.log_cycle import (
CURRENT_CONTEXT_FILE_NAME,
NEXT_ACTION_FILE_NAME,
USER_INPUT_FILE_NAME,
LogCycleHandler,
)
from autogpt.core.runner.client_lib.logging.helpers import dump_prompt

from .prompt_strategies.one_shot import (
OneShotAgentActionProposal,
OneShotAgentPromptStrategy,
)
from autogpt.core.runner.client_lib.logging.helpers import dump_prompt

if TYPE_CHECKING:
from forge.config.config import Config
Expand Down Expand Up @@ -119,7 +121,7 @@ def __init__(
lambda x: self.llm_provider.count_tokens(x, self.llm.name),
legacy_config,
llm_provider,
)
).run_after(WatchdogComponent)
self.user_interaction = UserInteractionComponent(legacy_config)
self.file_manager = FileManagerComponent(settings, file_storage)
self.code_executor = CodeExecutorComponent(
Expand All @@ -134,7 +136,9 @@ def __init__(
self.web_search = WebSearchComponent(legacy_config)
self.web_selenium = WebSeleniumComponent(legacy_config, llm_provider, self.llm)
self.context = ContextComponent(self.file_manager.workspace, settings.context)
self.watchdog = WatchdogComponent(settings.config, settings.history)
self.watchdog = WatchdogComponent(settings.config, settings.history).run_after(
ContextComponent
)

self.created_at = datetime.now().strftime("%Y%m%d_%H%M%S")
"""Timestamp the agent was created; only used for structured debug logging."""
Expand Down
10 changes: 5 additions & 5 deletions autogpts/autogpt/autogpt/agents/prompt_strategies/one_shot.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@
from logging import Logger

import distro
from forge.agent.base import ActionProposal
from forge.config.ai_directives import AIDirectives
from forge.config.ai_profile import AIProfile
from forge.config.schema import SystemConfiguration, UserConfigurable
from forge.json.model import JSONSchema
from forge.json.parsing import extract_dict_from_json
from forge.json.schema import JSONSchema
from forge.llm.prompting import ChatPrompt, LanguageModelClassification, PromptStrategy
from forge.llm.prompting.utils import format_numbered_list
from forge.llm.providers.schema import (
AssistantChatMessage,
ChatMessage,
CompletionModelFunction,
)
from forge.models.action import ActionProposal
from forge.models.config import SystemConfiguration, UserConfigurable
from forge.models.utils import ModelWithSummary
from forge.prompts import ChatPrompt, LanguageModelClassification, PromptStrategy
from forge.prompts.utils import format_numbered_list
from forge.utils.exceptions import InvalidAgentResponseError
from pydantic import Field

Expand Down
12 changes: 6 additions & 6 deletions autogpts/autogpt/autogpt/app/agent_protocol_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import RedirectResponse, StreamingResponse
from fastapi.staticfiles import StaticFiles
from forge.components.event_history import ActionErrorResult, ActionSuccessResult
from forge.config.config import Config
from forge.file_storage import FileStorage
from forge.llm.providers import ChatModelProvider, ModelProviderBudget
from forge.models.action import ActionErrorResult, ActionSuccessResult
from forge.sdk.db import AgentDB
from forge.sdk.middlewares import AgentMiddleware
from forge.sdk.model import (
Expand All @@ -27,7 +27,7 @@
TaskStepsListResponse,
)
from forge.sdk.routes.agent_protocol import base_router
from forge.utils.const import DEFAULT_ASK_COMMAND, DEFAULT_FINISH_COMMAND
from forge.utils.const import ASK_COMMAND, FINISH_COMMAND
from forge.utils.exceptions import AgentFinished, NotFoundError
from hypercorn.asyncio import serve as hypercorn_serve
from hypercorn.config import Config as HypercornConfig
Expand Down Expand Up @@ -225,7 +225,7 @@ async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Ste
input=step_request,
is_last=(
last_proposal is not None
and last_proposal.use_tool.name == DEFAULT_FINISH_COMMAND
and last_proposal.use_tool.name == FINISH_COMMAND
and execute_approved
),
)
Expand All @@ -239,7 +239,7 @@ async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Ste
)
)

if last_proposal.use_tool.name == DEFAULT_ASK_COMMAND:
if last_proposal.use_tool.name == ASK_COMMAND:
tool_result = ActionSuccessResult(outputs=user_input)
agent.event_history.register_result(tool_result)
elif execute_approved:
Expand Down Expand Up @@ -295,13 +295,13 @@ async def execute_step(self, task_id: str, step_request: StepRequestBody) -> Ste
+ ("\n\n" if "\n" in str(tool_result) else " ")
+ f"{tool_result}\n\n"
)
if last_proposal and last_proposal.use_tool.name != DEFAULT_ASK_COMMAND
if last_proposal and last_proposal.use_tool.name != ASK_COMMAND
else ""
)
output += f"{assistant_response.thoughts.speak}\n\n"
output += (
f"Next Command: {next_tool_to_use}"
if next_tool_to_use.name != DEFAULT_ASK_COMMAND
if next_tool_to_use.name != ASK_COMMAND
else next_tool_to_use.arguments["question"]
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from pathlib import Path
from typing import Any, Dict, Union

from .config import LOG_DIR
from forge.logging.config import LOG_DIR

DEFAULT_PREFIX = "agent"
CURRENT_CONTEXT_FILE_NAME = "current_context.json"
Expand Down
9 changes: 4 additions & 5 deletions autogpts/autogpt/autogpt/app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
is_docker_available,
we_are_running_in_a_docker_container,
)
from forge.components.event_history import ActionInterruptedByHuman
from forge.config.ai_directives import AIDirectives
from forge.config.ai_profile import AIProfile
from forge.config.config import Config, ConfigBuilder, assert_config_has_openai_api_key
Expand All @@ -27,10 +26,10 @@
from forge.llm.providers import MultiProvider
from forge.logging.config import configure_logging
from forge.logging.helpers import print_attribute, speak
from forge.models.action import ActionInterruptedByHuman, ActionProposal
from forge.models.utils import ModelWithSummary
from forge.utils.const import DEFAULT_FINISH_COMMAND
from forge.utils.const import FINISH_COMMAND
from forge.utils.exceptions import AgentTerminated, InvalidAgentResponseError
from forge.utils.input import clean_input

from autogpt.agent_factory.configurators import configure_agent_with_state, create_agent
from autogpt.agent_factory.profile_generator import generate_agent_profile_for_task
Expand All @@ -40,9 +39,9 @@

if TYPE_CHECKING:
from autogpt.agents.agent import Agent
from forge.agent.base import ActionProposal

from .configurator import apply_overrides_to_config
from .input import clean_input
from .setup import apply_overrides_to_ai_settings, interactively_revise_ai_settings
from .spinner import Spinner
from .utils import (
Expand Down Expand Up @@ -225,7 +224,7 @@ async def run_auto_gpt(

if (
(current_episode := agent.event_history.current_episode)
and current_episode.action.use_tool.name == DEFAULT_FINISH_COMMAND
and current_episode.action.use_tool.name == FINISH_COMMAND
and not current_episode.result
):
# Agent was resumed after `finish` -> rewrite result of `finish` action
Expand Down
3 changes: 2 additions & 1 deletion autogpts/autogpt/autogpt/app/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from forge.config.ai_profile import AIProfile
from forge.config.config import Config
from forge.logging.helpers import print_attribute
from forge.utils.input import clean_input

from .input import clean_input

logger = logging.getLogger(__name__)

Expand Down
4 changes: 2 additions & 2 deletions autogpts/autogpt/autogpt/core/ability/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
from typing import Any, ClassVar

import inflection
from forge.config.schema import SystemConfiguration
from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema
from forge.llm.providers import CompletionModelFunction
from forge.models.config import SystemConfiguration
from pydantic import Field

from autogpt.core.planning.simple import LanguageModelConfiguration
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
from typing import ClassVar

from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema

from autogpt.core.ability.base import Ability, AbilityConfiguration
from autogpt.core.ability.schema import AbilityResult
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
from typing import ClassVar

from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema

from autogpt.core.ability.base import Ability, AbilityConfiguration
from autogpt.core.ability.schema import AbilityResult, ContentType, Knowledge
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import logging
from typing import ClassVar

from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema
from forge.llm.providers import (
ChatMessage,
ChatModelProvider,
Expand Down
2 changes: 1 addition & 1 deletion autogpts/autogpt/autogpt/core/ability/simple.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import logging

from forge.config.schema import Configurable, SystemConfiguration, SystemSettings
from forge.llm.providers import (
ChatModelProvider,
CompletionModelFunction,
ModelProviderName,
)
from forge.models.config import Configurable, SystemConfiguration, SystemSettings

from autogpt.core.ability.base import Ability, AbilityConfiguration, AbilityRegistry
from autogpt.core.ability.builtins import BUILTIN_ABILITIES
Expand Down
2 changes: 1 addition & 1 deletion autogpts/autogpt/autogpt/core/agent/simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from pathlib import Path
from typing import Any

from forge.config.schema import Configurable, SystemConfiguration, SystemSettings
from forge.llm.providers import CompletionModelFunction, OpenAIProvider, OpenAISettings
from forge.models.config import Configurable, SystemConfiguration, SystemSettings
from pydantic import BaseModel

from autogpt.core.ability import (
Expand Down
2 changes: 1 addition & 1 deletion autogpts/autogpt/autogpt/core/memory/simple.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json
import logging

from forge.config.schema import Configurable, SystemConfiguration, SystemSettings
from forge.models.config import Configurable, SystemConfiguration, SystemSettings

from autogpt.core.memory.base import Memory
from autogpt.core.workspace import Workspace
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import logging

from forge.config.schema import SystemConfiguration, UserConfigurable
from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema
from forge.llm.prompting import ChatPrompt, LanguageModelClassification, PromptStrategy
from forge.llm.prompting.utils import to_numbered_list
from forge.llm.providers import (
AssistantChatMessage,
ChatMessage,
CompletionModelFunction,
)
from forge.prompts import PromptStrategy
from forge.prompts.schema import ChatPrompt, LanguageModelClassification
from forge.prompts.utils import to_numbered_list
from forge.models.config import SystemConfiguration, UserConfigurable

from autogpt.core.planning.schema import Task, TaskType

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import logging

from forge.config.schema import SystemConfiguration, UserConfigurable
from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema
from forge.llm.prompting import ChatPrompt, LanguageModelClassification, PromptStrategy
from forge.llm.providers import (
AssistantChatMessage,
ChatMessage,
CompletionModelFunction,
)
from forge.prompts import PromptStrategy
from forge.prompts.schema import ChatPrompt, LanguageModelClassification
from forge.models.config import SystemConfiguration, UserConfigurable

logger = logging.getLogger(__name__)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import logging

from forge.config.schema import SystemConfiguration, UserConfigurable
from forge.json.schema import JSONSchema
from forge.json.model import JSONSchema
from forge.llm.prompting import ChatPrompt, LanguageModelClassification, PromptStrategy
from forge.llm.prompting.utils import to_numbered_list
from forge.llm.providers import (
AssistantChatMessage,
ChatMessage,
CompletionModelFunction,
)
from forge.prompts import PromptStrategy
from forge.prompts.schema import ChatPrompt, LanguageModelClassification
from forge.prompts.utils import to_numbered_list
from forge.models.config import SystemConfiguration, UserConfigurable

from autogpt.core.planning.schema import Task

Expand Down