aboutsummaryrefslogtreecommitdiff
path: root/autogpts
AgeCommit message (Collapse)AuthorFilesLines
9 daysrefactor(autogpt, forge): Remove `autogpts` directory (#7163)Gravatar Krzysztof Czerwinski 205-33092/+0
- Moved `autogpt` and `forge` to project root - Removed `autogpts` directory - Moved and renamed submodule `autogpts/autogpt/tests/vcr_cassettes` to `autogpt/tests/vcr_cassettes` - When using CLI agents will be created in `agents` directory (instead of `autogpts`) - Renamed relevant docs, code and config references from `autogpts/[forge|autogpt]` to `[forge|autogpt]` and from `*../../*` to `*../*` - Updated `CODEOWNERS`, GitHub Actions and Docker `*.yml` configs - Updated symbolic links in `docs`
9 daysrefactor(agent): Remove unused `autogpt` code (#7112)Gravatar Krzysztof Czerwinski 77-5797/+45
Remove unused `autogpt` code and reorganize its file structure. * Moved: * `autogpt/agent_manager/agent_manager.py` to `autogpt/agents/agent_manager.py`, so the dir `agent_manager` was removed * `dump_prompt` from `autogpt.core.runner.client_lib.logging.helpers` to `forge/llm/prompting/utils.py` * `coroutine` decorator from `autogpt.core.runner.client_lib.utils` to `autogpt/app/utils.py` * Removed within `autogpt`: * Memory-related code from multiple files (not used), including `memory/*` * Memory-related config entries/env vars: `memory_backend`, `memory_index`, `redis_host`, `redis_port`, `redis_password`, `wipe_redis_on_start` * `core` files, from failed re-arch: * `*.md` docs * `core/ability/*` * `core/agent/*` * `core/memory/*` * `core/planning/*` * `core/plugin/*` * `core/workspace/*` * `core/runner/*` (`dump_prompt` and `coroutine` were moved) * Related tests * Updated relevant docs
10 daysrefactor(forge): Clean `forge` (#7117)Gravatar Krzysztof Czerwinski 72-2749/+305
Remove unused `forge` code and improve structure of `forge`. * Put all Agent Protocol stuff together in `forge.agent_protocol` * ... including `forge.agent_protocol.database` (was `forge.db`) * Remove duplicate/unused parts from `forge` * `forge.actions`, containing old commands; replaced by `forge.components` from `autogpt` * `forge/agent.py` (the old one, `ForgeAgent`) * `forge/app.py`, which was used to serve and run the `ForgeAgent` * `forge/db.py` (`ForgeDatabase`), which was used for `ForgeAgent` * `forge/llm.py`, which has been replaced by new `forge.llm` module which was ported from `autogpt.core.resource.model_providers` * `forge.memory`, which is not in use and not being maintained * `forge.sdk`, much of which was moved into other modules and the rest is deprecated * `AccessDeniedError`: unused * `forge_log.py`: replaced with `logging` * `validate_yaml_file`: not needed * `ai_settings_file` and associated loading logic and env var `AI_SETTINGS_FILE`: unused * `prompt_settings_file` and associated loading logic and env var `PROMPT_SETTINGS_FILE`: default directives are now provided by the `SystemComponent` * `request_user_double_check`, which was only used in `AIDirectives.load` * `TypingConsoleHandler`: not used
2024-05-16refactor(agent, forge): Move library code from `autogpt` to `forge` (#7106)Gravatar Krzysztof Czerwinski 178-1179/+2038
Moved from `autogpt` to `forge`: - `autogpt.config` -> `forge.config` - `autogpt.processing` -> `forge.content_processing` - `autogpt.file_storage` -> `forge.file_storage` - `autogpt.logs` -> `forge.logging` - `autogpt.speech` -> `forge.speech` - `autogpt.agents.(base|components|protocols)` -> `forge.agent.*` - `autogpt.command_decorator` -> `forge.command.decorator` - `autogpt.models.(command|command_parameter)` -> `forge.command.(command|parameter)` - `autogpt.(commands|components|features)` -> `forge.components` - `autogpt.core.utils.json_utils` -> `forge.json.parsing` - `autogpt.prompts.utils` -> `forge.llm.prompting.utils` - `autogpt.core.prompting.(base|schema|utils)` -> `forge.llm.prompting.*` - `autogpt.core.resource.model_providers` -> `forge.llm.providers` - `autogpt.llm.providers.openai` + `autogpt.core.resource.model_providers.utils` -> `forge.llm.providers.utils` - `autogpt.models.action_history:Action*` -> `forge.models.action` - `autogpt.core.configuration.schema` -> `forge.models.config` - `autogpt.core.utils.json_schema` -> `forge.models.json_schema` - `autogpt.core.resource.schema` -> `forge.models.providers` - `autogpt.models.utils` -> `forge.models.utils` - `forge.sdk.(errors|utils)` + `autogpt.utils.(exceptions|file_operations_utils|validators)` -> `forge.utils.(exceptions|file_operations|url_validator)` - `autogpt.utils.utils` -> `forge.utils.const` + `forge.utils.yaml_validator` Moved within `forge`: - forge/prompts/* -> forge/llm/prompting/* The rest are mostly import updates, and some sporadic removals and necessary updates (for example to fix circular deps): - Changed `CommandOutput = Any` to remove coupling with `ContextItem` (no longer needed) - Removed unused `Singleton` class - Reluctantly moved `speech` to forge due to coupling (tts needs to be changed into component) - Moved `function_specs_from_commands` and `core/resource/model_providers` to `llm/providers` (resources were a `core` thing and are no longer relevant) - Keep tests in `autogpt` to reduce changes in this PR - Removed unused memory-related code from tests - Removed duplicated classes: `FancyConsoleFormatter`, `BelowLevelFilter` - `prompt_settings.yaml` is in both `autogpt` and `forge` because for some reason doesn't work when placed in just one dir (need to be taken care of) - Removed `config` param from `clean_input`, it wasn't used and caused circular dependency - Renamed `BaseAgentActionProposal` to `ActionProposal` - Updated `pyproject.toml` in `forge` and `autogpt` - Moved `Action*` models from `forge/components/action_history/model.py` to `forge/models/action.py` as those are relevant to the entire agent and not just `EventHistoryComponent` + to reduce coupling - Renamed `DEFAULT_ASK_COMMAND` to `ASK_COMMAND` and `DEFAULT_FINISH_COMMAND` to `FINISH_COMMAND` - Renamed `AutoGptFormatter` to `ForgeFormatter` and moved to `forge` Includes changes from PR https://github.com/Significant-Gravitas/AutoGPT/pull/7148 --------- Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
2024-05-14Fix poetry install issue on ARM64 & python 3.12 (#7145)Gravatar Zamil Majdy 2-107/+125
2024-05-10feat(agent): Persist `AgentContext` in `Agent.state` (#7125)Gravatar Reinier van der Leer 3-15/+25
Persist the agent's `AgentContext` so that it works in rehydrated agent instances. This makes context usable in the `AgentProtocolServer`, where the agent instance is loaded and destroyed for every step. - Make `AgentContext` a Pydantic model - Add `context` parameter to `ContextComponent.__init__` so we can pass in an existing instance - Add `context: AgentContext` to `AgentSettings` so it is persisted - Add `type` attribute to `ContextItem` implementations as a discriminator - Rename `ContextItem` base class to `BaseContextItem` and make new `ContextItem` type alias (union of the implementation types)
2024-05-09fix(agent): Fix type propagation of `Command` and `@command` when used on ↵Gravatar Reinier van der Leer 2-13/+13
methods (#7124)
2024-05-09Remove arena (#7134)Gravatar Swifty 2-18/+0
* remove arena * refactor: Remove Arena intake workflow * Remove all mention of the arena * remove evo.ninja
2024-05-07lint: Fix linting errors in git_log_to_release_notes.pyGravatar Reinier van der Leer 1-3/+2
2024-05-07feat(agent/core): Allow `list[ChatMessage]` in `dump_prompt`Gravatar Reinier van der Leer 1-3/+7
2024-05-07fix(agent): Swap target files and symlinks of component documentation to ↵Gravatar Reinier van der Leer 2-2/+165
make package buildable Documentation files were in docs/content/AutoGPT/components, symlinks in autogpts/autogpt/autogpt/(agents|commands). Chef doesn't allow symlinks that point to locations outside of package dir. Replacing the documentation files with symlinks, and symlinks with the actual documentation files, should fix this.
2024-05-07fix(agent/docs): Fix symlinks to component-based agent docsGravatar Reinier van der Leer 2-2/+2
2024-05-07lint(agent): Add `flake8` to pre-commit checksGravatar Reinier van der Leer 1-0/+5
2024-05-04feat(agent/scripts): Add git_log_to_release_notes.pyGravatar Reinier van der Leer 1-0/+142
This script asks the user to choose two git refs, and then writes release notes for the diff between those two refs.
2024-05-04feat(agent/core): Add Anthropic Claude 3 support (#7085)Gravatar Reinier van der Leer 23-149/+922
- feat(agent/core): Add `AnthropicProvider` - Add `ANTHROPIC_API_KEY` to .env.template and docs Notable differences in logic compared to `OpenAIProvider`: - Merges subsequent user messages in `AnthropicProvider._get_chat_completion_args` - Merges and extracts all system messages into `system` parameter in `AnthropicProvider._get_chat_completion_args` - Supports prefill; merges prefill content (if any) into generated response - Prompt changes to improve compatibility with `AnthropicProvider` Anthropic has a slightly different API compared to OpenAI, and has much stricter input validation. E.g. Anthropic only supports a single `system` prompt, where OpenAI allows multiple `system` messages. Anthropic also forbids sequences of multiple `user` or `assistant` messages and requires that messages alternate between roles. - Move response format instruction from separate message into main system prompt - Fix clock message format - Add pre-fill to `OneShot` generated prompt - refactor(agent/core): Tweak `model_providers.schema` - Simplify `ModelProviderUsage` - Remove attribute `total_tokens` as it is always equal to `prompt_tokens + completion_tokens` - Modify signature of `update_usage(..)`; no longer requires a full `ModelResponse` object as input - Improve `ModelProviderBudget` - Change type of attribute `usage` to `defaultdict[str, ModelProviderUsage]` -> allow per-model usage tracking - Modify signature of `update_usage_and_cost(..)`; no longer requires a full `ModelResponse` object as input - Allow `ModelProviderBudget` zero-argument instantiation - Fix type of `AssistantChatMessage.role` to match `ChatMessage.role` (str -> `ChatMessage.Role`) - Add shared attributes and constructor to `ModelProvider` base class - Add `max_output_tokens` parameter to `create_chat_completion` interface - Add pre-filling as a global feature - Add `prefill_response` field to `ChatPrompt` model - Add `prefill_response` parameter to `create_chat_completion` interface - Add `ChatModelProvider.get_available_models()` and remove `ApiManager` - Remove unused `OpenAIChatParser` typedef in openai.py - Remove redundant `budget` attribute definition on `OpenAISettings` - Remove unnecessary `usage` in `OpenAIProvider` > `default_settings` > `budget` - feat(agent): Allow use of any available LLM provider through `MultiProvider` - Add `MultiProvider` (`model_providers.multi`) - Replace all references to / uses of `OpenAIProvider` with `MultiProvider` - Change type of `Config.smart_llm` and `Config.fast_llm` from `str` to `ModelName` - feat(agent/core): Validate function call arguments in `create_chat_completion` - Add `validate_call` method to `CompletionModelFunction` in `model_providers.schema` - Add `validate_tool_calls` utility function in `model_providers.utils` - Add tool call validation step to `create_chat_completion` in `OpenAIProvider` and `AnthropicProvider` - Remove (now redundant) command argument validation logic in agent.py and models/command.py - refactor(agent): Rename `get_openai_command_specs` to `function_specs_from_commands`
2024-05-02fix(agent): Fix `open_file` and `open_folder` commandsGravatar Reinier van der Leer 1-18/+14
They weren't ported properly to the new component-based architecture: the `@sanitize_path` decorator was removed, causing path handling issues.
2024-05-02refactor(agent)!: Use Pydantic models for `Agent` process output (#7116)Gravatar Reinier van der Leer 12-440/+307
* Introduce `BaseAgentActionProposal`, `OneShotAgentActionProposal`, and `AssistantThoughts` models to replace `ThoughtProcessResponse`, `DEFAULT_RESPONSE_SCHEMA` * Refactor and clean up code because now we don't need to do as much type checking everywhere * Tweak `OneShot` response format instruction Granular: * `autogpt.agents.prompt_strategies.one_shot` * Replace ThoughtProcessResponse`, `DEFAULT_RESPONSE_SCHEMA` and parsing logic by `AssistantThoughts` and `OneShotAgentActionProposal` * (TANGENTIAL) Move response format instruction into main system prompt message * (TANGENTIAL) Adjust response format instruction * `autogpt.agents.base` * Add `BaseAgentActionProposal` base model -> replace `ThoughtProcessOutput` * Change signature of `execute` method to accept `BaseAgentActionProposal` instead of separate `command_name` and `command_args` * Add `do_not_execute(proposal, feedback)` abstract method, replacing `execute("human_feedback", ..., feedback)` * Move `history` definition from `BaseAgentSettings` to `AgentSettings` (the only place where it's used anyway) * `autogpt.models` * Add `.utils` > `ModelWithSummary` base model * Make the models in `.action_history` (`Episode`, `EpisodicActionHistory`) generic with a type parameter for the type of `Episode.action` * `autogpt.core.resource.model_providers.schema` * Add `__str__` to `AssistantFunctionCall` which pretty-prints the function call All other changes are a direct result of the changes above. ## BREAKING CHANGE: * Due to the change in `autogpt.models.action_history`, the application after this change will be unable to load/resume agents from before this change and vice versa. * The `additional_output` field in the response of `execute_step` has changed slightly: * Type of `.thoughts.plan` has changed from `str` to `list[str]` * `.command` -> `.use_tool` * `.command.args` -> `.use_tool.arguments`
2024-04-30fix(agent): Fix `execute_python_file` on local storageGravatar Reinier van der Leer 1-2/+2
It's still broken for remote/cloud storage.
2024-04-30feat(agent/core): Support referenced types in `JSONSchema.from_dict`Gravatar Reinier van der Leer 1-1/+26
2024-04-30fix(agent/core): Format parse errors for log statement in ↵Gravatar Reinier van der Leer 1-5/+5
`OpenAIProvider.create_chat_completion`
2024-04-29Fix ImportError for validate_yaml_file function (#7110)Gravatar 王苏云 1-1/+1
* Fix ImportError for validate_yaml_file function * Fix ImportError for validate_yaml_file function --------- Co-authored-by: suyun <sylearn@foxmail.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>
2024-04-29fix(autogpt): Revert line in `poetry.lock` (#7113)Gravatar Krzysztof Czerwinski 1-1/+1
Revert line in `poetry.lock` to from before https://github.com/Significant-Gravitas/AutoGPT/pull/7097
2024-04-28clean(autogpt): Remove old plugin system (#7097)Gravatar Krzysztof Czerwinski 25-1489/+11
### Background Follow up after merging https://github.com/Significant-Gravitas/AutoGPT/pull/7054, old plugins will no longer be used. ### Changes 🏗️ - Removed all dead code needed to load and use plugins. - Removed `auto-gpt-plugin-template` dependency - Removed `rev=` from `autogpt-forge` dependency (the set `rev` had incompatible `duckduckgo-search` versions) - Kept `--install-plugin-deps` CLI option and dead code associated (may be needed for new plugins)
2024-04-26fix(agent): Update .env.template to match changes in 370615eGravatar Reinier van der Leer 1-4/+4
2024-04-26feat(agent): Add support for new `gpt-4-turbo` model and set as default ↵Gravatar Reinier van der Leer 1-2/+6
`SMART_LLM`
2024-04-24fix(agent): Fix `OneShotAgentPromptStrategy` parser when using ↵Gravatar Reinier van der Leer 1-2/+9
functions/tools API Also: - Improve error message when the LLM doesn't call any tools
2024-04-24fix(agent): Expand failure check in `json_loads(..)`Gravatar Reinier van der Leer 1-1/+1
Not only check if the resulting object is `demjson3.undefined`, but also `demjson3.syntax_error`.
2024-04-24fix(agent): Omit `EventHistory` progress message if emptyGravatar Reinier van der Leer 1-7/+6
Also add a heading to the progress section
2024-04-24feat(agent/cli): Speed up loading of saved agentsGravatar Reinier van der Leer 1-3/+3
O(n) to O(1) by removing individual `.exists(dir / "state.json")` calls and using `.list_files()` instead of `.list_folders()`
2024-04-24chore(agent): Update `duckduckgo-search` to v5.3.0Gravatar Reinier van der Leer 1-58/+59
2024-04-24fix(agent): Fix crash when `LOG_FORMAT=structured_google_cloud`Gravatar Reinier van der Leer 1-1/+1
Another piece of fallout from cf00c33 - fix(agent): Fix debug logging & amend configure_logging for easier use
2024-04-23fix(agent/setup): Fix installing ONNXRuntime on macOS on some architectures ↵Gravatar Nicholas Tindle 2-52/+54
(#7022) Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
2024-04-23fix(agent): Support OpenAI Project API keys (#7099)Gravatar Fullstop000 1-1/+1
Amend regex expression in config.py that OpenAI API keys are validated against Signed-off-by: Fullstop000 <fullstop1005@gmail.com>
2024-04-22fix(agent): Full fix for CLI breakage introduced in cf00c33Gravatar Reinier van der Leer 3-24/+37
2024-04-22fix(agent): Logging hotfix (#7096)Gravatar Krzysztof Czerwinski 1-4/+3
Fix https://github.com/Significant-Gravitas/AutoGPT/commit/cf00c33f907b12e48218404f849c11beb568001b
2024-04-22feat(agent): Component-based Agents (#7054)Gravatar Krzysztof Czerwinski 59-3187/+2412
This incremental re-architecture unifies Agent code and plugins, so everything is component-based. ## Breaking changes - Removed command categories and `DISABLED_COMMAND_CATEGORIES` environment variable. Use `DISABLED_COMMANDS` environment variable to disable individual commands. - Changed `command` decorator; old-style commands are no longer supported. Implement `CommandProvider` on components instead. - Removed `CommandRegistry`, now all commands are provided by components implementing `CommandProvider`. - Removed `prompt_config` from `AgentSettings`. - Removed plugin support: old plugins will no longer be loaded and executed. - Removed `PromptScratchpad`, it was used by plugins and is no longer needed. - Changed `ThoughtProcessOutput` from tuple to pydantic `BaseModel`. ## Other changes - Created `AgentComponent`, protocols and logic to execute them. - `BaseAgent` and `Agent` is now composed of components. - Moved some logic from `BaseAgent` to `Agent`. - Moved agent features and commands to components. - Removed check if the same operation is about to be executed twice in a row. - Removed file logging from `FileManagerComponent` (formerly `AgentFileManagerMixin`) - Updated tests - Added docs See [Introduction](https://github.com/kcze/AutoGPT/blob/kpczerwinski/open-440-modular-agents/docs/content/AutoGPT/component%20agent/introduction.md) for more information.
2024-04-22fix(agent/core): Set `OpenAIProvider._configuration.retries_per_request` to ↵Gravatar Reinier van der Leer 1-1/+1
7 by default 10 was too much, caused multi-minute timeouts between retries
2024-04-22refactor(agent): Tweak `model_providers.schema` for easier useGravatar Reinier van der Leer 5-62/+29
- Set default values for `ProviderBudget` / `ModelProviderBudget` fields - Remove redundant field redefinitions on `ModelProviderBudget` class - Change `ModelProviderUsage.update_usage(..)` and `ModelProviderBudget.update_usage_and_cost(..)` signatures for easier use - Change `ModelProviderBudget.usage` from `ModelProviderUsage` to `defaultdict[str, ModelProviderUsage]` for per-model usage tracking - Fix `ChatModelInfo`/`EmbeddingModelInfo` `service` attribute: rename from `llm_service` to match base class and fix types. This makes it unnecessary to specify the `service` field when creating a `ChatModelInfo` or `EmbeddingModelInfo` object. - Use `defaultdict(ModelProviderBudget)` for task budget tracking in agent_protocol_server.py
2024-04-22feat(agent/core): Add `max_output_tokens` parameter to ↵Gravatar Reinier van der Leer 3-2/+8
`create_chat_completion` interface
2024-04-22refactor(agent): Add `ChatModelProvider.get_available_models()` and remove ↵Gravatar Reinier van der Leer 10-295/+78
`ApiManager`
2024-04-22fix(agent/tests): Remove useless tests in test_config.pyGravatar Reinier van der Leer 1-63/+0
2024-04-22fix(agent): Fix debug logging & amend `configure_logging` for easier useGravatar Reinier van der Leer 6-57/+65
2024-04-21lint(agent): Remove unused `os` import in file_storage/s3.pyGravatar Reinier van der Leer 1-1/+0
2024-04-18feat(agent/core): Allow zero-argument instantiation of `OpenAIProvider`Gravatar Reinier van der Leer 1-4/+9
2024-04-18refactor(agent): Remove redundant parsing functions in config classesGravatar Reinier van der Leer 3-33/+15
Pydantic has built-in typecasting logic, so converting to Python builtin types and enums is done automatically.
2024-04-16refactor(agent): Refactor & improve `create_chat_completion` (#7082)Gravatar Reinier van der Leer 8-113/+208
* refactor(agent/core): Rearrange and split up `OpenAIProvider.create_chat_completion` - Rearrange to reduce complexity, improve separation/abstraction of concerns, and allow multiple points of failure during parsing - Move conversion from `ChatMessage` to `openai.types.ChatCompletionMessageParam` to `_get_chat_completion_args` - Move token usage and cost tracking boilerplate code to `_create_chat_completion` - Move tool call conversion/parsing to `_parse_assistant_tool_calls` (new) * fix(agent/core): Handle decoding of function call arguments in `create_chat_completion` - Amend `model_providers.schema`: change type of `arguments` from `str` to `dict[str, Any]` on `AssistantFunctionCall` and `AssistantFunctionCallDict` - Implement robust and transparent parsing in `OpenAIProvider._parse_assistant_tool_calls` - Remove now unnecessary `json_loads` calls throughout codebase * feat(agent/utils): Improve conditions and errors in `json_loads` - Include all decoding errors when raising a ValueError on decode failure - Use errors returned by `return_errors` instead of an error buffer - Fix check for decode failure
2024-04-12feat(agent): Improve feedback in `create_chat_completion` parse-fix mechanismGravatar Reinier van der Leer 1-1/+4
Include error type in feedback message
2024-04-12refactor(agent/utils): Clean up `JSONSchema.validate_object` signature & ↵Gravatar Reinier van der Leer 2-16/+9
docstring
2024-04-12fix(agent): Make `Agent.save_state` behave like save as (#7025)Gravatar Krzysztof Czerwinski 9-16/+151
* Make `Agent.save_state` behave like "save as" - Leave previously saved state untouched - Save agent state in new folder corresponding to new `agent_id` - Copy over workspace contents to new folder * Add `copy` method to `FileStorage` --------- Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
2024-03-25fix(agent, forge): Conform web_search.py to duckduckgo_search v5 (#7046)Gravatar Krzysztof Czerwinski 4-39/+43
Update web_search command for both autogpt and forge to adjust for breaking change in v5 of duckduckgo_search, update duckduckgo_search to ^5.0.0 --------- Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co>