seawolf2357 commited on
Commit
3382f47
·
verified ·
1 Parent(s): 37c9f34

Deploy from GitHub repository

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .deepsource.toml +18 -0
  2. .dockerignore +61 -0
  3. .gitattributes +636 -0
  4. .pr_agent.toml +6 -0
  5. .pre-commit-config.yaml +278 -0
  6. .vscode/all-projects.code-workspace +62 -0
  7. .vscode/launch.json +67 -0
  8. AGENTS.md +53 -0
  9. CITATION.cff +21 -0
  10. CODE_OF_CONDUCT.md +40 -0
  11. CONTRIBUTING.md +38 -0
  12. LICENSE +29 -0
  13. README.md +13 -3
  14. SECURITY.md +48 -0
  15. app.py +28 -0
  16. assets/gpt_dark_RGB.icns +0 -0
  17. assets/gpt_dark_RGB.ico +3 -0
  18. assets/gpt_dark_RGB.png +0 -0
  19. autogpt_platform/.env.example +123 -0
  20. autogpt_platform/.gitignore +2 -0
  21. autogpt_platform/CLAUDE.md +146 -0
  22. autogpt_platform/Contributor License Agreement (CLA).md +21 -0
  23. autogpt_platform/LICENSE.md +164 -0
  24. autogpt_platform/README.md +196 -0
  25. autogpt_platform/__init__.py +0 -0
  26. autogpt_platform/autogpt_libs/README.md +3 -0
  27. autogpt_platform/autogpt_libs/autogpt_libs/__init__.py +0 -0
  28. autogpt_platform/autogpt_libs/autogpt_libs/api_key/key_manager.py +35 -0
  29. autogpt_platform/autogpt_libs/autogpt_libs/auth/__init__.py +13 -0
  30. autogpt_platform/autogpt_libs/autogpt_libs/auth/config.py +15 -0
  31. autogpt_platform/autogpt_libs/autogpt_libs/auth/depends.py +46 -0
  32. autogpt_platform/autogpt_libs/autogpt_libs/auth/depends_tests.py +68 -0
  33. autogpt_platform/autogpt_libs/autogpt_libs/auth/jwt_utils.py +27 -0
  34. autogpt_platform/autogpt_libs/autogpt_libs/auth/middleware.py +140 -0
  35. autogpt_platform/autogpt_libs/autogpt_libs/auth/models.py +22 -0
  36. autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/__init__.py +0 -0
  37. autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/client.py +166 -0
  38. autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/client_test.py +45 -0
  39. autogpt_platform/autogpt_libs/autogpt_libs/feature_flag/config.py +15 -0
  40. autogpt_platform/autogpt_libs/autogpt_libs/logging/__init__.py +9 -0
  41. autogpt_platform/autogpt_libs/autogpt_libs/logging/config.py +161 -0
  42. autogpt_platform/autogpt_libs/autogpt_libs/logging/filters.py +12 -0
  43. autogpt_platform/autogpt_libs/autogpt_libs/logging/formatters.py +81 -0
  44. autogpt_platform/autogpt_libs/autogpt_libs/logging/handlers.py +14 -0
  45. autogpt_platform/autogpt_libs/autogpt_libs/logging/test_utils.py +36 -0
  46. autogpt_platform/autogpt_libs/autogpt_libs/logging/utils.py +39 -0
  47. autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/__init__.py +0 -0
  48. autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/config.py +31 -0
  49. autogpt_platform/autogpt_libs/autogpt_libs/rate_limit/limiter.py +51 -0
  50. 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: red
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
+ [![Discord Follow](https://dcbadge.vercel.app/api/server/autogpt?style=flat)](https://discord.gg/autogpt) &ensp;
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

  • SHA256: 559a7286f2aba9a84bdedd42f3d0fc4b4308bf9fa0c3cfd9e183f4095e04d4dd
  • Pointer size: 132 Bytes
  • Size of remote file: 1.14 MB
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