Set up unified pre-commit + CI w/ linting + type checking & FIX EVERYTHING (#7171)
- **FIX ALL LINT/TYPE ERRORS IN AUTOGPT, FORGE, AND BENCHMARK**
### Linting
- Clean up linter configs for `autogpt`, `forge`, and `benchmark`
- Add type checking with Pyright
- Create unified pre-commit config
- Create unified linting and type checking CI workflow
### Testing
- Synchronize CI test setups for `autogpt`, `forge`, and `benchmark`
- Add missing pytest-cov to benchmark dependencies
- Mark GCS tests as slow to speed up pre-commit test runs
- Repair `forge` test suite
- Add `AgentDB.close()` method for test DB teardown in db_test.py
- Use actual temporary dir instead of forge/test_workspace/
- Move left-behind dependencies for moved `forge`-code to from autogpt to forge
### Notable type changes
- Replace uses of `ChatModelProvider` by `MultiProvider`
- Removed unnecessary exports from various __init__.py
- Simplify `FileStorage.open_file` signature by removing `IOBase` from return type union
- Implement `S3BinaryIOWrapper(BinaryIO)` type interposer for `S3FileStorage`
- Expand overloads of `GCSFileStorage.open_file` for improved typing of read and write modes
Had to silence type checking for the extra overloads, because (I think) Pyright is reporting a false-positive:
https://github.com/microsoft/pyright/issues/8007
- Change `count_tokens`, `get_tokenizer`, `count_message_tokens` methods on `ModelProvider`s from class methods to instance methods
- Move `CompletionModelFunction.schema` method -> helper function `format_function_def_for_openai` in `forge.llm.providers.openai`
- Rename `ModelProvider` -> `BaseModelProvider`
- Rename `ChatModelProvider` -> `BaseChatModelProvider`
- Add type `ChatModelProvider` which is a union of all subclasses of `BaseChatModelProvider`
### Removed rather than fixed
- Remove deprecated and broken autogpt/agbenchmark_config/benchmarks.py
- Various base classes and properties on base classes in `forge.llm.providers.schema` and `forge.models.providers`
### Fixes for other issues that came to light
- Clean up `forge.agent_protocol.api_router`, `forge.agent_protocol.database`, and `forge.agent.agent`
- Add fallback behavior to `ImageGeneratorComponent`
- Remove test for deprecated failure behavior
- Fix `agbenchmark.challenges.builtin` challenge exclusion mechanism on Windows
- Fix `_tool_calls_compat_extract_calls` in `forge.llm.providers.openai`
- Add support for `any` (= no type specified) in `JSONSchema.typescript_type`
2024-05-28 03:04:21 +00:00
|
|
|
name: Agent smoke tests
|
2023-09-14 15:29:04 +00:00
|
|
|
|
|
|
|
on:
|
|
|
|
workflow_dispatch:
|
|
|
|
schedule:
|
|
|
|
- cron: '0 8 * * *'
|
|
|
|
push:
|
2023-10-21 22:46:53 +00:00
|
|
|
branches: [ master, development, ci-test* ]
|
2023-11-21 09:58:54 +00:00
|
|
|
paths:
|
|
|
|
- '.github/workflows/autogpts-ci.yml'
|
2024-05-22 12:08:54 +00:00
|
|
|
- 'autogpt/**'
|
|
|
|
- 'forge/**'
|
2023-11-21 09:58:54 +00:00
|
|
|
- 'benchmark/**'
|
|
|
|
- 'run'
|
|
|
|
- 'cli.py'
|
|
|
|
- 'setup.py'
|
|
|
|
- '!**/*.md'
|
2023-09-14 15:29:04 +00:00
|
|
|
pull_request:
|
2023-10-21 22:46:53 +00:00
|
|
|
branches: [ master, development, release-* ]
|
2023-11-21 09:58:54 +00:00
|
|
|
paths:
|
|
|
|
- '.github/workflows/autogpts-ci.yml'
|
2024-05-22 12:08:54 +00:00
|
|
|
- 'autogpt/**'
|
|
|
|
- 'forge/**'
|
2023-11-21 09:58:54 +00:00
|
|
|
- 'benchmark/**'
|
|
|
|
- 'run'
|
|
|
|
- 'cli.py'
|
|
|
|
- 'setup.py'
|
|
|
|
- '!**/*.md'
|
2023-09-14 15:29:04 +00:00
|
|
|
|
|
|
|
jobs:
|
Set up unified pre-commit + CI w/ linting + type checking & FIX EVERYTHING (#7171)
- **FIX ALL LINT/TYPE ERRORS IN AUTOGPT, FORGE, AND BENCHMARK**
### Linting
- Clean up linter configs for `autogpt`, `forge`, and `benchmark`
- Add type checking with Pyright
- Create unified pre-commit config
- Create unified linting and type checking CI workflow
### Testing
- Synchronize CI test setups for `autogpt`, `forge`, and `benchmark`
- Add missing pytest-cov to benchmark dependencies
- Mark GCS tests as slow to speed up pre-commit test runs
- Repair `forge` test suite
- Add `AgentDB.close()` method for test DB teardown in db_test.py
- Use actual temporary dir instead of forge/test_workspace/
- Move left-behind dependencies for moved `forge`-code to from autogpt to forge
### Notable type changes
- Replace uses of `ChatModelProvider` by `MultiProvider`
- Removed unnecessary exports from various __init__.py
- Simplify `FileStorage.open_file` signature by removing `IOBase` from return type union
- Implement `S3BinaryIOWrapper(BinaryIO)` type interposer for `S3FileStorage`
- Expand overloads of `GCSFileStorage.open_file` for improved typing of read and write modes
Had to silence type checking for the extra overloads, because (I think) Pyright is reporting a false-positive:
https://github.com/microsoft/pyright/issues/8007
- Change `count_tokens`, `get_tokenizer`, `count_message_tokens` methods on `ModelProvider`s from class methods to instance methods
- Move `CompletionModelFunction.schema` method -> helper function `format_function_def_for_openai` in `forge.llm.providers.openai`
- Rename `ModelProvider` -> `BaseModelProvider`
- Rename `ChatModelProvider` -> `BaseChatModelProvider`
- Add type `ChatModelProvider` which is a union of all subclasses of `BaseChatModelProvider`
### Removed rather than fixed
- Remove deprecated and broken autogpt/agbenchmark_config/benchmarks.py
- Various base classes and properties on base classes in `forge.llm.providers.schema` and `forge.models.providers`
### Fixes for other issues that came to light
- Clean up `forge.agent_protocol.api_router`, `forge.agent_protocol.database`, and `forge.agent.agent`
- Add fallback behavior to `ImageGeneratorComponent`
- Remove test for deprecated failure behavior
- Fix `agbenchmark.challenges.builtin` challenge exclusion mechanism on Windows
- Fix `_tool_calls_compat_extract_calls` in `forge.llm.providers.openai`
- Add support for `any` (= no type specified) in `JSONSchema.typescript_type`
2024-05-28 03:04:21 +00:00
|
|
|
serve-agent-protocol:
|
2023-09-14 15:29:04 +00:00
|
|
|
runs-on: ubuntu-latest
|
2023-09-14 16:11:45 +00:00
|
|
|
strategy:
|
|
|
|
matrix:
|
2024-05-22 16:18:00 +00:00
|
|
|
agent-name: [ autogpt ]
|
2023-09-14 16:11:45 +00:00
|
|
|
fail-fast: false
|
2023-09-14 15:29:04 +00:00
|
|
|
timeout-minutes: 20
|
2023-11-21 09:58:54 +00:00
|
|
|
env:
|
|
|
|
min-python-version: '3.10'
|
2023-09-14 15:29:04 +00:00
|
|
|
steps:
|
|
|
|
- name: Checkout repository
|
2024-02-17 12:59:13 +00:00
|
|
|
uses: actions/checkout@v4
|
2023-09-14 15:29:04 +00:00
|
|
|
with:
|
|
|
|
fetch-depth: 0
|
|
|
|
submodules: true
|
|
|
|
|
|
|
|
- name: Set up Python ${{ env.min-python-version }}
|
2024-02-17 12:59:13 +00:00
|
|
|
uses: actions/setup-python@v5
|
2023-09-14 15:29:04 +00:00
|
|
|
with:
|
|
|
|
python-version: ${{ env.min-python-version }}
|
|
|
|
|
|
|
|
- name: Install Poetry
|
2024-05-22 12:08:54 +00:00
|
|
|
working-directory: ./${{ matrix.agent-name }}/
|
2023-09-14 15:29:04 +00:00
|
|
|
run: |
|
|
|
|
curl -sSL https://install.python-poetry.org | python -
|
|
|
|
|
|
|
|
- name: Run regression tests
|
|
|
|
run: |
|
2023-10-17 17:47:43 +00:00
|
|
|
./run agent start ${{ matrix.agent-name }}
|
2024-05-22 12:08:54 +00:00
|
|
|
cd ${{ matrix.agent-name }}
|
2024-02-14 01:30:03 +00:00
|
|
|
poetry run agbenchmark --mock --test=BasicRetrieval --test=Battleship --test=WebArenaTask_0
|
2023-09-17 13:55:20 +00:00
|
|
|
poetry run agbenchmark --test=WriteFile
|
2023-09-14 15:29:04 +00:00
|
|
|
env:
|
|
|
|
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
|
|
|
AGENT_NAME: ${{ matrix.agent-name }}
|
|
|
|
REQUESTS_CA_BUNDLE: /etc/ssl/certs/ca-certificates.crt
|
|
|
|
HELICONE_CACHE_ENABLED: false
|
|
|
|
HELICONE_PROPERTY_AGENT: ${{ matrix.agent-name }}
|
2024-02-15 17:07:45 +00:00
|
|
|
REPORTS_FOLDER: ${{ format('../../reports/{0}', matrix.agent-name) }}
|
2024-02-17 13:26:03 +00:00
|
|
|
TELEMETRY_ENVIRONMENT: autogpt-ci
|
2024-02-17 14:10:11 +00:00
|
|
|
TELEMETRY_OPT_IN: ${{ github.ref_name == 'master' }}
|