Spaces:
Build error
Build error
Deploy from GitHub repository
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .deepsource.toml +18 -0
- .dockerignore +61 -0
- .gitattributes +636 -0
- .pr_agent.toml +6 -0
- .pre-commit-config.yaml +278 -0
- .vscode/all-projects.code-workspace +62 -0
- .vscode/launch.json +67 -0
- AGENTS.md +53 -0
- CITATION.cff +21 -0
- CODE_OF_CONDUCT.md +40 -0
- CONTRIBUTING.md +38 -0
- LICENSE +29 -0
- README.md +13 -3
- SECURITY.md +48 -0
- app.py +28 -0
- assets/gpt_dark_RGB.icns +0 -0
- assets/gpt_dark_RGB.ico +3 -0
- assets/gpt_dark_RGB.png +0 -0
- autogpt_platform/.env.example +123 -0
- autogpt_platform/.gitignore +2 -0
- autogpt_platform/CLAUDE.md +146 -0
- autogpt_platform/Contributor License Agreement (CLA).md +21 -0
- autogpt_platform/LICENSE.md +164 -0
- autogpt_platform/README.md +196 -0
- autogpt_platform/__init__.py +0 -0
- autogpt_platform/autogpt_libs/README.md +3 -0
- autogpt_platform/autogpt_libs/autogpt_libs/__init__.py +0 -0
- autogpt_platform/autogpt_libs/autogpt_libs/api_key/key_manager.py +35 -0
- autogpt_platform/autogpt_libs/autogpt_libs/auth/__init__.py +13 -0
- autogpt_platform/autogpt_libs/autogpt_libs/auth/config.py +15 -0
- autogpt_platform/autogpt_libs/autogpt_libs/auth/depends.py +46 -0
- autogpt_platform/autogpt_libs/autogpt_libs/auth/depends_tests.py +68 -0
- autogpt_platform/autogpt_libs/autogpt_libs/auth/jwt_utils.py +27 -0
- autogpt_platform/autogpt_libs/autogpt_libs/auth/middleware.py +140 -0
- autogpt_platform/autogpt_libs/autogpt_libs/auth/models.py +22 -0
- autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/__init__.py +0 -0
- autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/client.py +166 -0
- autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/client_test.py +45 -0
- autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/config.py +15 -0
- autogpt_platform/autogpt_libs/autogpt_libs/logging/__init__.py +9 -0
- autogpt_platform/autogpt_libs/autogpt_libs/logging/config.py +161 -0
- autogpt_platform/autogpt_libs/autogpt_libs/logging/filters.py +12 -0
- autogpt_platform/autogpt_libs/autogpt_libs/logging/formatters.py +81 -0
- autogpt_platform/autogpt_libs/autogpt_libs/logging/handlers.py +14 -0
- autogpt_platform/autogpt_libs/autogpt_libs/logging/test_utils.py +36 -0
- autogpt_platform/autogpt_libs/autogpt_libs/logging/utils.py +39 -0
- autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/__init__.py +0 -0
- autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/config.py +31 -0
- autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/limiter.py +51 -0
- autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/middleware.py +32 -0
.deepsource.toml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
version = 1
|
2 |
+
|
3 |
+
test_patterns = ["**/*.spec.ts","**/*_test.py","**/*_tests.py","**/test_*.py"]
|
4 |
+
|
5 |
+
exclude_patterns = ["classic/**"]
|
6 |
+
|
7 |
+
[[analyzers]]
|
8 |
+
name = "javascript"
|
9 |
+
|
10 |
+
[analyzers.meta]
|
11 |
+
plugins = ["react"]
|
12 |
+
environment = ["nodejs"]
|
13 |
+
|
14 |
+
[[analyzers]]
|
15 |
+
name = "python"
|
16 |
+
|
17 |
+
[analyzers.meta]
|
18 |
+
runtime_version = "3.x.x"
|
.dockerignore
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Ignore everything by default, selectively add things to context
|
2 |
+
*
|
3 |
+
|
4 |
+
# Platform - Libs
|
5 |
+
!autogpt_platform/autogpt_libs/autogpt_libs/
|
6 |
+
!autogpt_platform/autogpt_libs/pyproject.toml
|
7 |
+
!autogpt_platform/autogpt_libs/poetry.lock
|
8 |
+
!autogpt_platform/autogpt_libs/README.md
|
9 |
+
|
10 |
+
# Platform - Backend
|
11 |
+
!autogpt_platform/backend/backend/
|
12 |
+
!autogpt_platform/backend/migrations/
|
13 |
+
!autogpt_platform/backend/schema.prisma
|
14 |
+
!autogpt_platform/backend/pyproject.toml
|
15 |
+
!autogpt_platform/backend/poetry.lock
|
16 |
+
!autogpt_platform/backend/README.md
|
17 |
+
|
18 |
+
# Platform - Market
|
19 |
+
!autogpt_platform/market/market/
|
20 |
+
!autogpt_platform/market/scripts.py
|
21 |
+
!autogpt_platform/market/schema.prisma
|
22 |
+
!autogpt_platform/market/pyproject.toml
|
23 |
+
!autogpt_platform/market/poetry.lock
|
24 |
+
!autogpt_platform/market/README.md
|
25 |
+
|
26 |
+
# Platform - Frontend
|
27 |
+
!autogpt_platform/frontend/src/
|
28 |
+
!autogpt_platform/frontend/public/
|
29 |
+
!autogpt_platform/frontend/package.json
|
30 |
+
!autogpt_platform/frontend/pnpm-lock.yaml
|
31 |
+
!autogpt_platform/frontend/tsconfig.json
|
32 |
+
!autogpt_platform/frontend/README.md
|
33 |
+
## config
|
34 |
+
!autogpt_platform/frontend/*.config.*
|
35 |
+
!autogpt_platform/frontend/.env.*
|
36 |
+
|
37 |
+
# Classic - AutoGPT
|
38 |
+
!classic/original_autogpt/autogpt/
|
39 |
+
!classic/original_autogpt/pyproject.toml
|
40 |
+
!classic/original_autogpt/poetry.lock
|
41 |
+
!classic/original_autogpt/README.md
|
42 |
+
!classic/original_autogpt/tests/
|
43 |
+
|
44 |
+
# Classic - Benchmark
|
45 |
+
!classic/benchmark/agbenchmark/
|
46 |
+
!classic/benchmark/pyproject.toml
|
47 |
+
!classic/benchmark/poetry.lock
|
48 |
+
!classic/benchmark/README.md
|
49 |
+
|
50 |
+
# Classic - Forge
|
51 |
+
!classic/forge/
|
52 |
+
!classic/forge/pyproject.toml
|
53 |
+
!classic/forge/poetry.lock
|
54 |
+
!classic/forge/README.md
|
55 |
+
|
56 |
+
# Classic - Frontend
|
57 |
+
!classic/frontend/build/web/
|
58 |
+
|
59 |
+
# Explicitly re-ignore some folders
|
60 |
+
.*
|
61 |
+
**/__pycache__
|
.gitattributes
CHANGED
@@ -33,3 +33,639 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
assets/gpt_dark_RGB.ico filter=lfs diff=lfs merge=lfs -text
|
37 |
+
autogpt_platform/frontend/public/integrations/todoist.png filter=lfs diff=lfs merge=lfs -text
|
38 |
+
autogpt_platform/frontend/public/onboarding/builder-open.mp4 filter=lfs diff=lfs merge=lfs -text
|
39 |
+
autogpt_platform/frontend/public/onboarding/builder-run.mp4 filter=lfs diff=lfs merge=lfs -text
|
40 |
+
autogpt_platform/frontend/public/onboarding/builder-save.mp4 filter=lfs diff=lfs merge=lfs -text
|
41 |
+
autogpt_platform/frontend/public/onboarding/marketplace-add.mp4 filter=lfs diff=lfs merge=lfs -text
|
42 |
+
autogpt_platform/frontend/public/onboarding/marketplace-run.mp4 filter=lfs diff=lfs merge=lfs -text
|
43 |
+
autogpt_platform/frontend/public/onboarding/marketplace-visit.mp4 filter=lfs diff=lfs merge=lfs -text
|
44 |
+
autogpt_platform/frontend/public/placeholder.png filter=lfs diff=lfs merge=lfs -text
|
45 |
+
autogpt_platform/frontend/public/storybook/atoms.png filter=lfs diff=lfs merge=lfs -text
|
46 |
+
autogpt_platform/frontend/public/storybook/molecules.png filter=lfs diff=lfs merge=lfs -text
|
47 |
+
autogpt_platform/frontend/public/storybook/tokens.png filter=lfs diff=lfs merge=lfs -text
|
48 |
+
classic/benchmark/reports/Auto-GPT/20230817T000126_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
49 |
+
classic/benchmark/reports/Auto-GPT/20230817T081335_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
50 |
+
classic/benchmark/reports/Auto-GPT/20230818T081400_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
51 |
+
classic/benchmark/reports/Auto-GPT/20230819T081239_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
52 |
+
classic/benchmark/reports/Auto-GPT/20230820T081235_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
53 |
+
classic/benchmark/reports/Auto-GPT/20230821T081455_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
54 |
+
classic/benchmark/reports/Auto-GPT/20230822T081337_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
55 |
+
classic/benchmark/reports/Auto-GPT/20230823T081341_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
56 |
+
classic/benchmark/reports/Auto-GPT/20230824T032421_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
57 |
+
classic/benchmark/reports/Auto-GPT/20230824T081422_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
58 |
+
classic/benchmark/reports/Auto-GPT/20230825T081408_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
59 |
+
classic/benchmark/reports/Auto-GPT/20230826T081228_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
60 |
+
classic/benchmark/reports/Auto-GPT/20230827T081337_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
61 |
+
classic/benchmark/reports/Auto-GPT/20230828T081454_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
62 |
+
classic/benchmark/reports/Auto-GPT/20230829T081453_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
63 |
+
classic/benchmark/reports/Auto-GPT/20230830T081508_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
64 |
+
classic/benchmark/reports/Auto-GPT/20230831T081434_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
65 |
+
classic/benchmark/reports/Auto-GPT/20230831T153538_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
66 |
+
classic/benchmark/reports/Auto-GPT/20230901T081405_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
67 |
+
classic/benchmark/reports/Auto-GPT/20230902T081212_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
68 |
+
classic/benchmark/reports/Auto-GPT/20230903T081320_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
69 |
+
classic/benchmark/reports/Auto-GPT/20230904T081516_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
70 |
+
classic/benchmark/reports/Auto-GPT/20230905T081454_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
71 |
+
classic/benchmark/reports/Auto-GPT/20230908T011709_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
72 |
+
classic/benchmark/reports/Auto-GPT/20230908T080530_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
73 |
+
classic/benchmark/reports/Auto-GPT/20230910T080422_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
74 |
+
classic/benchmark/reports/Auto-GPT/20230911T080442_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
75 |
+
classic/benchmark/reports/Auto-GPT/folder10_08-01-02-43/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
76 |
+
classic/benchmark/reports/Auto-GPT/folder11_08-01-03-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
77 |
+
classic/benchmark/reports/Auto-GPT/folder12_08-01-16-18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
78 |
+
classic/benchmark/reports/Auto-GPT/folder13_08-01-16-58/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
79 |
+
classic/benchmark/reports/Auto-GPT/folder14_08-01-19-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
80 |
+
classic/benchmark/reports/Auto-GPT/folder18_08-02-02-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
81 |
+
classic/benchmark/reports/Auto-GPT/folder18_08-02-03-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
82 |
+
classic/benchmark/reports/Auto-GPT/folder19_08-02-03-58/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
83 |
+
classic/benchmark/reports/Auto-GPT/folder20_08-02-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
84 |
+
classic/benchmark/reports/Auto-GPT/folder21_08-02-15-18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
85 |
+
classic/benchmark/reports/Auto-GPT/folder22_08-02-17-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
86 |
+
classic/benchmark/reports/Auto-GPT/folder23_08-02-17-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
87 |
+
classic/benchmark/reports/Auto-GPT/folder24_08-02-00-08/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
88 |
+
classic/benchmark/reports/Auto-GPT/folder24_08-03-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
89 |
+
classic/benchmark/reports/Auto-GPT/folder25_08-02-01-35/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
90 |
+
classic/benchmark/reports/Auto-GPT/folder25_08-03-23-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
91 |
+
classic/benchmark/reports/Auto-GPT/folder26_08-04-03-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
92 |
+
classic/benchmark/reports/Auto-GPT/folder27_08-04-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
93 |
+
classic/benchmark/reports/Auto-GPT/folder28_08-05-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
94 |
+
classic/benchmark/reports/Auto-GPT/folder29_08-06-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
95 |
+
classic/benchmark/reports/Auto-GPT/folder31_08-08-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
96 |
+
classic/benchmark/reports/Auto-GPT/folder31_08-09-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
97 |
+
classic/benchmark/reports/Auto-GPT/folder32_08-10-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
98 |
+
classic/benchmark/reports/Auto-GPT/folder33_08-11-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
99 |
+
classic/benchmark/reports/Auto-GPT/folder34_08-12-02-19/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
100 |
+
classic/benchmark/reports/Auto-GPT/folder35_08-12-02-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
101 |
+
classic/benchmark/reports/Auto-GPT/folder36_08-12-03-04/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
102 |
+
classic/benchmark/reports/Auto-GPT/folder37_08-12-03-45/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
103 |
+
classic/benchmark/reports/Auto-GPT/folder38_08-12-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
104 |
+
classic/benchmark/reports/Auto-GPT/folder39_08-12-17-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
105 |
+
classic/benchmark/reports/Auto-GPT/folder40_08-13-01-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
106 |
+
classic/benchmark/reports/Auto-GPT/folder41_08-13-01-53/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
107 |
+
classic/benchmark/reports/Auto-GPT/folder42_08-13-02-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
108 |
+
classic/benchmark/reports/Auto-GPT/folder43_08-13-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
109 |
+
classic/benchmark/reports/Auto-GPT/folder44_08-14-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
110 |
+
classic/benchmark/reports/Auto-GPT/folder45_08-14-21-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
111 |
+
classic/benchmark/reports/Auto-GPT/folder46_08-15-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
112 |
+
classic/benchmark/reports/Auto-GPT/folder47_08-16-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
113 |
+
classic/benchmark/reports/Auto-GPT/folder4_07-31-13-05/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
114 |
+
classic/benchmark/reports/Auto-GPT/folder5_07-31-16-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
115 |
+
classic/benchmark/reports/Auto-GPT/folder6_07-31-19-06/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
116 |
+
classic/benchmark/reports/Auto-GPT/folder7_07-31-19-39/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
117 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230824T032419_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
118 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230824T081333_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
119 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230825T081419_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
120 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230826T081326_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
121 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230827T081254_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
122 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230828T081413_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
123 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230829T081447_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
124 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230830T081439_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
125 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230830T130202_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
126 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230830T231152_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
127 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230831T081441_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
128 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230831T145222_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
129 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230831T153506_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
130 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230901T081341_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
131 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230901T170512_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
132 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230902T081222_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
133 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230903T081239_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
134 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230904T081450_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
135 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230905T081456_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
136 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230908T011647_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
137 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230909T080459_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
138 |
+
classic/benchmark/reports/Auto-GPT-Turbo/20230911T080438_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
139 |
+
classic/benchmark/reports/PolyGPT/20230817T000100_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
140 |
+
classic/benchmark/reports/PolyGPT/20230817T081344_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
141 |
+
classic/benchmark/reports/PolyGPT/20230818T081347_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
142 |
+
classic/benchmark/reports/PolyGPT/20230819T081303_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
143 |
+
classic/benchmark/reports/PolyGPT/20230820T081253_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
144 |
+
classic/benchmark/reports/PolyGPT/20230821T081430_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
145 |
+
classic/benchmark/reports/PolyGPT/20230822T081318_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
146 |
+
classic/benchmark/reports/PolyGPT/20230823T081326_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
147 |
+
classic/benchmark/reports/PolyGPT/20230824T032533_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
148 |
+
classic/benchmark/reports/PolyGPT/20230824T081402_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
149 |
+
classic/benchmark/reports/PolyGPT/20230825T081411_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
150 |
+
classic/benchmark/reports/PolyGPT/20230826T081258_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
151 |
+
classic/benchmark/reports/PolyGPT/20230827T081204_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
152 |
+
classic/benchmark/reports/PolyGPT/20230828T081533_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
153 |
+
classic/benchmark/reports/PolyGPT/20230829T081440_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
154 |
+
classic/benchmark/reports/PolyGPT/20230830T081320_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
155 |
+
classic/benchmark/reports/PolyGPT/20230831T153410_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
156 |
+
classic/benchmark/reports/PolyGPT/20230901T081331_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
157 |
+
classic/benchmark/reports/PolyGPT/20230902T081234_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
158 |
+
classic/benchmark/reports/PolyGPT/20230903T081236_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
159 |
+
classic/benchmark/reports/PolyGPT/20230904T081401_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
160 |
+
classic/benchmark/reports/PolyGPT/20230905T081409_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
161 |
+
classic/benchmark/reports/PolyGPT/20230908T011618_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
162 |
+
classic/benchmark/reports/PolyGPT/20230908T080446_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
163 |
+
classic/benchmark/reports/PolyGPT/20230909T080421_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
164 |
+
classic/benchmark/reports/PolyGPT/20230910T080352_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
165 |
+
classic/benchmark/reports/PolyGPT/20230911T080444_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
166 |
+
classic/benchmark/reports/PolyGPT/folder10_08-13-01-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
167 |
+
classic/benchmark/reports/PolyGPT/folder11_08-13-01-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
168 |
+
classic/benchmark/reports/PolyGPT/folder12_08-13-02-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
169 |
+
classic/benchmark/reports/PolyGPT/folder13_08-13-02-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
170 |
+
classic/benchmark/reports/PolyGPT/folder14_08-13-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
171 |
+
classic/benchmark/reports/PolyGPT/folder15_08-14-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
172 |
+
classic/benchmark/reports/PolyGPT/folder15_08-14-08-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
173 |
+
classic/benchmark/reports/PolyGPT/folder17_08-14-09-48/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
174 |
+
classic/benchmark/reports/PolyGPT/folder18_08-14-18-00/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
175 |
+
classic/benchmark/reports/PolyGPT/folder19_08-14-18-16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
176 |
+
classic/benchmark/reports/PolyGPT/folder1_08-09-19-03/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
177 |
+
classic/benchmark/reports/PolyGPT/folder20_08-14-21-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
178 |
+
classic/benchmark/reports/PolyGPT/folder21_08-15-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
179 |
+
classic/benchmark/reports/PolyGPT/folder22_08-16-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
180 |
+
classic/benchmark/reports/PolyGPT/folder2_08-10-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
181 |
+
classic/benchmark/reports/PolyGPT/folder3_08-11-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
182 |
+
classic/benchmark/reports/PolyGPT/folder4_08-11-20-28/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
183 |
+
classic/benchmark/reports/PolyGPT/folder5_08-12-02-18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
184 |
+
classic/benchmark/reports/PolyGPT/folder6_08-12-02-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
185 |
+
classic/benchmark/reports/PolyGPT/folder7_08-12-03-03/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
186 |
+
classic/benchmark/reports/PolyGPT/folder8_08-12-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
187 |
+
classic/benchmark/reports/PolyGPT/folder9_08-12-17-23/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
188 |
+
classic/benchmark/reports/babyagi/20230817T000257_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
189 |
+
classic/benchmark/reports/babyagi/20230817T081542_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
190 |
+
classic/benchmark/reports/babyagi/20230818T081621_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
191 |
+
classic/benchmark/reports/babyagi/20230819T081418_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
192 |
+
classic/benchmark/reports/babyagi/20230820T081523_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
193 |
+
classic/benchmark/reports/babyagi/20230821T081708_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
194 |
+
classic/benchmark/reports/babyagi/20230822T081534_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
195 |
+
classic/benchmark/reports/babyagi/20230823T081622_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
196 |
+
classic/benchmark/reports/babyagi/20230824T032717_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
197 |
+
classic/benchmark/reports/babyagi/20230824T081600_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
198 |
+
classic/benchmark/reports/babyagi/20230825T081559_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
199 |
+
classic/benchmark/reports/babyagi/20230826T081425_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
200 |
+
classic/benchmark/reports/babyagi/20230827T081454_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
201 |
+
classic/benchmark/reports/babyagi/20230828T081736_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
202 |
+
classic/benchmark/reports/babyagi/20230829T081638_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
203 |
+
classic/benchmark/reports/babyagi/20230830T081613_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
204 |
+
classic/benchmark/reports/babyagi/20230831T081539_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
205 |
+
classic/benchmark/reports/babyagi/20230831T153608_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
206 |
+
classic/benchmark/reports/babyagi/20230901T081621_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
207 |
+
classic/benchmark/reports/babyagi/20230902T081425_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
208 |
+
classic/benchmark/reports/babyagi/20230903T081538_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
209 |
+
classic/benchmark/reports/babyagi/20230904T081752_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
210 |
+
classic/benchmark/reports/babyagi/20230905T081727_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
211 |
+
classic/benchmark/reports/babyagi/20230908T003423_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
212 |
+
classic/benchmark/reports/babyagi/20230908T011924_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
213 |
+
classic/benchmark/reports/babyagi/20230908T080803_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
214 |
+
classic/benchmark/reports/babyagi/20230909T080618_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
215 |
+
classic/benchmark/reports/babyagi/20230910T080648_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
216 |
+
classic/benchmark/reports/babyagi/20230911T080641_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
217 |
+
classic/benchmark/reports/babyagi/folder13_08-01-16-20/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
218 |
+
classic/benchmark/reports/babyagi/folder14_08-01-17-00/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
219 |
+
classic/benchmark/reports/babyagi/folder15_08-01-17-35/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
220 |
+
classic/benchmark/reports/babyagi/folder16_08-01-19-54/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
221 |
+
classic/benchmark/reports/babyagi/folder18_08-02-01-36/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
222 |
+
classic/benchmark/reports/babyagi/folder19_08-02-02-39/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
223 |
+
classic/benchmark/reports/babyagi/folder19_08-02-03-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
224 |
+
classic/benchmark/reports/babyagi/folder20_08-02-04-02/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
225 |
+
classic/benchmark/reports/babyagi/folder21_08-02-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
226 |
+
classic/benchmark/reports/babyagi/folder22_08-02-15-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
227 |
+
classic/benchmark/reports/babyagi/folder23_08-02-17-23/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
228 |
+
classic/benchmark/reports/babyagi/folder24_08-02-17-41/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
229 |
+
classic/benchmark/reports/babyagi/folder25_08-03-08-16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
230 |
+
classic/benchmark/reports/babyagi/folder26_08-03-23-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
231 |
+
classic/benchmark/reports/babyagi/folder27_08-04-03-27/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
232 |
+
classic/benchmark/reports/babyagi/folder28_08-04-04-34/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
233 |
+
classic/benchmark/reports/babyagi/folder29_08-04-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
234 |
+
classic/benchmark/reports/babyagi/folder30_08-05-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
235 |
+
classic/benchmark/reports/babyagi/folder31_08-06-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
236 |
+
classic/benchmark/reports/babyagi/folder32_08-07-08-16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
237 |
+
classic/benchmark/reports/babyagi/folder33_08-08-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
238 |
+
classic/benchmark/reports/babyagi/folder34_08-09-03-07/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
239 |
+
classic/benchmark/reports/babyagi/folder35_08-09-08-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
240 |
+
classic/benchmark/reports/babyagi/folder36_08-10-08-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
241 |
+
classic/benchmark/reports/babyagi/folder37_08-11-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
242 |
+
classic/benchmark/reports/babyagi/folder38_08-12-02-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
243 |
+
classic/benchmark/reports/babyagi/folder39_08-12-02-54/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
244 |
+
classic/benchmark/reports/babyagi/folder40_08-12-03-06/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
245 |
+
classic/benchmark/reports/babyagi/folder41_08-12-08-16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
246 |
+
classic/benchmark/reports/babyagi/folder42_08-12-17-26/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
247 |
+
classic/benchmark/reports/babyagi/folder43_08-13-01-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
248 |
+
classic/benchmark/reports/babyagi/folder44_08-13-01-54/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
249 |
+
classic/benchmark/reports/babyagi/folder45_08-13-02-19/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
250 |
+
classic/benchmark/reports/babyagi/folder46_08-13-02-40/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
251 |
+
classic/benchmark/reports/babyagi/folder47_08-13-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
252 |
+
classic/benchmark/reports/babyagi/folder48_08-14-21-40/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
253 |
+
classic/benchmark/reports/babyagi/folder49_08-15-08-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
254 |
+
classic/benchmark/reports/babyagi/folder50_08-16-08-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
255 |
+
classic/benchmark/reports/beebot/20230817T000111_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
256 |
+
classic/benchmark/reports/beebot/20230817T081401_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
257 |
+
classic/benchmark/reports/beebot/20230818T081430_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
258 |
+
classic/benchmark/reports/beebot/20230819T081151_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
259 |
+
classic/benchmark/reports/beebot/20230820T081303_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
260 |
+
classic/benchmark/reports/beebot/20230821T081428_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
261 |
+
classic/benchmark/reports/beebot/20230822T081327_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
262 |
+
classic/benchmark/reports/beebot/20230823T081409_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
263 |
+
classic/benchmark/reports/beebot/20230824T032431_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
264 |
+
classic/benchmark/reports/beebot/20230824T081331_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
265 |
+
classic/benchmark/reports/beebot/20230825T081419_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
266 |
+
classic/benchmark/reports/beebot/20230826T081219_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
267 |
+
classic/benchmark/reports/beebot/20230827T081219_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
268 |
+
classic/benchmark/reports/beebot/20230828T081452_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
269 |
+
classic/benchmark/reports/beebot/20230829T081405_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
270 |
+
classic/benchmark/reports/beebot/20230830T081410_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
271 |
+
classic/benchmark/reports/beebot/20230831T081406_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
272 |
+
classic/benchmark/reports/beebot/20230831T153356_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
273 |
+
classic/benchmark/reports/beebot/20230901T081447_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
274 |
+
classic/benchmark/reports/beebot/20230902T081302_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
275 |
+
classic/benchmark/reports/beebot/20230903T081311_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
276 |
+
classic/benchmark/reports/beebot/20230904T081412_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
277 |
+
classic/benchmark/reports/beebot/20230905T081437_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
278 |
+
classic/benchmark/reports/beebot/20230908T011630_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
279 |
+
classic/benchmark/reports/beebot/20230908T080421_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
280 |
+
classic/benchmark/reports/beebot/20230909T080428_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
281 |
+
classic/benchmark/reports/beebot/20230910T080431_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
282 |
+
classic/benchmark/reports/beebot/20230911T080433_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
283 |
+
classic/benchmark/reports/beebot/20230911T151304_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
284 |
+
classic/benchmark/reports/beebot/folder12_08-01-03-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
285 |
+
classic/benchmark/reports/beebot/folder14_08-01-16-18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
286 |
+
classic/benchmark/reports/beebot/folder15_08-01-16-57/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
287 |
+
classic/benchmark/reports/beebot/folder16_08-01-17-31/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
288 |
+
classic/benchmark/reports/beebot/folder17_08-01-19-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
289 |
+
classic/benchmark/reports/beebot/folder19_08-02-01-34/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
290 |
+
classic/benchmark/reports/beebot/folder20_08-02-02-36/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
291 |
+
classic/benchmark/reports/beebot/folder20_08-02-03-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
292 |
+
classic/benchmark/reports/beebot/folder21_08-02-03-58/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
293 |
+
classic/benchmark/reports/beebot/folder22_08-02-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
294 |
+
classic/benchmark/reports/beebot/folder23_08-02-15-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
295 |
+
classic/benchmark/reports/beebot/folder24_08-03-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
296 |
+
classic/benchmark/reports/beebot/folder25_08-03-23-50/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
297 |
+
classic/benchmark/reports/beebot/folder26_08-04-03-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
298 |
+
classic/benchmark/reports/beebot/folder27_08-04-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
299 |
+
classic/benchmark/reports/beebot/folder28_08-05-08-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
300 |
+
classic/benchmark/reports/beebot/folder29_08-06-01-03/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
301 |
+
classic/benchmark/reports/beebot/folder30_08-06-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
302 |
+
classic/benchmark/reports/beebot/folder31_08-06-17-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
303 |
+
classic/benchmark/reports/beebot/folder32_08-07-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
304 |
+
classic/benchmark/reports/beebot/folder33_08-07-22-57/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
305 |
+
classic/benchmark/reports/beebot/folder34_08-08-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
306 |
+
classic/benchmark/reports/beebot/folder35_08-09-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
307 |
+
classic/benchmark/reports/beebot/folder36_08-10-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
308 |
+
classic/benchmark/reports/beebot/folder37_08-11-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
309 |
+
classic/benchmark/reports/beebot/folder38_08-11-18-19/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
310 |
+
classic/benchmark/reports/beebot/folder39_08-11-19-57/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
311 |
+
classic/benchmark/reports/beebot/folder40_08-11-21-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
312 |
+
classic/benchmark/reports/beebot/folder41_08-12-02-19/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
313 |
+
classic/benchmark/reports/beebot/folder42_08-12-02-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
314 |
+
classic/benchmark/reports/beebot/folder43_08-12-03-03/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
315 |
+
classic/benchmark/reports/beebot/folder44_08-12-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
316 |
+
classic/benchmark/reports/beebot/folder45_08-12-17-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
317 |
+
classic/benchmark/reports/beebot/folder46_08-13-01-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
318 |
+
classic/benchmark/reports/beebot/folder47_08-13-02-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
319 |
+
classic/benchmark/reports/beebot/folder48_08-13-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
320 |
+
classic/benchmark/reports/beebot/folder49_08-14-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
321 |
+
classic/benchmark/reports/beebot/folder50_08-14-21-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
322 |
+
classic/benchmark/reports/beebot/folder51_08-15-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
323 |
+
classic/benchmark/reports/beebot/folder52_08-16-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
324 |
+
classic/benchmark/reports/beebot/folder6_07-31-16-09/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
325 |
+
classic/benchmark/reports/beebot/folder7_07-31-19-05/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
326 |
+
classic/benchmark/reports/beebot/folder8_07-31-19-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
327 |
+
classic/benchmark/reports/combined_charts/run1/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
328 |
+
classic/benchmark/reports/combined_charts/run1/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
329 |
+
classic/benchmark/reports/combined_charts/run10/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
330 |
+
classic/benchmark/reports/combined_charts/run10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
331 |
+
classic/benchmark/reports/combined_charts/run11/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
332 |
+
classic/benchmark/reports/combined_charts/run11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
333 |
+
classic/benchmark/reports/combined_charts/run12/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
334 |
+
classic/benchmark/reports/combined_charts/run12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
335 |
+
classic/benchmark/reports/combined_charts/run13/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
336 |
+
classic/benchmark/reports/combined_charts/run13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
337 |
+
classic/benchmark/reports/combined_charts/run14/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
338 |
+
classic/benchmark/reports/combined_charts/run14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
339 |
+
classic/benchmark/reports/combined_charts/run15/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
340 |
+
classic/benchmark/reports/combined_charts/run15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
341 |
+
classic/benchmark/reports/combined_charts/run16/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
342 |
+
classic/benchmark/reports/combined_charts/run16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
343 |
+
classic/benchmark/reports/combined_charts/run17/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
344 |
+
classic/benchmark/reports/combined_charts/run17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
345 |
+
classic/benchmark/reports/combined_charts/run18/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
346 |
+
classic/benchmark/reports/combined_charts/run18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
347 |
+
classic/benchmark/reports/combined_charts/run19/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
348 |
+
classic/benchmark/reports/combined_charts/run19/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
349 |
+
classic/benchmark/reports/combined_charts/run2/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
350 |
+
classic/benchmark/reports/combined_charts/run2/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
351 |
+
classic/benchmark/reports/combined_charts/run20/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
352 |
+
classic/benchmark/reports/combined_charts/run20/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
353 |
+
classic/benchmark/reports/combined_charts/run21/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
354 |
+
classic/benchmark/reports/combined_charts/run21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
355 |
+
classic/benchmark/reports/combined_charts/run22/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
356 |
+
classic/benchmark/reports/combined_charts/run22/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
357 |
+
classic/benchmark/reports/combined_charts/run23/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
358 |
+
classic/benchmark/reports/combined_charts/run23/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
359 |
+
classic/benchmark/reports/combined_charts/run24/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
360 |
+
classic/benchmark/reports/combined_charts/run24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
361 |
+
classic/benchmark/reports/combined_charts/run25/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
362 |
+
classic/benchmark/reports/combined_charts/run25/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
363 |
+
classic/benchmark/reports/combined_charts/run26/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
364 |
+
classic/benchmark/reports/combined_charts/run26/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
365 |
+
classic/benchmark/reports/combined_charts/run27/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
366 |
+
classic/benchmark/reports/combined_charts/run27/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
367 |
+
classic/benchmark/reports/combined_charts/run28/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
368 |
+
classic/benchmark/reports/combined_charts/run28/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
369 |
+
classic/benchmark/reports/combined_charts/run29/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
370 |
+
classic/benchmark/reports/combined_charts/run29/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
371 |
+
classic/benchmark/reports/combined_charts/run3/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
372 |
+
classic/benchmark/reports/combined_charts/run3/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
373 |
+
classic/benchmark/reports/combined_charts/run30/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
374 |
+
classic/benchmark/reports/combined_charts/run30/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
375 |
+
classic/benchmark/reports/combined_charts/run31/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
376 |
+
classic/benchmark/reports/combined_charts/run31/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
377 |
+
classic/benchmark/reports/combined_charts/run32/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
378 |
+
classic/benchmark/reports/combined_charts/run32/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
379 |
+
classic/benchmark/reports/combined_charts/run33/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
380 |
+
classic/benchmark/reports/combined_charts/run33/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
381 |
+
classic/benchmark/reports/combined_charts/run35/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
382 |
+
classic/benchmark/reports/combined_charts/run35/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
383 |
+
classic/benchmark/reports/combined_charts/run35.1_best_performances/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
384 |
+
classic/benchmark/reports/combined_charts/run35.1_best_performances/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
385 |
+
classic/benchmark/reports/combined_charts/run36/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
386 |
+
classic/benchmark/reports/combined_charts/run36/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
387 |
+
classic/benchmark/reports/combined_charts/run37/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
388 |
+
classic/benchmark/reports/combined_charts/run37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
389 |
+
classic/benchmark/reports/combined_charts/run38/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
390 |
+
classic/benchmark/reports/combined_charts/run38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
391 |
+
classic/benchmark/reports/combined_charts/run39/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
392 |
+
classic/benchmark/reports/combined_charts/run39/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
393 |
+
classic/benchmark/reports/combined_charts/run4/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
394 |
+
classic/benchmark/reports/combined_charts/run4/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
395 |
+
classic/benchmark/reports/combined_charts/run40/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
396 |
+
classic/benchmark/reports/combined_charts/run40/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
397 |
+
classic/benchmark/reports/combined_charts/run41/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
398 |
+
classic/benchmark/reports/combined_charts/run41/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
399 |
+
classic/benchmark/reports/combined_charts/run42/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
400 |
+
classic/benchmark/reports/combined_charts/run42/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
401 |
+
classic/benchmark/reports/combined_charts/run43/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
402 |
+
classic/benchmark/reports/combined_charts/run43/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
403 |
+
classic/benchmark/reports/combined_charts/run44/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
404 |
+
classic/benchmark/reports/combined_charts/run44/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
405 |
+
classic/benchmark/reports/combined_charts/run45/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
406 |
+
classic/benchmark/reports/combined_charts/run45/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
407 |
+
classic/benchmark/reports/combined_charts/run5/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
408 |
+
classic/benchmark/reports/combined_charts/run5/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
409 |
+
classic/benchmark/reports/combined_charts/run6/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
410 |
+
classic/benchmark/reports/combined_charts/run6/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
411 |
+
classic/benchmark/reports/combined_charts/run7/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
412 |
+
classic/benchmark/reports/combined_charts/run7/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
413 |
+
classic/benchmark/reports/combined_charts/run8/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
414 |
+
classic/benchmark/reports/combined_charts/run8/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
415 |
+
classic/benchmark/reports/combined_charts/run9/bar_chart.png filter=lfs diff=lfs merge=lfs -text
|
416 |
+
classic/benchmark/reports/combined_charts/run9/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
417 |
+
classic/benchmark/reports/gpt-engineer/20230817T000115_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
418 |
+
classic/benchmark/reports/gpt-engineer/20230817T081320_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
419 |
+
classic/benchmark/reports/gpt-engineer/20230818T081304_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
420 |
+
classic/benchmark/reports/gpt-engineer/20230819T081215_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
421 |
+
classic/benchmark/reports/gpt-engineer/20230820T081223_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
422 |
+
classic/benchmark/reports/gpt-engineer/20230821T081448_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
423 |
+
classic/benchmark/reports/gpt-engineer/20230822T081342_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
424 |
+
classic/benchmark/reports/gpt-engineer/20230823T081255_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
425 |
+
classic/benchmark/reports/gpt-engineer/20230824T032419_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
426 |
+
classic/benchmark/reports/gpt-engineer/20230824T081353_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
427 |
+
classic/benchmark/reports/gpt-engineer/20230825T081258_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
428 |
+
classic/benchmark/reports/gpt-engineer/20230826T081238_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
429 |
+
classic/benchmark/reports/gpt-engineer/20230827T081207_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
430 |
+
classic/benchmark/reports/gpt-engineer/20230828T081524_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
431 |
+
classic/benchmark/reports/gpt-engineer/20230829T081337_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
432 |
+
classic/benchmark/reports/gpt-engineer/20230830T081418_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
433 |
+
classic/benchmark/reports/gpt-engineer/20230831T081324_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
434 |
+
classic/benchmark/reports/gpt-engineer/20230831T153354_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
435 |
+
classic/benchmark/reports/gpt-engineer/20230901T081353_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
436 |
+
classic/benchmark/reports/gpt-engineer/20230902T081227_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
437 |
+
classic/benchmark/reports/gpt-engineer/20230903T081151_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
438 |
+
classic/benchmark/reports/gpt-engineer/20230904T081358_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
439 |
+
classic/benchmark/reports/gpt-engineer/20230905T081409_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
440 |
+
classic/benchmark/reports/gpt-engineer/20230908T011611_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
441 |
+
classic/benchmark/reports/gpt-engineer/20230908T080511_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
442 |
+
classic/benchmark/reports/gpt-engineer/20230909T080345_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
443 |
+
classic/benchmark/reports/gpt-engineer/20230910T080349_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
444 |
+
classic/benchmark/reports/gpt-engineer/20230911T080405_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
445 |
+
classic/benchmark/reports/gpt-engineer/folder12_08-01-16-18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
446 |
+
classic/benchmark/reports/gpt-engineer/folder13_08-01-16-57/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
447 |
+
classic/benchmark/reports/gpt-engineer/folder14_08-01-17-31/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
448 |
+
classic/benchmark/reports/gpt-engineer/folder15_08-01-19-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
449 |
+
classic/benchmark/reports/gpt-engineer/folder17_08-02-01-34/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
450 |
+
classic/benchmark/reports/gpt-engineer/folder18_08-02-02-36/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
451 |
+
classic/benchmark/reports/gpt-engineer/folder18_08-02-03-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
452 |
+
classic/benchmark/reports/gpt-engineer/folder19_08-02-03-58/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
453 |
+
classic/benchmark/reports/gpt-engineer/folder20_08-02-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
454 |
+
classic/benchmark/reports/gpt-engineer/folder21_08-02-15-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
455 |
+
classic/benchmark/reports/gpt-engineer/folder22_08-02-17-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
456 |
+
classic/benchmark/reports/gpt-engineer/folder23_08-02-17-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
457 |
+
classic/benchmark/reports/gpt-engineer/folder24_08-03-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
458 |
+
classic/benchmark/reports/gpt-engineer/folder25_08-03-23-50/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
459 |
+
classic/benchmark/reports/gpt-engineer/folder26_08-04-03-23/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
460 |
+
classic/benchmark/reports/gpt-engineer/folder27_08-04-04-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
461 |
+
classic/benchmark/reports/gpt-engineer/folder28_08-04-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
462 |
+
classic/benchmark/reports/gpt-engineer/folder29_08-04-18-32/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
463 |
+
classic/benchmark/reports/gpt-engineer/folder30_08-04-18-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
464 |
+
classic/benchmark/reports/gpt-engineer/folder31_08-04-19-56/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
465 |
+
classic/benchmark/reports/gpt-engineer/folder32_08-04-22-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
466 |
+
classic/benchmark/reports/gpt-engineer/folder33_08-05-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
467 |
+
classic/benchmark/reports/gpt-engineer/folder34_08-06-08-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
468 |
+
classic/benchmark/reports/gpt-engineer/folder35_08-07-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
469 |
+
classic/benchmark/reports/gpt-engineer/folder36_08-08-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
470 |
+
classic/benchmark/reports/gpt-engineer/folder37_08-09-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
471 |
+
classic/benchmark/reports/gpt-engineer/folder38_08-10-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
472 |
+
classic/benchmark/reports/gpt-engineer/folder39_08-11-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
473 |
+
classic/benchmark/reports/gpt-engineer/folder40_08-12-02-18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
474 |
+
classic/benchmark/reports/gpt-engineer/folder41_08-12-02-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
475 |
+
classic/benchmark/reports/gpt-engineer/folder42_08-12-03-03/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
476 |
+
classic/benchmark/reports/gpt-engineer/folder43_08-12-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
477 |
+
classic/benchmark/reports/gpt-engineer/folder44_08-12-17-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
478 |
+
classic/benchmark/reports/gpt-engineer/folder45_08-13-01-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
479 |
+
classic/benchmark/reports/gpt-engineer/folder46_08-13-01-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
480 |
+
classic/benchmark/reports/gpt-engineer/folder47_08-13-02-16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
481 |
+
classic/benchmark/reports/gpt-engineer/folder48_08-13-02-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
482 |
+
classic/benchmark/reports/gpt-engineer/folder49_08-13-08-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
483 |
+
classic/benchmark/reports/gpt-engineer/folder50_08-14-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
484 |
+
classic/benchmark/reports/gpt-engineer/folder51_08-14-21-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
485 |
+
classic/benchmark/reports/gpt-engineer/folder52_08-15-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
486 |
+
classic/benchmark/reports/gpt-engineer/folder53_08-16-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
487 |
+
classic/benchmark/reports/mini-agi/20230817T000109_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
488 |
+
classic/benchmark/reports/mini-agi/20230817T081430_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
489 |
+
classic/benchmark/reports/mini-agi/20230818T081402_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
490 |
+
classic/benchmark/reports/mini-agi/20230819T081219_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
491 |
+
classic/benchmark/reports/mini-agi/20230820T081326_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
492 |
+
classic/benchmark/reports/mini-agi/20230821T081348_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
493 |
+
classic/benchmark/reports/mini-agi/20230822T081356_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
494 |
+
classic/benchmark/reports/mini-agi/20230823T081402_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
495 |
+
classic/benchmark/reports/mini-agi/20230824T032434_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
496 |
+
classic/benchmark/reports/mini-agi/20230824T081327_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
497 |
+
classic/benchmark/reports/mini-agi/20230825T081334_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
498 |
+
classic/benchmark/reports/mini-agi/20230826T081258_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
499 |
+
classic/benchmark/reports/mini-agi/20230827T081225_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
500 |
+
classic/benchmark/reports/mini-agi/20230828T081410_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
501 |
+
classic/benchmark/reports/mini-agi/20230829T081410_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
502 |
+
classic/benchmark/reports/mini-agi/20230830T081335_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
503 |
+
classic/benchmark/reports/mini-agi/20230831T051127_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
504 |
+
classic/benchmark/reports/mini-agi/20230831T081335_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
505 |
+
classic/benchmark/reports/mini-agi/20230831T153352_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
506 |
+
classic/benchmark/reports/mini-agi/20230901T081339_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
507 |
+
classic/benchmark/reports/mini-agi/20230902T081308_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
508 |
+
classic/benchmark/reports/mini-agi/20230903T081306_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
509 |
+
classic/benchmark/reports/mini-agi/20230904T081505_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
510 |
+
classic/benchmark/reports/mini-agi/20230905T081354_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
511 |
+
classic/benchmark/reports/mini-agi/20230908T001050_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
512 |
+
classic/benchmark/reports/mini-agi/20230908T011712_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
513 |
+
classic/benchmark/reports/mini-agi/20230908T080426_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
514 |
+
classic/benchmark/reports/mini-agi/20230909T080415_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
515 |
+
classic/benchmark/reports/mini-agi/20230910T080446_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
516 |
+
classic/benchmark/reports/mini-agi/20230911T080548_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
517 |
+
classic/benchmark/reports/mini-agi/folder11_08-01-12-47/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
518 |
+
classic/benchmark/reports/mini-agi/folder12_08-01-13-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
519 |
+
classic/benchmark/reports/mini-agi/folder13_08-01-03-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
520 |
+
classic/benchmark/reports/mini-agi/folder13_08-01-16-18/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
521 |
+
classic/benchmark/reports/mini-agi/folder14_08-01-16-57/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
522 |
+
classic/benchmark/reports/mini-agi/folder15_08-01-19-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
523 |
+
classic/benchmark/reports/mini-agi/folder20_08-02-03-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
524 |
+
classic/benchmark/reports/mini-agi/folder21_08-02-03-58/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
525 |
+
classic/benchmark/reports/mini-agi/folder22_08-02-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
526 |
+
classic/benchmark/reports/mini-agi/folder23_08-02-15-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
527 |
+
classic/benchmark/reports/mini-agi/folder24_08-02-17-20/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
528 |
+
classic/benchmark/reports/mini-agi/folder25_08-02-17-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
529 |
+
classic/benchmark/reports/mini-agi/folder26_08-02-22-57/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
530 |
+
classic/benchmark/reports/mini-agi/folder27_08-03-21-39/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
531 |
+
classic/benchmark/reports/mini-agi/folder28_08-03-23-50/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
532 |
+
classic/benchmark/reports/mini-agi/folder29_08-04-03-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
533 |
+
classic/benchmark/reports/mini-agi/folder30_08-04-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
534 |
+
classic/benchmark/reports/mini-agi/folder31_08-04-22-15/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
535 |
+
classic/benchmark/reports/mini-agi/folder32_08-05-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
536 |
+
classic/benchmark/reports/mini-agi/folder33_08-06-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
537 |
+
classic/benchmark/reports/mini-agi/folder34_08-07-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
538 |
+
classic/benchmark/reports/mini-agi/folder35_08-02-00-08/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
539 |
+
classic/benchmark/reports/mini-agi/folder35_08-07-20-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
540 |
+
classic/benchmark/reports/mini-agi/folder36_08-08-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
541 |
+
classic/benchmark/reports/mini-agi/folder37_08-09-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
542 |
+
classic/benchmark/reports/mini-agi/folder38_08-10-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
543 |
+
classic/benchmark/reports/mini-agi/folder39_08-02-02-36/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
544 |
+
classic/benchmark/reports/mini-agi/folder39_08-11-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
545 |
+
classic/benchmark/reports/mini-agi/folder40_08-12-02-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
546 |
+
classic/benchmark/reports/mini-agi/folder41_08-12-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
547 |
+
classic/benchmark/reports/mini-agi/folder42_08-12-17-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
548 |
+
classic/benchmark/reports/mini-agi/folder43_08-13-01-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
549 |
+
classic/benchmark/reports/mini-agi/folder44_08-13-01-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
550 |
+
classic/benchmark/reports/mini-agi/folder45_08-13-02-16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
551 |
+
classic/benchmark/reports/mini-agi/folder46_08-13-02-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
552 |
+
classic/benchmark/reports/mini-agi/folder47_08-13-08-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
553 |
+
classic/benchmark/reports/mini-agi/folder48_08-14-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
554 |
+
classic/benchmark/reports/mini-agi/folder49_08-14-17-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
555 |
+
classic/benchmark/reports/mini-agi/folder50_08-14-21-39/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
556 |
+
classic/benchmark/reports/mini-agi/folder51_08-15-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
557 |
+
classic/benchmark/reports/mini-agi/folder52_08-16-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
558 |
+
classic/benchmark/reports/mini-agi/folder6_07-31-13-05/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
559 |
+
classic/benchmark/reports/mini-agi/folder7_07-31-16-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
560 |
+
classic/benchmark/reports/mini-agi/folder8_07-31-19-05/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
561 |
+
classic/benchmark/reports/mini-agi/folder9_07-31-19-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
562 |
+
classic/benchmark/reports/smol-developer/20230816T230338_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
563 |
+
classic/benchmark/reports/smol-developer/20230816T234942_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
564 |
+
classic/benchmark/reports/smol-developer/20230817T000236_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
565 |
+
classic/benchmark/reports/smol-developer/20230817T081348_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
566 |
+
classic/benchmark/reports/smol-developer/20230818T081340_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
567 |
+
classic/benchmark/reports/smol-developer/20230819T081214_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
568 |
+
classic/benchmark/reports/smol-developer/20230820T081130_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
569 |
+
classic/benchmark/reports/smol-developer/20230821T081332_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
570 |
+
classic/benchmark/reports/smol-developer/20230822T081323_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
571 |
+
classic/benchmark/reports/smol-developer/20230823T081258_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
572 |
+
classic/benchmark/reports/smol-developer/20230824T032352_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
573 |
+
classic/benchmark/reports/smol-developer/20230824T081338_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
574 |
+
classic/benchmark/reports/smol-developer/20230825T081303_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
575 |
+
classic/benchmark/reports/smol-developer/20230826T081138_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
576 |
+
classic/benchmark/reports/smol-developer/20230827T081202_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
577 |
+
classic/benchmark/reports/smol-developer/20230828T081355_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
578 |
+
classic/benchmark/reports/smol-developer/20230829T081455_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
579 |
+
classic/benchmark/reports/smol-developer/20230830T081414_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
580 |
+
classic/benchmark/reports/smol-developer/20230831T054617_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
581 |
+
classic/benchmark/reports/smol-developer/20230831T055921_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
582 |
+
classic/benchmark/reports/smol-developer/20230831T081311_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
583 |
+
classic/benchmark/reports/smol-developer/20230831T152508_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
584 |
+
classic/benchmark/reports/smol-developer/20230831T153323_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
585 |
+
classic/benchmark/reports/smol-developer/20230901T081311_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
586 |
+
classic/benchmark/reports/smol-developer/20230901T153702_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
587 |
+
classic/benchmark/reports/smol-developer/20230901T160858_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
588 |
+
classic/benchmark/reports/smol-developer/20230901T171730_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
589 |
+
classic/benchmark/reports/smol-developer/20230902T081208_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
590 |
+
classic/benchmark/reports/smol-developer/20230903T081224_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
591 |
+
classic/benchmark/reports/smol-developer/20230904T081400_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
592 |
+
classic/benchmark/reports/smol-developer/20230905T081410_full_run/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
593 |
+
classic/benchmark/reports/smol-developer/folder12_08-01-03-21/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
594 |
+
classic/benchmark/reports/smol-developer/folder12_08-01-16-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
595 |
+
classic/benchmark/reports/smol-developer/folder13_08-01-16-57/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
596 |
+
classic/benchmark/reports/smol-developer/folder14_08-01-17-31/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
597 |
+
classic/benchmark/reports/smol-developer/folder15_08-01-19-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
598 |
+
classic/benchmark/reports/smol-developer/folder19_08-02-03-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
599 |
+
classic/benchmark/reports/smol-developer/folder20_08-02-01-34/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
600 |
+
classic/benchmark/reports/smol-developer/folder20_08-02-03-58/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
601 |
+
classic/benchmark/reports/smol-developer/folder21_08-02-02-36/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
602 |
+
classic/benchmark/reports/smol-developer/folder21_08-02-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
603 |
+
classic/benchmark/reports/smol-developer/folder22_08-02-15-17/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
604 |
+
classic/benchmark/reports/smol-developer/folder23_08-02-17-20/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
605 |
+
classic/benchmark/reports/smol-developer/folder24_08-02-17-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
606 |
+
classic/benchmark/reports/smol-developer/folder25_08-02-00-08/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
607 |
+
classic/benchmark/reports/smol-developer/folder25_08-02-20-30/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
608 |
+
classic/benchmark/reports/smol-developer/folder26_08-02-21-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
609 |
+
classic/benchmark/reports/smol-developer/folder27_08-02-22-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
610 |
+
classic/benchmark/reports/smol-developer/folder28_08-03-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
611 |
+
classic/benchmark/reports/smol-developer/folder29_08-03-23-50/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
612 |
+
classic/benchmark/reports/smol-developer/folder30_08-04-03-24/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
613 |
+
classic/benchmark/reports/smol-developer/folder31_08-04-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
614 |
+
classic/benchmark/reports/smol-developer/folder32_08-05-08-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
615 |
+
classic/benchmark/reports/smol-developer/folder33_08-06-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
616 |
+
classic/benchmark/reports/smol-developer/folder34_08-06-19-10/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
617 |
+
classic/benchmark/reports/smol-developer/folder35_08-07-01-04/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
618 |
+
classic/benchmark/reports/smol-developer/folder36_08-07-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
619 |
+
classic/benchmark/reports/smol-developer/folder37_08-08-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
620 |
+
classic/benchmark/reports/smol-developer/folder38_08-08-22-23/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
621 |
+
classic/benchmark/reports/smol-developer/folder39_08-08-22-30/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
622 |
+
classic/benchmark/reports/smol-developer/folder40_08-09-03-06/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
623 |
+
classic/benchmark/reports/smol-developer/folder41_08-09-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
624 |
+
classic/benchmark/reports/smol-developer/folder42_08-09-17-08/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
625 |
+
classic/benchmark/reports/smol-developer/folder43_08-10-08-14/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
626 |
+
classic/benchmark/reports/smol-developer/folder44_08-10-19-25/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
627 |
+
classic/benchmark/reports/smol-developer/folder45_08-11-08-12/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
628 |
+
classic/benchmark/reports/smol-developer/folder46_08-11-16-47/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
629 |
+
classic/benchmark/reports/smol-developer/folder47_08-12-02-01/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
630 |
+
classic/benchmark/reports/smol-developer/folder48_08-12-02-50/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
631 |
+
classic/benchmark/reports/smol-developer/folder49_08-12-03-02/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
632 |
+
classic/benchmark/reports/smol-developer/folder50_08-12-03-35/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
633 |
+
classic/benchmark/reports/smol-developer/folder51_08-12-08-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
634 |
+
classic/benchmark/reports/smol-developer/folder52_08-12-17-23/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
635 |
+
classic/benchmark/reports/smol-developer/folder53_08-13-00-51/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
636 |
+
classic/benchmark/reports/smol-developer/folder54_08-13-01-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
637 |
+
classic/benchmark/reports/smol-developer/folder55_08-13-01-52/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
638 |
+
classic/benchmark/reports/smol-developer/folder56_08-13-02-16/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
639 |
+
classic/benchmark/reports/smol-developer/folder57_08-13-02-37/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
640 |
+
classic/benchmark/reports/smol-developer/folder58_08-13-08-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
641 |
+
classic/benchmark/reports/smol-developer/folder59_08-14-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
642 |
+
classic/benchmark/reports/smol-developer/folder5_07-31-13-05/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
643 |
+
classic/benchmark/reports/smol-developer/folder60_08-14-17-47/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
644 |
+
classic/benchmark/reports/smol-developer/folder61_08-14-21-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
645 |
+
classic/benchmark/reports/smol-developer/folder62_08-15-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
646 |
+
classic/benchmark/reports/smol-developer/folder63_08-15-16-42/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
647 |
+
classic/benchmark/reports/smol-developer/folder64_08-16-08-13/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
648 |
+
classic/benchmark/reports/smol-developer/folder6_07-31-16-11/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
649 |
+
classic/benchmark/reports/smol-developer/folder7_07-31-19-05/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
650 |
+
classic/benchmark/reports/smol-developer/folder8_07-31-19-38/radar_chart.png filter=lfs diff=lfs merge=lfs -text
|
651 |
+
classic/frontend/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png filter=lfs diff=lfs merge=lfs -text
|
652 |
+
docs/content/imgs/e2b-dashboard.png filter=lfs diff=lfs merge=lfs -text
|
653 |
+
docs/content/imgs/ollama/Ollama-Add-Prompts.png filter=lfs diff=lfs merge=lfs -text
|
654 |
+
docs/content/imgs/ollama/Ollama-Enter-API-key.png filter=lfs diff=lfs merge=lfs -text
|
655 |
+
docs/content/imgs/ollama/Select-AI-block.png filter=lfs diff=lfs merge=lfs -text
|
656 |
+
docs/content/imgs/openai-api-key-billing-paid-account.png filter=lfs diff=lfs merge=lfs -text
|
657 |
+
docs/content/imgs/quickstart/000_header_img.png filter=lfs diff=lfs merge=lfs -text
|
658 |
+
docs/content/imgs/quickstart/001_repo.png filter=lfs diff=lfs merge=lfs -text
|
659 |
+
docs/content/imgs/quickstart/003A_clone.png filter=lfs diff=lfs merge=lfs -text
|
660 |
+
docs/content/imgs/quickstart/004_ide.png filter=lfs diff=lfs merge=lfs -text
|
661 |
+
docs/content/imgs/quickstart/008_enter_arena.png filter=lfs diff=lfs merge=lfs -text
|
662 |
+
docs/content/imgs/quickstart/t2_01.png filter=lfs diff=lfs merge=lfs -text
|
663 |
+
docs/content/imgs/quickstart/t2_02.png filter=lfs diff=lfs merge=lfs -text
|
664 |
+
docs/content/imgs/quickstart/t2_03.png filter=lfs diff=lfs merge=lfs -text
|
665 |
+
docs/content/imgs/quickstart/t2_04.png filter=lfs diff=lfs merge=lfs -text
|
666 |
+
docs/content/imgs/quickstart/t2_agent_flow.png filter=lfs diff=lfs merge=lfs -text
|
667 |
+
docs/content/imgs/quickstart/t2_diagram.png filter=lfs diff=lfs merge=lfs -text
|
668 |
+
docs/content/imgs/quickstart/t3_01.png filter=lfs diff=lfs merge=lfs -text
|
669 |
+
docs/content/imgs/quickstart/t3_02.png filter=lfs diff=lfs merge=lfs -text
|
670 |
+
docs/content/imgs/quickstart/t3_03.png filter=lfs diff=lfs merge=lfs -text
|
671 |
+
docs/content/imgs/quickstart/t3_04.png filter=lfs diff=lfs merge=lfs -text
|
.pr_agent.toml
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[pr_reviewer]
|
2 |
+
num_code_suggestions=0
|
3 |
+
|
4 |
+
[pr_code_suggestions]
|
5 |
+
commitable_code_suggestions=false
|
6 |
+
num_code_suggestions=0
|
.pre-commit-config.yaml
ADDED
@@ -0,0 +1,278 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
repos:
|
2 |
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
3 |
+
rev: v4.4.0
|
4 |
+
hooks:
|
5 |
+
- id: check-added-large-files
|
6 |
+
args: ["--maxkb=500"]
|
7 |
+
- id: fix-byte-order-marker
|
8 |
+
- id: check-case-conflict
|
9 |
+
- id: check-merge-conflict
|
10 |
+
- id: check-symlinks
|
11 |
+
- id: debug-statements
|
12 |
+
|
13 |
+
- repo: https://github.com/Yelp/detect-secrets
|
14 |
+
rev: v1.5.0
|
15 |
+
hooks:
|
16 |
+
- id: detect-secrets
|
17 |
+
name: Detect secrets
|
18 |
+
description: Detects high entropy strings that are likely to be passwords.
|
19 |
+
files: ^autogpt_platform/
|
20 |
+
stages: [pre-push]
|
21 |
+
|
22 |
+
- repo: local
|
23 |
+
# For proper type checking, all dependencies need to be up-to-date.
|
24 |
+
# It's also a good idea to check that poetry.lock is consistent with pyproject.toml.
|
25 |
+
hooks:
|
26 |
+
- id: poetry-install
|
27 |
+
name: Check & Install dependencies - AutoGPT Platform - Backend
|
28 |
+
alias: poetry-install-platform-backend
|
29 |
+
entry: poetry -C autogpt_platform/backend install
|
30 |
+
# include autogpt_libs source (since it's a path dependency)
|
31 |
+
files: ^autogpt_platform/(backend|autogpt_libs)/poetry\.lock$
|
32 |
+
types: [file]
|
33 |
+
language: system
|
34 |
+
pass_filenames: false
|
35 |
+
|
36 |
+
- id: poetry-install
|
37 |
+
name: Check & Install dependencies - AutoGPT Platform - Libs
|
38 |
+
alias: poetry-install-platform-libs
|
39 |
+
entry: poetry -C autogpt_platform/autogpt_libs install
|
40 |
+
files: ^autogpt_platform/autogpt_libs/poetry\.lock$
|
41 |
+
types: [file]
|
42 |
+
language: system
|
43 |
+
pass_filenames: false
|
44 |
+
|
45 |
+
- id: poetry-install
|
46 |
+
name: Check & Install dependencies - Classic - AutoGPT
|
47 |
+
alias: poetry-install-classic-autogpt
|
48 |
+
entry: poetry -C classic/original_autogpt install
|
49 |
+
# include forge source (since it's a path dependency)
|
50 |
+
files: ^classic/(original_autogpt|forge)/poetry\.lock$
|
51 |
+
types: [file]
|
52 |
+
language: system
|
53 |
+
pass_filenames: false
|
54 |
+
|
55 |
+
- id: poetry-install
|
56 |
+
name: Check & Install dependencies - Classic - Forge
|
57 |
+
alias: poetry-install-classic-forge
|
58 |
+
entry: poetry -C classic/forge install
|
59 |
+
files: ^classic/forge/poetry\.lock$
|
60 |
+
types: [file]
|
61 |
+
language: system
|
62 |
+
pass_filenames: false
|
63 |
+
|
64 |
+
- id: poetry-install
|
65 |
+
name: Check & Install dependencies - Classic - Benchmark
|
66 |
+
alias: poetry-install-classic-benchmark
|
67 |
+
entry: poetry -C classic/benchmark install
|
68 |
+
files: ^classic/benchmark/poetry\.lock$
|
69 |
+
types: [file]
|
70 |
+
language: system
|
71 |
+
pass_filenames: false
|
72 |
+
|
73 |
+
- repo: local
|
74 |
+
# For proper type checking, Prisma client must be up-to-date.
|
75 |
+
hooks:
|
76 |
+
- id: prisma-generate
|
77 |
+
name: Prisma Generate - AutoGPT Platform - Backend
|
78 |
+
alias: prisma-generate-platform-backend
|
79 |
+
entry: bash -c 'cd autogpt_platform/backend && poetry run prisma generate'
|
80 |
+
# include everything that triggers poetry install + the prisma schema
|
81 |
+
files: ^autogpt_platform/((backend|autogpt_libs)/poetry\.lock|backend/schema.prisma)$
|
82 |
+
types: [file]
|
83 |
+
language: system
|
84 |
+
pass_filenames: false
|
85 |
+
|
86 |
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
87 |
+
rev: v0.7.2
|
88 |
+
hooks:
|
89 |
+
- id: ruff
|
90 |
+
name: Lint (Ruff) - AutoGPT Platform - Backend
|
91 |
+
alias: ruff-lint-platform-backend
|
92 |
+
files: ^autogpt_platform/backend/
|
93 |
+
args: [--fix]
|
94 |
+
|
95 |
+
- id: ruff
|
96 |
+
name: Lint (Ruff) - AutoGPT Platform - Libs
|
97 |
+
alias: ruff-lint-platform-libs
|
98 |
+
files: ^autogpt_platform/autogpt_libs/
|
99 |
+
args: [--fix]
|
100 |
+
|
101 |
+
- id: ruff-format
|
102 |
+
name: Format (Ruff) - AutoGPT Platform - Libs
|
103 |
+
alias: ruff-lint-platform-libs
|
104 |
+
files: ^autogpt_platform/autogpt_libs/
|
105 |
+
|
106 |
+
- repo: local
|
107 |
+
# isort needs the context of which packages are installed to function, so we
|
108 |
+
# can't use a vendored isort pre-commit hook (which runs in its own isolated venv).
|
109 |
+
hooks:
|
110 |
+
- id: isort
|
111 |
+
name: Lint (isort) - AutoGPT Platform - Backend
|
112 |
+
alias: isort-platform-backend
|
113 |
+
entry: poetry -P autogpt_platform/backend run isort -p backend
|
114 |
+
files: ^autogpt_platform/backend/
|
115 |
+
types: [file, python]
|
116 |
+
language: system
|
117 |
+
|
118 |
+
- id: isort
|
119 |
+
name: Lint (isort) - Classic - AutoGPT
|
120 |
+
alias: isort-classic-autogpt
|
121 |
+
entry: poetry -P classic/original_autogpt run isort -p autogpt
|
122 |
+
files: ^classic/original_autogpt/
|
123 |
+
types: [file, python]
|
124 |
+
language: system
|
125 |
+
|
126 |
+
- id: isort
|
127 |
+
name: Lint (isort) - Classic - Forge
|
128 |
+
alias: isort-classic-forge
|
129 |
+
entry: poetry -P classic/forge run isort -p forge
|
130 |
+
files: ^classic/forge/
|
131 |
+
types: [file, python]
|
132 |
+
language: system
|
133 |
+
|
134 |
+
- id: isort
|
135 |
+
name: Lint (isort) - Classic - Benchmark
|
136 |
+
alias: isort-classic-benchmark
|
137 |
+
entry: poetry -P classic/benchmark run isort -p agbenchmark
|
138 |
+
files: ^classic/benchmark/
|
139 |
+
types: [file, python]
|
140 |
+
language: system
|
141 |
+
|
142 |
+
- repo: https://github.com/psf/black
|
143 |
+
rev: 24.10.0
|
144 |
+
# Black has sensible defaults, doesn't need package context, and ignores
|
145 |
+
# everything in .gitignore, so it works fine without any config or arguments.
|
146 |
+
hooks:
|
147 |
+
- id: black
|
148 |
+
name: Format (Black)
|
149 |
+
|
150 |
+
- repo: https://github.com/PyCQA/flake8
|
151 |
+
rev: 7.0.0
|
152 |
+
# To have flake8 load the config of the individual subprojects, we have to call
|
153 |
+
# them separately.
|
154 |
+
hooks:
|
155 |
+
- id: flake8
|
156 |
+
name: Lint (Flake8) - Classic - AutoGPT
|
157 |
+
alias: flake8-classic-autogpt
|
158 |
+
files: ^classic/original_autogpt/(autogpt|scripts|tests)/
|
159 |
+
args: [--config=classic/original_autogpt/.flake8]
|
160 |
+
|
161 |
+
- id: flake8
|
162 |
+
name: Lint (Flake8) - Classic - Forge
|
163 |
+
alias: flake8-classic-forge
|
164 |
+
files: ^classic/forge/(forge|tests)/
|
165 |
+
args: [--config=classic/forge/.flake8]
|
166 |
+
|
167 |
+
- id: flake8
|
168 |
+
name: Lint (Flake8) - Classic - Benchmark
|
169 |
+
alias: flake8-classic-benchmark
|
170 |
+
files: ^classic/benchmark/(agbenchmark|tests)/((?!reports).)*[/.]
|
171 |
+
args: [--config=classic/benchmark/.flake8]
|
172 |
+
|
173 |
+
- repo: local
|
174 |
+
hooks:
|
175 |
+
- id: prettier
|
176 |
+
name: Format (Prettier) - AutoGPT Platform - Frontend
|
177 |
+
alias: format-platform-frontend
|
178 |
+
entry: bash -c 'cd autogpt_platform/frontend && npx prettier --write $(echo "$@" | sed "s|autogpt_platform/frontend/||g")' --
|
179 |
+
files: ^autogpt_platform/frontend/
|
180 |
+
types: [file]
|
181 |
+
language: system
|
182 |
+
|
183 |
+
- repo: local
|
184 |
+
# To have watertight type checking, we check *all* the files in an affected
|
185 |
+
# project. To trigger on poetry.lock we also reset the file `types` filter.
|
186 |
+
hooks:
|
187 |
+
- id: pyright
|
188 |
+
name: Typecheck - AutoGPT Platform - Backend
|
189 |
+
alias: pyright-platform-backend
|
190 |
+
entry: poetry -C autogpt_platform/backend run pyright
|
191 |
+
# include forge source (since it's a path dependency) but exclude *_test.py files:
|
192 |
+
files: ^autogpt_platform/(backend/((backend|test)/|(\w+\.py|poetry\.lock)$)|autogpt_libs/(autogpt_libs/.*(?<!_test)\.py|poetry\.lock)$)
|
193 |
+
types: [file]
|
194 |
+
language: system
|
195 |
+
pass_filenames: false
|
196 |
+
|
197 |
+
- id: pyright
|
198 |
+
name: Typecheck - AutoGPT Platform - Libs
|
199 |
+
alias: pyright-platform-libs
|
200 |
+
entry: poetry -C autogpt_platform/autogpt_libs run pyright
|
201 |
+
files: ^autogpt_platform/autogpt_libs/(autogpt_libs/|poetry\.lock$)
|
202 |
+
types: [file]
|
203 |
+
language: system
|
204 |
+
pass_filenames: false
|
205 |
+
|
206 |
+
- id: pyright
|
207 |
+
name: Typecheck - Classic - AutoGPT
|
208 |
+
alias: pyright-classic-autogpt
|
209 |
+
entry: poetry -C classic/original_autogpt run pyright
|
210 |
+
# include forge source (since it's a path dependency) but exclude *_test.py files:
|
211 |
+
files: ^(classic/original_autogpt/((autogpt|scripts|tests)/|poetry\.lock$)|classic/forge/(forge/.*(?<!_test)\.py|poetry\.lock)$)
|
212 |
+
types: [file]
|
213 |
+
language: system
|
214 |
+
pass_filenames: false
|
215 |
+
|
216 |
+
- id: pyright
|
217 |
+
name: Typecheck - Classic - Forge
|
218 |
+
alias: pyright-classic-forge
|
219 |
+
entry: poetry -C classic/forge run pyright
|
220 |
+
files: ^classic/forge/(forge/|poetry\.lock$)
|
221 |
+
types: [file]
|
222 |
+
language: system
|
223 |
+
pass_filenames: false
|
224 |
+
|
225 |
+
- id: pyright
|
226 |
+
name: Typecheck - Classic - Benchmark
|
227 |
+
alias: pyright-classic-benchmark
|
228 |
+
entry: poetry -C classic/benchmark run pyright
|
229 |
+
files: ^classic/benchmark/(agbenchmark/|tests/|poetry\.lock$)
|
230 |
+
types: [file]
|
231 |
+
language: system
|
232 |
+
pass_filenames: false
|
233 |
+
|
234 |
+
- repo: local
|
235 |
+
hooks:
|
236 |
+
- id: tsc
|
237 |
+
name: Typecheck - AutoGPT Platform - Frontend
|
238 |
+
entry: bash -c 'cd autogpt_platform/frontend && pnpm type-check'
|
239 |
+
files: ^autogpt_platform/frontend/
|
240 |
+
types: [file]
|
241 |
+
language: system
|
242 |
+
pass_filenames: false
|
243 |
+
|
244 |
+
# - repo: local
|
245 |
+
# hooks:
|
246 |
+
# - id: pytest
|
247 |
+
# name: Run tests - AutoGPT Platform - Backend
|
248 |
+
# alias: pytest-platform-backend
|
249 |
+
# entry: bash -c 'cd autogpt_platform/backend && poetry run pytest'
|
250 |
+
# # include autogpt_libs source (since it's a path dependency) but exclude *_test.py files:
|
251 |
+
# files: ^autogpt_platform/(backend/((backend|test)/|poetry\.lock$)|autogpt_libs/(autogpt_libs/.*(?<!_test)\.py|poetry\.lock)$)
|
252 |
+
# language: system
|
253 |
+
# pass_filenames: false
|
254 |
+
|
255 |
+
# - id: pytest
|
256 |
+
# name: Run tests - Classic - AutoGPT (excl. slow tests)
|
257 |
+
# alias: pytest-classic-autogpt
|
258 |
+
# entry: bash -c 'cd classic/original_autogpt && poetry run pytest --cov=autogpt -m "not slow" tests/unit tests/integration'
|
259 |
+
# # include forge source (since it's a path dependency) but exclude *_test.py files:
|
260 |
+
# files: ^(classic/original_autogpt/((autogpt|tests)/|poetry\.lock$)|classic/forge/(forge/.*(?<!_test)\.py|poetry\.lock)$)
|
261 |
+
# language: system
|
262 |
+
# pass_filenames: false
|
263 |
+
|
264 |
+
# - id: pytest
|
265 |
+
# name: Run tests - Classic - Forge (excl. slow tests)
|
266 |
+
# alias: pytest-classic-forge
|
267 |
+
# entry: bash -c 'cd classic/forge && poetry run pytest --cov=forge -m "not slow"'
|
268 |
+
# files: ^classic/forge/(forge/|tests/|poetry\.lock$)
|
269 |
+
# language: system
|
270 |
+
# pass_filenames: false
|
271 |
+
|
272 |
+
# - id: pytest
|
273 |
+
# name: Run tests - Classic - Benchmark
|
274 |
+
# alias: pytest-classic-benchmark
|
275 |
+
# entry: bash -c 'cd classic/benchmark && poetry run pytest --cov=benchmark'
|
276 |
+
# files: ^classic/benchmark/(agbenchmark/|tests/|poetry\.lock$)
|
277 |
+
# language: system
|
278 |
+
# pass_filenames: false
|
.vscode/all-projects.code-workspace
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"folders": [
|
3 |
+
{
|
4 |
+
"name": "frontend",
|
5 |
+
"path": "../autogpt_platform/frontend"
|
6 |
+
},
|
7 |
+
{
|
8 |
+
"name": "backend",
|
9 |
+
"path": "../autogpt_platform/backend"
|
10 |
+
},
|
11 |
+
{
|
12 |
+
"name": "market",
|
13 |
+
"path": "../autogpt_platform/market"
|
14 |
+
},
|
15 |
+
{
|
16 |
+
"name": "lib",
|
17 |
+
"path": "../autogpt_platform/autogpt_libs"
|
18 |
+
},
|
19 |
+
{
|
20 |
+
"name": "infra",
|
21 |
+
"path": "../autogpt_platform/infra"
|
22 |
+
},
|
23 |
+
{
|
24 |
+
"name": "docs",
|
25 |
+
"path": "../docs"
|
26 |
+
},
|
27 |
+
|
28 |
+
{
|
29 |
+
"name": "classic - autogpt",
|
30 |
+
"path": "../classic/original_autogpt"
|
31 |
+
},
|
32 |
+
{
|
33 |
+
"name": "classic - benchmark",
|
34 |
+
"path": "../classic/benchmark"
|
35 |
+
},
|
36 |
+
{
|
37 |
+
"name": "classic - forge",
|
38 |
+
"path": "../classic/forge"
|
39 |
+
},
|
40 |
+
{
|
41 |
+
"name": "classic - frontend",
|
42 |
+
"path": "../classic/frontend"
|
43 |
+
},
|
44 |
+
{
|
45 |
+
"name": "[root]",
|
46 |
+
"path": ".."
|
47 |
+
}
|
48 |
+
],
|
49 |
+
"settings": {
|
50 |
+
"python.analysis.typeCheckingMode": "basic"
|
51 |
+
},
|
52 |
+
"extensions": {
|
53 |
+
"recommendations": [
|
54 |
+
"charliermarsh.ruff",
|
55 |
+
"dart-code.flutter",
|
56 |
+
"ms-python.black-formatter",
|
57 |
+
"ms-python.vscode-pylance",
|
58 |
+
"prisma.prisma",
|
59 |
+
"qwtel.sqlite-viewer"
|
60 |
+
]
|
61 |
+
}
|
62 |
+
}
|
.vscode/launch.json
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"version": "0.2.0",
|
3 |
+
"configurations": [
|
4 |
+
{
|
5 |
+
"name": "Frontend: Server Side",
|
6 |
+
"type": "node-terminal",
|
7 |
+
"request": "launch",
|
8 |
+
"cwd": "${workspaceFolder}/autogpt_platform/frontend",
|
9 |
+
"command": "yarn dev"
|
10 |
+
},
|
11 |
+
{
|
12 |
+
"name": "Frontend: Client Side",
|
13 |
+
"type": "msedge",
|
14 |
+
"request": "launch",
|
15 |
+
"url": "http://localhost:3000"
|
16 |
+
},
|
17 |
+
{
|
18 |
+
"name": "Frontend: Full Stack",
|
19 |
+
"type": "node-terminal",
|
20 |
+
|
21 |
+
"request": "launch",
|
22 |
+
"command": "yarn dev",
|
23 |
+
"cwd": "${workspaceFolder}/autogpt_platform/frontend",
|
24 |
+
"serverReadyAction": {
|
25 |
+
"pattern": "- Local:.+(https?://.+)",
|
26 |
+
"uriFormat": "%s",
|
27 |
+
"action": "debugWithEdge"
|
28 |
+
}
|
29 |
+
},
|
30 |
+
{
|
31 |
+
"name": "Backend",
|
32 |
+
"type": "debugpy",
|
33 |
+
"request": "launch",
|
34 |
+
"module": "backend.app",
|
35 |
+
"env": {
|
36 |
+
"OBJC_DISABLE_INITIALIZE_FORK_SAFETY": "YES"
|
37 |
+
},
|
38 |
+
"envFile": "${workspaceFolder}/backend/.env",
|
39 |
+
"justMyCode": false,
|
40 |
+
"cwd": "${workspaceFolder}/autogpt_platform/backend"
|
41 |
+
},
|
42 |
+
{
|
43 |
+
"name": "Marketplace",
|
44 |
+
"type": "debugpy",
|
45 |
+
"request": "launch",
|
46 |
+
"module": "autogpt_platform.market.main",
|
47 |
+
"env": {
|
48 |
+
"ENV": "dev"
|
49 |
+
},
|
50 |
+
"envFile": "${workspaceFolder}/market/.env",
|
51 |
+
"justMyCode": false,
|
52 |
+
"cwd": "${workspaceFolder}/market"
|
53 |
+
}
|
54 |
+
],
|
55 |
+
"compounds": [
|
56 |
+
{
|
57 |
+
"name": "Everything",
|
58 |
+
"configurations": ["Backend", "Frontend: Full Stack"],
|
59 |
+
// "preLaunchTask": "${defaultBuildTask}",
|
60 |
+
"stopAll": true,
|
61 |
+
"presentation": {
|
62 |
+
"hidden": false,
|
63 |
+
"order": 0
|
64 |
+
}
|
65 |
+
}
|
66 |
+
]
|
67 |
+
}
|
AGENTS.md
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# AutoGPT Platform Contribution Guide
|
2 |
+
|
3 |
+
This guide provides context for Codex when updating the **autogpt_platform** folder.
|
4 |
+
|
5 |
+
## Directory overview
|
6 |
+
|
7 |
+
- `autogpt_platform/backend` – FastAPI based backend service.
|
8 |
+
- `autogpt_platform/autogpt_libs` – Shared Python libraries.
|
9 |
+
- `autogpt_platform/frontend` – Next.js + Typescript frontend.
|
10 |
+
- `autogpt_platform/docker-compose.yml` – development stack.
|
11 |
+
|
12 |
+
See `docs/content/platform/getting-started.md` for setup instructions.
|
13 |
+
|
14 |
+
## Code style
|
15 |
+
|
16 |
+
- Format Python code with `poetry run format`.
|
17 |
+
- Format frontend code using `pnpm format`.
|
18 |
+
|
19 |
+
## Testing
|
20 |
+
|
21 |
+
- Backend: `poetry run test` (runs pytest with a docker based postgres + prisma).
|
22 |
+
- Frontend: `pnpm test` or `pnpm test-ui` for Playwright tests. See `docs/content/platform/contributing/tests.md` for tips.
|
23 |
+
|
24 |
+
Always run the relevant linters and tests before committing.
|
25 |
+
Use conventional commit messages for all commits (e.g. `feat(backend): add API`).
|
26 |
+
Types:
|
27 |
+
- feat
|
28 |
+
- fix
|
29 |
+
- refactor
|
30 |
+
- ci
|
31 |
+
- dx (developer experience)
|
32 |
+
Scopes:
|
33 |
+
- platform
|
34 |
+
- platform/library
|
35 |
+
- platform/marketplace
|
36 |
+
- backend
|
37 |
+
- backend/executor
|
38 |
+
- frontend
|
39 |
+
- frontend/library
|
40 |
+
- frontend/marketplace
|
41 |
+
- blocks
|
42 |
+
|
43 |
+
## Pull requests
|
44 |
+
|
45 |
+
- Use the template in `.github/PULL_REQUEST_TEMPLATE.md`.
|
46 |
+
- Rely on the pre-commit checks for linting and formatting
|
47 |
+
- Fill out the **Changes** section and the checklist.
|
48 |
+
- Use conventional commit titles with a scope (e.g. `feat(frontend): add feature`).
|
49 |
+
- Keep out-of-scope changes under 20% of the PR.
|
50 |
+
- Ensure PR descriptions are complete.
|
51 |
+
- For changes touching `data/*.py`, validate user ID checks or explain why not needed.
|
52 |
+
- If adding protected frontend routes, update `frontend/lib/supabase/middleware.ts`.
|
53 |
+
- Use the linear ticket branch structure if given codex/open-1668-resume-dropped-runs
|
CITATION.cff
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This CITATION.cff file was generated with cffinit.
|
2 |
+
# Visit https://bit.ly/cffinit to generate yours today!
|
3 |
+
|
4 |
+
cff-version: 1.2.0
|
5 |
+
title: AutoGPT
|
6 |
+
message: >-
|
7 |
+
If you use this software, please cite it using the
|
8 |
+
metadata from this file.
|
9 |
+
type: software
|
10 |
+
authors:
|
11 |
+
- name: Significant Gravitas
|
12 |
+
website: 'https://agpt.co'
|
13 |
+
repository-code: 'https://github.com/Significant-Gravitas/AutoGPT'
|
14 |
+
url: 'https://agpt.co'
|
15 |
+
abstract: >-
|
16 |
+
A collection of tools and experimental open-source attempts to make GPT-4 fully
|
17 |
+
autonomous.
|
18 |
+
keywords:
|
19 |
+
- AI
|
20 |
+
- Agent
|
21 |
+
license: MIT
|
CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Code of Conduct for AutoGPT
|
2 |
+
|
3 |
+
## 1. Purpose
|
4 |
+
|
5 |
+
The purpose of this Code of Conduct is to provide guidelines for contributors to the AutoGPT projects on GitHub. We aim to create a positive and inclusive environment where all participants can contribute and collaborate effectively. By participating in this project, you agree to abide by this Code of Conduct.
|
6 |
+
|
7 |
+
## 2. Scope
|
8 |
+
|
9 |
+
This Code of Conduct applies to all contributors, maintainers, and users of the AutoGPT project. It extends to all project spaces, including but not limited to issues, pull requests, code reviews, comments, and other forms of communication within the project.
|
10 |
+
|
11 |
+
## 3. Our Standards
|
12 |
+
|
13 |
+
We encourage the following behavior:
|
14 |
+
|
15 |
+
* Being respectful and considerate to others
|
16 |
+
* Actively seeking diverse perspectives
|
17 |
+
* Providing constructive feedback and assistance
|
18 |
+
* Demonstrating empathy and understanding
|
19 |
+
|
20 |
+
We discourage the following behavior:
|
21 |
+
|
22 |
+
* Harassment or discrimination of any kind
|
23 |
+
* Disrespectful, offensive, or inappropriate language or content
|
24 |
+
* Personal attacks or insults
|
25 |
+
* Unwarranted criticism or negativity
|
26 |
+
|
27 |
+
## 4. Reporting and Enforcement
|
28 |
+
|
29 |
+
If you witness or experience any violations of this Code of Conduct, please report them to the project maintainers by email or other appropriate means. The maintainers will investigate and take appropriate action, which may include warnings, temporary or permanent bans, or other measures as necessary.
|
30 |
+
|
31 |
+
Maintainers are responsible for ensuring compliance with this Code of Conduct and may take action to address any violations.
|
32 |
+
|
33 |
+
## 5. Acknowledgements
|
34 |
+
|
35 |
+
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html).
|
36 |
+
|
37 |
+
## 6. Contact
|
38 |
+
|
39 |
+
If you have any questions or concerns, please contact the project maintainers on Discord:
|
40 |
+
https://discord.gg/autogpt
|
CONTRIBUTING.md
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# AutoGPT Contribution Guide
|
2 |
+
If you are reading this, you are probably looking for the full **[contribution guide]**,
|
3 |
+
which is part of our [wiki].
|
4 |
+
|
5 |
+
[contribution guide]: https://github.com/Significant-Gravitas/AutoGPT/wiki/Contributing
|
6 |
+
[wiki]: https://github.com/Significant-Gravitas/AutoGPT/wiki
|
7 |
+
[roadmap]: https://github.com/Significant-Gravitas/AutoGPT/discussions/6971
|
8 |
+
[kanban board]: https://github.com/orgs/Significant-Gravitas/projects/1
|
9 |
+
|
10 |
+
## Contributing to the AutoGPT Platform Folder
|
11 |
+
All contributions to [the autogpt_platform folder](https://github.com/Significant-Gravitas/AutoGPT/blob/master/autogpt_platform) will be under our [Contribution License Agreement](https://github.com/Significant-Gravitas/AutoGPT/blob/master/autogpt_platform/Contributor%20License%20Agreement%20(CLA).md). By making a pull request contributing to this folder, you agree to the terms of our CLA for your contribution. All contributions to other folders will be under the MIT license.
|
12 |
+
|
13 |
+
## In short
|
14 |
+
1. Avoid duplicate work, issues, PRs etc.
|
15 |
+
2. We encourage you to collaborate with fellow community members on some of our bigger
|
16 |
+
[todo's][roadmap]!
|
17 |
+
* We highly recommend to post your idea and discuss it in the [dev channel].
|
18 |
+
3. Create a draft PR when starting work on bigger changes.
|
19 |
+
4. Adhere to the [Code Guidelines]
|
20 |
+
5. Clearly explain your changes when submitting a PR.
|
21 |
+
6. Don't submit broken code: test/validate your changes.
|
22 |
+
7. Avoid making unnecessary changes, especially if they're purely based on your personal
|
23 |
+
preferences. Doing so is the maintainers' job. ;-)
|
24 |
+
8. Please also consider contributing something other than code; see the
|
25 |
+
[contribution guide] for options.
|
26 |
+
|
27 |
+
[dev channel]: https://discord.com/channels/1092243196446249134/1095817829405704305
|
28 |
+
[code guidelines]: https://github.com/Significant-Gravitas/AutoGPT/wiki/Contributing#code-guidelines
|
29 |
+
|
30 |
+
If you wish to involve with the project (beyond just contributing PRs), please read the
|
31 |
+
wiki page about [Catalyzing](https://github.com/Significant-Gravitas/AutoGPT/wiki/Catalyzing).
|
32 |
+
|
33 |
+
In fact, why not just look through the whole wiki (it's only a few pages) and
|
34 |
+
hop on our Discord. See you there! :-)
|
35 |
+
|
36 |
+
❤️ & 🔆
|
37 |
+
The team @ AutoGPT
|
38 |
+
https://discord.gg/autogpt
|
LICENSE
ADDED
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
All portions of this repository are under one of two licenses. The majority of the AutoGPT repository is under the MIT License below. The autogpt_platform folder is under the
|
2 |
+
Polyform Shield License.
|
3 |
+
|
4 |
+
|
5 |
+
MIT License
|
6 |
+
|
7 |
+
|
8 |
+
Copyright (c) 2023 Toran Bruce Richards
|
9 |
+
|
10 |
+
|
11 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
12 |
+
of this software and associated documentation files (the "Software"), to deal
|
13 |
+
in the Software without restriction, including without limitation the rights
|
14 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15 |
+
copies of the Software, and to permit persons to whom the Software is
|
16 |
+
furnished to do so, subject to the following conditions:
|
17 |
+
|
18 |
+
|
19 |
+
The above copyright notice and this permission notice shall be included in all
|
20 |
+
copies or substantial portions of the Software.
|
21 |
+
|
22 |
+
|
23 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
24 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
25 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
26 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
27 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
28 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
29 |
+
SOFTWARE.
|
README.md
CHANGED
@@ -1,12 +1,22 @@
|
|
1 |
---
|
2 |
title: Autogpt2
|
3 |
-
emoji:
|
4 |
colorFrom: blue
|
5 |
-
colorTo:
|
6 |
sdk: gradio
|
7 |
-
sdk_version: 5.35.0
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
---
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
1 |
---
|
2 |
title: Autogpt2
|
3 |
+
emoji: 🚀
|
4 |
colorFrom: blue
|
5 |
+
colorTo: green
|
6 |
sdk: gradio
|
7 |
+
sdk_version: "5.35.0"
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
---
|
11 |
|
12 |
+
# Autogpt2
|
13 |
+
|
14 |
+
[](https://discord.gg/autogpt)  
|
15 |
+
|
16 |
+
Deployed from: https://github.com/seawolf2357/AutoGPT
|
17 |
+
|
18 |
+
## Features
|
19 |
+
This Space provides a Gradio interface for the repository's main functionality.
|
20 |
+
The app.py was automatically generated based on repository analysis.
|
21 |
+
|
22 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
SECURITY.md
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Security Policy
|
2 |
+
|
3 |
+
## Reporting Security Issues
|
4 |
+
|
5 |
+
We take the security of our project seriously. If you believe you have found a security vulnerability, please report it to us privately. **Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.**
|
6 |
+
|
7 |
+
> **Important Note**: Any code within the `classic/` folder is considered legacy, unsupported, and out of scope for security reports. We will not address security vulnerabilities in this deprecated code.
|
8 |
+
|
9 |
+
Instead, please report them via:
|
10 |
+
- [GitHub Security Advisory](https://github.com/Significant-Gravitas/AutoGPT/security/advisories/new)
|
11 |
+
<!--- [Huntr.dev](https://huntr.com/repos/significant-gravitas/autogpt) - where you may be eligible for a bounty-->
|
12 |
+
|
13 |
+
### Reporting Process
|
14 |
+
1. **Submit Report**: Use one of the above channels to submit your report
|
15 |
+
2. **Response Time**: Our team will acknowledge receipt of your report within 14 business days.
|
16 |
+
3. **Collaboration**: We will collaborate with you to understand and validate the issue
|
17 |
+
4. **Resolution**: We will work on a fix and coordinate the release process
|
18 |
+
|
19 |
+
### Disclosure Policy
|
20 |
+
- Please provide detailed reports with reproducible steps
|
21 |
+
- Include the version/commit hash where you discovered the vulnerability
|
22 |
+
- Allow us a 90-day security fix window before any public disclosure
|
23 |
+
- After patch is released, allow 30 days for users to update before public disclosure (for a total of 120 days max between update time and fix time)
|
24 |
+
- Share any potential mitigations or workarounds if known
|
25 |
+
|
26 |
+
## Supported Versions
|
27 |
+
Only the following versions are eligible for security updates:
|
28 |
+
|
29 |
+
| Version | Supported |
|
30 |
+
|---------|-----------|
|
31 |
+
| Latest release on master branch | ✅ |
|
32 |
+
| Development commits (pre-master) | ✅ |
|
33 |
+
| Classic folder (deprecated) | ❌ |
|
34 |
+
| All other versions | ❌ |
|
35 |
+
|
36 |
+
## Security Best Practices
|
37 |
+
When using this project:
|
38 |
+
1. Always use the latest stable version
|
39 |
+
2. Review security advisories before updating
|
40 |
+
3. Follow our security documentation and guidelines
|
41 |
+
4. Keep your dependencies up to date
|
42 |
+
5. Do not use code from the `classic/` folder as it is deprecated and unsupported
|
43 |
+
|
44 |
+
## Past Security Advisories
|
45 |
+
For a list of past security advisories, please visit our [Security Advisory Page](https://github.com/Significant-Gravitas/AutoGPT/security/advisories) and [Huntr Disclosures Page](https://huntr.com/repos/significant-gravitas/autogpt).
|
46 |
+
|
47 |
+
---
|
48 |
+
Last updated: November 2024
|
app.py
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
|
3 |
+
# Function to simulate AutoGPT behavior
|
4 |
+
|
5 |
+
def run_autogpt(prompt, api_key):
|
6 |
+
if not api_key:
|
7 |
+
return "Error: API key is required. Please provide a valid API key to use AutoGPT."
|
8 |
+
# Simulate processing the prompt
|
9 |
+
response = f"AutoGPT response to: '{prompt}' (this is a simulated response)"
|
10 |
+
return response
|
11 |
+
|
12 |
+
# Gradio interface setup
|
13 |
+
|
14 |
+
def main():
|
15 |
+
with gr.Blocks() as demo:
|
16 |
+
gr.Markdown("# AutoGPT Gradio Interface\nThis app demonstrates the capabilities of AutoGPT.\n\n### Instructions:\n1. Enter your prompt in the text box.\n2. Provide your API key to access AutoGPT functionality.\n3. Click 'Run' to see the response from AutoGPT.")
|
17 |
+
with gr.Row():
|
18 |
+
api_key = gr.Textbox(label="API Key", placeholder="Enter your API key here", type="password")
|
19 |
+
prompt = gr.Textbox(label="Prompt", placeholder="Enter your prompt here")
|
20 |
+
run_button = gr.Button("Run")
|
21 |
+
output = gr.Textbox(label="Output")
|
22 |
+
|
23 |
+
run_button.click(run_autogpt, inputs=[prompt, api_key], outputs=output)
|
24 |
+
|
25 |
+
return demo
|
26 |
+
|
27 |
+
if __name__ == "__main__":
|
28 |
+
main().launch()
|
assets/gpt_dark_RGB.icns
ADDED
Binary file (83.7 kB). View file
|
|
assets/gpt_dark_RGB.ico
ADDED
|
Git LFS Details
|
assets/gpt_dark_RGB.png
ADDED
![]() |
autogpt_platform/.env.example
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
############
|
2 |
+
# Secrets
|
3 |
+
# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION
|
4 |
+
############
|
5 |
+
|
6 |
+
POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password
|
7 |
+
JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long
|
8 |
+
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE
|
9 |
+
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q
|
10 |
+
DASHBOARD_USERNAME=supabase
|
11 |
+
DASHBOARD_PASSWORD=this_password_is_insecure_and_should_be_updated
|
12 |
+
SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
|
13 |
+
VAULT_ENC_KEY=your-encryption-key-32-chars-min
|
14 |
+
|
15 |
+
|
16 |
+
############
|
17 |
+
# Database - You can change these to any PostgreSQL database that has logical replication enabled.
|
18 |
+
############
|
19 |
+
|
20 |
+
POSTGRES_HOST=db
|
21 |
+
POSTGRES_DB=postgres
|
22 |
+
POSTGRES_PORT=5432
|
23 |
+
# default user is postgres
|
24 |
+
|
25 |
+
|
26 |
+
############
|
27 |
+
# Supavisor -- Database pooler
|
28 |
+
############
|
29 |
+
POOLER_PROXY_PORT_TRANSACTION=6543
|
30 |
+
POOLER_DEFAULT_POOL_SIZE=20
|
31 |
+
POOLER_MAX_CLIENT_CONN=100
|
32 |
+
POOLER_TENANT_ID=your-tenant-id
|
33 |
+
|
34 |
+
|
35 |
+
############
|
36 |
+
# API Proxy - Configuration for the Kong Reverse proxy.
|
37 |
+
############
|
38 |
+
|
39 |
+
KONG_HTTP_PORT=8000
|
40 |
+
KONG_HTTPS_PORT=8443
|
41 |
+
|
42 |
+
|
43 |
+
############
|
44 |
+
# API - Configuration for PostgREST.
|
45 |
+
############
|
46 |
+
|
47 |
+
PGRST_DB_SCHEMAS=public,storage,graphql_public
|
48 |
+
|
49 |
+
|
50 |
+
############
|
51 |
+
# Auth - Configuration for the GoTrue authentication server.
|
52 |
+
############
|
53 |
+
|
54 |
+
## General
|
55 |
+
SITE_URL=http://localhost:3000
|
56 |
+
ADDITIONAL_REDIRECT_URLS=
|
57 |
+
JWT_EXPIRY=3600
|
58 |
+
DISABLE_SIGNUP=false
|
59 |
+
API_EXTERNAL_URL=http://localhost:8000
|
60 |
+
|
61 |
+
## Mailer Config
|
62 |
+
MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify"
|
63 |
+
MAILER_URLPATHS_INVITE="/auth/v1/verify"
|
64 |
+
MAILER_URLPATHS_RECOVERY="/auth/v1/verify"
|
65 |
+
MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify"
|
66 |
+
|
67 |
+
## Email auth
|
68 |
+
ENABLE_EMAIL_SIGNUP=true
|
69 |
+
ENABLE_EMAIL_AUTOCONFIRM=false
|
70 | |
71 |
+
SMTP_HOST=supabase-mail
|
72 |
+
SMTP_PORT=2500
|
73 |
+
SMTP_USER=fake_mail_user
|
74 |
+
SMTP_PASS=fake_mail_password
|
75 |
+
SMTP_SENDER_NAME=fake_sender
|
76 |
+
ENABLE_ANONYMOUS_USERS=false
|
77 |
+
|
78 |
+
## Phone auth
|
79 |
+
ENABLE_PHONE_SIGNUP=true
|
80 |
+
ENABLE_PHONE_AUTOCONFIRM=true
|
81 |
+
|
82 |
+
|
83 |
+
############
|
84 |
+
# Studio - Configuration for the Dashboard
|
85 |
+
############
|
86 |
+
|
87 |
+
STUDIO_DEFAULT_ORGANIZATION=Default Organization
|
88 |
+
STUDIO_DEFAULT_PROJECT=Default Project
|
89 |
+
|
90 |
+
STUDIO_PORT=3000
|
91 |
+
# replace if you intend to use Studio outside of localhost
|
92 |
+
SUPABASE_PUBLIC_URL=http://localhost:8000
|
93 |
+
|
94 |
+
# Enable webp support
|
95 |
+
IMGPROXY_ENABLE_WEBP_DETECTION=true
|
96 |
+
|
97 |
+
# Add your OpenAI API key to enable SQL Editor Assistant
|
98 |
+
OPENAI_API_KEY=
|
99 |
+
|
100 |
+
|
101 |
+
############
|
102 |
+
# Functions - Configuration for Functions
|
103 |
+
############
|
104 |
+
# NOTE: VERIFY_JWT applies to all functions. Per-function VERIFY_JWT is not supported yet.
|
105 |
+
FUNCTIONS_VERIFY_JWT=false
|
106 |
+
|
107 |
+
|
108 |
+
############
|
109 |
+
# Logs - Configuration for Logflare
|
110 |
+
# Please refer to https://supabase.com/docs/reference/self-hosting-analytics/introduction
|
111 |
+
############
|
112 |
+
|
113 |
+
LOGFLARE_LOGGER_BACKEND_API_KEY=your-super-secret-and-long-logflare-key
|
114 |
+
|
115 |
+
# Change vector.toml sinks to reflect this change
|
116 |
+
LOGFLARE_API_KEY=your-super-secret-and-long-logflare-key
|
117 |
+
|
118 |
+
# Docker socket location - this value will differ depending on your OS
|
119 |
+
DOCKER_SOCKET_LOCATION=/var/run/docker.sock
|
120 |
+
|
121 |
+
# Google Cloud Project details
|
122 |
+
GOOGLE_PROJECT_ID=GOOGLE_PROJECT_ID
|
123 |
+
GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER
|
autogpt_platform/.gitignore
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
1 |
+
*.ignore.*
|
2 |
+
*.ign.*
|
autogpt_platform/CLAUDE.md
ADDED
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# CLAUDE.md
|
2 |
+
|
3 |
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
4 |
+
|
5 |
+
## Repository Overview
|
6 |
+
|
7 |
+
AutoGPT Platform is a monorepo containing:
|
8 |
+
- **Backend** (`/backend`): Python FastAPI server with async support
|
9 |
+
- **Frontend** (`/frontend`): Next.js React application
|
10 |
+
- **Shared Libraries** (`/autogpt_libs`): Common Python utilities
|
11 |
+
|
12 |
+
## Essential Commands
|
13 |
+
|
14 |
+
### Backend Development
|
15 |
+
```bash
|
16 |
+
# Install dependencies
|
17 |
+
cd backend && poetry install
|
18 |
+
|
19 |
+
# Run database migrations
|
20 |
+
poetry run prisma migrate dev
|
21 |
+
|
22 |
+
# Start all services (database, redis, rabbitmq, clamav)
|
23 |
+
docker compose up -d
|
24 |
+
|
25 |
+
# Run the backend server
|
26 |
+
poetry run serve
|
27 |
+
|
28 |
+
# Run tests
|
29 |
+
poetry run test
|
30 |
+
|
31 |
+
# Run specific test
|
32 |
+
poetry run pytest path/to/test_file.py::test_function_name
|
33 |
+
|
34 |
+
# Lint and format
|
35 |
+
# prefer format if you want to just "fix" it and only get the errors that can't be autofixed
|
36 |
+
poetry run format # Black + isort
|
37 |
+
poetry run lint # ruff
|
38 |
+
```
|
39 |
+
More details can be found in TESTING.md
|
40 |
+
|
41 |
+
#### Creating/Updating Snapshots
|
42 |
+
|
43 |
+
When you first write a test or when the expected output changes:
|
44 |
+
|
45 |
+
```bash
|
46 |
+
poetry run pytest path/to/test.py --snapshot-update
|
47 |
+
```
|
48 |
+
|
49 |
+
⚠️ **Important**: Always review snapshot changes before committing! Use `git diff` to verify the changes are expected.
|
50 |
+
|
51 |
+
|
52 |
+
### Frontend Development
|
53 |
+
```bash
|
54 |
+
# Install dependencies
|
55 |
+
cd frontend && npm install
|
56 |
+
|
57 |
+
# Start development server
|
58 |
+
npm run dev
|
59 |
+
|
60 |
+
# Run E2E tests
|
61 |
+
npm run test
|
62 |
+
|
63 |
+
# Run Storybook for component development
|
64 |
+
npm run storybook
|
65 |
+
|
66 |
+
# Build production
|
67 |
+
npm run build
|
68 |
+
|
69 |
+
# Type checking
|
70 |
+
npm run type-check
|
71 |
+
```
|
72 |
+
|
73 |
+
## Architecture Overview
|
74 |
+
|
75 |
+
### Backend Architecture
|
76 |
+
- **API Layer**: FastAPI with REST and WebSocket endpoints
|
77 |
+
- **Database**: PostgreSQL with Prisma ORM, includes pgvector for embeddings
|
78 |
+
- **Queue System**: RabbitMQ for async task processing
|
79 |
+
- **Execution Engine**: Separate executor service processes agent workflows
|
80 |
+
- **Authentication**: JWT-based with Supabase integration
|
81 |
+
- **Security**: Cache protection middleware prevents sensitive data caching in browsers/proxies
|
82 |
+
|
83 |
+
### Frontend Architecture
|
84 |
+
- **Framework**: Next.js App Router with React Server Components
|
85 |
+
- **State Management**: React hooks + Supabase client for real-time updates
|
86 |
+
- **Workflow Builder**: Visual graph editor using @xyflow/react
|
87 |
+
- **UI Components**: Radix UI primitives with Tailwind CSS styling
|
88 |
+
- **Feature Flags**: LaunchDarkly integration
|
89 |
+
|
90 |
+
### Key Concepts
|
91 |
+
1. **Agent Graphs**: Workflow definitions stored as JSON, executed by the backend
|
92 |
+
2. **Blocks**: Reusable components in `/backend/blocks/` that perform specific tasks
|
93 |
+
3. **Integrations**: OAuth and API connections stored per user
|
94 |
+
4. **Store**: Marketplace for sharing agent templates
|
95 |
+
5. **Virus Scanning**: ClamAV integration for file upload security
|
96 |
+
|
97 |
+
### Testing Approach
|
98 |
+
- Backend uses pytest with snapshot testing for API responses
|
99 |
+
- Test files are colocated with source files (`*_test.py`)
|
100 |
+
- Frontend uses Playwright for E2E tests
|
101 |
+
- Component testing via Storybook
|
102 |
+
|
103 |
+
### Database Schema
|
104 |
+
Key models (defined in `/backend/schema.prisma`):
|
105 |
+
- `User`: Authentication and profile data
|
106 |
+
- `AgentGraph`: Workflow definitions with version control
|
107 |
+
- `AgentGraphExecution`: Execution history and results
|
108 |
+
- `AgentNode`: Individual nodes in a workflow
|
109 |
+
- `StoreListing`: Marketplace listings for sharing agents
|
110 |
+
|
111 |
+
### Environment Configuration
|
112 |
+
- Backend: `.env` file in `/backend`
|
113 |
+
- Frontend: `.env.local` file in `/frontend`
|
114 |
+
- Both require Supabase credentials and API keys for various services
|
115 |
+
|
116 |
+
### Common Development Tasks
|
117 |
+
|
118 |
+
**Adding a new block:**
|
119 |
+
1. Create new file in `/backend/backend/blocks/`
|
120 |
+
2. Inherit from `Block` base class
|
121 |
+
3. Define input/output schemas
|
122 |
+
4. Implement `run` method
|
123 |
+
5. Register in block registry
|
124 |
+
|
125 |
+
**Modifying the API:**
|
126 |
+
1. Update route in `/backend/backend/server/routers/`
|
127 |
+
2. Add/update Pydantic models in same directory
|
128 |
+
3. Write tests alongside the route file
|
129 |
+
4. Run `poetry run test` to verify
|
130 |
+
|
131 |
+
**Frontend feature development:**
|
132 |
+
1. Components go in `/frontend/src/components/`
|
133 |
+
2. Use existing UI components from `/frontend/src/components/ui/`
|
134 |
+
3. Add Storybook stories for new components
|
135 |
+
4. Test with Playwright if user-facing
|
136 |
+
|
137 |
+
### Security Implementation
|
138 |
+
|
139 |
+
**Cache Protection Middleware:**
|
140 |
+
- Located in `/backend/backend/server/middleware/security.py`
|
141 |
+
- Default behavior: Disables caching for ALL endpoints with `Cache-Control: no-store, no-cache, must-revalidate, private`
|
142 |
+
- Uses an allow list approach - only explicitly permitted paths can be cached
|
143 |
+
- Cacheable paths include: static assets (`/static/*`, `/_next/static/*`), health checks, public store pages, documentation
|
144 |
+
- Prevents sensitive data (auth tokens, API keys, user data) from being cached by browsers/proxies
|
145 |
+
- To allow caching for a new endpoint, add it to `CACHEABLE_PATHS` in the middleware
|
146 |
+
- Applied to both main API server and external API applications
|
autogpt_platform/Contributor License Agreement (CLA).md
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
**Determinist Ltd**
|
2 |
+
|
3 |
+
**Contributor License Agreement (“Agreement”)**
|
4 |
+
|
5 |
+
Thank you for your interest in the AutoGPT open source project at [https://github.com/Significant-Gravitas/AutoGPT](https://github.com/Significant-Gravitas/AutoGPT) stewarded by Determinist Ltd (“**Determinist**”), with offices at 3rd Floor 1 Ashley Road, Altrincham, Cheshire, WA14 2DT, United Kingdom. The form of license below is a document that clarifies the terms under which You, the person listed below, may contribute software code described below (the “**Contribution**”) to the project. We appreciate your participation in our project, and your help in improving our products, so we want you to understand what will be done with the Contributions. This license is for your protection as well as the protection of Determinist and its licensees; it does not change your rights to use your own Contributions for any other purpose.
|
6 |
+
|
7 |
+
By submitting a Pull Request which modifies the content of the “autogpt\_platform” folder at [https://github.com/Significant-Gravitas/AutoGPT/tree/master/autogpt\_platform](https://github.com/Significant-Gravitas/AutoGPT/tree/master/autogpt_platform), You hereby agree:
|
8 |
+
|
9 |
+
1\. **You grant us the ability to use the Contributions in any way**. You hereby grant to Determinist a non-exclusive, irrevocable, worldwide, royalty-free, sublicenseable, transferable license under all of Your relevant intellectual property rights (including copyright, patent, and any other rights), to use, copy, prepare derivative works of, distribute and publicly perform and display the Contributions on any licensing terms, including without limitation: (a) open source licenses like the GNU General Public License (GPL), the GNU Lesser General Public License (LGPL), the Common Public License, or the Berkeley Science Division license (BSD); and (b) binary, proprietary, or commercial licenses.
|
10 |
+
|
11 |
+
2\. **Grant of Patent License**. You hereby grant to Determinist a worldwide, non-exclusive, royalty-free, irrevocable, license, under any rights you may have, now or in the future, in any patents or patent applications, to make, have made, use, offer to sell, sell, and import products containing the Contribution or portions of the Contribution. This license extends to patent claims that are infringed by the Contribution alone or by combination of the Contribution with other inventions.
|
12 |
+
|
13 |
+
4\. **Limitations on Licenses**. The licenses granted in this Agreement will continue for the duration of the applicable patent or intellectual property right under which such license is granted. The licenses granted in this Agreement will include the right to grant and authorize sublicenses, so long as the sublicenses are within the scope of the licenses granted in this Agreement. Except for the licenses granted herein, You reserve all right, title, and interest in and to the Contribution.
|
14 |
+
|
15 |
+
5\. **You are able to grant us these rights**. You represent that You are legally entitled to grant the above license. If Your employer has rights to intellectual property that You create, You represent that You are authorized to make the Contributions on behalf of that employer, or that Your employer has waived such rights for the Contributions.
|
16 |
+
|
17 |
+
3\. **The Contributions are your original work**. You represent that the Contributions are Your original works of authorship, and to Your knowledge, no other person claims, or has the right to claim, any right in any invention or patent related to the Contributions. You also represent that You are not legally obligated, whether by entering into an agreement or otherwise, in any way that conflicts with the terms of this license. For example, if you have signed an agreement requiring you to assign the intellectual property rights in the Contributions to an employer or customer, that would conflict with the terms of this license.
|
18 |
+
|
19 |
+
6\. **We determine the code that is in our products**. You understand that the decision to include the Contribution in any product or source repository is entirely that of Determinist, and this agreement does not guarantee that the Contributions will be included in any product.
|
20 |
+
|
21 |
+
7\. **No Implied Warranties.** Determinist acknowledges that, except as explicitly described in this Agreement, the Contribution is provided on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
|
autogpt_platform/LICENSE.md
ADDED
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# PolyForm Shield License 1.0.0
|
2 |
+
|
3 |
+
<https://polyformproject.org/licenses/shield/1.0.0>
|
4 |
+
|
5 |
+
## Acceptance
|
6 |
+
|
7 |
+
In order to get any license under these terms, you must agree
|
8 |
+
to them as both strict obligations and conditions to all
|
9 |
+
your licenses.
|
10 |
+
|
11 |
+
## Copyright License
|
12 |
+
|
13 |
+
The licensor grants you a copyright license for the
|
14 |
+
software to do everything you might do with the software
|
15 |
+
that would otherwise infringe the licensor's copyright
|
16 |
+
in it for any permitted purpose. However, you may
|
17 |
+
only distribute the software according to [Distribution
|
18 |
+
License](#distribution-license) and make changes or new works
|
19 |
+
based on the software according to [Changes and New Works
|
20 |
+
License](#changes-and-new-works-license).
|
21 |
+
|
22 |
+
## Distribution License
|
23 |
+
|
24 |
+
The licensor grants you an additional copyright license
|
25 |
+
to distribute copies of the software. Your license
|
26 |
+
to distribute covers distributing the software with
|
27 |
+
changes and new works permitted by [Changes and New Works
|
28 |
+
License](#changes-and-new-works-license).
|
29 |
+
|
30 |
+
## Notices
|
31 |
+
|
32 |
+
You must ensure that anyone who gets a copy of any part of
|
33 |
+
the software from you also gets a copy of these terms or the
|
34 |
+
URL for them above, as well as copies of any plain-text lines
|
35 |
+
beginning with `Required Notice:` that the licensor provided
|
36 |
+
with the software. For example:
|
37 |
+
|
38 |
+
> Required Notice: Copyright Yoyodyne, Inc. (http://example.com)
|
39 |
+
|
40 |
+
## Changes and New Works License
|
41 |
+
|
42 |
+
The licensor grants you an additional copyright license to
|
43 |
+
make changes and new works based on the software for any
|
44 |
+
permitted purpose.
|
45 |
+
|
46 |
+
## Patent License
|
47 |
+
|
48 |
+
The licensor grants you a patent license for the software that
|
49 |
+
covers patent claims the licensor can license, or becomes able
|
50 |
+
to license, that you would infringe by using the software.
|
51 |
+
|
52 |
+
## Noncompete
|
53 |
+
|
54 |
+
Any purpose is a permitted purpose, except for providing any
|
55 |
+
product that competes with the software or any product the
|
56 |
+
licensor or any of its affiliates provides using the software.
|
57 |
+
|
58 |
+
## Competition
|
59 |
+
|
60 |
+
Goods and services compete even when they provide functionality
|
61 |
+
through different kinds of interfaces or for different technical
|
62 |
+
platforms. Applications can compete with services, libraries
|
63 |
+
with plugins, frameworks with development tools, and so on,
|
64 |
+
even if they're written in different programming languages
|
65 |
+
or for different computer architectures. Goods and services
|
66 |
+
compete even when provided free of charge. If you market a
|
67 |
+
product as a practical substitute for the software or another
|
68 |
+
product, it definitely competes.
|
69 |
+
|
70 |
+
## New Products
|
71 |
+
|
72 |
+
If you are using the software to provide a product that does
|
73 |
+
not compete, but the licensor or any of its affiliates brings
|
74 |
+
your product into competition by providing a new version of
|
75 |
+
the software or another product using the software, you may
|
76 |
+
continue using versions of the software available under these
|
77 |
+
terms beforehand to provide your competing product, but not
|
78 |
+
any later versions.
|
79 |
+
|
80 |
+
## Discontinued Products
|
81 |
+
|
82 |
+
You may begin using the software to compete with a product
|
83 |
+
or service that the licensor or any of its affiliates has
|
84 |
+
stopped providing, unless the licensor includes a plain-text
|
85 |
+
line beginning with `Licensor Line of Business:` with the
|
86 |
+
software that mentions that line of business. For example:
|
87 |
+
|
88 |
+
> Licensor Line of Business: YoyodyneCMS Content Management
|
89 |
+
System (http://example.com/cms)
|
90 |
+
|
91 |
+
## Sales of Business
|
92 |
+
|
93 |
+
If the licensor or any of its affiliates sells a line of
|
94 |
+
business developing the software or using the software
|
95 |
+
to provide a product, the buyer can also enforce
|
96 |
+
[Noncompete](#noncompete) for that product.
|
97 |
+
|
98 |
+
## Fair Use
|
99 |
+
|
100 |
+
You may have "fair use" rights for the software under the
|
101 |
+
law. These terms do not limit them.
|
102 |
+
|
103 |
+
## No Other Rights
|
104 |
+
|
105 |
+
These terms do not allow you to sublicense or transfer any of
|
106 |
+
your licenses to anyone else, or prevent the licensor from
|
107 |
+
granting licenses to anyone else. These terms do not imply
|
108 |
+
any other licenses.
|
109 |
+
|
110 |
+
## Patent Defense
|
111 |
+
|
112 |
+
If you make any written claim that the software infringes or
|
113 |
+
contributes to infringement of any patent, your patent license
|
114 |
+
for the software granted under these terms ends immediately. If
|
115 |
+
your company makes such a claim, your patent license ends
|
116 |
+
immediately for work on behalf of your company.
|
117 |
+
|
118 |
+
## Violations
|
119 |
+
|
120 |
+
The first time you are notified in writing that you have
|
121 |
+
violated any of these terms, or done anything with the software
|
122 |
+
not covered by your licenses, your licenses can nonetheless
|
123 |
+
continue if you come into full compliance with these terms,
|
124 |
+
and take practical steps to correct past violations, within
|
125 |
+
32 days of receiving notice. Otherwise, all your licenses
|
126 |
+
end immediately.
|
127 |
+
|
128 |
+
## No Liability
|
129 |
+
|
130 |
+
***As far as the law allows, the software comes as is, without
|
131 |
+
any warranty or condition, and the licensor will not be liable
|
132 |
+
to you for any damages arising out of these terms or the use
|
133 |
+
or nature of the software, under any kind of legal claim.***
|
134 |
+
|
135 |
+
## Definitions
|
136 |
+
|
137 |
+
The **licensor** is the individual or entity offering these
|
138 |
+
terms, and the **software** is the software the licensor makes
|
139 |
+
available under these terms.
|
140 |
+
|
141 |
+
A **product** can be a good or service, or a combination
|
142 |
+
of them.
|
143 |
+
|
144 |
+
**You** refers to the individual or entity agreeing to these
|
145 |
+
terms.
|
146 |
+
|
147 |
+
**Your company** is any legal entity, sole proprietorship,
|
148 |
+
or other kind of organization that you work for, plus all
|
149 |
+
its affiliates.
|
150 |
+
|
151 |
+
**Affiliates** means the other organizations than an
|
152 |
+
organization has control over, is under the control of, or is
|
153 |
+
under common control with.
|
154 |
+
|
155 |
+
**Control** means ownership of substantially all the assets of
|
156 |
+
an entity, or the power to direct its management and policies
|
157 |
+
by vote, contract, or otherwise. Control can be direct or
|
158 |
+
indirect.
|
159 |
+
|
160 |
+
**Your licenses** are all the licenses granted to you for the
|
161 |
+
software under these terms.
|
162 |
+
|
163 |
+
**Use** means anything you do with the software requiring one
|
164 |
+
of your licenses.
|
autogpt_platform/README.md
ADDED
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# AutoGPT Platform
|
2 |
+
|
3 |
+
Welcome to the AutoGPT Platform - a powerful system for creating and running AI agents to solve business problems. This platform enables you to harness the power of artificial intelligence to automate tasks, analyze data, and generate insights for your organization.
|
4 |
+
|
5 |
+
## Getting Started
|
6 |
+
|
7 |
+
### Prerequisites
|
8 |
+
|
9 |
+
- Docker
|
10 |
+
- Docker Compose V2 (comes with Docker Desktop, or can be installed separately)
|
11 |
+
- Node.js & NPM (for running the frontend application)
|
12 |
+
|
13 |
+
### Running the System
|
14 |
+
|
15 |
+
To run the AutoGPT Platform, follow these steps:
|
16 |
+
|
17 |
+
1. Clone this repository to your local machine and navigate to the `autogpt_platform` directory within the repository:
|
18 |
+
|
19 |
+
```
|
20 |
+
git clone <https://github.com/Significant-Gravitas/AutoGPT.git | [email protected]:Significant-Gravitas/AutoGPT.git>
|
21 |
+
cd AutoGPT/autogpt_platform
|
22 |
+
```
|
23 |
+
|
24 |
+
2. Run the following command:
|
25 |
+
|
26 |
+
```
|
27 |
+
cp .env.example .env
|
28 |
+
```
|
29 |
+
|
30 |
+
This command will copy the `.env.example` file to `.env`. You can modify the `.env` file to add your own environment variables.
|
31 |
+
|
32 |
+
3. Run the following command:
|
33 |
+
|
34 |
+
```
|
35 |
+
docker compose up -d
|
36 |
+
```
|
37 |
+
|
38 |
+
This command will start all the necessary backend services defined in the `docker-compose.yml` file in detached mode.
|
39 |
+
|
40 |
+
4. Navigate to `frontend` within the `autogpt_platform` directory:
|
41 |
+
|
42 |
+
```
|
43 |
+
cd frontend
|
44 |
+
```
|
45 |
+
|
46 |
+
You will need to run your frontend application separately on your local machine.
|
47 |
+
|
48 |
+
5. Run the following command:
|
49 |
+
|
50 |
+
```
|
51 |
+
cp .env.example .env.local
|
52 |
+
```
|
53 |
+
|
54 |
+
This command will copy the `.env.example` file to `.env.local` in the `frontend` directory. You can modify the `.env.local` within this folder to add your own environment variables for the frontend application.
|
55 |
+
|
56 |
+
6. Run the following command:
|
57 |
+
|
58 |
+
Enable corepack and install dependencies by running:
|
59 |
+
|
60 |
+
```
|
61 |
+
corepack enable
|
62 |
+
pnpm i
|
63 |
+
```
|
64 |
+
|
65 |
+
Generate the API client (this step is required before running the frontend):
|
66 |
+
|
67 |
+
```
|
68 |
+
pnpm generate:api-client
|
69 |
+
```
|
70 |
+
|
71 |
+
Then start the frontend application in development mode:
|
72 |
+
|
73 |
+
```
|
74 |
+
pnpm dev
|
75 |
+
```
|
76 |
+
|
77 |
+
7. Open your browser and navigate to `http://localhost:3000` to access the AutoGPT Platform frontend.
|
78 |
+
|
79 |
+
### Docker Compose Commands
|
80 |
+
|
81 |
+
Here are some useful Docker Compose commands for managing your AutoGPT Platform:
|
82 |
+
|
83 |
+
- `docker compose up -d`: Start the services in detached mode.
|
84 |
+
- `docker compose stop`: Stop the running services without removing them.
|
85 |
+
- `docker compose rm`: Remove stopped service containers.
|
86 |
+
- `docker compose build`: Build or rebuild services.
|
87 |
+
- `docker compose down`: Stop and remove containers, networks, and volumes.
|
88 |
+
- `docker compose watch`: Watch for changes in your services and automatically update them.
|
89 |
+
|
90 |
+
### Sample Scenarios
|
91 |
+
|
92 |
+
Here are some common scenarios where you might use multiple Docker Compose commands:
|
93 |
+
|
94 |
+
1. Updating and restarting a specific service:
|
95 |
+
|
96 |
+
```
|
97 |
+
docker compose build api_srv
|
98 |
+
docker compose up -d --no-deps api_srv
|
99 |
+
```
|
100 |
+
|
101 |
+
This rebuilds the `api_srv` service and restarts it without affecting other services.
|
102 |
+
|
103 |
+
2. Viewing logs for troubleshooting:
|
104 |
+
|
105 |
+
```
|
106 |
+
docker compose logs -f api_srv ws_srv
|
107 |
+
```
|
108 |
+
|
109 |
+
This shows and follows the logs for both `api_srv` and `ws_srv` services.
|
110 |
+
|
111 |
+
3. Scaling a service for increased load:
|
112 |
+
|
113 |
+
```
|
114 |
+
docker compose up -d --scale executor=3
|
115 |
+
```
|
116 |
+
|
117 |
+
This scales the `executor` service to 3 instances to handle increased load.
|
118 |
+
|
119 |
+
4. Stopping the entire system for maintenance:
|
120 |
+
|
121 |
+
```
|
122 |
+
docker compose stop
|
123 |
+
docker compose rm -f
|
124 |
+
docker compose pull
|
125 |
+
docker compose up -d
|
126 |
+
```
|
127 |
+
|
128 |
+
This stops all services, removes containers, pulls the latest images, and restarts the system.
|
129 |
+
|
130 |
+
5. Developing with live updates:
|
131 |
+
|
132 |
+
```
|
133 |
+
docker compose watch
|
134 |
+
```
|
135 |
+
|
136 |
+
This watches for changes in your code and automatically updates the relevant services.
|
137 |
+
|
138 |
+
6. Checking the status of services:
|
139 |
+
```
|
140 |
+
docker compose ps
|
141 |
+
```
|
142 |
+
This shows the current status of all services defined in your docker-compose.yml file.
|
143 |
+
|
144 |
+
These scenarios demonstrate how to use Docker Compose commands in combination to manage your AutoGPT Platform effectively.
|
145 |
+
|
146 |
+
### Persisting Data
|
147 |
+
|
148 |
+
To persist data for PostgreSQL and Redis, you can modify the `docker-compose.yml` file to add volumes. Here's how:
|
149 |
+
|
150 |
+
1. Open the `docker-compose.yml` file in a text editor.
|
151 |
+
2. Add volume configurations for PostgreSQL and Redis services:
|
152 |
+
|
153 |
+
```yaml
|
154 |
+
services:
|
155 |
+
postgres:
|
156 |
+
# ... other configurations ...
|
157 |
+
volumes:
|
158 |
+
- postgres_data:/var/lib/postgresql/data
|
159 |
+
|
160 |
+
redis:
|
161 |
+
# ... other configurations ...
|
162 |
+
volumes:
|
163 |
+
- redis_data:/data
|
164 |
+
|
165 |
+
volumes:
|
166 |
+
postgres_data:
|
167 |
+
redis_data:
|
168 |
+
```
|
169 |
+
|
170 |
+
3. Save the file and run `docker compose up -d` to apply the changes.
|
171 |
+
|
172 |
+
This configuration will create named volumes for PostgreSQL and Redis, ensuring that your data persists across container restarts.
|
173 |
+
|
174 |
+
### API Client Generation
|
175 |
+
|
176 |
+
The platform includes scripts for generating and managing the API client:
|
177 |
+
|
178 |
+
- `pnpm fetch:openapi`: Fetches the OpenAPI specification from the backend service (requires backend to be running on port 8006)
|
179 |
+
- `pnpm generate:api-client`: Generates the TypeScript API client from the OpenAPI specification using Orval
|
180 |
+
- `pnpm generate:api-all`: Runs both fetch and generate commands in sequence
|
181 |
+
|
182 |
+
#### Manual API Client Updates
|
183 |
+
|
184 |
+
If you need to update the API client after making changes to the backend API:
|
185 |
+
|
186 |
+
1. Ensure the backend services are running:
|
187 |
+
```
|
188 |
+
docker compose up -d
|
189 |
+
```
|
190 |
+
|
191 |
+
2. Generate the updated API client:
|
192 |
+
```
|
193 |
+
pnpm generate:api-all
|
194 |
+
```
|
195 |
+
|
196 |
+
This will fetch the latest OpenAPI specification and regenerate the TypeScript client code.
|
autogpt_platform/__init__.py
ADDED
File without changes
|
autogpt_platform/autogpt_libs/README.md
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
# AutoGPT Libs
|
2 |
+
|
3 |
+
This is a new project to store shared functionality across different services in the AutoGPT Platform (e.g. authentication)
|
autogpt_platform/autogpt_libs/autogpt_libs/__init__.py
ADDED
File without changes
|
autogpt_platform/autogpt_libs/autogpt_libs/api_key/key_manager.py
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import hashlib
|
2 |
+
import secrets
|
3 |
+
from typing import NamedTuple
|
4 |
+
|
5 |
+
|
6 |
+
class APIKeyContainer(NamedTuple):
|
7 |
+
"""Container for API key parts."""
|
8 |
+
|
9 |
+
raw: str
|
10 |
+
prefix: str
|
11 |
+
postfix: str
|
12 |
+
hash: str
|
13 |
+
|
14 |
+
|
15 |
+
class APIKeyManager:
|
16 |
+
PREFIX: str = "agpt_"
|
17 |
+
PREFIX_LENGTH: int = 8
|
18 |
+
POSTFIX_LENGTH: int = 8
|
19 |
+
|
20 |
+
def generate_api_key(self) -> APIKeyContainer:
|
21 |
+
"""Generate a new API key with all its parts."""
|
22 |
+
raw_key = f"{self.PREFIX}{secrets.token_urlsafe(32)}"
|
23 |
+
return APIKeyContainer(
|
24 |
+
raw=raw_key,
|
25 |
+
prefix=raw_key[: self.PREFIX_LENGTH],
|
26 |
+
postfix=raw_key[-self.POSTFIX_LENGTH :],
|
27 |
+
hash=hashlib.sha256(raw_key.encode()).hexdigest(),
|
28 |
+
)
|
29 |
+
|
30 |
+
def verify_api_key(self, provided_key: str, stored_hash: str) -> bool:
|
31 |
+
"""Verify if a provided API key matches the stored hash."""
|
32 |
+
if not provided_key.startswith(self.PREFIX):
|
33 |
+
return False
|
34 |
+
provided_hash = hashlib.sha256(provided_key.encode()).hexdigest()
|
35 |
+
return secrets.compare_digest(provided_hash, stored_hash)
|
autogpt_platform/autogpt_libs/autogpt_libs/auth/__init__.py
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from .depends import requires_admin_user, requires_user
|
2 |
+
from .jwt_utils import parse_jwt_token
|
3 |
+
from .middleware import APIKeyValidator, auth_middleware
|
4 |
+
from .models import User
|
5 |
+
|
6 |
+
__all__ = [
|
7 |
+
"parse_jwt_token",
|
8 |
+
"requires_user",
|
9 |
+
"requires_admin_user",
|
10 |
+
"APIKeyValidator",
|
11 |
+
"auth_middleware",
|
12 |
+
"User",
|
13 |
+
]
|
autogpt_platform/autogpt_libs/autogpt_libs/auth/config.py
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
|
3 |
+
|
4 |
+
class Settings:
|
5 |
+
def __init__(self):
|
6 |
+
self.JWT_SECRET_KEY: str = os.getenv("SUPABASE_JWT_SECRET", "")
|
7 |
+
self.ENABLE_AUTH: bool = os.getenv("ENABLE_AUTH", "false").lower() == "true"
|
8 |
+
self.JWT_ALGORITHM: str = "HS256"
|
9 |
+
|
10 |
+
@property
|
11 |
+
def is_configured(self) -> bool:
|
12 |
+
return bool(self.JWT_SECRET_KEY)
|
13 |
+
|
14 |
+
|
15 |
+
settings = Settings()
|
autogpt_platform/autogpt_libs/autogpt_libs/auth/depends.py
ADDED
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import fastapi
|
2 |
+
|
3 |
+
from .config import settings
|
4 |
+
from .middleware import auth_middleware
|
5 |
+
from .models import DEFAULT_USER_ID, User
|
6 |
+
|
7 |
+
|
8 |
+
def requires_user(payload: dict = fastapi.Depends(auth_middleware)) -> User:
|
9 |
+
return verify_user(payload, admin_only=False)
|
10 |
+
|
11 |
+
|
12 |
+
def requires_admin_user(
|
13 |
+
payload: dict = fastapi.Depends(auth_middleware),
|
14 |
+
) -> User:
|
15 |
+
return verify_user(payload, admin_only=True)
|
16 |
+
|
17 |
+
|
18 |
+
def verify_user(payload: dict | None, admin_only: bool) -> User:
|
19 |
+
if not payload:
|
20 |
+
if settings.ENABLE_AUTH:
|
21 |
+
raise fastapi.HTTPException(
|
22 |
+
status_code=401, detail="Authorization header is missing"
|
23 |
+
)
|
24 |
+
# This handles the case when authentication is disabled
|
25 |
+
payload = {"sub": DEFAULT_USER_ID, "role": "admin"}
|
26 |
+
|
27 |
+
user_id = payload.get("sub")
|
28 |
+
|
29 |
+
if not user_id:
|
30 |
+
raise fastapi.HTTPException(
|
31 |
+
status_code=401, detail="User ID not found in token"
|
32 |
+
)
|
33 |
+
|
34 |
+
if admin_only and payload["role"] != "admin":
|
35 |
+
raise fastapi.HTTPException(status_code=403, detail="Admin access required")
|
36 |
+
|
37 |
+
return User.from_payload(payload)
|
38 |
+
|
39 |
+
|
40 |
+
def get_user_id(payload: dict = fastapi.Depends(auth_middleware)) -> str:
|
41 |
+
user_id = payload.get("sub")
|
42 |
+
if not user_id:
|
43 |
+
raise fastapi.HTTPException(
|
44 |
+
status_code=401, detail="User ID not found in token"
|
45 |
+
)
|
46 |
+
return user_id
|
autogpt_platform/autogpt_libs/autogpt_libs/auth/depends_tests.py
ADDED
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pytest
|
2 |
+
|
3 |
+
from .depends import requires_admin_user, requires_user, verify_user
|
4 |
+
|
5 |
+
|
6 |
+
def test_verify_user_no_payload():
|
7 |
+
user = verify_user(None, admin_only=False)
|
8 |
+
assert user.user_id == "3e53486c-cf57-477e-ba2a-cb02dc828e1a"
|
9 |
+
assert user.role == "admin"
|
10 |
+
|
11 |
+
|
12 |
+
def test_verify_user_no_user_id():
|
13 |
+
with pytest.raises(Exception):
|
14 |
+
verify_user({"role": "admin"}, admin_only=False)
|
15 |
+
|
16 |
+
|
17 |
+
def test_verify_user_not_admin():
|
18 |
+
with pytest.raises(Exception):
|
19 |
+
verify_user(
|
20 |
+
{"sub": "3e53486c-cf57-477e-ba2a-cb02dc828e1a", "role": "user"},
|
21 |
+
admin_only=True,
|
22 |
+
)
|
23 |
+
|
24 |
+
|
25 |
+
def test_verify_user_with_admin_role():
|
26 |
+
user = verify_user(
|
27 |
+
{"sub": "3e53486c-cf57-477e-ba2a-cb02dc828e1a", "role": "admin"},
|
28 |
+
admin_only=True,
|
29 |
+
)
|
30 |
+
assert user.user_id == "3e53486c-cf57-477e-ba2a-cb02dc828e1a"
|
31 |
+
assert user.role == "admin"
|
32 |
+
|
33 |
+
|
34 |
+
def test_verify_user_with_user_role():
|
35 |
+
user = verify_user(
|
36 |
+
{"sub": "3e53486c-cf57-477e-ba2a-cb02dc828e1a", "role": "user"},
|
37 |
+
admin_only=False,
|
38 |
+
)
|
39 |
+
assert user.user_id == "3e53486c-cf57-477e-ba2a-cb02dc828e1a"
|
40 |
+
assert user.role == "user"
|
41 |
+
|
42 |
+
|
43 |
+
def test_requires_user():
|
44 |
+
user = requires_user(
|
45 |
+
{"sub": "3e53486c-cf57-477e-ba2a-cb02dc828e1a", "role": "user"}
|
46 |
+
)
|
47 |
+
assert user.user_id == "3e53486c-cf57-477e-ba2a-cb02dc828e1a"
|
48 |
+
assert user.role == "user"
|
49 |
+
|
50 |
+
|
51 |
+
def test_requires_user_no_user_id():
|
52 |
+
with pytest.raises(Exception):
|
53 |
+
requires_user({"role": "user"})
|
54 |
+
|
55 |
+
|
56 |
+
def test_requires_admin_user():
|
57 |
+
user = requires_admin_user(
|
58 |
+
{"sub": "3e53486c-cf57-477e-ba2a-cb02dc828e1a", "role": "admin"}
|
59 |
+
)
|
60 |
+
assert user.user_id == "3e53486c-cf57-477e-ba2a-cb02dc828e1a"
|
61 |
+
assert user.role == "admin"
|
62 |
+
|
63 |
+
|
64 |
+
def test_requires_admin_user_not_admin():
|
65 |
+
with pytest.raises(Exception):
|
66 |
+
requires_admin_user(
|
67 |
+
{"sub": "3e53486c-cf57-477e-ba2a-cb02dc828e1a", "role": "user"}
|
68 |
+
)
|
autogpt_platform/autogpt_libs/autogpt_libs/auth/jwt_utils.py
ADDED
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from typing import Any, Dict
|
2 |
+
|
3 |
+
import jwt
|
4 |
+
|
5 |
+
from .config import settings
|
6 |
+
|
7 |
+
|
8 |
+
def parse_jwt_token(token: str) -> Dict[str, Any]:
|
9 |
+
"""
|
10 |
+
Parse and validate a JWT token.
|
11 |
+
|
12 |
+
:param token: The token to parse
|
13 |
+
:return: The decoded payload
|
14 |
+
:raises ValueError: If the token is invalid or expired
|
15 |
+
"""
|
16 |
+
try:
|
17 |
+
payload = jwt.decode(
|
18 |
+
token,
|
19 |
+
settings.JWT_SECRET_KEY,
|
20 |
+
algorithms=[settings.JWT_ALGORITHM],
|
21 |
+
audience="authenticated",
|
22 |
+
)
|
23 |
+
return payload
|
24 |
+
except jwt.ExpiredSignatureError:
|
25 |
+
raise ValueError("Token has expired")
|
26 |
+
except jwt.InvalidTokenError as e:
|
27 |
+
raise ValueError(f"Invalid token: {str(e)}")
|
autogpt_platform/autogpt_libs/autogpt_libs/auth/middleware.py
ADDED
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import inspect
|
2 |
+
import logging
|
3 |
+
import secrets
|
4 |
+
from typing import Any, Callable, Optional
|
5 |
+
|
6 |
+
from fastapi import HTTPException, Request, Security
|
7 |
+
from fastapi.security import APIKeyHeader, HTTPBearer
|
8 |
+
from starlette.status import HTTP_401_UNAUTHORIZED
|
9 |
+
|
10 |
+
from .config import settings
|
11 |
+
from .jwt_utils import parse_jwt_token
|
12 |
+
|
13 |
+
security = HTTPBearer()
|
14 |
+
logger = logging.getLogger(__name__)
|
15 |
+
|
16 |
+
|
17 |
+
async def auth_middleware(request: Request):
|
18 |
+
if not settings.ENABLE_AUTH:
|
19 |
+
# If authentication is disabled, allow the request to proceed
|
20 |
+
logger.warning("Auth disabled")
|
21 |
+
return {}
|
22 |
+
|
23 |
+
security = HTTPBearer()
|
24 |
+
credentials = await security(request)
|
25 |
+
|
26 |
+
if not credentials:
|
27 |
+
raise HTTPException(status_code=401, detail="Authorization header is missing")
|
28 |
+
|
29 |
+
try:
|
30 |
+
payload = parse_jwt_token(credentials.credentials)
|
31 |
+
request.state.user = payload
|
32 |
+
logger.debug("Token decoded successfully")
|
33 |
+
except ValueError as e:
|
34 |
+
raise HTTPException(status_code=401, detail=str(e))
|
35 |
+
return payload
|
36 |
+
|
37 |
+
|
38 |
+
class APIKeyValidator:
|
39 |
+
"""
|
40 |
+
Configurable API key validator that supports custom validation functions
|
41 |
+
for FastAPI applications.
|
42 |
+
|
43 |
+
This class provides a flexible way to implement API key authentication with optional
|
44 |
+
custom validation logic. It can be used for simple token matching
|
45 |
+
or more complex validation scenarios like database lookups.
|
46 |
+
|
47 |
+
Examples:
|
48 |
+
Simple token validation:
|
49 |
+
```python
|
50 |
+
validator = APIKeyValidator(
|
51 |
+
header_name="X-API-Key",
|
52 |
+
expected_token="your-secret-token"
|
53 |
+
)
|
54 |
+
|
55 |
+
@app.get("/protected", dependencies=[Depends(validator.get_dependency())])
|
56 |
+
def protected_endpoint():
|
57 |
+
return {"message": "Access granted"}
|
58 |
+
```
|
59 |
+
|
60 |
+
Custom validation with database lookup:
|
61 |
+
```python
|
62 |
+
async def validate_with_db(api_key: str):
|
63 |
+
api_key_obj = await db.get_api_key(api_key)
|
64 |
+
return api_key_obj if api_key_obj and api_key_obj.is_active else None
|
65 |
+
|
66 |
+
validator = APIKeyValidator(
|
67 |
+
header_name="X-API-Key",
|
68 |
+
validate_fn=validate_with_db
|
69 |
+
)
|
70 |
+
```
|
71 |
+
|
72 |
+
Args:
|
73 |
+
header_name (str): The name of the header containing the API key
|
74 |
+
expected_token (Optional[str]): The expected API key value for simple token matching
|
75 |
+
validate_fn (Optional[Callable]): Custom validation function that takes an API key
|
76 |
+
string and returns a boolean or object. Can be async.
|
77 |
+
error_status (int): HTTP status code to use for validation errors
|
78 |
+
error_message (str): Error message to return when validation fails
|
79 |
+
"""
|
80 |
+
|
81 |
+
def __init__(
|
82 |
+
self,
|
83 |
+
header_name: str,
|
84 |
+
expected_token: Optional[str] = None,
|
85 |
+
validate_fn: Optional[Callable[[str], bool]] = None,
|
86 |
+
error_status: int = HTTP_401_UNAUTHORIZED,
|
87 |
+
error_message: str = "Invalid API key",
|
88 |
+
):
|
89 |
+
# Create the APIKeyHeader as a class property
|
90 |
+
self.security_scheme = APIKeyHeader(name=header_name)
|
91 |
+
self.expected_token = expected_token
|
92 |
+
self.custom_validate_fn = validate_fn
|
93 |
+
self.error_status = error_status
|
94 |
+
self.error_message = error_message
|
95 |
+
|
96 |
+
async def default_validator(self, api_key: str) -> bool:
|
97 |
+
if not self.expected_token:
|
98 |
+
raise ValueError(
|
99 |
+
"Expected Token Required to be set when uisng API Key Validator default validation"
|
100 |
+
)
|
101 |
+
return secrets.compare_digest(api_key, self.expected_token)
|
102 |
+
|
103 |
+
async def __call__(
|
104 |
+
self, request: Request, api_key: str = Security(APIKeyHeader)
|
105 |
+
) -> Any:
|
106 |
+
if api_key is None:
|
107 |
+
raise HTTPException(status_code=self.error_status, detail="Missing API key")
|
108 |
+
|
109 |
+
# Use custom validation if provided, otherwise use default equality check
|
110 |
+
validator = self.custom_validate_fn or self.default_validator
|
111 |
+
result = (
|
112 |
+
await validator(api_key)
|
113 |
+
if inspect.iscoroutinefunction(validator)
|
114 |
+
else validator(api_key)
|
115 |
+
)
|
116 |
+
|
117 |
+
if not result:
|
118 |
+
raise HTTPException(
|
119 |
+
status_code=self.error_status, detail=self.error_message
|
120 |
+
)
|
121 |
+
|
122 |
+
# Store validation result in request state if it's not just a boolean
|
123 |
+
if result is not True:
|
124 |
+
request.state.api_key = result
|
125 |
+
|
126 |
+
return result
|
127 |
+
|
128 |
+
def get_dependency(self):
|
129 |
+
"""
|
130 |
+
Returns a callable dependency that FastAPI will recognize as a security scheme
|
131 |
+
"""
|
132 |
+
|
133 |
+
async def validate_api_key(
|
134 |
+
request: Request, api_key: str = Security(self.security_scheme)
|
135 |
+
) -> Any:
|
136 |
+
return await self(request, api_key)
|
137 |
+
|
138 |
+
# This helps FastAPI recognize it as a security dependency
|
139 |
+
validate_api_key.__name__ = f"validate_{self.security_scheme.model.name}"
|
140 |
+
return validate_api_key
|
autogpt_platform/autogpt_libs/autogpt_libs/auth/models.py
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from dataclasses import dataclass
|
2 |
+
|
3 |
+
DEFAULT_USER_ID = "3e53486c-cf57-477e-ba2a-cb02dc828e1a"
|
4 |
+
DEFAULT_EMAIL = "[email protected]"
|
5 |
+
|
6 |
+
|
7 |
+
# Using dataclass here to avoid adding dependency on pydantic
|
8 |
+
@dataclass(frozen=True)
|
9 |
+
class User:
|
10 |
+
user_id: str
|
11 |
+
email: str
|
12 |
+
phone_number: str
|
13 |
+
role: str
|
14 |
+
|
15 |
+
@classmethod
|
16 |
+
def from_payload(cls, payload):
|
17 |
+
return cls(
|
18 |
+
user_id=payload["sub"],
|
19 |
+
email=payload.get("email", ""),
|
20 |
+
phone_number=payload.get("phone", ""),
|
21 |
+
role=payload["role"],
|
22 |
+
)
|
autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/__init__.py
ADDED
File without changes
|
autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/client.py
ADDED
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
import contextlib
|
3 |
+
import logging
|
4 |
+
from functools import wraps
|
5 |
+
from typing import Any, Awaitable, Callable, Dict, Optional, TypeVar, Union, cast
|
6 |
+
|
7 |
+
import ldclient
|
8 |
+
from fastapi import HTTPException
|
9 |
+
from ldclient import Context, LDClient
|
10 |
+
from ldclient.config import Config
|
11 |
+
from typing_extensions import ParamSpec
|
12 |
+
|
13 |
+
from .config import SETTINGS
|
14 |
+
|
15 |
+
logger = logging.getLogger(__name__)
|
16 |
+
|
17 |
+
P = ParamSpec("P")
|
18 |
+
T = TypeVar("T")
|
19 |
+
|
20 |
+
|
21 |
+
def get_client() -> LDClient:
|
22 |
+
"""Get the LaunchDarkly client singleton."""
|
23 |
+
return ldclient.get()
|
24 |
+
|
25 |
+
|
26 |
+
def initialize_launchdarkly() -> None:
|
27 |
+
sdk_key = SETTINGS.launch_darkly_sdk_key
|
28 |
+
logger.debug(
|
29 |
+
f"Initializing LaunchDarkly with SDK key: {'present' if sdk_key else 'missing'}"
|
30 |
+
)
|
31 |
+
|
32 |
+
if not sdk_key:
|
33 |
+
logger.warning("LaunchDarkly SDK key not configured")
|
34 |
+
return
|
35 |
+
|
36 |
+
config = Config(sdk_key)
|
37 |
+
ldclient.set_config(config)
|
38 |
+
|
39 |
+
if ldclient.get().is_initialized():
|
40 |
+
logger.info("LaunchDarkly client initialized successfully")
|
41 |
+
else:
|
42 |
+
logger.error("LaunchDarkly client failed to initialize")
|
43 |
+
|
44 |
+
|
45 |
+
def shutdown_launchdarkly() -> None:
|
46 |
+
"""Shutdown the LaunchDarkly client."""
|
47 |
+
if ldclient.get().is_initialized():
|
48 |
+
ldclient.get().close()
|
49 |
+
logger.info("LaunchDarkly client closed successfully")
|
50 |
+
|
51 |
+
|
52 |
+
def create_context(
|
53 |
+
user_id: str, additional_attributes: Optional[Dict[str, Any]] = None
|
54 |
+
) -> Context:
|
55 |
+
"""Create LaunchDarkly context with optional additional attributes."""
|
56 |
+
builder = Context.builder(str(user_id)).kind("user")
|
57 |
+
if additional_attributes:
|
58 |
+
for key, value in additional_attributes.items():
|
59 |
+
builder.set(key, value)
|
60 |
+
return builder.build()
|
61 |
+
|
62 |
+
|
63 |
+
def feature_flag(
|
64 |
+
flag_key: str,
|
65 |
+
default: bool = False,
|
66 |
+
) -> Callable[
|
67 |
+
[Callable[P, Union[T, Awaitable[T]]]], Callable[P, Union[T, Awaitable[T]]]
|
68 |
+
]:
|
69 |
+
"""
|
70 |
+
Decorator for feature flag protected endpoints.
|
71 |
+
"""
|
72 |
+
|
73 |
+
def decorator(
|
74 |
+
func: Callable[P, Union[T, Awaitable[T]]],
|
75 |
+
) -> Callable[P, Union[T, Awaitable[T]]]:
|
76 |
+
@wraps(func)
|
77 |
+
async def async_wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
|
78 |
+
try:
|
79 |
+
user_id = kwargs.get("user_id")
|
80 |
+
if not user_id:
|
81 |
+
raise ValueError("user_id is required")
|
82 |
+
|
83 |
+
if not get_client().is_initialized():
|
84 |
+
logger.warning(
|
85 |
+
f"LaunchDarkly not initialized, using default={default}"
|
86 |
+
)
|
87 |
+
is_enabled = default
|
88 |
+
else:
|
89 |
+
context = create_context(str(user_id))
|
90 |
+
is_enabled = get_client().variation(flag_key, context, default)
|
91 |
+
|
92 |
+
if not is_enabled:
|
93 |
+
raise HTTPException(status_code=404, detail="Feature not available")
|
94 |
+
|
95 |
+
result = func(*args, **kwargs)
|
96 |
+
if asyncio.iscoroutine(result):
|
97 |
+
return await result
|
98 |
+
return cast(T, result)
|
99 |
+
except Exception as e:
|
100 |
+
logger.error(f"Error evaluating feature flag {flag_key}: {e}")
|
101 |
+
raise
|
102 |
+
|
103 |
+
@wraps(func)
|
104 |
+
def sync_wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
|
105 |
+
try:
|
106 |
+
user_id = kwargs.get("user_id")
|
107 |
+
if not user_id:
|
108 |
+
raise ValueError("user_id is required")
|
109 |
+
|
110 |
+
if not get_client().is_initialized():
|
111 |
+
logger.warning(
|
112 |
+
f"LaunchDarkly not initialized, using default={default}"
|
113 |
+
)
|
114 |
+
is_enabled = default
|
115 |
+
else:
|
116 |
+
context = create_context(str(user_id))
|
117 |
+
is_enabled = get_client().variation(flag_key, context, default)
|
118 |
+
|
119 |
+
if not is_enabled:
|
120 |
+
raise HTTPException(status_code=404, detail="Feature not available")
|
121 |
+
|
122 |
+
return cast(T, func(*args, **kwargs))
|
123 |
+
except Exception as e:
|
124 |
+
logger.error(f"Error evaluating feature flag {flag_key}: {e}")
|
125 |
+
raise
|
126 |
+
|
127 |
+
return cast(
|
128 |
+
Callable[P, Union[T, Awaitable[T]]],
|
129 |
+
async_wrapper if asyncio.iscoroutinefunction(func) else sync_wrapper,
|
130 |
+
)
|
131 |
+
|
132 |
+
return decorator
|
133 |
+
|
134 |
+
|
135 |
+
def percentage_rollout(
|
136 |
+
flag_key: str,
|
137 |
+
default: bool = False,
|
138 |
+
) -> Callable[
|
139 |
+
[Callable[P, Union[T, Awaitable[T]]]], Callable[P, Union[T, Awaitable[T]]]
|
140 |
+
]:
|
141 |
+
"""Decorator for percentage-based rollouts."""
|
142 |
+
return feature_flag(flag_key, default)
|
143 |
+
|
144 |
+
|
145 |
+
def beta_feature(
|
146 |
+
flag_key: Optional[str] = None,
|
147 |
+
unauthorized_response: Any = {"message": "Not available in beta"},
|
148 |
+
) -> Callable[
|
149 |
+
[Callable[P, Union[T, Awaitable[T]]]], Callable[P, Union[T, Awaitable[T]]]
|
150 |
+
]:
|
151 |
+
"""Decorator for beta features."""
|
152 |
+
actual_key = f"beta-{flag_key}" if flag_key else "beta"
|
153 |
+
return feature_flag(actual_key, False)
|
154 |
+
|
155 |
+
|
156 |
+
@contextlib.contextmanager
|
157 |
+
def mock_flag_variation(flag_key: str, return_value: Any):
|
158 |
+
"""Context manager for testing feature flags."""
|
159 |
+
original_variation = get_client().variation
|
160 |
+
get_client().variation = lambda key, context, default: (
|
161 |
+
return_value if key == flag_key else original_variation(key, context, default)
|
162 |
+
)
|
163 |
+
try:
|
164 |
+
yield
|
165 |
+
finally:
|
166 |
+
get_client().variation = original_variation
|
autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/client_test.py
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pytest
|
2 |
+
from ldclient import LDClient
|
3 |
+
|
4 |
+
from autogpt_libs.feature_flag.client import feature_flag, mock_flag_variation
|
5 |
+
|
6 |
+
|
7 |
+
@pytest.fixture
|
8 |
+
def ld_client(mocker):
|
9 |
+
client = mocker.Mock(spec=LDClient)
|
10 |
+
mocker.patch("ldclient.get", return_value=client)
|
11 |
+
client.is_initialized.return_value = True
|
12 |
+
return client
|
13 |
+
|
14 |
+
|
15 |
+
@pytest.mark.asyncio
|
16 |
+
async def test_feature_flag_enabled(ld_client):
|
17 |
+
ld_client.variation.return_value = True
|
18 |
+
|
19 |
+
@feature_flag("test-flag")
|
20 |
+
async def test_function(user_id: str):
|
21 |
+
return "success"
|
22 |
+
|
23 |
+
result = test_function(user_id="test-user")
|
24 |
+
assert result == "success"
|
25 |
+
ld_client.variation.assert_called_once()
|
26 |
+
|
27 |
+
|
28 |
+
@pytest.mark.asyncio
|
29 |
+
async def test_feature_flag_unauthorized_response(ld_client):
|
30 |
+
ld_client.variation.return_value = False
|
31 |
+
|
32 |
+
@feature_flag("test-flag")
|
33 |
+
async def test_function(user_id: str):
|
34 |
+
return "success"
|
35 |
+
|
36 |
+
result = test_function(user_id="test-user")
|
37 |
+
assert result == {"error": "disabled"}
|
38 |
+
|
39 |
+
|
40 |
+
def test_mock_flag_variation(ld_client):
|
41 |
+
with mock_flag_variation("test-flag", True):
|
42 |
+
assert ld_client.variation("test-flag", None, False)
|
43 |
+
|
44 |
+
with mock_flag_variation("test-flag", False):
|
45 |
+
assert ld_client.variation("test-flag", None, False)
|
autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/config.py
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import Field
|
2 |
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
3 |
+
|
4 |
+
|
5 |
+
class Settings(BaseSettings):
|
6 |
+
launch_darkly_sdk_key: str = Field(
|
7 |
+
default="",
|
8 |
+
description="The Launch Darkly SDK key",
|
9 |
+
validation_alias="LAUNCH_DARKLY_SDK_KEY",
|
10 |
+
)
|
11 |
+
|
12 |
+
model_config = SettingsConfigDict(case_sensitive=True, extra="ignore")
|
13 |
+
|
14 |
+
|
15 |
+
SETTINGS = Settings()
|
autogpt_platform/autogpt_libs/autogpt_libs/logging/__init__.py
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from .config import configure_logging
|
2 |
+
from .filters import BelowLevelFilter
|
3 |
+
from .formatters import FancyConsoleFormatter
|
4 |
+
|
5 |
+
__all__ = [
|
6 |
+
"configure_logging",
|
7 |
+
"BelowLevelFilter",
|
8 |
+
"FancyConsoleFormatter",
|
9 |
+
]
|
autogpt_platform/autogpt_libs/autogpt_libs/logging/config.py
ADDED
@@ -0,0 +1,161 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"""Logging module for Auto-GPT."""
|
2 |
+
|
3 |
+
import logging
|
4 |
+
import sys
|
5 |
+
from pathlib import Path
|
6 |
+
|
7 |
+
from pydantic import Field, field_validator
|
8 |
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
9 |
+
|
10 |
+
from .filters import BelowLevelFilter
|
11 |
+
from .formatters import AGPTFormatter
|
12 |
+
|
13 |
+
LOG_DIR = Path(__file__).parent.parent.parent.parent / "logs"
|
14 |
+
LOG_FILE = "activity.log"
|
15 |
+
DEBUG_LOG_FILE = "debug.log"
|
16 |
+
ERROR_LOG_FILE = "error.log"
|
17 |
+
|
18 |
+
SIMPLE_LOG_FORMAT = "%(asctime)s %(levelname)s %(title)s%(message)s"
|
19 |
+
|
20 |
+
DEBUG_LOG_FORMAT = (
|
21 |
+
"%(asctime)s %(levelname)s %(filename)s:%(lineno)d %(title)s%(message)s"
|
22 |
+
)
|
23 |
+
|
24 |
+
|
25 |
+
class LoggingConfig(BaseSettings):
|
26 |
+
level: str = Field(
|
27 |
+
default="INFO",
|
28 |
+
description="Logging level",
|
29 |
+
validation_alias="LOG_LEVEL",
|
30 |
+
)
|
31 |
+
|
32 |
+
enable_cloud_logging: bool = Field(
|
33 |
+
default=False,
|
34 |
+
description="Enable logging to Google Cloud Logging",
|
35 |
+
)
|
36 |
+
|
37 |
+
enable_file_logging: bool = Field(
|
38 |
+
default=False,
|
39 |
+
description="Enable logging to file",
|
40 |
+
)
|
41 |
+
# File output
|
42 |
+
log_dir: Path = Field(
|
43 |
+
default=LOG_DIR,
|
44 |
+
description="Log directory",
|
45 |
+
)
|
46 |
+
|
47 |
+
model_config = SettingsConfigDict(
|
48 |
+
env_prefix="",
|
49 |
+
env_file=".env",
|
50 |
+
env_file_encoding="utf-8",
|
51 |
+
extra="ignore",
|
52 |
+
)
|
53 |
+
|
54 |
+
@field_validator("level", mode="before")
|
55 |
+
@classmethod
|
56 |
+
def parse_log_level(cls, v):
|
57 |
+
if isinstance(v, str):
|
58 |
+
v = v.upper()
|
59 |
+
if v not in ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]:
|
60 |
+
raise ValueError(f"Invalid log level: {v}")
|
61 |
+
return v
|
62 |
+
return v
|
63 |
+
|
64 |
+
|
65 |
+
def configure_logging(force_cloud_logging: bool = False) -> None:
|
66 |
+
"""Configure the native logging module based on the LoggingConfig settings.
|
67 |
+
|
68 |
+
This function sets up logging handlers and formatters according to the
|
69 |
+
configuration specified in the LoggingConfig object. It supports various
|
70 |
+
logging outputs including console, file, cloud, and JSON logging.
|
71 |
+
|
72 |
+
The function uses the LoggingConfig object to determine which logging
|
73 |
+
features to enable and how to configure them. This includes setting
|
74 |
+
log levels, log formats, and output destinations.
|
75 |
+
|
76 |
+
No arguments are required as the function creates its own LoggingConfig
|
77 |
+
instance internally.
|
78 |
+
|
79 |
+
Note: This function is typically called at the start of the application
|
80 |
+
to set up the logging infrastructure.
|
81 |
+
"""
|
82 |
+
|
83 |
+
config = LoggingConfig()
|
84 |
+
log_handlers: list[logging.Handler] = []
|
85 |
+
|
86 |
+
# Console output handlers
|
87 |
+
stdout = logging.StreamHandler(stream=sys.stdout)
|
88 |
+
stdout.setLevel(config.level)
|
89 |
+
stdout.addFilter(BelowLevelFilter(logging.WARNING))
|
90 |
+
if config.level == logging.DEBUG:
|
91 |
+
stdout.setFormatter(AGPTFormatter(DEBUG_LOG_FORMAT))
|
92 |
+
else:
|
93 |
+
stdout.setFormatter(AGPTFormatter(SIMPLE_LOG_FORMAT))
|
94 |
+
|
95 |
+
stderr = logging.StreamHandler()
|
96 |
+
stderr.setLevel(logging.WARNING)
|
97 |
+
if config.level == logging.DEBUG:
|
98 |
+
stderr.setFormatter(AGPTFormatter(DEBUG_LOG_FORMAT))
|
99 |
+
else:
|
100 |
+
stderr.setFormatter(AGPTFormatter(SIMPLE_LOG_FORMAT))
|
101 |
+
|
102 |
+
log_handlers += [stdout, stderr]
|
103 |
+
|
104 |
+
# Cloud logging setup
|
105 |
+
if config.enable_cloud_logging or force_cloud_logging:
|
106 |
+
import google.cloud.logging
|
107 |
+
from google.cloud.logging.handlers import CloudLoggingHandler
|
108 |
+
from google.cloud.logging_v2.handlers.transports.sync import SyncTransport
|
109 |
+
|
110 |
+
client = google.cloud.logging.Client()
|
111 |
+
cloud_handler = CloudLoggingHandler(
|
112 |
+
client,
|
113 |
+
name="autogpt_logs",
|
114 |
+
transport=SyncTransport,
|
115 |
+
)
|
116 |
+
cloud_handler.setLevel(config.level)
|
117 |
+
log_handlers.append(cloud_handler)
|
118 |
+
|
119 |
+
# File logging setup
|
120 |
+
if config.enable_file_logging:
|
121 |
+
# create log directory if it doesn't exist
|
122 |
+
if not config.log_dir.exists():
|
123 |
+
config.log_dir.mkdir(parents=True, exist_ok=True)
|
124 |
+
|
125 |
+
print(f"Log directory: {config.log_dir}")
|
126 |
+
|
127 |
+
# Activity log handler (INFO and above)
|
128 |
+
activity_log_handler = logging.FileHandler(
|
129 |
+
config.log_dir / LOG_FILE, "a", "utf-8"
|
130 |
+
)
|
131 |
+
activity_log_handler.setLevel(config.level)
|
132 |
+
activity_log_handler.setFormatter(
|
133 |
+
AGPTFormatter(SIMPLE_LOG_FORMAT, no_color=True)
|
134 |
+
)
|
135 |
+
log_handlers.append(activity_log_handler)
|
136 |
+
|
137 |
+
if config.level == logging.DEBUG:
|
138 |
+
# Debug log handler (all levels)
|
139 |
+
debug_log_handler = logging.FileHandler(
|
140 |
+
config.log_dir / DEBUG_LOG_FILE, "a", "utf-8"
|
141 |
+
)
|
142 |
+
debug_log_handler.setLevel(logging.DEBUG)
|
143 |
+
debug_log_handler.setFormatter(
|
144 |
+
AGPTFormatter(DEBUG_LOG_FORMAT, no_color=True)
|
145 |
+
)
|
146 |
+
log_handlers.append(debug_log_handler)
|
147 |
+
|
148 |
+
# Error log handler (ERROR and above)
|
149 |
+
error_log_handler = logging.FileHandler(
|
150 |
+
config.log_dir / ERROR_LOG_FILE, "a", "utf-8"
|
151 |
+
)
|
152 |
+
error_log_handler.setLevel(logging.ERROR)
|
153 |
+
error_log_handler.setFormatter(AGPTFormatter(DEBUG_LOG_FORMAT, no_color=True))
|
154 |
+
log_handlers.append(error_log_handler)
|
155 |
+
|
156 |
+
# Configure the root logger
|
157 |
+
logging.basicConfig(
|
158 |
+
format=DEBUG_LOG_FORMAT if config.level == logging.DEBUG else SIMPLE_LOG_FORMAT,
|
159 |
+
level=config.level,
|
160 |
+
handlers=log_handlers,
|
161 |
+
)
|
autogpt_platform/autogpt_libs/autogpt_libs/logging/filters.py
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
|
3 |
+
|
4 |
+
class BelowLevelFilter(logging.Filter):
|
5 |
+
"""Filter for logging levels below a certain threshold."""
|
6 |
+
|
7 |
+
def __init__(self, below_level: int):
|
8 |
+
super().__init__()
|
9 |
+
self.below_level = below_level
|
10 |
+
|
11 |
+
def filter(self, record: logging.LogRecord):
|
12 |
+
return record.levelno < self.below_level
|
autogpt_platform/autogpt_libs/autogpt_libs/logging/formatters.py
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
|
3 |
+
from colorama import Fore, Style
|
4 |
+
|
5 |
+
from .utils import remove_color_codes
|
6 |
+
|
7 |
+
|
8 |
+
class FancyConsoleFormatter(logging.Formatter):
|
9 |
+
"""
|
10 |
+
A custom logging formatter designed for console output.
|
11 |
+
|
12 |
+
This formatter enhances the standard logging output with color coding. The color
|
13 |
+
coding is based on the level of the log message, making it easier to distinguish
|
14 |
+
between different types of messages in the console output.
|
15 |
+
|
16 |
+
The color for each level is defined in the LEVEL_COLOR_MAP class attribute.
|
17 |
+
"""
|
18 |
+
|
19 |
+
# level -> (level & text color, title color)
|
20 |
+
LEVEL_COLOR_MAP = {
|
21 |
+
logging.DEBUG: Fore.LIGHTBLACK_EX,
|
22 |
+
logging.INFO: Fore.BLUE,
|
23 |
+
logging.WARNING: Fore.YELLOW,
|
24 |
+
logging.ERROR: Fore.RED,
|
25 |
+
logging.CRITICAL: Fore.RED + Style.BRIGHT,
|
26 |
+
}
|
27 |
+
|
28 |
+
def format(self, record: logging.LogRecord) -> str:
|
29 |
+
# Make sure `msg` is a string
|
30 |
+
if not hasattr(record, "msg"):
|
31 |
+
record.msg = ""
|
32 |
+
elif type(record.msg) is not str:
|
33 |
+
record.msg = str(record.msg)
|
34 |
+
|
35 |
+
# Determine default color based on error level
|
36 |
+
level_color = ""
|
37 |
+
if record.levelno in self.LEVEL_COLOR_MAP:
|
38 |
+
level_color = self.LEVEL_COLOR_MAP[record.levelno]
|
39 |
+
record.levelname = f"{level_color}{record.levelname}{Style.RESET_ALL}"
|
40 |
+
|
41 |
+
# Determine color for message
|
42 |
+
color = getattr(record, "color", level_color)
|
43 |
+
color_is_specified = hasattr(record, "color")
|
44 |
+
|
45 |
+
# Don't color INFO messages unless the color is explicitly specified.
|
46 |
+
if color and (record.levelno != logging.INFO or color_is_specified):
|
47 |
+
record.msg = f"{color}{record.msg}{Style.RESET_ALL}"
|
48 |
+
|
49 |
+
return super().format(record)
|
50 |
+
|
51 |
+
|
52 |
+
class AGPTFormatter(FancyConsoleFormatter):
|
53 |
+
def __init__(self, *args, no_color: bool = False, **kwargs):
|
54 |
+
super().__init__(*args, **kwargs)
|
55 |
+
self.no_color = no_color
|
56 |
+
|
57 |
+
def format(self, record: logging.LogRecord) -> str:
|
58 |
+
# Make sure `msg` is a string
|
59 |
+
if not hasattr(record, "msg"):
|
60 |
+
record.msg = ""
|
61 |
+
elif type(record.msg) is not str:
|
62 |
+
record.msg = str(record.msg)
|
63 |
+
|
64 |
+
# Strip color from the message to prevent color spoofing
|
65 |
+
if record.msg and not getattr(record, "preserve_color", False):
|
66 |
+
record.msg = remove_color_codes(record.msg)
|
67 |
+
|
68 |
+
# Determine color for title
|
69 |
+
title = getattr(record, "title", "")
|
70 |
+
title_color = getattr(record, "title_color", "") or self.LEVEL_COLOR_MAP.get(
|
71 |
+
record.levelno, ""
|
72 |
+
)
|
73 |
+
if title and title_color:
|
74 |
+
title = f"{title_color + Style.BRIGHT}{title}{Style.RESET_ALL}"
|
75 |
+
# Make sure record.title is set, and padded with a space if not empty
|
76 |
+
record.title = f"{title} " if title else ""
|
77 |
+
|
78 |
+
if self.no_color:
|
79 |
+
return remove_color_codes(super().format(record))
|
80 |
+
else:
|
81 |
+
return super().format(record)
|
autogpt_platform/autogpt_libs/autogpt_libs/logging/handlers.py
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from __future__ import annotations
|
2 |
+
|
3 |
+
import json
|
4 |
+
import logging
|
5 |
+
|
6 |
+
|
7 |
+
class JsonFileHandler(logging.FileHandler):
|
8 |
+
def format(self, record: logging.LogRecord) -> str:
|
9 |
+
record.json_data = json.loads(record.getMessage())
|
10 |
+
return json.dumps(getattr(record, "json_data"), ensure_ascii=False, indent=4)
|
11 |
+
|
12 |
+
def emit(self, record: logging.LogRecord) -> None:
|
13 |
+
with open(self.baseFilename, "w", encoding="utf-8") as f:
|
14 |
+
f.write(self.format(record))
|
autogpt_platform/autogpt_libs/autogpt_libs/logging/test_utils.py
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pytest
|
2 |
+
|
3 |
+
from .utils import remove_color_codes
|
4 |
+
|
5 |
+
|
6 |
+
@pytest.mark.parametrize(
|
7 |
+
"raw_text, clean_text",
|
8 |
+
[
|
9 |
+
(
|
10 |
+
"COMMAND = \x1b[36mbrowse_website\x1b[0m "
|
11 |
+
"ARGUMENTS = \x1b[36m{'url': 'https://www.google.com',"
|
12 |
+
" 'question': 'What is the capital of France?'}\x1b[0m",
|
13 |
+
"COMMAND = browse_website "
|
14 |
+
"ARGUMENTS = {'url': 'https://www.google.com',"
|
15 |
+
" 'question': 'What is the capital of France?'}",
|
16 |
+
),
|
17 |
+
(
|
18 |
+
"{'Schaue dir meine Projekte auf github () an, als auch meine Webseiten': "
|
19 |
+
"'https://github.com/Significant-Gravitas/AutoGPT,"
|
20 |
+
" https://discord.gg/autogpt und https://twitter.com/Auto_GPT'}",
|
21 |
+
"{'Schaue dir meine Projekte auf github () an, als auch meine Webseiten': "
|
22 |
+
"'https://github.com/Significant-Gravitas/AutoGPT,"
|
23 |
+
" https://discord.gg/autogpt und https://twitter.com/Auto_GPT'}",
|
24 |
+
),
|
25 |
+
("", ""),
|
26 |
+
("hello", "hello"),
|
27 |
+
("hello\x1b[31m world", "hello world"),
|
28 |
+
("\x1b[36mHello,\x1b[32m World!", "Hello, World!"),
|
29 |
+
(
|
30 |
+
"\x1b[1m\x1b[31mError:\x1b[0m\x1b[31m file not found",
|
31 |
+
"Error: file not found",
|
32 |
+
),
|
33 |
+
],
|
34 |
+
)
|
35 |
+
def test_remove_color_codes(raw_text, clean_text):
|
36 |
+
assert remove_color_codes(raw_text) == clean_text
|
autogpt_platform/autogpt_libs/autogpt_libs/logging/utils.py
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import logging
|
2 |
+
import re
|
3 |
+
from typing import Any
|
4 |
+
|
5 |
+
import uvicorn.config
|
6 |
+
from colorama import Fore
|
7 |
+
|
8 |
+
|
9 |
+
def remove_color_codes(s: str) -> str:
|
10 |
+
return re.sub(r"\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])", "", s)
|
11 |
+
|
12 |
+
|
13 |
+
def fmt_kwargs(kwargs: dict) -> str:
|
14 |
+
return ", ".join(f"{n}={repr(v)}" for n, v in kwargs.items())
|
15 |
+
|
16 |
+
|
17 |
+
def print_attribute(
|
18 |
+
title: str, value: Any, title_color: str = Fore.GREEN, value_color: str = ""
|
19 |
+
) -> None:
|
20 |
+
logger = logging.getLogger()
|
21 |
+
logger.info(
|
22 |
+
str(value),
|
23 |
+
extra={
|
24 |
+
"title": f"{title.rstrip(':')}:",
|
25 |
+
"title_color": title_color,
|
26 |
+
"color": value_color,
|
27 |
+
},
|
28 |
+
)
|
29 |
+
|
30 |
+
|
31 |
+
def generate_uvicorn_config():
|
32 |
+
"""
|
33 |
+
Generates a uvicorn logging config that silences uvicorn's default logging and tells it to use the native logging module.
|
34 |
+
"""
|
35 |
+
log_config = dict(uvicorn.config.LOGGING_CONFIG)
|
36 |
+
log_config["loggers"]["uvicorn"] = {"handlers": []}
|
37 |
+
log_config["loggers"]["uvicorn.error"] = {"handlers": []}
|
38 |
+
log_config["loggers"]["uvicorn.access"] = {"handlers": []}
|
39 |
+
return log_config
|
autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/__init__.py
ADDED
File without changes
|
autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/config.py
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import Field
|
2 |
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
3 |
+
|
4 |
+
|
5 |
+
class RateLimitSettings(BaseSettings):
|
6 |
+
redis_host: str = Field(
|
7 |
+
default="redis://localhost:6379",
|
8 |
+
description="Redis host",
|
9 |
+
validation_alias="REDIS_HOST",
|
10 |
+
)
|
11 |
+
|
12 |
+
redis_port: str = Field(
|
13 |
+
default="6379", description="Redis port", validation_alias="REDIS_PORT"
|
14 |
+
)
|
15 |
+
|
16 |
+
redis_password: str = Field(
|
17 |
+
default="password",
|
18 |
+
description="Redis password",
|
19 |
+
validation_alias="REDIS_PASSWORD",
|
20 |
+
)
|
21 |
+
|
22 |
+
requests_per_minute: int = Field(
|
23 |
+
default=60,
|
24 |
+
description="Maximum number of requests allowed per minute per API key",
|
25 |
+
validation_alias="RATE_LIMIT_REQUESTS_PER_MINUTE",
|
26 |
+
)
|
27 |
+
|
28 |
+
model_config = SettingsConfigDict(case_sensitive=True, extra="ignore")
|
29 |
+
|
30 |
+
|
31 |
+
RATE_LIMIT_SETTINGS = RateLimitSettings()
|
autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/limiter.py
ADDED
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import time
|
2 |
+
from typing import Tuple
|
3 |
+
|
4 |
+
from redis import Redis
|
5 |
+
|
6 |
+
from .config import RATE_LIMIT_SETTINGS
|
7 |
+
|
8 |
+
|
9 |
+
class RateLimiter:
|
10 |
+
def __init__(
|
11 |
+
self,
|
12 |
+
redis_host: str = RATE_LIMIT_SETTINGS.redis_host,
|
13 |
+
redis_port: str = RATE_LIMIT_SETTINGS.redis_port,
|
14 |
+
redis_password: str = RATE_LIMIT_SETTINGS.redis_password,
|
15 |
+
requests_per_minute: int = RATE_LIMIT_SETTINGS.requests_per_minute,
|
16 |
+
):
|
17 |
+
self.redis = Redis(
|
18 |
+
host=redis_host,
|
19 |
+
port=int(redis_port),
|
20 |
+
password=redis_password,
|
21 |
+
decode_responses=True,
|
22 |
+
)
|
23 |
+
self.window = 60
|
24 |
+
self.max_requests = requests_per_minute
|
25 |
+
|
26 |
+
async def check_rate_limit(self, api_key_id: str) -> Tuple[bool, int, int]:
|
27 |
+
"""
|
28 |
+
Check if request is within rate limits.
|
29 |
+
|
30 |
+
Args:
|
31 |
+
api_key_id: The API key identifier to check
|
32 |
+
|
33 |
+
Returns:
|
34 |
+
Tuple of (is_allowed, remaining_requests, reset_time)
|
35 |
+
"""
|
36 |
+
now = time.time()
|
37 |
+
window_start = now - self.window
|
38 |
+
key = f"ratelimit:{api_key_id}:1min"
|
39 |
+
|
40 |
+
pipe = self.redis.pipeline()
|
41 |
+
pipe.zremrangebyscore(key, 0, window_start)
|
42 |
+
pipe.zadd(key, {str(now): now})
|
43 |
+
pipe.zcount(key, window_start, now)
|
44 |
+
pipe.expire(key, self.window)
|
45 |
+
|
46 |
+
_, _, request_count, _ = pipe.execute()
|
47 |
+
|
48 |
+
remaining = max(0, self.max_requests - request_count)
|
49 |
+
reset_time = int(now + self.window)
|
50 |
+
|
51 |
+
return request_count <= self.max_requests, remaining, reset_time
|
autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/middleware.py
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from fastapi import HTTPException, Request
|
2 |
+
from starlette.middleware.base import RequestResponseEndpoint
|
3 |
+
|
4 |
+
from .limiter import RateLimiter
|
5 |
+
|
6 |
+
|
7 |
+
async def rate_limit_middleware(request: Request, call_next: RequestResponseEndpoint):
|
8 |
+
"""FastAPI middleware for rate limiting API requests."""
|
9 |
+
limiter = RateLimiter()
|
10 |
+
|
11 |
+
if not request.url.path.startswith("/api"):
|
12 |
+
return await call_next(request)
|
13 |
+
|
14 |
+
api_key = request.headers.get("Authorization")
|
15 |
+
if not api_key:
|
16 |
+
return await call_next(request)
|
17 |
+
|
18 |
+
api_key = api_key.replace("Bearer ", "")
|
19 |
+
|
20 |
+
is_allowed, remaining, reset_time = await limiter.check_rate_limit(api_key)
|
21 |
+
|
22 |
+
if not is_allowed:
|
23 |
+
raise HTTPException(
|
24 |
+
status_code=429, detail="Rate limit exceeded. Please try again later."
|
25 |
+
)
|
26 |
+
|
27 |
+
response = await call_next(request)
|
28 |
+
response.headers["X-RateLimit-Limit"] = str(limiter.max_requests)
|
29 |
+
response.headers["X-RateLimit-Remaining"] = str(remaining)
|
30 |
+
response.headers["X-RateLimit-Reset"] = str(reset_time)
|
31 |
+
|
32 |
+
return response
|