Commit Graph

5432 Commits (9e22409d6614c373c7c28e85eb80e474886c68e2)

Author SHA1 Message Date
SwiftyOS 4fe62b8063 new frontend build as ci is broke 2024-05-11 09:22:59 +02:00
SwiftyOS b3967fd597 remove leaderboard 2024-05-11 09:15:09 +02:00
SwiftyOS 1f05881283 fix: typo 2024-05-11 08:45:51 +02:00
SwiftyOS a9afb3cbff removed git requirement from cli 2024-05-11 08:41:52 +02:00
Reinier van der Leer c562b3b6a3
unbreak `./run agent create`
"If we had done this in Swift it would've never happened" ~Craig Swift

                ____
              / . .\
              \  ---<
               \  /
       ________/ /
    -=:___________/
2024-05-10 12:53:57 +02:00
Reinier van der Leer b0cbf711dc
feat(agent): Persist `AgentContext` in `Agent.state` (#7125)
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-10 09:30:12 +02:00
Reinier van der Leer 7e02cfdc9f
fix(agent): Fix type propagation of `Command` and `@command` when used on methods (#7124) 2024-05-09 11:39:09 +02:00
Swifty 34fdbaa26b
Remove arena (#7134)
* remove arena

* refactor: Remove Arena intake workflow

* Remove all mention of the arena

* remove evo.ninja
2024-05-09 11:36:40 +02:00
Swifty 818d391284
Remove arena submission from cli (#7137) 2024-05-09 11:27:16 +02:00
Reinier van der Leer 08c32a7a12
lint: Fix linting errors in git_log_to_release_notes.py 2024-05-07 18:53:19 +02:00
Reinier van der Leer 56104bd047
feat(agent/core): Allow `list[ChatMessage]` in `dump_prompt` 2024-05-07 16:43:28 +02:00
Reinier van der Leer 2ef5cd7d4c
fix(agent): Swap target files and symlinks of component documentation to 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-07 13:44:31 +02:00
Reinier van der Leer 74b3aae5c6
fix(agent/docs): Fix symlinks to component-based agent docs 2024-05-07 13:35:58 +02:00
Reinier van der Leer e9b3b5090c
lint(agent): Add `flake8` to pre-commit checks 2024-05-07 13:30:10 +02:00
Reinier van der Leer 9bac6f4ce2
feat(agent/scripts): Add git_log_to_release_notes.py
This script asks the user to choose two git refs, and then writes release notes for the diff between those two refs.
2024-05-04 20:55:42 +02:00
Reinier van der Leer 39c46ef6be
feat(agent/core): Add Anthropic Claude 3 support (#7085)
- 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-04 20:33:25 +02:00
Nicholas Tindle 78d83bb3ce
Create .pr_agent.toml 2024-05-04 09:38:37 -05:00
Reinier van der Leer d57ccf7ec9
fix(agent): Fix `open_file` and `open_folder` commands
They weren't ported properly to the new component-based architecture: the `@sanitize_path` decorator was removed, causing path handling issues.
2024-05-02 02:41:03 +02:00
Reinier van der Leer ada2e19829
refactor(agent)!: Use Pydantic models for `Agent` process output (#7116)
* 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-05-02 00:43:11 +02:00
Reinier van der Leer a7c7a5e18b
fix(agent): Fix `execute_python_file` on local storage
It's still broken for remote/cloud storage.
2024-04-30 15:26:41 +02:00
Reinier van der Leer 180de0c9a9
feat(agent/core): Support referenced types in `JSONSchema.from_dict` 2024-04-30 12:23:15 +02:00
Reinier van der Leer 8f0d5c73b3
fix(agent/core): Format parse errors for log statement in `OpenAIProvider.create_chat_completion` 2024-04-30 11:59:34 +02:00
王苏云 3b00e8229c
Fix ImportError for validate_yaml_file function (#7110)
* 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-29 10:41:30 -05:00
Krzysztof Czerwinski e97726cde3
fix(autogpt): Revert line in `poetry.lock` (#7113)
Revert line in `poetry.lock` to from before https://github.com/Significant-Gravitas/AutoGPT/pull/7097
2024-04-29 17:37:20 +02:00
Krzysztof Czerwinski d38e8b8f6c
clean(autogpt): Remove old plugin system (#7097)
### 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-28 21:10:53 +02:00
Reinier van der Leer 0014e2ac14
fix(agent): Update .env.template to match changes in 370615e 2024-04-26 19:25:33 +02:00
Reinier van der Leer 370615e5e4
feat(agent): Add support for new `gpt-4-turbo` model and set as default `SMART_LLM` 2024-04-26 19:15:00 +02:00
Reinier van der Leer f93c743d03
fix(agent): Fix `OneShotAgentPromptStrategy` parser when using functions/tools API
Also:
- Improve error message when the LLM doesn't call any tools
2024-04-24 18:59:13 +02:00
Reinier van der Leer 6add645597
fix(agent): Expand failure check in `json_loads(..)`
Not only check if the resulting object is `demjson3.undefined`, but also `demjson3.syntax_error`.
2024-04-24 18:57:50 +02:00
Reinier van der Leer bdda3a6698
fix(agent): Omit `EventHistory` progress message if empty
Also add a heading to the progress section
2024-04-24 18:56:43 +02:00
Reinier van der Leer 126aacb2e3
feat(agent/cli): Speed up loading of saved agents
O(n) to O(1) by removing individual `.exists(dir / "state.json")` calls and using `.list_files()` instead of `.list_folders()`
2024-04-24 18:54:24 +02:00
Reinier van der Leer 1afc8e40df
chore(agent): Update `duckduckgo-search` to v5.3.0 2024-04-24 17:57:32 +02:00
Reinier van der Leer 9543e5d6ac
fix(agent): Fix crash when `LOG_FORMAT=structured_google_cloud`
Another piece of fallout from cf00c33 - fix(agent): Fix debug logging & amend configure_logging for easier use
2024-04-24 13:56:35 +02:00
Nicholas Tindle 5e89b8c6d1
Add all the new component docs to the site and do a tidy up of docs (#7098)
* feat: add all the new component docs to the site

* fix(docs): relative links and markdown warnings

* feat(docs): How to contribute to the docs as a docs section

* fix(docs): missed docs page for developer setup

* fix(docs): re-add configurations options

* fix(docs): bad link to components fixed

* fix(docs): bad link to components fixed

* ref(docs): reorder some items to make more sense

* fix(docs): bad indentation and duplicate block

* fix(docs): warning about out of date markdown extension

* fix(docs): broken links fixed

* fix(docs): markdown formatter complaints
2024-04-23 08:49:07 -05:00
Nicholas Tindle fd3f8fa5fc
fix(agent/setup): Fix installing ONNXRuntime on macOS on some architectures (#7022)
Co-authored-by: Reinier van der Leer <pwuts@agpt.co>
2024-04-23 12:35:56 +02:00
Fullstop000 86bdbb82b1
fix(agent): Support OpenAI Project API keys (#7099)
Amend regex expression in config.py that OpenAI API keys are validated against

Signed-off-by: Fullstop000 <fullstop1005@gmail.com>
2024-04-23 12:29:12 +02:00
Reinier van der Leer 898317c16c
fix(agent): Full fix for CLI breakage introduced in cf00c33 2024-04-22 23:54:08 +02:00
Krzysztof Czerwinski 0704404344
fix(agent): Logging hotfix (#7096)
Fix cf00c33f90
2024-04-22 20:24:11 +02:00
Krzysztof Czerwinski a74548d3cd
feat(agent): Component-based Agents (#7054)
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-22 19:20:01 +02:00
Reinier van der Leer 6ff02677d2
fix(agent/core): Set `OpenAIProvider._configuration.retries_per_request` to 7 by default
10 was too much, caused multi-minute timeouts between retries
2024-04-22 18:46:28 +02:00
Reinier van der Leer 4db4ca08b2
refactor(agent): Tweak `model_providers.schema` for easier use
- 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-22 18:40:48 +02:00
Reinier van der Leer 7bb7c30842
feat(agent/core): Add `max_output_tokens` parameter to `create_chat_completion` interface 2024-04-22 17:47:15 +02:00
Reinier van der Leer 35ebb10378
refactor(agent): Add `ChatModelProvider.get_available_models()` and remove `ApiManager` 2024-04-22 17:44:49 +02:00
Reinier van der Leer b77451bb3a
fix(agent/tests): Remove useless tests in test_config.py 2024-04-22 17:26:02 +02:00
Reinier van der Leer cf00c33f90
fix(agent): Fix debug logging & amend `configure_logging` for easier use 2024-04-22 17:14:22 +02:00
Reinier van der Leer 61adf58f4f
lint(agent): Remove unused `os` import in file_storage/s3.py 2024-04-21 22:22:10 +02:00
Reinier van der Leer 452df39a52
feat(agent/core): Allow zero-argument instantiation of `OpenAIProvider` 2024-04-18 21:35:11 +02:00
Reinier van der Leer 49a08ba7db
refactor(agent): Remove redundant parsing functions in config classes
Pydantic has built-in typecasting logic, so converting to Python builtin types and enums is done automatically.
2024-04-18 20:01:39 +02:00
Reinier van der Leer 7082e63b11
refactor(agent): Refactor & improve `create_chat_completion` (#7082)
* 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-16 10:38:49 +02:00
Reinier van der Leer d7f00a996f
feat(agent): Improve feedback in `create_chat_completion` parse-fix mechanism
Include error type in feedback message
2024-04-12 20:13:15 +02:00