Compare commits

..

890 Commits

Author SHA1 Message Date
rohitvinodmalhotra@gmail.com
2399174e89 fix settings load 2025-04-28 19:09:27 -04:00
rohitvinodmalhotra@gmail.com
7c3f4891f8 render for saas 2025-04-28 18:02:56 -04:00
rohitvinodmalhotra@gmail.com
49bb7bbaba add base_domain to fe 2025-04-28 17:50:30 -04:00
openhands
10c1252cfe Add base domain fields for GitHub and GitLab in git settings 2025-04-28 20:14:55 +00:00
rohitvinodmalhotra@gmail.com
911867492c fix providertype comp 2025-04-28 16:07:03 -04:00
rohitvinodmalhotra@gmail.com
85a1b47c8d modify new git page 2025-04-28 16:03:58 -04:00
rohitvinodmalhotra@gmail.com
d6011829a3 merge main 2025-04-28 16:02:54 -04:00
rohitvinodmalhotra@gmail.com
9200e1dbd8 fix providertype comparisions 2025-04-28 15:21:03 -04:00
Engel Nyst
06ce12eff4 Update resolver model (#8124) 2025-04-28 21:07:40 +02:00
sp.wack
88fc26d9b0 frontend: Better diff contrast (#8128) 2025-04-28 22:53:37 +04:00
dependabot[bot]
99233ec153 chore(deps): bump the version-all group with 6 updates (#8125)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-28 20:50:39 +02:00
sp.wack
ae9573a503 chore(frontend): Breakdown settings screen (#7929)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-28 22:32:28 +04:00
rohitvinodmalhotra@gmail.com
d1343539ba update save for provider token 2025-04-28 14:30:44 -04:00
rohitvinodmalhotra@gmail.com
8bc206833a restructure fe type 2025-04-28 14:08:18 -04:00
rohitvinodmalhotra@gmail.com
7cf61d8c0e add base domain param to provider token 2025-04-28 13:29:06 -04:00
dependabot[bot]
f2725eeb3d chore(deps): bump the version-all group across 1 directory with 8 updates (#8123)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-04-28 17:18:21 +00:00
Engel Nyst
1b63633030 Simplify microagents (#8114)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-04-28 15:00:06 +00:00
Ryan H. Tran
107789b5a8 Add missing last ps1 match output into combined output (#8097) 2025-04-28 21:06:26 +08:00
Panduka Muditha
04bdea5faf feat: Add CLI support for /new, /status and /settings (#8017)
Co-authored-by: Bashwara Undupitiya <bashwarau@verdentra.com>
2025-04-28 08:52:33 -04:00
Engel Nyst
2bad4ea3d2 Litellm emergency fix (#8116) 2025-04-28 08:36:45 +02:00
Rohit Malhotra
1c4c477b3f [Refactor]: Abstract resolver into classes (#7999)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-27 18:52:52 -04:00
Rohit Malhotra
391ba1d988 [Fix]: Move suggest task prompts to BE (#8109)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-27 16:32:15 -04:00
Engel Nyst
70f469b0c1 [chore] run full pre-commit (#8104) 2025-04-27 08:43:26 +02:00
Graham Neubig
8a5c6d3bef Fix long setup scripts failing (#8101)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-26 12:27:54 -04:00
tofarr
998e04e51b Fix for issue where running unit tests resets local settings (#8100)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-26 07:24:49 -06:00
Boxuan Li
da7041b5e9 Allow cmd execution after running a background command (#8093) 2025-04-26 03:04:05 +00:00
Robert Brennan
e4b7b31f48 Add VS Code tab alongside workspace, terminal, and jupyter tabs (#8033)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-25 15:30:50 -07:00
chuckbutkus
587c53f115 Maybe fix for pre-commit errors (#8082)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-04-25 21:10:00 +00:00
mamoodi
4d76f31610 Update Microagents documentation (#7978) 2025-04-25 16:52:55 -04:00
Rohit Malhotra
c25a96825c [Fix]: Sort github repos in memory for cloud openhands (#8083)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-25 15:16:43 -04:00
OpenHands
16137942eb Fix issue #7888: Update resolver doc to refer to repo.md instead of the old file (#8089)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-25 16:13:05 +00:00
dependabot[bot]
cf07b151dc chore(deps): bump the version-all group with 5 updates (#8091)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-25 17:30:17 +02:00
Lenshood
ea3787c2ba fix: dev.sh failed due to outdated configuration of Dockerfile (#8058)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-25 11:36:53 +08:00
chuckbutkus
956d278138 fix call to convo store get_instance (#8081) 2025-04-25 01:41:00 +00:00
மனோஜ்குமார் பழனிச்சாமி
fa186fc433 chore: Use recommended functions (#8056) 2025-04-25 09:39:19 +08:00
Ray Myers
4ef9c72da1 fix - Show error message for too many conversations (#8078) 2025-04-24 19:53:17 -05:00
tofarr
c5245a622d Refactor Authentication (#8040)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: rohitvinodmalhotra@gmail.com <rohitvinodmalhotra@gmail.com>
2025-04-24 18:49:41 -06:00
Engel Nyst
9b1aaa53fe Reset the reset (#8079) 2025-04-25 00:59:37 +02:00
Rohit Malhotra
4deffa3907 [Fix]: Don't wipe out secret store on reset route (#8075) 2025-04-24 17:41:46 -04:00
Rohit Malhotra
a47c6f3ed1 [Fix]: Log HTTP err type in Git service classes (#8076) 2025-04-24 17:41:36 -04:00
dependabot[bot]
90ece3f8e1 chore(deps): bump the version-all group across 1 directory with 14 updates (#8062)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-04-24 20:04:33 +00:00
Robert Brennan
a948b0fef3 Change log levels from info to debug for various agent controller messages (#8073)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-24 20:00:21 +00:00
Robert Brennan
52848cd3db Improve git handler with better branch management (#8065)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-24 12:34:25 -07:00
mamoodi
62f015370a Update Documentation with new release features (#8045) 2025-04-24 14:58:42 -04:00
sp.wack
7109b057b6 Make tmux optional for development (#8063)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-04-24 18:13:33 +00:00
Rohit Malhotra
e694fc2d58 [Feat]: Add suggested tasks for Gitlab (#8049) 2025-04-24 13:26:52 -04:00
Robert Brennan
50baf3fd18 Add OpenAPI spec to Docusaurus documentation (#7998)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-24 10:19:33 -07:00
dependabot[bot]
dc37f039bf chore(deps): bump the version-all group across 1 directory with 14 updates (#8064)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-24 18:01:39 +02:00
Engel Nyst
91fff77ffe Fix lint (#8060) 2025-04-24 14:34:22 +00:00
sp.wack
db01cd39d5 hotfix: Run both BE and FE pre-commits with husky (#8059) 2025-04-24 18:21:41 +04:00
மனோஜ்குமார் பழனிச்சாமி
00865fbb8a fix: reconnect if stream closed (#8055) 2025-04-24 16:05:28 +04:00
Rohit Malhotra
356cd9ff9f (Hotfix): Issue comments on Cloud Resolver (#8053) 2025-04-23 22:50:00 -04:00
Xingyao Wang
78d82408b7 fix: use lower range of tcp port for file viewer (#8051) 2025-04-24 01:51:44 +00:00
Panduka Muditha
3c4ebc3d8a fix: Add error handling for scenarios where tmux is unavailable (#8043)
Co-authored-by: Anuradha Weeraman <anuradha@verdentra.com>
2025-04-23 21:01:06 +02:00
Rohit Malhotra
964478c22f [Feat]: Custom secrets plumbing for BE (#7891)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-23 12:44:25 -04:00
Robert Brennan
00c449d447 Add loading indicator to repository dropdown on home page (#8015)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-23 12:27:49 -04:00
Rohit Malhotra
bfd75a1355 (Chore): Rm legacy resolver code (#8001) 2025-04-23 11:34:03 -04:00
Graham Neubig
dc91cb263b Add extensive typing to controller directory (#7731)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-04-23 15:33:17 +00:00
Robert Brennan
fa559ace86 Add API keys management UI to settings page (#7710)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-23 19:08:32 +04:00
mamoodi
1fd26d196a Release 0.34.0 (#8011) 2025-04-23 11:06:28 -04:00
Robert Brennan
5de62d85fd add an option for a headless backend (#8032) 2025-04-23 04:09:22 +02:00
Chase
5d749aeba7 replace erroneous rstrip() with removesuffix() (#8024) 2025-04-22 22:50:14 +00:00
Chase
693c72d670 remove sse subsection accessor of McpConfig in action_execution_client (#8021) 2025-04-23 00:40:10 +02:00
Engel Nyst
62557d44f2 Use short tool descriptions for o4-mini (#8022) 2025-04-23 00:30:21 +02:00
Robert Brennan
89f8e162da Fix: Don't show status indicator for command timeouts (#8012)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-22 23:30:07 +04:00
Robert Brennan
b0a9938e6c Always run git init in SaaS mode regardless of workspace_base setting (#8014)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-22 17:43:20 +00:00
Rohit Malhotra
039fe295a4 Add RateLimitError and handle rate limiting in GitLab and GitHub services (#8003)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-22 16:30:41 +00:00
dependabot[bot]
8f3ff1210e chore(deps): bump the version-all group with 6 updates (#8009)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-22 15:16:41 +00:00
Peter Hamilton
5e1e685493 fix: Use SANDBOX_BASE_CONTAINER_IMAGE in resolver workflow (#7956)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-22 16:15:49 +02:00
sp.wack
e9f2b72ea5 chore: Better home screen (#7784)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-22 13:15:41 +00:00
Rohit Malhotra
986b90be0a [Fix]: fetch latest token when existing token doesn't exist (#8000) 2025-04-22 03:22:48 +00:00
Robert Brennan
bf9f2aa7a5 Initialize git repo in workspace when no GitHub repo is selected (#7904)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-21 18:34:42 -04:00
Engel Nyst
b3bd3924a0 Fix and simplify local runtime init (#7997) 2025-04-22 00:24:22 +02:00
Rohit Malhotra
0de50153a0 Add HTTP method option to Git service fetch_data functions (#7996)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-21 18:15:05 -04:00
Xingyao Wang
a04024a239 refactor: file viewer server so it is accessible via localhost without authentication (#7987)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-21 22:12:06 +00:00
Rohit Malhotra
1e509a70d4 [Fix]: Dedup token verification logic in resolver (#7967)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-21 20:34:29 +00:00
Engel Nyst
300a59853b Quick fix local runtime (#7991) 2025-04-21 20:28:30 +00:00
Rohit Malhotra
2514b200c5 Fix dictionary changed size during iteration error in EventStream (#7984)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-21 16:21:30 -04:00
Michael Panchenko
52d881c98d Fix issue with "default" in tool schema for gemini-preview (#7964) 2025-04-21 21:21:33 +02:00
Rohit Malhotra
6ac23aea80 [Feat]: Add branch naming convention (#7989) 2025-04-21 18:35:16 +00:00
Xingyao Wang
0412949018 Add agent_class to SystemMessageAction and display in frontend (#7935)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-22 02:08:15 +08:00
Michael Panchenko
5b5adc5c7b Minor refactoring: remove step and task-creation in AgentController (#7981) 2025-04-21 19:28:22 +02:00
dependabot[bot]
0b40f6fac8 chore(deps): bump the version-all group with 7 updates (#7980)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-21 19:14:58 +02:00
Rohit Malhotra
44d488b718 [Fix]: Building runtime image with unspecified base container img (#7977) 2025-04-21 11:30:22 -04:00
Rohit Malhotra
4f9120ffc6 (Chore): Unsupport resolve all issues in resolver (#7975) 2025-04-21 14:37:53 +00:00
Tetsuuuuuuu
50426edaa1 feat: add argument --base-container-image to resolver (#7612)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-04-21 10:01:03 -04:00
Xingyao Wang
a792f84a83 chore: improve logging for "not a git repository" (#7944) 2025-04-21 16:13:48 +04:00
Alexander Litzenberger
cd9d96766c Update documentation on local-llms (#7805)
Co-authored-by: Alex Litzenberger <alex@agot.ai>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-21 00:20:13 +00:00
Michael Panchenko
14564b25d6 Fix linting (#7965) 2025-04-21 06:34:40 +08:00
Rohit Malhotra
0637b5b912 [Fix]: Replace duplicate enums for providers in resolver (#7954) 2025-04-20 14:06:18 -04:00
Rohit Malhotra
20bf48b693 [Fix]: mismatch between repo object definition between FE and BE (#7953) 2025-04-20 00:28:10 +00:00
Michael Panchenko
5b3270be2d Possibility to disable default tools (#7951) 2025-04-20 02:14:46 +02:00
Tom Deckers
ae43744052 Fix Github Enterprise GraphQL URL (#7939)
Co-authored-by: Tom Deckers <tdeckers@cisco.com>
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-04-19 21:09:00 +00:00
Xingyao Wang
b5d7e428d1 Fix #7916: Update Benchmark Score link in README (#7943)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-19 00:27:54 +02:00
Rohit Malhotra
d65ea313e8 Add external auth id to /repos route (#7946) 2025-04-18 18:19:36 -04:00
Rohit Malhotra
a09ecadba6 (Chore): Rm deprecate /installations route (#7945) 2025-04-18 21:51:08 +00:00
Rohit Malhotra
358166feb2 [Logging]: Add warning logs for gitlab api (#7941) 2025-04-18 21:31:36 +00:00
Kenny Dizi
85e2b73eb4 [Feat] Support o3 and o4 mini (#7898)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-04-18 21:23:19 +00:00
Rohit Malhotra
c18475ddc2 Add public vs private info for repo list (#7937) 2025-04-18 17:07:08 -04:00
Xingyao Wang
06fcf54475 chore: track condeser metadata for llm completion (#7938) 2025-04-19 05:05:31 +08:00
Rohit Malhotra
f751f8ab37 [Feat]: Add graphql fetching for GitLab service cls (#7839) 2025-04-18 16:53:49 -04:00
Tei1988
523c6d03c1 fix(resolver): Allow using github.token in Actions and fix base_domain handling (#7934) 2025-04-18 20:50:59 +00:00
Rohit Malhotra
0e0f043e59 [Feat]: Improve resolver inline pr comment localization (#7932) 2025-04-18 15:56:34 -04:00
Xingyao Wang
91c691d526 [agent] Read-only Agent (#6947)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-19 02:46:24 +08:00
Xingyao Wang
c6092291ce chore: make sure Makefile make lint also lint tests (#7933) 2025-04-18 14:01:36 -04:00
Engel Nyst
a2c55cfdef Refactor to clean up and move utility/legacy out of the agent (#7917) 2025-04-19 01:53:33 +08:00
Michael Panchenko
76cad626ed Bugfix: make extraction of poetry_venvs_path more robust (#7920) 2025-04-18 17:33:52 +00:00
Xingyao Wang
7c23993344 fix(eval): typo in SWE_Bench evaluation (#7930) 2025-04-19 00:31:08 +08:00
dependabot[bot]
b669715416 chore(deps): bump the version-all group across 1 directory with 20 updates (#7925)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-04-18 16:08:35 +00:00
tofarr
7292122b72 Refactor agent loop initialization for better extensibility (#7926) 2025-04-18 09:44:34 -06:00
dependabot[bot]
992ae15c78 chore(deps): bump the version-all group with 7 updates (#7927)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-18 15:02:41 +00:00
Carlos Freund
f2b4772ac2 fix(runtime) Avoid windows reserved port (#7722)
Co-authored-by: Carlos Freund <carlosfreund@gmail.com>
2025-04-18 22:18:46 +08:00
Engel Nyst
9b9b1291fc [chore] Just linting on swe-bench files (#7918) 2025-04-18 22:12:01 +08:00
Xingyao Wang
6171395ef9 Refactor metrics handling to include condenser metrics (#7907)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-17 23:08:35 +00:00
sp.wack
d270476d6c hotfix(backend): Exclude open PRs when fetching suggested tasks (#7912) 2025-04-18 03:00:04 +04:00
Xingyao Wang
f1f7dca009 refactor(action_execution_client): rename function and add property (#7913) 2025-04-18 06:59:13 +08:00
mamoodi
45f572f268 Update documentation (#7905) 2025-04-17 17:43:18 -04:00
Niels Mündler
4b124d5906 Add inference for SWT-Bench (#7201)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Calvin Smith <email@cjsmith.io>
2025-04-17 14:49:42 -06:00
Robert Brennan
988d4aa679 Improved logging for agent controller, including pending action time (#7897)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-17 20:22:38 +00:00
Robert Brennan
b452fe273c Restore terminal interactivity while keeping UI changes (#7903)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-17 19:42:03 +00:00
sp.wack
9544b37c8a hotfix(forntend): Wait for runtime to start before fetching git changes for diff view (#7910) 2025-04-17 15:15:03 -04:00
Rohit Malhotra
0491357fef [Refactor]: Collapse initial user message for cloud resolver (#7871)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-17 15:09:28 -04:00
Robert Brennan
fedd517a71 Change add funds input to number type that only accepts integers (#7628)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-17 18:56:23 +00:00
Rohit Malhotra
9cbed8802f Update translation from GitHub Settings to Git Settings (#7908)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-17 18:55:28 +00:00
Rohit Malhotra
c2e1babd76 Fix failing unit test on main (#7909)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-17 18:43:09 +00:00
Carlos Freund
cc8b677f3e fix(metrics) Merge metrics of agent LLM and condenser LLM (#7890)
Co-authored-by: Carlos Freund <carlosfreund@gmail.com>
2025-04-18 01:15:14 +08:00
chuckbutkus
78e3f82de1 Change client name and add IDP hint (#7787)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
Co-authored-by: Calvin Smith <email@cjsmith.io>
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: Panduka Muditha <pandukal@verdentra.com>
Co-authored-by: Bashwara Undupitiya <bashwarau@verdentra.com>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-04-17 12:23:12 -04:00
dependabot[bot]
20ca2cd8b9 chore(deps): bump the version-all group across 1 directory with 9 updates (#7902)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-17 17:45:44 +02:00
mamoodi
ea0fcd6002 Change title of button to start new conversation (#7464) 2025-04-17 11:16:33 -04:00
juanmichelini
6bcebd4b9d Jetbrains CI Benchmark (#7811)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-04-17 15:10:20 +00:00
Xingyao Wang
93e9db3206 Refactor system message handling to use event stream (#7824)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <email@cjsmith.io>
2025-04-17 22:30:19 +08:00
Ray Myers
caf34d83bd chore - remove dummy agent test (#7848) 2025-04-17 08:52:02 -04:00
LoneRifle
49d3cd0863 fix(check-unlocalized-strings): make HTML tag test case-insens (#7892) 2025-04-17 14:26:49 +02:00
sp.wack
34989f8e96 feat: Diff UI (#6934) 2025-04-17 16:12:25 +04:00
Rohit Malhotra
9274664302 [Fix]: Rm unnecessary provider token serializer (#7889) 2025-04-16 21:41:07 +00:00
mamoodi
437f0a0154 Release 0.33.0 (#7882)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: tofarr <tofarr@gmail.com>
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: Bashwara Undupitiya <65051545+bashwara@users.noreply.github.com>
2025-04-16 17:03:00 -04:00
Bashwara Undupitiya
9d79bf5fff fix: Update folder security dialog styling (#7886) 2025-04-16 14:33:00 -04:00
Robert Brennan
4c62b1d428 Fix: Ensure consistent tab height when workspace tab is selected (#7885)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-16 17:54:50 +00:00
Rohit Malhotra
b2a4b4ed90 [Refactor]: Modularize settings storage logic (#7868)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-16 13:30:13 -04:00
tofarr
9262babc3b Fix for error on close (#7884) 2025-04-16 11:13:58 -06:00
dependabot[bot]
1c80ded753 chore(deps-dev): bump the eslint group across 1 directory with 2 updates (#7790)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-16 19:41:25 +04:00
Xingyao Wang
4de8c4d6b1 Update repo microagent docs with frontend action handling information (#7856)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-16 14:27:31 +00:00
Xingyao Wang
91f2254039 frontend: fix terminal prompt and command styling (#7872)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-16 22:13:15 +08:00
Calvin Smith
66fd156c65 feat: Combining condensers (#7867)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-04-16 07:09:13 -06:00
Xingyao Wang
4ec16f3c2e microagent: Update github.md to avoid agent marking PR as ready for review (#7873) 2025-04-15 23:56:41 -04:00
Robert Brennan
628003abef Convert terminal to tab, make terminal read only (#7795)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-04-16 11:22:52 +08:00
Xingyao Wang
07e400b73d refactor(mcp): simplify MCP config & fix timeout (#7820)
Co-authored-by: ducphamle2 <ducphamle212@gmail.com>
Co-authored-by: trungbach <trunga2k29@gmail.com>
Co-authored-by: quangdz1704 <Ntq.1704@gmail.com>
Co-authored-by: Duc Pham <44611780+ducphamle2@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-16 11:04:21 +08:00
Tom Deckers
7e14a512e0 Add base_domain parameter for GitHub Enterprise support (#7754)
Co-authored-by: Tom Deckers <tdeckers@cisco.com>
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-04-16 00:00:32 +00:00
Rohit Malhotra
d7e8f843ad [Docs]: Add GitLab token setup documentation (#7635)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-15 17:25:25 -04:00
Xingyao Wang
e69ae81ad2 Add GPT-4.1 to function calling list (#7866)
Co-authored-by: Juan Michelini <juan@juan.com.uy>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-15 18:12:15 +02:00
dependabot[bot]
03c5db32e6 chore(deps): bump the version-all group with 8 updates (#7865)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-15 15:40:04 +00:00
Engel Nyst
5e5bf23f9c [Evaluation] Fix KeyError when the instance failed prematurely (#7864) 2025-04-15 15:19:31 +00:00
Shotaro Sano
e0fcd7a61e Fix issue #6098: Prevent duplicate error message display in chat interface (#7858) 2025-04-15 16:21:23 +04:00
Ryan H. Tran
e9989d1085 Upgrade openhands-aci to 0.2.10 (#7810) 2025-04-15 18:43:44 +07:00
Xingyao Wang
49c515b252 frontend: Display think action as action rather than text (#7852)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-15 09:09:16 +08:00
Robert Brennan
2d05578c21 Fix links in readme (#7854) 2025-04-15 02:27:25 +04:00
Engel Nyst
d05a6f30e1 [Refactor] Rename codeact_* agent options to simple name (#7853) 2025-04-15 00:14:13 +02:00
Calvin Smith
10c81c39fb Fix export conversation button in Safari (#7662)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-04-14 15:10:20 -06:00
sumeetkumar1701
2d599349ef fix:Transmitting accurate head parameter in cross-repository pull requests. (#7788) 2025-04-14 17:57:15 +00:00
mamoodi
33caf5c6ca Update feature template to add note about adding reaction (#7847) 2025-04-14 13:56:04 -04:00
Ciocanel Razvan
a9850766a7 Allow input for pr_type openhands-resolver.yml (#7619)
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-04-14 17:53:58 +00:00
OpenHands
77e2416def Fix issue #7826: [Bug]: Chat input box is too small (#7827) 2025-04-14 12:19:38 -05:00
蔡政特
02af9865ec fix: Runtime local docker environment HTTPStatusError (#7648)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-04-14 15:41:54 +00:00
dependabot[bot]
75ca2aa6b1 chore(deps): bump the version-all group with 10 updates (#7846)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 17:16:27 +02:00
mamoodi
d820661592 Update docs on why we use sandbox user (#7845) 2025-04-14 11:01:35 -04:00
Robert Brennan
1ff351a4f1 Add OpenHands Cloud to README, other minor tweaks (#7844) 2025-04-14 14:01:52 +00:00
OpenHands
78b8e58561 Fix issue #7837: [Bug]: Unit tests for tool use support (#7838)
Co-authored-by: Engel Nyst <engel.nyst@gmail.com>
2025-04-14 15:45:37 +02:00
tofarr
fddbfce51a Fix for race condition in cache (#7812) 2025-04-12 07:43:34 -06:00
Rohit Malhotra
20d3766451 [Fix]: Use better auth header for GitLab microagent (#7828) 2025-04-11 20:09:28 -04:00
sp.wack
72b5e18898 fix(backend): Return 400 if trying to open a binary file (#7825) 2025-04-11 22:47:57 +00:00
Rohit Malhotra
03b8b8c19a (Chore): Rm single provider legacy code (#7821)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-11 18:21:35 +00:00
Panduka Muditha
7c2f1b075e feat: CLI enhancements to support /init, /help and /exit (#7801)
Co-authored-by: Bashwara Undupitiya <bashwarau@verdentra.com>
2025-04-11 14:13:41 -04:00
Graham Neubig
883da1b28c Add extensive typing to openhands/runtime/plugins directory (#7726)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-12 02:02:53 +08:00
Engel Nyst
bb98d94b35 [evaluation] fix missing metadata (#7819) 2025-04-11 16:58:59 +00:00
sp.wack
d114c45135 chore: Improve pre-commit (#7818) 2025-04-11 20:55:26 +04:00
Calvin Smith
36e092e0ac fix: Disable prompt caching in default condenser (#7781)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-04-11 10:09:23 -06:00
Ray Myers
e2bb69908a chore - Rebuild docker image in fork CI instead of using artifacts (#7809) 2025-04-11 11:06:46 -05:00
Ray Myers
cd33c5eac7 Revert "chore - User docker cache mount for vscode server archive (#7… (#7817) 2025-04-11 16:04:50 +00:00
dependabot[bot]
0f8a139fb5 chore(deps): bump the version-all group with 5 updates (#7814)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 17:06:59 +02:00
Xingyao Wang
ced4ee3038 Fix: Display accumulated token usage in frontend metrics (#7803)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-11 22:38:47 +08:00
Robert Brennan
cc19dac939 move typecheck (#7804) 2025-04-10 17:37:14 -04:00
Ray Myers
4c7c73a6f2 chore - User docker cache mount for vscode server archive (#7785) 2025-04-10 16:31:20 -05:00
Robert Brennan
0493fea9fc fix for status messages not showing up (#7802) 2025-04-10 17:16:33 -04:00
Robert Brennan
1c2db9f468 Fix chat background on mobile devices (#7798)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-10 15:40:43 -04:00
Ray Myers
c210230802 chore - Add more workers to speed up runtime CI tests (#7796) 2025-04-10 14:10:29 -05:00
mamoodi
9b12989a36 Update OpenHands cloud docs with conversation persistence section (#7794)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-04-10 14:10:20 -04:00
dependabot[bot]
f1bcd72cd8 chore(deps): bump the version-all group with 8 updates (#7792)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-10 19:22:16 +02:00
Ray Myers
a5c57fbd3a chore - Do not install playwright in CI build steps (#7786) 2025-04-10 11:55:02 -05:00
NarwhalChen
513f7ab7e7 fix(llm): ensure base_url has protocol prefix for model info fetch when using LiteLLM (#7782)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-04-10 20:10:06 +04:00
juanmichelini
53c0c5a07b SWE-bench_verified instruction baseline improvements to 60% (#7546)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-04-10 16:08:27 +00:00
Robert Brennan
d924e7cea5 fix occurrences of MicroAgent to the standard "Microagent" (#7791) 2025-04-10 15:23:19 +00:00
mamoodi
7910a90522 Release 0.32.0 (#7761) 2025-04-10 08:45:04 -04:00
Duc Pham
35d49f6941 feat (backend): Add support for MCP servers natively via CodeActAgent (#7637)
Co-authored-by: trungbach <trunga2k29@gmail.com>
Co-authored-by: quangdz1704 <Ntq.1704@gmail.com>
Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
2025-04-10 01:59:13 +00:00
dependabot[bot]
e359a4affa chore(deps-dev): bump typescript from 5.8.2 to 5.8.3 in /docs in the version-all group (#7779)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-04-10 01:21:13 +04:00
Robert Brennan
159f79f9d8 fix i18n script (#7783) 2025-04-09 20:45:11 +00:00
dependabot[bot]
827c19ccd9 chore(deps): bump the version-all group with 5 updates (#7777)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-09 18:29:28 +00:00
tofarr
588b9f34be Fix scrolling (#7780) 2025-04-09 16:35:29 +00:00
Ray Myers
fb02fefaca chore - Remove unneeded dependencies from main poetry (#7772) 2025-04-09 11:24:30 -05:00
dependabot[bot]
856d5ff976 chore(deps): bump the version-all group across 1 directory with 28 updates (#7741)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-04-09 14:39:21 +00:00
sp.wack
eb4aeb3922 Fix frontend pre-commit and move unlocalized strings check to pre-commit hook (#7763)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-09 14:29:36 +00:00
Ray Myers
4b47e5215b chore - Use blacksmith docker build with caching (#7771) 2025-04-09 08:50:09 -05:00
Xingyao Wang
0087082643 Improve binary file handling and patch generation in SWE-bench evaluation (#7762)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-08 22:57:33 +00:00
Graham Neubig
e698a393b2 Add more extensive typing to openhands/core directory (#7728)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-08 17:38:44 -04:00
Ray Myers
d48e2a4cf1 chore - Remove redundant cache saving from CI (#7768) 2025-04-08 16:11:17 -05:00
Ray Myers
749a903de5 chore - Skip building Ubuntu runtime image on PR (#7765) 2025-04-08 15:02:25 -05:00
sp.wack
0a6321246a chore(frontend): Remove waitlist variant of auth modal (#7150)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-04-08 18:56:27 +00:00
Xingyao Wang
ddda30d9b7 fix(eval): iterative evaluation improvements; SWE-Bench multimodal fixes (#7739)
Co-authored-by: Juan Michelini <juan@juan.com.uy>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-09 02:44:03 +08:00
dependabot[bot]
d1851cc3ee chore(deps): bump the version-all group in /docs with 2 updates (#7659)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-08 18:09:11 +00:00
dependabot[bot]
883bf5847b chore(deps): bump the version-all group with 4 updates (#7759)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-08 16:14:07 +00:00
sp.wack
1c8ab4d835 hotfix(frontend): Update route file names (#7528) 2025-04-08 15:41:35 +00:00
sp.wack
255e209886 Refactor file service (#7533) 2025-04-08 15:41:22 +00:00
Graham Neubig
c8904e4672 Add more extensive typing to openhands/integrations directory (#7730)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-08 10:54:07 -04:00
OpenHands
dcfc2da428 Fix issue #6037: [Bug]: [Resolver] crashes on main (#6284)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-08 14:06:02 +00:00
Graham Neubig
84e28234e5 Add extensive typing to openhands/security directory (#7732)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-08 13:51:05 +00:00
Panduka Muditha
60e8b5841c feat: Add basic support for prompt-toolkit in the CLI (#7709)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Bashwara Undupitiya <bashwarau@verdentra.com>
2025-04-08 08:47:11 -04:00
Carlos Freund
dd03d9adce feat(frontend):Display path of file ops and cmd in headline (#7530)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Carlos Freund <carlosfreund@gmail.com>
2025-04-08 08:44:42 -04:00
Engel Nyst
9fa211bc27 Fix API version in the resolver (#7756)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-08 09:01:23 +00:00
Engel Nyst
22cf5144cc Fix integration test (#7747) 2025-04-07 22:31:50 -04:00
Ray Myers
99e493b3a4 feature - Build alternate ubuntu images (#7691) 2025-04-07 19:04:17 -05:00
mamoodi
e4d92d6f56 Update docs with updated info (#7714)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-04-07 21:12:30 +00:00
Graham Neubig
a9d08852db Update llms.md to update recommended models (#7750) 2025-04-07 20:29:44 +00:00
Calvin Smith
408ad1ff2b Enables condensation by default (#7746)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-04-07 11:47:51 -06:00
dependabot[bot]
69d4a8df7c chore(deps): bump the version-all group with 7 updates (#7743)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-07 17:20:59 +00:00
mamoodi
02f92164de Update issue templates (#7740) 2025-04-07 13:17:03 -04:00
Robert Brennan
1549927fa3 Update conversation metadata with cost and token metrics (#7561)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-07 17:09:50 +00:00
Boxuan Li
e951da7a25 Fix action execution server JSONResponse (#7721) 2025-04-07 22:49:39 +08:00
Carlos Freund
f830d5814c fix(unittest): Parallel Test failure because of shared memory (#7729)
Co-authored-by: Carlos Freund <carlosfreund@gmail.com>
2025-04-07 09:29:22 -04:00
Carlos Freund
0519e9e3c2 fix(test) test_memory: initialize in fixture with new dict. (#7733)
Co-authored-by: Carlos Freund <carlosfreund@gmail.com>
2025-04-06 23:52:14 +02:00
Graham Neubig
9b8a628395 Add more extensive typing to openhands/llm/ directory (#7727)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-06 17:59:25 +00:00
Xingyao Wang
288bcd254e fix: retry on retryable httpx-related error to improve evaluation stability (#7719)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-06 10:38:50 -04:00
tofarr
c71ef11a25 Fix useScrollToBottom hook for rapid content changes (#7715)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-05 18:05:53 -06:00
Xingyao Wang
0ab9d97f2d fix(llm): retry on InternalServerError and Timeout; handle Gemini returns len(choices) < 1 (#7713)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-05 21:33:17 +00:00
Engel Nyst
b326433330 Fix git provider (#7712) 2025-04-04 22:34:38 +02:00
dependabot[bot]
a5931177fd chore(deps): bump the version-all group with 4 updates (#7707)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-04 16:27:52 +00:00
tofarr
aa17460cc5 Using a paged cache to speed up event streams (#7667)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-04 07:58:36 -06:00
Xingyao Wang
8bf197df31 feat: prompt agent to follow PR template when create new PR (#7698) 2025-04-03 23:02:24 +00:00
Calvin Smith
f74243542d feat: Structured summary generation for history condensation (#7696)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-04-03 17:02:01 -06:00
Rohit Malhotra
a4ebb5bf85 [Feat]: Add GitLab support for repo list in Cloud Openhands (#7633)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-03 23:01:22 +00:00
Calvin Smith
cc1aadaba5 fix: Tweak prompting behavior of LLMSummarizingCondenser (#7695)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-04-03 16:06:10 -06:00
Xingyao Wang
8bceee9e42 frontend: update browser tab title with conversation title (#7694)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-03 21:13:10 +00:00
Xingyao Wang
e8fe9ae67e chore: update teaser video in documentation (#7693) 2025-04-03 20:17:55 +00:00
OpenHands
06c68082bb Fix issue #7658: [Bug]: BadRequestError from ContentPolicyViolationError (#7660)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-03 21:36:16 +02:00
OpenHands
6cfaad86ea Fix issue #7205: [Feature]: Allow repo microagent Markdown Files Without Required Header (#7655)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-03 19:04:51 +00:00
Graham Neubig
a899f80ee9 Fix mypy errors in storage directory (#7692)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-03 19:01:43 +00:00
Xingyao Wang
292217b8b4 Implement frontend visualization for RecallObservation & Stop issueing recall action for agent message (#7566)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-04 02:08:50 +08:00
Graham Neubig
a828318494 Add type hints to runtime directory (#7491)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-03 13:51:31 -04:00
Robert Brennan
47515ea876 downgrade log to debug (#7687) 2025-04-03 13:50:49 -04:00
dependabot[bot]
860f02ff49 chore(deps): bump the version-all group with 2 updates (#7689)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-03 16:29:38 +00:00
Rohit Malhotra
f5fa076fdd [Fix]: Ensure refresh logic works for restarted conversations in cloud openhands (#7670)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-03 11:58:01 -04:00
Graham Neubig
d3043ec898 feat: localize missing elements (#7485)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-04-03 10:58:18 -04:00
Robert Brennan
b3baea2421 Fix gitlab cloning instructions (#7686)
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-04-03 14:55:30 +00:00
Rohit Malhotra
9e625ec6c5 (Hotfix): Rm owner req from GitLab repo list (#7682) 2025-04-03 09:36:04 -04:00
Boxuan Li
d7c49a0656 [Evaluation] Fix sandbox config in TAC (#7684) 2025-04-03 08:19:10 +00:00
Boxuan Li
34bf6a6402 [Evaluation] Fix run_infer.py path in TAC (#7683) 2025-04-03 04:34:02 +00:00
Rohit Malhotra
5deb47aacc [Fix]: Plumb full selected repo object from FE (#7668) 2025-04-03 02:47:28 +00:00
Engel Nyst
d7f651a06c Fix cached tokens (#7679)
Co-authored-by: OpenHands Bot <openhands@all-hands.dev>
2025-04-03 01:11:18 +00:00
dependabot[bot]
5b3921586f chore(deps): bump the version-all group across 1 directory with 9 updates (#7675)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-03 00:48:03 +00:00
Graham Neubig
ac462fae06 Update VSCode version from 1.94.0 to 1.98.2 in extensions (#7677)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-03 00:01:24 +00:00
Shixian Sheng
4fb073d1ea Fixed a few hyperlinks. Translated some texts (#7652) 2025-04-02 22:10:19 +00:00
mamoodi
226c8dc947 Some documentation updates for consistency (#7674) 2025-04-02 21:41:48 +00:00
Sam Salfi
19b589f381 Fix "let's get back on track" message on consecutive headless tasks (#7663) 2025-04-02 23:15:28 +02:00
Ray Myers
05f9cc1bb5 chore - Update browsergym and playwright for security updates (#7672)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-02 21:04:06 +00:00
mamoodi
6b2ece35da Release version 0.31.0 (#7629)
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-04-02 15:30:45 -04:00
Rohit Malhotra
75b3270cf0 [Bug]: Ensure repository search only returns public repositories (#7665)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-02 15:21:19 -04:00
Robert Brennan
40dd175a0f update vscode and package.json (#7653) 2025-04-02 14:03:38 -04:00
Engel Nyst
0536a53833 Clean out debug print (#7666) 2025-04-02 17:34:05 +00:00
Robert Brennan
9096938d4a dont return asterisks for api key (#7654)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-02 16:41:56 +00:00
tofarr
f14a0ea011 Separate event store from event stream (#7592) 2025-04-02 10:05:59 -06:00
Ryan H. Tran
5524fe1408 Upgrade openhands-aci to 0.2.8 (#7656) 2025-04-02 15:03:24 +00:00
Xingyao Wang
6851215410 fix inline imports in LLM-generated title (#7642) 2025-04-01 22:15:12 +00:00
Xingyao Wang
b91acbb14a (feat): stop auto generate title in converstaion GET (#7638) 2025-04-01 17:19:48 -04:00
Ray Myers
0045d46d9d Update dockerfile to remove vulnerabilities in Debian 12 (#7630) 2025-04-01 14:09:01 -05:00
Rohit Malhotra
a2e9e23569 (Chore): Rename GitHub instances to Git (#7625)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-04-01 16:53:37 +00:00
dependabot[bot]
8e61f8e688 chore(deps): bump the version-all group with 7 updates (#7624)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 18:44:58 +02:00
Robert Brennan
b4bc08e70c Fix "no query provided" (#7564) 2025-04-01 12:31:46 -04:00
Ray Myers
242664f81b fix - Remove unmatched tool calls for Claude (#7597) 2025-04-01 10:45:04 -05:00
VS
4a2045ecca [Fix] Github Action possible command injection via unsanitised user input like review body and gti (#7569)
Co-authored-by: Vasyl Spachynskyi <vasyl.spachynskyi@dataart.com>
2025-04-01 23:26:46 +08:00
Rohit Malhotra
89bfbfad59 [Feat]: Gitlab p2 - let user add PAT via FE (#7125) 2025-04-01 11:23:58 -04:00
Bill Yuchen Lin
7488d1d0cb add support of DOCKER_HOST_ADDR (#7593) 2025-04-01 14:54:49 +00:00
Rohit Malhotra
9adfcede31 (Hotfix): Track reason for Error AgentState (#7584)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-31 21:24:42 +00:00
Calvin Smith
abaf0da9fe fix: Context window truncation using CondensationAction (#7578)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-03-31 13:47:00 -06:00
Xingyao Wang
648c8ffb21 (llm): Support OpenHands LM (#7598)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-03-31 17:29:31 +00:00
tofarr
6ae2984580 Fix for circular import on ConversationValidator (#7583) 2025-03-31 11:09:10 -06:00
dependabot[bot]
f12bf985ce chore(deps): bump the version-all group with 6 updates (#7600)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 15:44:35 +00:00
Xingyao Wang
b6321488bc Update pre-commit instructions in repository memory (#7595)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-31 21:15:45 +08:00
Xingyao Wang
54236f9617 [eval] Support SWE-Bench Multimodal (#7122)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-31 07:42:44 -04:00
Xingyao Wang
2c4496b129 feat: Use LLM-generated natural-language descriptions as conversation title (#7049)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-30 21:34:07 +00:00
Peter Dave Hello
4b177992f8 Clean up apt temporary files in app Dockerfile (#7590) 2025-03-30 16:37:54 +00:00
mkusaka
fa61e862e0 Fix broken markdown link for Anthropic billing settings (#7589)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-30 14:23:46 +00:00
Ken Jenney
6d90e80c51 Update NodeJS Version Requirement (#7586) 2025-03-28 23:57:16 +00:00
mamoodi
f3ea6034b1 Fix link to local filesystem (#7579) 2025-03-28 14:52:26 -04:00
dependabot[bot]
7fdf61018b chore(deps): bump modal from 0.73.130 to 0.73.131 in the version-all group (#7576)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-28 18:16:16 +01:00
Graham Neubig
aab818716e Add Japanese documentation (#7386)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-28 14:14:45 +00:00
Xingyao Wang
ac8b5e7934 [agent, browsing] Support viewing pdf and png/jpg via browser (#7457)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Boxuan Li <liboxuan@connect.hku.hk>
2025-03-28 07:07:33 +00:00
Carlos Freund
23505576a6 build(make) Automatically use dev-wsl (#7418) 2025-03-27 23:30:46 -07:00
Xingyao Wang
d69e4feb1b Fix #7473: Prevent OpenHands from creating additional pull requests unless explicitly instructed (#7476)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-28 07:18:20 +08:00
dependabot[bot]
faf0b93299 chore(deps): bump the version-all group across 1 directory with 9 updates (#7563)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-27 22:52:25 +00:00
Ray Myers
0356df8c6b Add async ruff linting and remove flake8 dependency (#7539) 2025-03-27 16:54:53 -05:00
Robert Brennan
2d66939b42 fix error message (#7550) 2025-03-27 13:35:41 -07:00
Carlos Freund
a0c79f7388 fix(Runtime): Wait for container to start up (#7548)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: tofarr <tofarr@gmail.com>
2025-03-27 13:55:06 -06:00
tofarr
a44cdae36e Fix for broken OpenAPI Schema (#7558) 2025-03-27 13:28:53 -06:00
Engel Nyst
7aa7eb2399 Fix uninitialized accumulated tokens (#7553) 2025-03-27 20:19:10 +01:00
Calvin Smith
42712a44d8 (fix): Condensation events to reconstruct contexts added to event stream (#7353)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-03-27 13:16:31 -06:00
Rohit Malhotra
76c992e2df [Feat]: Trigger microagents on agent keywords (#7516) 2025-03-27 13:58:37 -04:00
mamoodi
26b420a01d Release 0.30.1 (#7545) 2025-03-27 13:26:28 -04:00
dependabot[bot]
e707be429e chore(deps): bump the version-all group across 1 directory with 27 updates (#7475)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-03-27 16:14:21 +00:00
Xingyao Wang
24773e15c5 Fix Push & Create PR button prompt to request meaningful branch names (#7529)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-27 23:21:52 +08:00
Caique
5dba964281 docs: Improve the Microagents usage documentation (#7542) 2025-03-27 15:11:14 +00:00
VS
1596a6cc62 fix: correct string concatenation in llm_summarizing_condenser.py (#7541) 2025-03-27 07:28:45 -07:00
Rohit Malhotra
0df87bfacc [Feat]: Tell the agent the current date (#7509) 2025-03-27 01:23:12 -04:00
Engel Nyst
8e9eb7d07d Reduce max iterations by default (#7535) 2025-03-27 01:00:14 +00:00
Rohit Malhotra
60196d2eca (Hotfix): Github token fails to refresh on cloud openhands (#7532) 2025-03-27 00:05:38 +00:00
tofarr
b9af0188fe Feat vscode startup (#7518)
Co-authored-by: OpenHands Bot <openhands@all-hands.dev>
2025-03-26 16:01:23 -06:00
Engel Nyst
9850f1767a Use response_id to track token usage for MessageActions (#6913)
Co-authored-by: Calvin Smith <email@cjsmith.io>
2025-03-26 21:07:01 +01:00
tofarr
c5491e87aa Run runtime.close in background thread (#7524) 2025-03-26 12:12:59 -06:00
dependabot[bot]
400afeb70e chore(deps): bump the version-all group across 1 directory with 15 updates (#7520)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-26 17:11:30 +01:00
Xingyao Wang
c63d52d5e6 (llm): Track accumulated token usage instead of per-request token usage (#7511)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Boxuan Li <liboxuan@connect.hku.hk>
2025-03-26 16:05:36 +00:00
tofarr
1230b229b5 Replace use of requests with httpx (#7354) 2025-03-26 13:37:10 +00:00
Rohit Malhotra
72d5f1fe53 [Fix]: Add min amount to funds placeholder (#7517) 2025-03-25 21:14:11 -07:00
Boxuan Li
e3a5df514e (chore) Remove unused grep-ast dependency (#7414)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-25 20:45:00 -07:00
Graham Neubig
aaf65ebf0f Update translation updater to use claude-3-7-sonnet-20250219 (#7500)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 15:56:44 -07:00
mamoodi
844d84d7bb Release 0.30.0 (#7467)
Co-authored-by: மனோஜ்குமார் பழனிச்சாமி <smartmanoj42857@gmail.com>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-03-25 18:39:36 -04:00
Rohit Malhotra
5a3eca2a2a [Refactor]: Create dedicated reset settings route (#7472)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 18:34:55 -04:00
tawago
efcf30a23d Update the resolver workflow once a new release includes #7287 (#7343) 2025-03-25 18:25:33 -04:00
Xingyao Wang
951cb1c880 Fix TypeError in bash parsing with unclosed backticks (#7392)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 21:38:01 +00:00
Calvin Smith
78b67bc9d9 Update event schema types to use enum pattern (#7498)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-25 15:36:13 -06:00
sp.wack
500e09f12b hotfix(frontend): Wrap WS tests in query provider for migration changes (#7504) 2025-03-25 22:45:04 +04:00
Caique
2a5e17d548 docs(frontend): add environment variables in .env.sample and README (#7401) 2025-03-25 22:08:20 +04:00
mamoodi
6541eab43b Remove empty lines in pyproject (#7501) 2025-03-25 17:02:09 +00:00
Robert Brennan
2e72ef151e Add API key instructions and update documentation links (#7434)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 16:25:55 +00:00
Robert Brennan
032eb152bf Fix WebSocket timeout messages in chat window (#7405)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-25 09:17:18 -07:00
sp.wack
63ebd9e338 hotfix(frontend): Show background color for logout button (#7495) 2025-03-25 11:59:28 -04:00
Zach
1064939013 Fix incorrect file position descriptions in script comments (#7492) 2025-03-25 16:48:48 +01:00
Engel Nyst
ff6312ab02 Remove unused AgentSummarizeAction and SUMMARIZE action type (#7283)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 16:46:41 +01:00
Graham Neubig
036fa5dccf Add type hints to storage directory (#7110)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 08:01:04 -07:00
Graham Neubig
86c6feafcc Fix mypy errors in runtime/utils directory (#6902)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 08:00:03 -07:00
Graham Neubig
0efe4feb2a Fix mypy errors in core/config directory (#7113)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-25 05:57:00 -07:00
Graham Neubig
8b473397d1 Fix mypy errors in events directory (#6810)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-25 06:30:58 +00:00
Caique
23e775b1e0 docs: add pt-BR translation for official docs (#7416) 2025-03-24 23:13:52 +00:00
Boxuan Li
f7d3516dec Trajectory replay on web app (under feature flag) (#6348) 2025-03-24 14:40:07 -07:00
Engel Nyst
de05ea898e Make the conversation title a little longer (#7477)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-03-24 20:47:33 +00:00
Engel Nyst
94cb91947d Don't set seed for users (#7474) 2025-03-24 19:38:45 +00:00
Xingyao Wang
b1470a1ac4 (frontend): only show "download via vscode" in conversation card (#7471) 2025-03-24 18:44:17 +00:00
மனோஜ்குமார் பழனிச்சாமி
2518901e6e feat: Support seed parameter (#7441) 2025-03-24 19:18:00 +01:00
tofarr
e639283ac9 Fix for overflow (#7470) 2025-03-24 17:32:38 +00:00
dependabot[bot]
28cc04908c chore(deps-dev): bump pre-commit from 4.1.0 to 4.2.0 in the pre-commit group (#7345)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-24 17:19:25 +00:00
tofarr
1a3354404e Fix text wrap on context menu (#7468) 2025-03-24 16:44:04 +00:00
Ryan H. Tran
80279f9d36 Upgrade openhands-aci to 0.2.7 (#7462) 2025-03-25 00:15:59 +08:00
Zach
0b3d15a4d7 Fix missing 'fi' statement in GAIA benchmark scripts/run_infer.sh (#7465) 2025-03-24 16:04:25 +00:00
Marco Dalalba
8b68d086f0 fix #7267: adding base url to axios (#7267) 2025-03-24 09:25:52 -04:00
Engel Nyst
0f143a43c9 Add support for .openhands/setup.sh script in all entry points (#7459)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-24 13:37:08 +01:00
Engel Nyst
e61e4d57d9 Fix #7451: Add guidance to use git add . in system prompt (#7458)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-03-24 13:33:45 +01:00
Xingyao Wang
4e86bdf3d9 (frontend): Implement BrowseInteractiveAction in frontend (#7452)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-23 22:17:56 -04:00
Robert Brennan
3cef499b81 Fix conversation list: remove GitHub link and show created_at date (#7435)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-23 20:08:02 -06:00
Xingyao Wang
e2a0884ecd Update repo.md to remind the agent about PR template (#7456) 2025-03-24 02:03:56 +00:00
Robert Brennan
2849974729 [WIP] better code display (#7453)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-23 18:10:07 -07:00
Kento Sugita
daa4af18d1 fix timeout to impove stability (#7443) 2025-03-23 15:06:05 -07:00
Xingyao Wang
1ec1076fee [microagent] Add pdflatex microagent (#7444)
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-24 03:08:22 +08:00
tofarr
65bd4be607 Fix for broken vscode url (#7442) 2025-03-23 10:17:12 -06:00
Robert Brennan
306188817f Remove upload functionality and add tooltip for Code not in GitHub link (#7431)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-23 02:03:05 +00:00
Robert Brennan
99aa9bef70 Refactor runtime documentation and add hardened Docker installation guide (#7429)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-23 01:35:47 +00:00
Robert Brennan
9e975ba566 Add logo color (#CFB755) for tab icons (#7433)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-23 01:19:14 +00:00
Robert Brennan
782e143c22 update placeholder text for credits (#7430) 2025-03-22 18:18:43 -07:00
Robert Brennan
e0a3b4b822 Move documentation link above settings gear in sidebar (#7432)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-22 18:18:31 -07:00
Robert Brennan
b53a5e7528 Optimize file_editor pattern with prefix check (#7428)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-22 17:31:18 -07:00
Robert Brennan
8dda45bf99 Change API key placeholder to <hidden> when key is set (#7427)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-22 16:30:54 -07:00
Robert Brennan
0a0ed3f606 Add "Setting up workspace..." status message during repo cloning and setup (#7424)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-22 23:52:59 +01:00
Xingyao Wang
01e0e29a9f Reduce bash SOFT timeout from 30 to 10 seconds (#7423)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-22 22:42:24 +00:00
Robert Brennan
e57305ee0c Remove continue button and associated logic (#7425)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-22 22:22:53 +00:00
Robert Brennan
3c43d3d154 Auto-generate conversation titles from first user message (#7390)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-03-22 22:07:33 +00:00
Robert Brennan
fd7c2780f5 Add support for .openhands/setup.sh script (#5985)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-22 14:46:35 -07:00
Xingyao Wang
6f9ced1c23 [Observability] add metadata to track llm request for sessions (#7381)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-03-23 04:20:38 +08:00
Paige Bailey
e255aa95fe Updated to reference the new Gemini 2.0 flash model. (#7420) 2025-03-22 19:50:04 +01:00
Rohit Malhotra
f2a742130d (Chore): Use OH logger instead of prints for resolver (#7407) 2025-03-22 13:28:02 -04:00
Boxuan Li
d343e4ed9a Config to save screenshots in trajectory (#7284) 2025-03-22 05:43:01 +00:00
Engel Nyst
0fec237ead Remove unused event_to_memory function from serialization code (#7412)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-21 22:13:59 -07:00
sp.wack
4c103761f9 Fix flaky test (#7408) 2025-03-21 23:33:53 +00:00
Engel Nyst
a03ad1079c Rename oh_action to oh_user_action for clarity (#7368)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-21 22:23:15 +00:00
sp.wack
7d0e2265f7 chore: Feature flag refactor (#7393) 2025-03-21 21:45:59 +00:00
mamoodi
8532c94d8e Remove additional prompt for the app feature (#7406)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-03-21 21:43:00 +00:00
Jason Burt
838e3d5ae4 Add comprehensive frontend testing documentation with example links (#7327)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-03-21 21:03:40 +00:00
AutoLTX
3bc52cad7b [FrontEnd] Display API cost and token usage in frontend (#7099)
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-03-21 20:43:53 +00:00
sp.wack
ce26f1c6d3 fix(frontend): Remove settings context (#7378) 2025-03-21 19:55:16 +04:00
Robert Brennan
37188c7606 Clean up conversation joining (#7379) 2025-03-21 09:18:37 -04:00
Rohit Malhotra
d9926d2491 (hotfix): Pass git providers object for only remote runtimes (#7387) 2025-03-20 23:28:28 +00:00
Rohit Malhotra
41efa100f0 [Fix]: Plumb provider tokens to runtime (#7247)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-20 22:43:27 +00:00
Engel Nyst
6f204fd557 Fix stream iterator (#7384)
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-03-20 23:25:28 +01:00
Xingyao Wang
9bd1992738 Remove download workspace and download files buttons (#7333)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-21 03:26:30 +08:00
diwu-sf
3856a896ea fix file chunking corruption (#7338) 2025-03-20 15:21:36 -04:00
Rohit Malhotra
b0030d3a2b [Bug]: Use json dumps instead of str repr to prevent escape character mismatches (#7369) 2025-03-20 10:33:15 -04:00
sp.wack
d76477099c chore(frontend): Hardcode feature flag values (#7360)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-03-20 13:36:49 +00:00
tawago
3e3b2aaa5c Rename --repo argument to --selected-repo to avoid confusion in the resolver workflow (#7287)
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-03-20 05:01:00 +00:00
Robert Brennan
1f8aa93843 revert runtime for resolver (#7365) 2025-03-20 04:52:43 +00:00
Engel Nyst
34920ea04e Save agent state (#7372) 2025-03-20 05:16:49 +01:00
Graham Neubig
f5aeb47a72 Fix homepage internationalization (Issue #7355) (#7359)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-19 17:48:30 -04:00
Engel Nyst
c830177207 Move security.md to the global microagents (#7361) 2025-03-20 05:40:05 +08:00
Xingyao Wang
e4ccd4057d misc: tweak frontend prompt to prevent agent push to a different branch & update app prompt (#7357) 2025-03-20 05:09:51 +08:00
chuckbutkus
c3d60b31d1 All-1465 Move user conversations (#7340) 2025-03-19 16:03:09 -04:00
mamoodi
35b70ca915 Release 0.29.1 (#7350) 2025-03-19 16:01:16 -04:00
Ivan Dagelic
a8d65c11e0 fix: daytona runtime action execution handling (#7100)
Signed-off-by: Ivan Dagelic <dagelic.ivan@gmail.com>
2025-03-19 15:27:41 -04:00
Xingyao Wang
a4746a53d8 Update prompt for runtime additional info (#7349) 2025-03-19 16:35:20 +00:00
Zaid Sheikh
13bb474623 feat(Session): add sandbox base, runtime container image to session settings (#7329) 2025-03-19 16:08:43 +00:00
blacksmith-sh[bot]
09aa62f1c3 blacksmith.sh: Migrate workflows to Blacksmith (#7148)
Co-authored-by: blacksmith-sh[bot] <157653362+blacksmith-sh[bot]@users.noreply.github.com>
2025-03-19 15:10:17 +00:00
Robert Brennan
cbc26a5e40 Pass litellm error types to user and update error message (#7344)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-19 14:44:30 +00:00
Graham Neubig
6824d14ed8 Update config.template.toml to match current codebase (#7314)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-19 15:37:49 +01:00
Engel Nyst
d9e40f721c (chore) Fix linting issues across the codebase (#7336)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-19 04:42:26 +00:00
Jason Burt
8a73184801 Docs : adding in github fine grained tokens documentation and settings link to documentation … (#7192)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-18 22:04:52 -04:00
Rohit Malhotra
06e8c4dad4 [Debug]: Add logs to runtime to assess root cause of expired github token (#7331) 2025-03-18 22:40:00 +00:00
Rohit Malhotra
e2521743b6 [Bug]: Refresh runtime gh token when agent calls gh apis (#7330) 2025-03-18 21:24:57 +00:00
Xingyao Wang
f2a54f4e23 Implement asynchronous browser initialization (#7328)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-19 03:34:57 +08:00
Graham Neubig
a594595fea docs: fix broken links in LLM documentation (#7322)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-18 18:45:12 +01:00
Joseph Turian
0620679d11 fix: Correct JavaScript syntax in GitHub Actions workflow (#7194) 2025-03-18 13:42:37 -04:00
Nick
78708efbf1 feat(microagents): Add security microagent (#7323) 2025-03-18 17:13:06 +00:00
Jason Burt
cf06f20a0e docs: Add development overview and documentation resources (#7220)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-18 17:09:37 +00:00
dependabot[bot]
c68fba01a8 chore(deps): bump the version-all group with 4 updates (#7325)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-18 16:55:43 +00:00
mamoodi
f2c7f8a6da Release 0.29 (#7236) 2025-03-18 11:52:31 -04:00
Engel Nyst
259140ffc9 Add tests for NullObservation with cause > 0 and clarify event flow (#7315)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-18 15:21:09 +00:00
Rohit Malhotra
3150af1ad7 [Fix]: Make provider tokens immutable (#7317) 2025-03-18 10:50:13 -04:00
Xingyao Wang
dde90fc636 chore: update remote runtime docs (#7319) 2025-03-18 11:08:22 +08:00
Engel Nyst
83458f5146 Fix style issues with pre-commit (#7318)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-18 01:34:27 +00:00
mamoodi
f1149defc9 Remove python api docs from docs (#7316) 2025-03-17 19:55:46 -04:00
kjain14
507afd7f06 Add TestGenEval benchmark (#5534)
Co-authored-by: Kush Dave Jain <kdjain@pit.isri.cmu.edu>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-03-17 20:16:45 +00:00
chuckbutkus
1a755c3fdb Fix reading of old conversations (#7309) 2025-03-17 15:08:48 -04:00
dependabot[bot]
41c8c9230b chore(deps): bump the version-all group with 4 updates (#7308)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-17 18:57:56 +00:00
Xingyao Wang
9b9e728cf6 Iterative evaluation with rule-based critic (#7293) 2025-03-17 18:37:35 +00:00
Engel Nyst
a4b836b5f9 Don't try to send the new events in the UI (#7277) 2025-03-17 14:50:22 +01:00
Xingyao Wang
a4d632498c SWE-Gym rollout stability fix & using a validated SWE-Gym set (#7182)
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-03-17 21:15:01 +08:00
Engel Nyst
4f017081fc Quick fix docs (#7299)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-17 05:50:05 +00:00
Engel Nyst
51fb1fae88 RecallObservations (#7292) 2025-03-17 03:18:22 +01:00
Graham Neubig
106b230fea Update Slack invitation links (#7296)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-17 02:06:48 +00:00
Xingyao Wang
9b262dd057 fix retry on ConnectionError & retry on remote runtime by default (#7294) 2025-03-17 01:18:54 +00:00
chuckbutkus
8074b261d3 Move current user_id to github_user_id and create a new user_id field (#7231)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
2025-03-16 16:32:27 -04:00
dependabot[bot]
999a59f938 chore(deps): bump the version-all group with 5 updates (#7253)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-16 19:51:08 +00:00
chuckbutkus
fbba57d3b5 Fix saving of settings (#7282) 2025-03-16 19:06:46 +00:00
Engel Nyst
3f6c8a2338 Fix visual browsing (#7278)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-16 16:50:25 +01:00
Engel Nyst
dd09d46ccb Remove DelegatorAgent (fix #7280)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-16 16:49:28 +01:00
tofarr
8897b45eeb Fix for too much reaction in logs (#7276) 2025-03-16 08:21:30 -06:00
Ryan H. Tran
30109e8f20 Separate tool descriptions to support models with limited description length (#7258) 2025-03-16 09:48:13 +01:00
Engel Nyst
cc45f5d9c3 Add RecallActions and observations for retrieval of prompt extensions (#6909)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <email@cjsmith.io>
2025-03-15 21:48:37 +01:00
tofarr
e34a771e66 Fix for issue where initial command fails (#7254) 2025-03-14 14:49:57 -06:00
tofarr
ec763f8105 Fix for error where credits is accessed even when billing is disabled (#7250) 2025-03-14 15:10:54 +00:00
Ryan H. Tran
165c0cc42e Add doc for local runtime (#7234)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-03-14 22:09:33 +08:00
dependabot[bot]
1b4f15235e chore(deps): bump the version-all group with 4 updates (#7241)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-13 22:15:47 +01:00
Calvin Smith
303b7ab180 (fix): Conditional imports resolved in SWE-bench eval script while multiprocessing enabled (#7244)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-03-13 13:29:11 -06:00
Rohit Malhotra
78d185b102 [Feat]: Support Gitlab PAT (#7064)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-13 14:44:49 -04:00
Ryan H. Tran
300bfbdf2d Upgrade openhands-aci to 0.2.6 (#7233) 2025-03-14 02:10:59 +08:00
Xingyao Wang
e2f414bf26 chore: update doc for allhands doc (#7242)
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-14 00:32:17 +08:00
Calvin Smith
3b955dd9d5 (fix): Improve formatting of summarizing LLM inputs (#7239)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-03-13 10:21:29 -06:00
sp.wack
f1eb1f59c3 hotfix(frontend): Fix overriding tailwind animation classes (#7243) 2025-03-13 16:03:54 +00:00
sp.wack
e1f6929d98 feat: saas new user modal (#7098)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-13 19:15:57 +04:00
Engel Nyst
2a7f926591 Detect condensation loops at 10 repetitions, not 3 (#7237) 2025-03-13 14:32:01 +00:00
Xingyao Wang
b8daab721d Update agent message to use first-person perspective (#7197)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-13 04:39:24 +08:00
Robert Brennan
b3cac69121 remove old microagents (#6964)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-12 16:18:19 -04:00
Boxuan Li
49a29c19cb Remove mention of non-existent config micro_agent_name (#7209) 2025-03-13 03:33:59 +08:00
Robert Brennan
7084b0238c Fix HTTPException not callable error in action_execution_server middleware (#7215)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-13 03:10:13 +08:00
Elena Chistova
38e866cde4 Fix official SWE-Bench docker image prefix (#7214) 2025-03-12 18:23:19 +00:00
sp.wack
6ec4bc74bf chore(frontend): Turn off query caching by default (#7222) 2025-03-12 17:52:11 +00:00
juanmichelini
b36deca265 Added link to paper in commit0 README (#7221) 2025-03-12 17:17:22 +00:00
Engel Nyst
09d73d96c8 Add troubleshooting note for GitHub token in microagent (#7208)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-12 04:45:58 +01:00
dependabot[bot]
966c11f205 chore(deps): bump the version-all group across 1 directory with 17 updates (#7203)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-12 00:15:52 +00:00
Robert Brennan
5128377baa remove llamaindex (#7151)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-11 22:28:56 +00:00
Engel Nyst
924acb182b Add Swift Linux Installation Microagent (#7195)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-11 19:45:50 +00:00
tofarr
8043612420 Feat user settings (#7190) 2025-03-11 12:57:44 -06:00
Calvin Smith
637a1d5c17 Adds unit test for the interaction between agent controller truncation and condenser (#7186)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-03-11 09:57:15 -06:00
AutoLTX
5e521a4a6e Expose accumulate and llm_metric from eventstream (backend) (#7082)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-11 12:18:08 +01:00
chuckbutkus
2cb5b91300 Change names to prepare for moving to keycloak User ID (#7178) 2025-03-10 19:23:57 -04:00
answer-huang
d6e601ea2e bugfix: selected_repository may includes more then two parts, could b… (#7114) 2025-03-10 19:47:33 +00:00
Rohit Malhotra
ac680e7688 [Fix]: Remove remaining hard coded refs to sessions store (#7176)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-10 15:07:01 -04:00
mamoodi
4b04f09035 Update Cloud docs (#7158)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-10 14:00:06 -04:00
mamoodi
e99f503e0f Release 0.28.1 (#7170) 2025-03-10 13:22:34 -04:00
Rohit Malhotra
f51eb93d3e Add error logs to API response from GH Service (#7165) 2025-03-09 21:45:13 +00:00
mamoodi
7c2a98d1ce Change back the runtime binding address to 0.0.0.0 (#7161) 2025-03-09 11:37:10 -04:00
Ray Myers
dc9489ddcd Include metadata like session_id in logs (#7145) 2025-03-08 00:28:51 +01:00
sp.wack
83851c398d chore(frontend): Restyle toasts and replace all current instances with new one (#6854) 2025-03-08 01:23:50 +04:00
Xingyao Wang
a4908f9a75 [agent] system message + SWE-Bench instruction improvements (#7018) 2025-03-08 00:27:02 +08:00
Robert Brennan
366fd7ab8a Improve agent loop tracking and make concurrent limit configurable (#6945)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-03-07 09:19:50 -07:00
dependabot[bot]
318fcbcfc7 chore(deps): bump the version-all group across 1 directory with 21 updates (#7146)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-03-07 15:58:54 +00:00
sp.wack
521492f8f9 chore: Prevent user from modifying basic LLM settings in saas mode (#7137) 2025-03-07 19:14:06 +04:00
mamoodi
71f6b0b4a9 Release 0.28.0 (#7127)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-03-07 09:17:01 -05:00
Xingyao Wang
b146b63380 chore: temporary fix to get sonnet 3.7 working again (#7140) 2025-03-06 20:30:35 +00:00
Engel Nyst
22064d5555 Add condensation observation to history and detect its loop (#7132) 2025-03-06 18:52:45 +01:00
sp.wack
08735a9b72 Fix loading spinner (#7134) 2025-03-06 17:40:13 +00:00
tofarr
54f982589a Fix annoying Avatar flicker when loading (#7129) 2025-03-06 15:59:28 +00:00
Nan Jiang
ec087993f1 rename commit0_bench to commit0 (#7124) 2025-03-06 02:55:39 +00:00
chuckbutkus
f12e9e94f7 Offline session login (#7086)
Changes to allow the resolver to access keycloak and retrieve an offline token.
2025-03-05 21:58:34 +00:00
Xingyao Wang
9f720a9d69 [eval] SWE-Gym Integration (#6651)
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-03-05 20:15:02 +00:00
Xingyao Wang
bbf40c6576 docs: cleanup and update SWE-Bench documentation; and remove the support of non-instance-level image (#7118)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-03-06 03:18:40 +08:00
Ivan Dagelic
1ffee80dcb feat: prompt instructions for runtimes (#6943)
Signed-off-by: Ivan Dagelic <dagelic.ivan@gmail.com>
2025-03-05 17:45:55 +01:00
dependabot[bot]
43bc944ac4 chore(deps-dev): bump typescript from 5.7.3 to 5.8.2 in /docs in the version-all group (#7116)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-05 15:09:49 +00:00
Xingyao Wang
4be33a079b Update SWE-Bench README.md about RemoteRuntime (#7108) 2025-03-05 23:00:54 +08:00
Aditya Bharat Soni
c76a659cde Condenser for Browser Output Observations (#6578)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Rick van Hattem <wolph@wol.ph>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Boxuan Li <liboxuan@connect.hku.hk>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: tofarr <tofarr@gmail.com>
Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Akim Tsvigun <36672861+Aktsvigun@users.noreply.github.com>
Co-authored-by: Akim Tsvigun <aktsvigun@nebius.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
Co-authored-by: OpenHands <opendevin@all-hands.dev>
Co-authored-by: Calvin Smith <email@cjsmith.io>
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: Peter Dave Hello <hsu@peterdavehello.org>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-03-04 16:28:33 -05:00
dependabot[bot]
0f68a18cbb chore(deps): bump docker/setup-qemu-action from 3.4.0 to 3.6.0 (#7075)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-04 20:57:14 +00:00
Robert Brennan
c9ebabd82d Add contact link to runtime settings label (#6880)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-05 00:49:53 +04:00
mamoodi
ad932e45e8 Checkout HEAD instead of Merge Commit for builds (#7085) 2025-03-04 15:32:59 -05:00
sp.wack
3278caf3c2 Always enable GET /settings (#7101) 2025-03-04 14:54:26 -05:00
He Du
896d7b8b96 Openhands fix issue 7091 (#7092)
Co-authored-by: 杜贺 <duhe@duhedeMacBook-Pro-2.local>
2025-03-04 18:39:28 +01:00
Ryan H. Tran
cb61282c39 Improve error detection for read and edit observations (#7090) 2025-03-04 15:05:15 +01:00
Graham Neubig
7a235ce6ff Fix/mypy routes (#6900)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-04 03:43:09 +00:00
Rohit Malhotra
5ffb1ef704 Fix typing (#7083)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-03 20:41:11 +00:00
chuckbutkus
4e4f4d64f8 Fix runtime to call new token refresh (#7084) 2025-03-03 20:36:27 +00:00
Engel Nyst
3d38a105cf Add loading from toml for condensers (#6974)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <email@cjsmith.io>
2025-03-03 20:32:46 +01:00
chuckbutkus
b1ab4d342e Add offline_access scope (#7059) 2025-03-03 19:06:08 +00:00
Rohit Malhotra
3e91899720 [Experimental]: Attach convo id to initial user instructions (#7062) 2025-03-03 13:46:09 -05:00
dependabot[bot]
959fa3ed64 chore(deps): bump the version-all group across 1 directory with 28 updates (#7077)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-03-03 18:32:27 +00:00
tofarr
c51f07bd1f Fixes for keycloak in localhost (#7079) 2025-03-03 10:36:57 -07:00
tofarr
b8ef68dc60 Upgrade default version of claude (#7072) 2025-03-03 11:31:12 -05:00
Ivan Dagelic
d21bd49f08 docs: daytona runtime configuration (#7073)
Signed-off-by: Ivan Dagelic <dagelic.ivan@gmail.com>
2025-03-03 11:30:58 -05:00
Engel Nyst
4c265515d2 (chore) Fix linting issues in openhands directory (#7068)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-03 16:52:25 +01:00
Engel Nyst
e4acfa68ec Fix #7060: Remove obsolete micro_agent_name attribute from test_long_term_memory.py (#7061)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-03 16:51:36 +01:00
mamoodi
d395b5e11f Add more information to the main docs page (#7074) 2025-03-03 10:18:20 -05:00
tawago
6d75647c40 [Bugfix] Add github_token verification in resolver utils (#7065) 2025-03-03 09:59:16 -05:00
Engel Nyst
285010b48f OpenAI models fixes (#7045) 2025-03-03 15:53:18 +01:00
Engel Nyst
395c1ea9e3 [Refactor] split runtime initialization (create, connect, init) in cli scripts (#7036) 2025-03-03 00:19:25 +01:00
Graham Neubig
91ad59dc24 More explicit feedback message about how to report errors to developers (#7063) 2025-03-02 22:21:07 +00:00
Engel Nyst
62750c07e5 Fix GitLab CI environment variable check (issue #7050) (#7052)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-02 21:33:07 +01:00
Ivan Dagelic
cf439fa89c chore: daytona readme quick start verbosity (#7056)
Signed-off-by: Ivan Dagelic <dagelic.ivan@gmail.com>
2025-03-02 20:17:35 +01:00
Ivan Dagelic
85c0864802 chore: update daytona readme (#7053)
Signed-off-by: Ivan Dagelic <dagelic.ivan@gmail.com>
2025-03-02 17:43:38 +01:00
mamoodi
ff5d8094de Updates to the ISSUE TRIAGE (#7043) 2025-03-02 10:35:47 -05:00
Engel Nyst
660d1d1e64 Fix argument in swe-bench grading scripts (#7046) 2025-03-02 12:37:15 +08:00
David Thompson
78cc27a18f Update docker.py to support podman (#6778) 2025-03-01 23:10:03 +01:00
Engel Nyst
2db7a50e43 Separate microagent template (#7041) 2025-03-01 17:46:04 +01:00
きわみざむらい
f3702cec35 Create CITATION.cff (#7037) 2025-03-01 13:21:31 +00:00
Robert Brennan
d0cde6baf2 Remove hard error on session reuse (#7026)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-03-01 07:58:01 -05:00
Ray Myers
2e4911dc59 Structured logging mode (#7034) 2025-03-01 04:17:56 +00:00
chuckbutkus
5378932017 Fix URL for staging stack (#7030) 2025-02-28 22:32:52 +00:00
Xingyao Wang
4502b009c2 Add Kubernetes microagent (#7028)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-02-28 21:50:21 +00:00
Xingyao Wang
d3ef98bb4e Add Docker microagent for installation and usage (#7027)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-03-01 05:46:33 +08:00
Christopher Pereira
06cc1ef297 Bug fixes (#6460)
Co-authored-by: OH <openhands@example.com>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-02-28 20:35:58 +00:00
chuckbutkus
17644fedd7 Keycloak changes (#6986) 2025-02-28 15:29:15 -05:00
Christopher Pereira
de4cf07d4d Support docker_runtime_kwargs dict (#7025) 2025-02-28 20:19:36 +00:00
Calvin Smith
2eec4cea6f Fix: Update context window exceeded detection (#7024)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-28 13:08:24 -07:00
Ryan H. Tran
32ee6a5a64 Add diff for edit observation and display in UI (#7014) 2025-02-28 16:36:32 +00:00
Fredy Sierra
2b3c38d061 feat: Adding sandbox property runtime_binding_address to specify whic… (#6992) 2025-02-28 10:50:26 -05:00
Xingyao Wang
7810d8c4a0 [agent] improve finish tool for sonnet 3.7 (#7002) 2025-02-28 15:43:13 +00:00
dependabot[bot]
a8f1feee5d chore(deps-dev): bump llama-index from 0.12.20 to 0.12.21 in the llama group (#7015)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-28 15:24:14 +00:00
Engel Nyst
0f07805a1b Refactor to a helper class for the agent's history (ConversationMemory) (#7008)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <email@cjsmith.io>
2025-02-28 03:22:33 +01:00
Magic Mai
8a58e724c6 fix: Remove nested git repositories before adding files in SWE-bench (#6536)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-02-28 01:19:33 +00:00
Engel Nyst
996757f4f5 Separate additional_info template (#6996) 2025-02-28 00:53:45 +01:00
Xingyao Wang
02bc7de36d Add Memory Monitor VSCode Extension (#6951)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-27 22:02:33 +00:00
Xingyao Wang
42332294a1 [agent] Add "thinking" tool only (#6977) 2025-02-28 05:47:39 +08:00
Engel Nyst
6e3e9e397e Re-add separators between user messages (#7004) 2025-02-27 22:47:15 +01:00
dependabot[bot]
fb8de1f98c chore(deps): bump the version-all group across 1 directory with 7 updates (#7005)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-27 22:44:48 +01:00
jaybutera
9e5f767571 add add_agent.md (#6891)
Co-authored-by: smd <>
2025-02-27 20:51:09 +00:00
tofarr
ce30d63510 Page Refresh now restarts agent loop if status is STOPPED or ERROR (#6829) 2025-02-27 12:34:16 -07:00
Xingyao Wang
616ff49787 feat: add sound and browser notifications for agent state changes (#6530)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-02-27 18:40:26 +00:00
mamoodi
0aa508c382 Release 0.27.0 (#6993) 2025-02-27 13:40:05 -05:00
tofarr
f32f683f92 Refactor: Moving ConversationInfo to server module (#6981) 2025-02-27 11:04:38 -07:00
zchn
fd5e1e0b0b Fix image tag inconsistency in forked-PR workflows (#6998) 2025-02-27 12:42:31 -05:00
sp.wack
f02d55ae8b hotfix(frontend): Truncate long conversation card titles (#7001) 2025-02-27 17:21:43 +00:00
tofarr
be73792230 Feat out of credits msg (#6969)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-27 16:02:31 +00:00
tofarr
f437d06e81 Fix for error cleaning stale (#6971) 2025-02-27 08:04:37 -07:00
Engel Nyst
9e0fee1890 Refactor sandbox and security configurations (#6973) 2025-02-27 14:38:51 +01:00
Xingyao Wang
33780f97d0 [eval] Upgrade SWE-Bench to use official image and latest harness (#6838)
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-02-27 08:15:05 -05:00
dependabot[bot]
0137600988 chore(deps): bump react-icons from 5.4.0 to 5.5.0 in /docs in the version-all group (#6962)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-27 17:00:26 +04:00
Xingyao Wang
6b1a937024 [agent] System message update (#6787)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-27 10:06:01 +08:00
Ray Myers
34febafae4 Add system event listeners for monitoring (#6929) 2025-02-26 20:37:21 -05:00
Engel Nyst
8b234ae57c Azure completion_tokens fix (take two) (#6975) 2025-02-27 02:28:01 +01:00
dependabot[bot]
7ea418d020 chore(deps): bump the version-all group across 1 directory with 11 updates (#6966)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-26 23:47:23 +00:00
Xingyao Wang
c4ba54122e refactor: codeact tools into separate files (#6978) 2025-02-26 22:57:14 +00:00
Engel Nyst
4b7cca9bdf Refactor agent_config loading from toml (#6967) 2025-02-26 22:06:10 +00:00
Engel Nyst
544e756f5f Fix microagent matching to the user message, not previous enhancements (#6963) 2025-02-26 20:46:24 +01:00
sp.wack
d5f7dde7c9 hotfix(frontend): Consistent buttons and their styles throughout the app (#6835)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-02-26 19:43:58 +00:00
Engel Nyst
4f98bce6df Add selected_repo to command line (#6949) 2025-02-26 20:42:59 +01:00
tofarr
b38039e626 Fix fd leak (#6950) 2025-02-26 09:35:38 -07:00
Ray Myers
db1f5a8df2 Add ability to define custom runtime classes (#6955)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-26 16:22:47 +01:00
Engel Nyst
f8045784b6 Refactor llm config from toml and clean up (#6923) 2025-02-26 15:20:58 +01:00
Ryan H. Tran
34fa9ed4db fix: task_str validation not required for trajectory replay (#6957) 2025-02-26 14:17:03 +01:00
Rohit Malhotra
e49b9243af [Feat]: Adding endpoint for suggested tasks Openhands could tackle (#6844)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-25 22:10:24 -05:00
Robert Brennan
ef62ccde36 Add pause_closed_runtimes config to pause instead of stop runtimes (#6885)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-25 13:43:51 -05:00
Graham Neubig
6ba79c454b feat(llm): Add Claude 3.7 backend configurations (#6937)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-25 16:46:53 +00:00
sp.wack
fbc06f42aa chore(frontend): Claude 3.7 is visible in dropdown for selection (#6931) 2025-02-25 08:17:33 -05:00
mamoodi
f35ed5e277 Add documentation checkbox to PR template (#6924) 2025-02-24 16:03:10 -05:00
mamoodi
6787a3adf7 Release 0.26.0 (#6915) 2025-02-24 15:34:34 -05:00
celek
fa50e0c9b9 add extended generic section (#5932)
Co-authored-by: Christophe Elek <christophe.elek@gmail.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-24 20:31:02 +01:00
tofarr
f4c5bbda19 Revert "Fix file descriptor leak (#6897)" (#6921) 2025-02-24 13:47:13 -05:00
Mateusz Kwiatkowski
6562297615 Replace shebang with /usr/bin/env bash for improved portability (#6876)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-02-24 18:07:28 +00:00
Xingyao Wang
0217a7cfbd chore: Make remote runtime class default to None (#6919) 2025-02-24 17:51:48 +00:00
Christopher Pereira
aa15c9d385 Handle Docker version string with +dfsg1 (#6732)
Co-authored-by: Christoper Pereira <kripper@gmail.com>
2025-02-24 15:36:55 +00:00
Engel Nyst
8ad89e368a Small rename to long term memory (#6914) 2025-02-24 23:35:16 +08:00
tofarr
29ba94fc0f Fix file descriptor leak (#6897)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-24 08:35:10 -07:00
Graham Neubig
8956f92f6a Fix mypy errors in core directory (#6901)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-24 10:00:57 -05:00
Graham Neubig
753e3c4205 Fix mypy errors in security/invariant directory (#6908)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-24 10:00:43 -05:00
Ivan Dagelic
ecd573febc Daytona Runtime (#6863)
Signed-off-by: jsrzic <josip.srzic@gmail.com>
Signed-off-by: Ivan Dagelic <dagelic.ivan@gmail.com>
Co-authored-by: jsrzic <65179822+jsrzic@users.noreply.github.com>
2025-02-24 13:09:30 +01:00
sp.wack
325a558fbc hotfix: Fix switch color regression (#6881) 2025-02-24 16:01:47 +04:00
Engel Nyst
666c186826 Display session ID in CLI mode
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-24 03:18:28 +01:00
Engel Nyst
2d2dbf1561 Use LLM APIs responses in token counting (#5604)
Co-authored-by: Calvin Smith <email@cjsmith.io>
2025-02-23 17:58:47 +01:00
Engel Nyst
abac25cc4c Keep the first user message by default in condensers (#6888) 2025-02-23 17:20:31 +01:00
tofarr
70b21d16bd Fix for regression where conversations are not clickable (#6886) 2025-02-22 13:19:18 +00:00
Engel Nyst
bf82f75ae4 Revert "Fix: File Descriptor leak" (#6887) 2025-02-22 11:21:02 +00:00
tofarr
a8bce3724f Fix: Increase Entropy Requirement for Secret Redaction to Reduce False Positives (#6875) 2025-02-22 01:44:28 -07:00
Dai Dao
e109f7e58e refactor : Improve frontend setup doc and locale error (#6850)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-21 23:14:44 +01:00
tofarr
a20f299579 Fix: File Descriptor leak (#6883) 2025-02-21 14:47:59 -07:00
Robert Brennan
bf77da7849 Add info logs for microagent loading and triggering (#6882)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-21 15:07:52 -05:00
Calvin Smith
869ea59ecd (feat): Enable memory condensation from settings page (#6868)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-02-21 10:15:31 -07:00
Graham Neubig
f093c14ad3 Fix mypy errors in agenthub directory (#6811)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-21 13:55:27 +00:00
Graham Neubig
9d3a0a02b8 fix: Add missing type annotations in utils/ directory (#6687)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-21 08:27:57 -05:00
sp.wack
35bab5070d chore(frontend): Remove latest conversation text in home screen (#6851) 2025-02-21 15:45:51 +04:00
tofarr
d03b9775b5 Fix jumpy conversation panel (#6874) 2025-02-21 04:44:38 -07:00
Boxuan Li
fab4532f6b Save complete trajectory in presence of history truncation (#6751)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-21 00:14:30 -08:00
Boxuan Li
d33913e036 Add enable_history_truncation option to disable history truncation (#6820)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-21 06:43:02 +00:00
Xingyao Wang
e52aee168e Docs: Clarify config.toml usage in evaluation harness (#6828)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-20 22:16:17 -08:00
dependabot[bot]
c27b191358 chore(deps): bump the version-all group across 1 directory with 10 updates (#6870)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-21 06:10:35 +00:00
Engel Nyst
22c5ad85d9 Fix: Simplify prompt caching for new Anthropic API (#6860)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-20 23:38:55 +01:00
Rohit Malhotra
0180ce77b1 [Bug]: Fix workflow definition for installation phase of resolver (#6861) 2025-02-20 16:40:23 +00:00
sp.wack
2f14e53746 chore(frontend): Standardize custom colors used throughout the app (#6833) 2025-02-20 16:13:50 +00:00
Robert Brennan
52723061b1 Add conversation age limit configuration (#6763)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-20 10:50:17 -05:00
tofarr
42f1fc92fa Fix: Less squashed logo (#6853) 2025-02-20 07:56:20 -07:00
sp.wack
3f8bc8a7ea hotfix: Set proper minimum and maximum defaults that can be entered in billing input (#6842) 2025-02-20 17:58:23 +04:00
sp.wack
f869ad995c hotfix: Remove external link in billing settings UI (#6841) 2025-02-20 17:58:09 +04:00
Calvin Smith
74c942c911 fix: LLM summarization prompt handles user messages (#6837)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-02-19 14:17:48 -07:00
Engel Nyst
eed7e2dd6e Refactor I/O utils; allow 'task' command line parameter in cli.py (#6187)
Co-authored-by: OpenHands Bot <openhands@all-hands.dev>
2025-02-19 22:10:14 +01:00
Engel Nyst
663e36109c Clean up NullObservations from the stream (#6260) 2025-02-19 20:40:40 +01:00
mamoodi
e92e4a1cbc Update documentation with new settings page (#6716)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-19 14:30:36 -05:00
mamoodi
61ce673400 Release 0.25.0 (#6782) 2025-02-19 14:30:05 -05:00
Engel Nyst
b95840db0c hotfix azure (#6806) 2025-02-19 19:24:35 +01:00
Xingyao Wang
003ebc0ded feat: better error logging for remote runtime (#6805) 2025-02-19 17:54:34 +00:00
Ryan H. Tran
df8bbc2b67 Update openhands-aci to 0.2.5 (#6834)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-02-19 16:27:14 +00:00
diwu-sf
eb5be2ab63 Fix download workspace zip file event loop hanging (#6722) 2025-02-19 10:51:52 -05:00
Calvin Smith
81f2b08a89 fix: Avoid infinite loop with rolling condensers and history truncation (#6795)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-02-19 07:45:33 -07:00
Graham Neubig
cb72a06ca3 Fix mypy errors in storage directory (#6809)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-19 10:52:49 +00:00
Ryan H. Tran
340c2310d1 Fix diskcache breaking CI & eval intermittently (#6817) 2025-02-19 05:20:44 -05:00
Graham Neubig
f4e5fb2873 Fix type checking errors in resolver directory (#6738)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-18 20:13:33 -05:00
Xingyao Wang
1a7003a705 Add sysbox support to remote runtime for eval; Add memory monitor, stress tests to help debug memory issue (#6684)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-02-18 20:02:28 +00:00
Calvin Smith
8d097efb4f enh: Refactor Event -> Message pipeline outside of CodeActAgent (#6715)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-18 11:23:06 -07:00
sp.wack
2e98fc8fb3 feat(SaaS): Billing settings screen (#6495)
Co-authored-by: Tim O'Farrell <tofarr@gmail.com>
2025-02-18 18:56:10 +01:00
sp.wack
e3e00ed70a fix(frontend): Hide modal when in settings page if first time (#6792) 2025-02-18 21:28:59 +04:00
sp.wack
96d1992823 hotfix: Conversation panel toggle should change color given state (#6791) 2025-02-18 11:38:26 -05:00
dependabot[bot]
7a3a0d8c0c chore(deps): bump the version-all group across 1 directory with 9 updates (#6783)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-02-18 16:09:30 +00:00
sp.wack
fdffca18e0 hotfix(frontend): Input set/unset state and disable runtime input (#6788) 2025-02-18 20:01:39 +04:00
sp.wack
b10416e0a3 hotfix: Consistent background color (#6786) 2025-02-18 19:38:01 +04:00
nottherealironman
1f462d2417 docs: add guide for minimum computing and storage requirements (#6575) 2025-02-18 14:20:35 +00:00
tofarr
0a6ff463db CSS Fixes (#6770) 2025-02-18 12:10:07 +00:00
Rohit Malhotra
9ff15bf94f Add selected branch to convo metadata (#6773) 2025-02-17 17:27:13 -05:00
mamoodi
6c48013601 Update OpenHands Cloud docs with correct permissions and instructions (#6774) 2025-02-17 21:48:57 +00:00
Graham Neubig
07fcb786af Upgrade tree sitter (#6740)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-17 20:14:26 +01:00
Rohit Malhotra
ce42e22105 [Docs]: Cloud Openhands (#6747)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-02-17 18:39:49 +00:00
Rohit Malhotra
14ee6d7afe hotfix(Secrets): Add event stream filter for refreshed secret (#6764) 2025-02-17 18:27:32 +00:00
tofarr
57391d6e66 Enable the multi conversation UI for all users (#6374) 2025-02-17 11:07:47 -07:00
Xingyao Wang
a7bb73ded2 fix: disable prlimit since limiting --vm breaks nodejs (#6765) 2025-02-17 17:53:02 +00:00
tofarr
f4b123f73b Improve SensitiveDataFilter and add comprehensive tests (#6755)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-17 10:23:43 -07:00
Robert Brennan
ae31a24c29 Fix caps in status message (#6761) 2025-02-17 16:14:19 +00:00
Robert Brennan
3a478c2303 Better LLM retry behavior (#6557)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-17 10:36:59 -05:00
tofarr
82b5325792 Added iterate method and additional tests for search functions (#6756) 2025-02-17 08:11:13 -07:00
tofarr
265e8ae5f4 feat: implement optimistic updates for conversation deletion (#6745)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-02-17 07:33:36 -07:00
李师胡
0cbf50576d docs(runtime): fix broken links of benchmarks (#6744)
Co-authored-by: jianhao1 <jianhao1@taobao.com>
2025-02-17 14:11:32 +00:00
dependabot[bot]
745038b394 chore(deps): bump the version-all group in /frontend with 4 updates (#6725)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-02-17 11:35:50 +00:00
Arpan Koirala
b018567d53 fix: no interaction when clearing poetry cache (#6752) 2025-02-17 12:18:27 +01:00
Christopher Pereira
30e39e85d0 Show docker build errors (#6695) 2025-02-15 06:58:16 +01:00
Boxuan Li
4443417c75 A few fixes for TAC evaluation harness (#6586) 2025-02-14 21:01:57 -08:00
Boxuan Li
efbff2e655 Add a sanity test for load_app_config and get_agent_config_arg (#6723) 2025-02-14 21:01:42 -08:00
Cheng Yang
63565982aa docs: improve docstrings for CLI and config utils (#5398)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-15 01:51:59 +00:00
dependabot[bot]
b07fddcb71 chore(deps): bump the version-all group across 1 directory with 12 updates (#6736)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-15 01:17:17 +00:00
Ryan H. Tran
99b50d038e chore: upgrade openhands-aci to 0.2.2 (#6731) 2025-02-15 03:21:40 +08:00
Rohit Malhotra
1ddfa99c57 [Resolver]: Prep env in expectation of release (#6735) 2025-02-14 19:11:01 +00:00
sp.wack
0c03e257b7 feat(frontend): Settings screen (#6550) 2025-02-14 15:11:18 +04:00
Rohit Malhotra
85e3a00d9d hotfix(Resolver): Workflow definition is out of sync with released package (#6719) 2025-02-14 04:31:22 +00:00
Rohit Malhotra
edd51102ad fix: Simplify nested f-string to fix pydoc-markdown parsing (#6717) 2025-02-13 19:29:51 -05:00
wtiger9218
f5fccab1f6 feat(resolver): implement gitlab resolver (#6458)
Signed-off-by: José Luis Di Biase <josx@interorganic.com.ar>
Co-authored-by: José Luis Di Biase <josx@interorganic.com.ar>
Co-authored-by: Oriana <oriana@camba.coop>
Co-authored-by: Charlie <charlie@camba.coop>
Co-authored-by: Juan Manuel Daza <61162223+juanmanueldaza@users.noreply.github.com>
Co-authored-by: Juan Manuel Daza <juandaza@camba.coop>
Co-authored-by: Cody Kociemba <cody@symbaventures.com>
Co-authored-by: Rohit Malhotra <rohitvinodmalhotra@gmail.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-13 18:21:23 -05:00
Boxuan Li
ef12bc5381 Evaluation harness: Add agent config option (#6662) 2025-02-13 15:05:03 -05:00
dependabot[bot]
b197e0af47 chore(deps): bump the version-all group across 1 directory with 5 updates (#6712)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-02-13 19:09:50 +00:00
Calvin Smith
341b695ad3 fix: Filter AgentCondensationObservation events from agent state (#6705)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-02-13 11:50:05 -07:00
tofarr
d46d99a35e More effective remote runtime identification (#6714) 2025-02-13 09:39:22 -07:00
mamoodi
653168fc3d Release 0.24.0 (#6689) 2025-02-13 10:22:05 -05:00
tofarr
cb5e7f0130 Agent session no longer stuck in starting on raised exception (#6703) 2025-02-13 05:24:44 -07:00
Rohit Malhotra
312b9fbfb1 Feat: Add selected branch param to backend (#6508) 2025-02-12 15:39:10 -05:00
sp.wack
ba599c7dd6 chore: Throw a 404 instead of returning defaults if settings does not exist (#6704) 2025-02-12 22:46:15 +04:00
tofarr
7e359eda4a Fix log formatting error (#6699) 2025-02-12 08:28:10 -07:00
Xingyao Wang
f7c806c119 using all available system memory when RUNTIME_MAX_MEMORY_GB is not set (#6691) 2025-02-12 09:18:34 -05:00
sp.wack
ff25e794ef Revert "Only show start project button in conversations" (#6698) 2025-02-12 17:57:13 +04:00
Xingyao Wang
a371562d94 refactor: do not add DEBUG env var when it is not set (#6690) 2025-02-11 22:30:40 +00:00
dependabot[bot]
425ccc9b1f chore(deps-dev): bump @tanstack/eslint-plugin-query from 5.66.0 to 5.66.1 in /frontend in the eslint group (#6682)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-11 23:53:51 +04:00
Robert Brennan
1afe7f1058 Fix debug in remote runtime (#6688) 2025-02-11 17:43:46 +00:00
Xingyao Wang
3188646195 refactor(runtime): Use openhands-aci file editor directly in runtime instead of execute it through ipython (#6671)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-12 01:37:44 +08:00
Eric Zhang
6772227c9d fix(frontend): fix public github repo cannot be selected (#6680) 2025-02-11 16:46:53 +00:00
Xingyao Wang
6a6dc93e03 feat(runtime): use prlimit to limit resource usage of command to avoid OOM Runtime Kill (#6338)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-02-11 11:21:11 +08:00
Engel Nyst
1a715d2ec4 Clean up global in llm.py (we figured it's not needed) (#6675) 2025-02-11 00:00:46 +01:00
Xingyao Wang
4615548477 Bump OpenHands ACI to 0.2.1 (#6678) 2025-02-10 21:54:23 +00:00
sp.wack
b12b426e3d hotfix: Typecheck routes during frontend build (#6676) 2025-02-10 20:52:59 +00:00
dependabot[bot]
a1107a2c30 chore(deps): bump the version-all group across 1 directory with 9 updates (#6667)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-10 20:58:00 +01:00
dependabot[bot]
af0becd65b chore(deps): bump docker/setup-qemu-action from 3.3.0 to 3.4.0 (#6666)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-10 19:58:37 +01:00
Fredy Sierra
13839b4273 fix: adding support for environment variables type dict (#6672)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-10 18:56:58 +00:00
Graham Neubig
7860055f8c fix: Normalize whitespace when comparing patch context lines (#6541)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-10 18:53:39 +00:00
tofarr
2b40a92943 Fix for issue where temp file is empty (#6669) 2025-02-10 11:07:40 -07:00
Graham Neubig
6c88b10c59 Fix issue #6262: Add success/failure indicators for file read/edit operations (#6653)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-10 12:58:31 -05:00
Rohit Malhotra
8688634950 [Resolver]: Add target branch param (#6668) 2025-02-10 17:28:38 +00:00
dependabot[bot]
6e35ac49c1 chore(deps): bump the version-all group in /frontend with 4 updates (#6665)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-02-10 16:52:20 +00:00
Rohit Malhotra
9bdc8dda6c [Enhancement]: Handle GH token refresh inside runtime (#6632) 2025-02-10 11:12:12 -05:00
Robert Brennan
75f3f282af Add comprehensive OpenHands glossary (#6310)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-02-10 10:13:39 -05:00
Rohit Malhotra
4a5891cbea [Bug fix]: Standardize SecretStr use (#6660)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-10 08:03:56 -05:00
tofarr
707cb07f4f Removed in page callback (#6657) 2025-02-10 05:34:58 -07:00
dependabot[bot]
61c709b7c7 chore(deps): bump the version-all group across 1 directory with 3 updates (#6648)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-02-10 09:02:02 +00:00
zchn
1c72676483 fix(6223): More properly add 'pyproject.toml' and 'poetry.lock' to the pip package (#6658) 2025-02-08 01:23:42 +01:00
Xingyao Wang
52ac2729f7 fix: set tool_choice to none for non-fncall models (#6652) 2025-02-07 12:49:08 -05:00
sp.wack
5fa2634d60 chore(frontend): Take into account other error message types (#6647) 2025-02-07 20:52:02 +04:00
Xingyao Wang
478b225d11 feat: Add LocalRuntime (#5284)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-07 16:35:14 +00:00
tofarr
ce82545437 fix: handle SAAS mode properly in useSettings hook (#6646)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-07 09:24:15 -07:00
Graham Neubig
93d2e4a338 Optimize memory usage in FileEditObservation (#6622)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
2025-02-07 08:19:32 -05:00
mamoodi
ff48f8beba Add o1 to verfied models (#6642) 2025-02-06 16:38:08 -05:00
Graham Neubig
e930cd0aef Better error logging in posthog (#6346)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Ray Myers <ray.myers@gmail.com>
2025-02-06 20:16:37 +00:00
sp.wack
6655ec0731 chore(frontend): Migrate from NextUI to HeroUI via codemod (#6635) 2025-02-06 19:24:54 +04:00
mamoodi
669e284dc5 Only show start project button in conversations (#6626)
Co-authored-by: sp.wack <83104063+amanape@users.noreply.github.com>
2025-02-06 09:57:54 -05:00
dependabot[bot]
8140d2e05a chore(deps): bump the version-all group across 1 directory with 15 updates (#6617)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-02-06 12:29:12 +00:00
Peter Dave Hello
ed68034427 Update and Improve zh-TW Traditional Chinese locale (#6621) 2025-02-05 13:37:31 -05:00
Graham Neubig
2832dba27a Fix memory leak in JSON encoder (#6620)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
2025-02-05 17:39:04 +00:00
Graham Neubig
5491ad3318 Remove free disk space steps from workflows to test if they are necessary (#6618)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-05 12:28:57 -05:00
Calvin Smith
e47aaba4ca Improve performance of LLM summarizing condenser (#6597)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-05 03:26:15 +00:00
OpenHands
fe8b92743b Fix issue #6531: [Bug]: GITHUB_TOKEN would missing when the runtime resume (#6533) 2025-02-04 17:48:25 -05:00
Engel Nyst
0d312a645a Simplify fn calling usage (#6596) 2025-02-04 22:54:38 +01:00
mamoodi
f564939780 Release 0.23.0 (#6598) 2025-02-04 15:54:09 -05:00
Akim Tsvigun
be7007bcca Fix/llm prompt fn converter (#6610)
Co-authored-by: Akim Tsvigun <aktsvigun@nebius.com>
2025-02-04 20:24:31 +00:00
sp.wack
240d1c972c hotfix(frontend): Make conversation title clickable (#6609) 2025-02-04 19:49:35 +00:00
Rohit Malhotra
a7239ce799 Move GH Token retrieval to GitHubService class (#6605)
Co-authored-by: tofarr <tofarr@gmail.com>
2025-02-04 18:39:42 +00:00
dependabot[bot]
7c16ca8f27 chore(deps): bump the version-all group with 4 updates (#6604)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-04 17:39:42 +00:00
Rohit Malhotra
7151f75340 Use user_id as token set indicator for settings (#6595)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-03 20:36:47 -05:00
tofarr
f24fbec165 Fix: re-add github token middleware (#6594) 2025-02-03 19:55:09 +00:00
dependabot[bot]
4dbe831d42 chore(deps): bump the version-all group across 1 directory with 7 updates (#6591)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-03 19:15:49 +00:00
Xingyao Wang
90bbd4edbe fix: initialize default metadata with all required fields (#6583)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-02-04 02:52:11 +08:00
tofarr
cc104b2e44 Fix for typo (#6592) 2025-02-03 18:37:09 +00:00
Rohit Malhotra
4adef574c0 Refactor: Github Service (#6580)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-02-03 17:21:36 +00:00
Rohit Malhotra
7d09a158c3 Fix Github service bugs (#6571)
Co-authored-by: tofarr <tofarr@gmail.com>
2025-02-03 16:44:32 +00:00
tofarr
bbfdc62139 Fix for issue where retries continue on a closed runtime (#6564)
Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
2025-02-03 08:44:09 -07:00
Xingyao Wang
622fc5213d [feat] support o3-mini (#6570) 2025-02-03 23:26:35 +08:00
sp.wack
6d62be518b hotfix(frontend): Only show settings error toast when there is an error (#6587) 2025-02-03 18:29:55 +04:00
Boxuan Li
e487008e74 Trajectory replay: Fix a few corner cases (#6380) 2025-02-02 00:27:22 -08:00
Boxuan Li
62402cd617 The-Agent-Company evaluation harness: Support splits (#6577) 2025-02-02 13:12:01 +08:00
Engel Nyst
be522f1fb9 Upgrade litellm (with o3-mini) (#6581) 2025-02-02 13:06:08 +08:00
Rick van Hattem
4ef09ab897 Update llm.py (#6582) 2025-02-02 03:24:46 +00:00
Ryan Peach
32c5fde562 LLM_API_VERSION in openhands resolver (#6507) 2025-02-02 00:01:56 +01:00
Aditya Bharat Soni
a593d9bc6d Visual browsing in CodeAct using set-of-marks annotated webpage screenshots (#6464) 2025-02-02 04:56:11 +08:00
Engel Nyst
eb8d1600c3 Chore: clean up LLM (prompt caching, supports fn calling), leftover renames (#6095) 2025-02-01 18:14:08 +01:00
mamoodi
3b0bbce54a update custom sandbox instructions with docker method (#6566) 2025-02-01 11:06:43 -05:00
Rohit Malhotra
19e0c32eb7 Fix: RM debug print (#6569) 2025-01-31 20:57:43 +00:00
Rohit Malhotra
17a4100feb Refactor: Move Github endpoint logic to GithubService class (#6558)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-31 15:20:28 -05:00
mamoodi
47b84189a3 Update stale job workflow with operations per run (#6568) 2025-01-31 14:24:27 -05:00
Robert Brennan
7f4b5476dc Add VSCode Hello World extension (#6463)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-01-31 11:48:59 -05:00
Xingyao Wang
0c84fe58dd Update ACI to 0.2.0 to fix Memory Leak (#6559) 2025-01-31 16:09:38 +00:00
sp.wack
575f4fd347 chore(frontend): Better error toast handling mechanism (#6561) 2025-01-31 15:16:46 +00:00
sp.wack
f7934bed80 chore(backend): GitHub token should be a SecretStr (#6494) 2025-01-31 19:15:19 +04:00
sp.wack
e01fdf2a11 hotfix(frontend): Show error toast if settings errors (#6554) 2025-01-31 18:55:21 +04:00
Ray Myers
fd73f4210e Show LLM retries and allow resume from rate-limit state (#6438)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-01-30 21:51:47 +00:00
Robert Brennan
1bccfb3492 fix gh middleware (#6556) 2025-01-30 16:17:49 -05:00
Robert Brennan
27fdae6ecc Refactor: move middleware definition (#6552) 2025-01-30 15:32:26 -05:00
mamoodi
5dd4810f58 Add note to Windows that docker command must be run in WSL terminal (#6553) 2025-01-30 20:15:32 +00:00
Ray Myers
83724100e5 fix: Don't close runtime on error (#6549) 2025-01-30 19:09:24 +00:00
sp.wack
6b243155f4 hotfix(frontend): Only open consent form if user truly did not make a choice (#6551) 2025-01-30 18:45:55 +00:00
tofarr
173f824704 Filtering lost+found directory from root of workspace (#6487) 2025-01-30 10:24:12 -07:00
dependabot[bot]
8f881c4df1 chore(deps): bump the version-all group across 1 directory with 5 updates (#6547)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-30 17:52:20 +01:00
Engel Nyst
d0276d1925 Quick fix log leak (#6545) 2025-01-30 17:32:35 +01:00
mamoodi
6e90c30be4 Remove python unit tests on Mac (#6546) 2025-01-30 11:16:58 -05:00
Graham Neubig
8ff0e027a6 Fix share label (#6474) 2025-01-30 10:25:54 -05:00
sp.wack
c54911d877 chore: Move user's analytics consent to the backend (#6505) 2025-01-30 18:28:29 +04:00
sp.wack
0afe889ccd chore(frontend): Handle test warnings (#6538) 2025-01-30 18:25:24 +04:00
Boxuan Li
c9f16248d0 Add tests for trajectory replay (#6513) 2025-01-30 13:56:24 +00:00
Boxuan Li
99d2d01e1a Fix condensers registration (#6537) 2025-01-30 14:32:15 +01:00
Calvin Smith
36090ad8ff enh: Organizing condenser implementations (#6529)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-01-29 18:21:04 -07:00
Xingyao Wang
1a9971b1bf misc: make RemoteRuntime API timeout configurable (#6518)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-01-30 06:30:18 +08:00
Calvin Smith
473fcae57e fix: Recover from ContextWindowExceededError (#6519)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-01-29 15:25:46 -07:00
Rohit Malhotra
a6eed5b7e9 Remove unused event search route (#6510) 2025-01-29 16:45:24 -05:00
Robert Brennan
b64d130a6e remove old manager (#6525) 2025-01-29 16:45:07 -05:00
mamoodi
a253713ce2 Release 0.22.0 (#6522) 2025-01-29 14:50:22 -05:00
sp.wack
94d833cb5f fix: Update config.template.toml to have empty api keys (#6521) 2025-01-29 18:54:28 +00:00
dependabot[bot]
6909075be8 chore(deps): bump the version-all group in /frontend with 3 updates (#6515)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-01-29 17:40:19 +00:00
sp.wack
28d7127257 hotfix(frontend): Return DEFAULT_SETTINGS if GET /settings is 404 (#6517) 2025-01-29 17:24:17 +00:00
dependabot[bot]
1509f4ce56 chore(deps): bump the version-all group with 6 updates (#6516)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-29 16:36:47 +01:00
sp.wack
a7bb6720ba feat: Better error message handling (#6502) 2025-01-29 15:25:31 +00:00
sp.wack
b987f33a67 chore: Remove settings local storage logic (#6504) 2025-01-29 15:42:20 +04:00
Rohit Malhotra
eb760f32c7 Refactor: Don't serialize matching events when searching event stream (#6509) 2025-01-28 18:17:44 -05:00
sp.wack
35346068d1 chore: Remove root level package.json (#6498) 2025-01-29 00:31:48 +04:00
Chriest Yu
8ae5655157 fix(frontend): make chat message content wrappable (#6421) 2025-01-28 19:03:11 +00:00
dependabot[bot]
de786f930d chore(deps): bump the version-all group across 1 directory with 21 updates (#6493)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-01-28 18:10:09 +00:00
Xingyao Wang
7bf354be53 chore: typo fix for for add_openhands_repo_instruction.md (#6501) 2025-01-28 17:50:11 +00:00
Rohit Malhotra
f18729f5f8 Remove unused refresh func (#6499) 2025-01-28 17:09:29 +00:00
Robert Brennan
f3b8bad09f Fix file descriptor leak in S3FileStore (#6486)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-28 11:47:37 -05:00
Robert Brennan
41e5d12f63 update slack link (#6497) 2025-01-28 11:37:33 -05:00
dependabot[bot]
fa009f0a57 chore(deps): bump the version-all group with 10 updates (#6496)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-28 16:11:50 +00:00
Xingyao Wang
391200510c fix: revert #5506 for SWE-Bench performance regression (#6491)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-01-28 22:52:57 +08:00
sp.wack
36c2abadc2 chore: Move GitHub logic out of the frontend (#6307)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-01-28 13:14:32 +00:00
dependabot[bot]
d6655f3470 chore(deps): bump the version-all group in /docs with 3 updates (#6288)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-28 16:57:22 +04:00
Engel Nyst
f2427d7ffa Add the resolver to the bug_template (#6490) 2025-01-28 02:45:24 +00:00
Rohit Malhotra
94a64a47f2 Feat: Filter matching events in reverse order (#6485) 2025-01-27 22:53:16 +00:00
Rohit Malhotra
0ba96ce69e Feat: Ability to filter events by multiple types (#6484) 2025-01-27 22:09:16 +00:00
Engel Nyst
89c7bf59a7 Fix first user message (#6471) 2025-01-27 22:09:03 +01:00
Rohit Malhotra
604534905f Refactor: Use type[Event] instead of str to filter events (#6480)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-27 13:58:09 -05:00
Xingyao Wang
4bde644fab Improve function call validation with better error handling (#6453)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-28 02:42:45 +08:00
tofarr
ffdab28abc Fix Docker runtimes not stopping (#6470)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-27 11:09:09 -07:00
Calvin Smith
12dd23ba1c Enable memory condensation from the frontend (#6333)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-01-27 11:02:35 -07:00
Robert Brennan
9611093458 allow http session reuse (#6478) 2025-01-27 12:29:49 -05:00
tofarr
8a65df6bce refactor: Update get_github_installation_ids to use httpx (#6451)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-27 09:59:50 -07:00
tofarr
c997495200 Fix S3FileStore / GoogleCloudFileStore directory list & deletion (#6449)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-27 08:40:08 -07:00
Calvin Smith
23348af431 Add test for context window truncation in agent controller (#6477)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-01-27 08:35:43 -07:00
dependabot[bot]
5b53dbd85c chore(deps-dev): bump llama-index from 0.12.13 to 0.12.14 in the llama group (#6476)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 15:30:53 +00:00
Ray Myers
e619929909 Log restart reason if runtime reports it (#6455) 2025-01-25 07:20:18 +01:00
Ryan H. Tran
93753ac2e0 Upgrade openhands-aci to 0.1.9 (#6450) 2025-01-24 19:03:00 +00:00
Robert Brennan
38e19d214d Fix up conversation initialization (#6430)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-24 18:43:02 +00:00
dependabot[bot]
19a4f1c3ec chore(deps-dev): bump llama-index from 0.12.12 to 0.12.13 in the llama group (#6448)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-24 16:16:53 +00:00
Rohit Malhotra
45a048f9e3 NIT: Remove unused param (#6446) 2025-01-24 14:51:09 +00:00
sp.wack
358d9cb3f4 hotfix(frontend): Logout and clear token if retrieving user fails (#6436) 2025-01-24 09:49:50 -05:00
Xingyao Wang
e6a2fd3fd4 feat: add prompt to prevent agent execute multiple bash command at the same time (#6428) 2025-01-24 22:43:34 +08:00
OpenHands
c2f308f397 Fix issue #5620: [Bug]: Resolver fails when the existing requirements.txt does not end in a newline character (#6327) 2025-01-24 09:36:59 -05:00
Rohit Malhotra
a1f1c802d9 [Fix]: Fix bugs for target_branch param on resolver (#5745)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-23 21:36:20 -05:00
Xiaohua Zhang
ad2237d7dd feat: vscode support for modal runtime (#6442)
Co-authored-by: Xiaohua Zhang <xiaohua.dev@gmail.com>
2025-01-24 01:39:07 +00:00
Xiaohua Zhang
aa0cd51967 fix(frontend): display confirmation buttons for explandable messages (#6426)
Co-authored-by: Xiaohua Zhang <xiaohua.dev@gmail.com>
2025-01-23 20:14:52 -05:00
Graham Neubig
081a1305f0 Fix resolver linting issues (#6401)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-23 18:21:11 -05:00
Xiaohua Zhang
9912e28576 chore: update config template to use docker runtime by default (#6435)
Co-authored-by: Xiaohua Zhang <xiaohua.dev@gmail.com>
2025-01-23 22:24:00 +00:00
tofarr
b19a33ccad Fix: Filtering conversations with no created at (#6414) 2025-01-23 15:09:57 -07:00
tofarr
21e912d6fb Feat remove redis (#6278)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-23 14:33:16 -07:00
Robert Brennan
0dd9b95dbe change message to connecting (#6433) 2025-01-23 20:42:41 +00:00
Aditya Bharat Soni
aebb583779 Support for VisualWebArena evaluation in OpenHands (#4773)
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-01-23 20:18:30 +00:00
chuckbutkus
2ff9ba1229 AWS necessary changes only (#6375)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-01-23 13:10:11 -05:00
Michael Jewell
a7e6068ba8 build: add required dependencies to package.json (#6423) 2025-01-23 10:07:12 -05:00
dependabot[bot]
24adcee9e3 chore(deps-dev): bump the llama group with 2 updates (#6411)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-23 14:54:27 +00:00
tofarr
21d4ba0bbd Feat: Stop runtimes rather than delete them (#6403)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-23 07:43:02 -07:00
tofarr
5ba9a6d321 Feat: Better mechanism for attaching middleware (#6365) 2025-01-23 07:31:43 -07:00
tofarr
aa223734d4 One more SecretStr fix (#6419) 2025-01-22 18:21:14 -07:00
sp.wack
053723a4d4 fix(frontend): Refetch conversations when toggling the conversation panel (#6190) 2025-01-22 18:19:01 +00:00
mamoodi
5a6dbac5a3 Release 0.21.0 (#6392)
Co-authored-by: Calvin Smith <email@cjsmith.io>
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-01-22 11:26:12 -05:00
Robert Brennan
93d74e9b41 make export button more stylistically consistent (#6412) 2025-01-22 11:18:43 -05:00
tofarr
1337d03816 Example usage of httpx (#6325) 2025-01-22 16:06:43 +00:00
Robert Brennan
04e36df4d7 remove dead code (#6386) 2025-01-22 10:26:59 -05:00
Boxuan Li
f9ba16b648 Edit tool prompt tweaking: only plain-text format is supported (#6067)
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-01-21 18:22:01 -08:00
Engel Nyst
f0dbb02ee1 Adjust prompt to use view command (#5506)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-21 23:50:39 +01:00
tofarr
318c811817 Added check to shutdown hook (#6402) 2025-01-21 22:32:46 +00:00
Xingyao Wang
b468150f2a fix(codeact): make sure agent sees the prefix/suffix as part of observation (#6400) 2025-01-21 21:54:57 +00:00
Engel Nyst
b9a3f1c753 Fix eval on remote runtime (#6398) 2025-01-21 20:49:30 +00:00
tofarr
09e8a1eeba Fix: Keeping runtimes alive again (For now) (#6395) 2025-01-21 19:20:35 +00:00
Xingyao Wang
ff3880c76d fix(remote_runtime): define runtime_id first to fix attrbute error (#6393) 2025-01-21 18:13:43 +00:00
Calvin Smith
8bd7613724 fix: Settings modal properly tracks if an API key is set (#6394)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-01-21 11:04:30 -07:00
Engel Nyst
5b7fcfbe1a Disable prompt extensions in SWE-bench (#6391) 2025-01-21 17:18:30 +00:00
Robert Brennan
8ae36481df Fix API key again (#6390) 2025-01-21 17:00:59 +00:00
Robert Brennan
25fdb0c3bf fix api key value (#6388) 2025-01-21 16:15:28 +00:00
louria
7f57dbebda Update MiniWoB README (#6385) 2025-01-21 16:26:47 +01:00
dependabot[bot]
54589d7e83 chore(deps-dev): bump pre-commit from 4.0.1 to 4.1.0 in the pre-commit group (#6384)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-21 15:10:20 +00:00
Boxuan Li
b7f34c3f8d (feat) Add button to export trajectory on chat panel (#6378) 2025-01-21 22:10:00 +08:00
dependabot[bot]
210eeee94a chore(deps-dev): bump the eslint group in /frontend with 2 updates (#6358)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-21 13:46:56 +04:00
Robert Brennan
509892cf0e Revert changes to config defaults (#6370) 2025-01-21 04:23:21 +01:00
Engel Nyst
89963e93d8 Re-add reasoning effort (#6371) 2025-01-21 04:22:48 +01:00
tofarr
b6804f9e1e Fix: Static assets should not have the same rate limit (#6360)
Co-authored-by: Robert Brennan <accounts@rbren.io>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-01-20 21:55:49 +00:00
mamoodi
d30211da18 Update running OpenHands guide with detailed prerequisites (#6366) 2025-01-20 13:53:14 -05:00
Boxuan Li
06121bf20f chore(deps): Revert vite upgrade (#6349) 2025-01-20 19:11:32 +01:00
tofarr
541a445dfc Fix: API meta for OpenHands (#6295) 2025-01-20 09:47:57 -07:00
dependabot[bot]
03e496fb60 chore(deps): bump the version-all group with 7 updates (#6359)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 17:04:22 +01:00
Xingyao Wang
1b6e444ecb feat(remote runtime): do not resume runtime if not keep_runtime_alive (#6355)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-01-19 21:42:00 +00:00
Xingyao Wang
2b04ee2e62 feat(eval): reliability improvement for SWE-Bench eval_infer (#6347) 2025-01-18 14:02:59 -05:00
Boxuan Li
4383be1ab4 (feat) Add trajectory replay for headless mode (#6215) 2025-01-18 05:48:22 +00:00
tofarr
b4d20e3e18 Feat: settings default (#6328)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-17 20:17:18 -07:00
mamoodi
532c7cdf02 Attempt to fix doc deploy (#6337) 2025-01-18 00:16:47 +00:00
mamoodi
987861b5e7 Remove broken browser counter logic (#6334)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-17 22:41:31 +00:00
Calvin Smith
f07ec7a09c fix: Conversation creation accessing secret without unwrapping (#6335)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
2025-01-17 22:16:57 +00:00
Xingyao Wang
b1fa6301f0 feat: add prompt for generating repo.md for an arbiratry repo (#6034)
Co-authored-by: Graham Neubig <neubig@gmail.com>
2025-01-17 21:47:27 +00:00
Graham Neubig
62fbe4c622 docs: improve custom sandbox guide with more configuration options (#5589)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-18 05:05:41 +08:00
dependabot[bot]
a1a87af69d chore(deps): bump the version-all group across 1 directory with 18 updates (#6332)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: amanape <83104063+amanape@users.noreply.github.com>
2025-01-17 23:46:57 +04:00
Calvin Smith
a12087243a Pydantic-based configuration and setting objects (#6321)
Co-authored-by: Calvin Smith <calvin@all-hands.dev>
Co-authored-by: Graham Neubig <neubig@gmail.com>
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-01-17 12:33:22 -07:00
Xingyao Wang
899c1f8360 fix(bash): also show timeout reminder when no_change_timeout is triggered (#6318)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-01-18 03:31:23 +08:00
manna_and_poem
c5d7caf01f remove useless axtree str (#6315) 2025-01-17 17:50:40 +00:00
Engel Nyst
85a760e561 Simplify draft llm (#6281)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-17 17:38:02 +00:00
dependabot[bot]
8e9c315729 chore(deps): bump the version-all group with 8 updates (#6331)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-17 15:19:45 +00:00
Rohit Malhotra
000055ba73 Add initial user msg to /new_conversation route (#6314) 2025-01-17 14:43:03 +00:00
Aleksandr Kadykov
2edb2337c2 Fix typo in Development.md (#6330) 2025-01-17 13:51:53 +00:00
Amaechi-Okorie Onyedikachi Hope
7c8a0162ae feat: add slack etiquettes (#6178) 2025-01-17 01:28:23 +00:00
Robert Brennan
c10f18b3bd Better message when trying to reconnect (#6323) 2025-01-16 22:10:48 +00:00
tofarr
313c8eca20 Fix closing sessions (again) (#6322)
Co-authored-by: Robert Brennan <accounts@rbren.io>
2025-01-16 15:03:38 -07:00
tofarr
eff9e07272 Fix for issue with user id (#6320) 2025-01-16 20:33:36 +00:00
Xingyao Wang
f8a3aeccd6 fix: Restore missing translation keys (#6317)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-16 19:21:46 +00:00
Robert Brennan
9375e0d756 fix browser async lock (#6316) 2025-01-16 19:17:17 +00:00
Xingyao Wang
72af7bbba2 feat(eval): misc SWE-Bench improvement - use different resources for different instances (#6313)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-17 02:48:41 +08:00
OpenHands
0661c69bd3 Fix issue #6273: [Feature]: Disable LitLLM Print Message (#6274)
Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
Co-authored-by: Xingyao Wang <xingyao@all-hands.dev>
2025-01-17 02:43:55 +08:00
Xingyao Wang
0c961bfd8b refactor(prompt): move runtime/repo info to user message and disable them in eval (#6291) 2025-01-16 17:53:10 +00:00
Xingyao Wang
0bed17758f fix: incorrect soft-timeout implementation & fix hard-timeout follow-up command (#6280) 2025-01-17 01:27:00 +08:00
Ryan H. Tran
da1a6035ac Enable runtime build in openhands-resolver.yml (#6312) 2025-01-16 11:42:22 -05:00
Rohit Malhotra
df050e4786 Separate data extraction and convo creation logic (#6298) 2025-01-16 11:40:03 -05:00
Xingyao Wang
e211647eba fix: llm-proxy response_cost being 0 (#6293) 2025-01-16 15:33:22 +00:00
Alejandro Cuadron Lafuente
8579710c82 [Fix] Restored FC default for GPT-4o (#6311) 2025-01-16 15:27:57 +00:00
dependabot[bot]
8c35150c3e chore(deps-dev): bump llama-index from 0.12.10 to 0.12.11 in the llama group (#6308)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 16:18:37 +01:00
Alejandro Cuadron Lafuente
578291e961 Enabled native function calling for O1 + added support for reasoning_effort config in the config. (#6256)
Co-authored-by: Engel Nyst <enyst@users.noreply.github.com>
2025-01-16 14:53:11 +00:00
Xingyao Wang
efe04baf34 Revert "Fix closing sessions" (#6300) 2025-01-16 09:14:56 -05:00
dependabot[bot]
6e089619e0 chore(deps-dev): bump chromadb from 0.6.2 to 0.6.3 in the chromadb group (#6289)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 00:37:42 +01:00
Xingyao Wang
179a89a211 Fix microagent loading with trailing slashes and nested directories (#6239)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-15 17:07:40 +00:00
tofarr
8795ee6c6e Fix closing sessions (#6114) 2025-01-15 10:04:22 -07:00
Engel Nyst
97e938d545 Fix French doc (#6283) 2025-01-15 04:25:47 +00:00
Engel Nyst
b9a70c8d5c Delegation fixes (#6165) 2025-01-15 03:24:39 +00:00
Ray Myers
082d0b25c5 Send status message on runtime restart (#6275) 2025-01-15 03:21:06 +01:00
Engel Nyst
c5797d1d5a Fix llm_config fallback (#4415)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-15 01:17:37 +00:00
Xingyao Wang
7ce1fb85ff chore: remove repo info from initial query for #6057 (#6279) 2025-01-15 00:40:54 +00:00
Robert Brennan
fa6792e5a6 Add GitHub repository information to system prompt (#6057)
Co-authored-by: openhands <openhands@all-hands.dev>
2025-01-15 08:02:07 +08:00
dependabot[bot]
3d9b4c4af6 chore(deps): bump the version-all group with 4 updates (#6267)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-14 21:30:56 +01:00
tofarr
e21cbf67ee Feat: User id should be a str (Because it will probably be a UUID) (#6251) 2025-01-14 12:39:51 -07:00
Xingyao Wang
6b2e3f938f fix: prevent runtime size deselection (#6119)
Co-authored-by: openhands <openhands@all-hands.dev>
Co-authored-by: mamoodi <mamoodiha@gmail.com>
2025-01-14 17:53:51 +00:00
Rohit Malhotra
580d7b938c Fix: Don't refresh github token on local (#5880) 2025-01-14 17:48:33 +00:00
mamoodi
28178a2940 Remove extra optional for github token (#6270) 2025-01-14 17:44:28 +00:00
sp.wack
04382b2b19 hotfix(backend): Remove GH header token middleware (#6269) 2025-01-14 12:07:13 -05:00
1201 changed files with 115649 additions and 31328 deletions

View File

@@ -5,11 +5,12 @@ labels: ['bug']
body:
- type: markdown
attributes:
value: Thank you for taking the time to fill out this bug report. Please provide as much information as possible to help us understand and address the issue effectively.
value: Thank you for taking the time to fill out this bug report. Please provide as much information as possible
to help us understand and address the issue effectively.
- type: checkboxes
attributes:
label: Is there an existing issue for the same bug?
label: Is there an existing issue for the same bug? (If one exists, thumbs up or comment on the issue instead).
description: Please check if an issue already exists for the bug you encountered.
options:
- label: I have checked the existing issues.
@@ -30,6 +31,7 @@ body:
description: How are you running OpenHands?
options:
- Docker command in README
- GitHub resolver
- Development workflow
- app.all-hands.dev
- Other

View File

@@ -1,6 +1,6 @@
---
name: Feature Request
about: Suggest an idea for OpenHands features
name: Feature Request or Enhancement
about: Suggest an idea for an OpenHands feature or enhancement
title: ''
labels: 'enhancement'
assignees: ''
@@ -9,10 +9,9 @@ assignees: ''
**What problem or use case are you trying to solve?**
**Describe the UX of the solution you'd like**
**Do you have thoughts on the technical implementation?**
**Describe alternatives you've considered**
**Describe the UX or technical implementation you have in mind**
**Additional context**
### If you find this feature request or enhancement useful, make sure to add a 👍 to the issue

View File

@@ -1,18 +0,0 @@
---
name: Technical Proposal
about: Propose a new architecture or technology
title: ''
labels: 'proposal'
assignees: ''
---
**Summary**
**Motivation**
**Technical Design**
**Alternatives to Consider**
**Additional context**

View File

@@ -10,12 +10,6 @@ updates:
pre-commit:
patterns:
- "pre-commit"
llama:
patterns:
- "llama*"
chromadb:
patterns:
- "chromadb"
browsergym:
patterns:
- "browsergym*"

View File

@@ -1,11 +1,12 @@
**End-user friendly description of the problem this fixes or functionality that this introduces**
- [ ] Include this change in the Release Notes. If checked, you must provide an **end-user friendly** description for your change below
---
**Give a summary of what the PR does, explaining any non-trivial design decisions**
- [ ] This change is worth documenting at https://docs.all-hands.dev/
- [ ] Include this change in the Release Notes. If checked, you **must** provide an **end-user friendly** description for your change below
**End-user friendly description of the problem this fixes or functionality that this introduces.**
---
**Link of any specific issues this addresses**
**Give a summary of what the PR does, explaining any non-trivial design decisions.**
---
**Link of any specific issues this addresses.**

View File

@@ -13,8 +13,8 @@ def find_version_references(directory: str) -> Tuple[Set[str], Set[str]]:
version_pattern_runtime = re.compile(r'runtime:(\d{1})\.(\d{2})')
for root, _, files in os.walk(directory):
# Skip .git directory
if '.git' in root:
# Skip .git directory and docs/build directory
if '.git' in root or 'docs/build' in root:
continue
for file in files:
@@ -28,11 +28,15 @@ def find_version_references(directory: str) -> Tuple[Set[str], Set[str]]:
# Find all openhands version references
matches = version_pattern_openhands.findall(content)
openhands_versions.update(matches)
if matches:
print(f'Found openhands version {matches} in {file_path}')
openhands_versions.update(matches)
# Find all runtime version references
matches = version_pattern_runtime.findall(content)
runtime_versions.update(matches)
if matches:
print(f'Found runtime version {matches} in {file_path}')
runtime_versions.update(matches)
except Exception as e:
print(f'Error reading {file_path}: {e}', file=sys.stderr)
@@ -41,8 +45,12 @@ def find_version_references(directory: str) -> Tuple[Set[str], Set[str]]:
def main():
repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
print(f'Checking version consistency in {repo_root}')
openhands_versions, runtime_versions = find_version_references(repo_root)
print(f'Found openhands versions: {sorted(openhands_versions)}')
print(f'Found runtime versions: {sorted(runtime_versions)}')
exit_code = 0
if len(openhands_versions) > 1:

View File

@@ -46,7 +46,7 @@ on:
jobs:
del_runs:
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
actions: write
contents: read

View File

@@ -24,22 +24,20 @@ jobs:
build:
if: github.repository == 'All-Hands-AI/OpenHands'
name: Build Docusaurus
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
- uses: useblacksmith/setup-node@v5
with:
node-version: 18
cache: npm
cache-dependency-path: docs/package-lock.json
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: '3.12'
- name: Generate Python Docs
run: rm -rf docs/modules/python && pip install pydoc-markdown && pydoc-markdown
- name: Install dependencies
run: cd docs && npm ci
- name: Build website
@@ -54,7 +52,7 @@ jobs:
deploy:
if: github.ref == 'refs/heads/main' && github.repository == 'All-Hands-AI/OpenHands'
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
# This job only runs on "main" so only run one of these jobs at a time
# otherwise it will fail if one is already running
concurrency:

View File

@@ -1,63 +0,0 @@
# Workflow that uses the DummyAgent to run a simple task
name: Run E2E test with dummy agent
# Always run on "main"
# Always run on PRs
on:
push:
branches:
- main
pull_request:
# If triggered by a PR, it will be in the same group. However, each commit on main will be in its own unique group
concurrency:
group: ${{ github.workflow }}-${{ (github.head_ref && github.ref) || github.run_id }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: false
swap-storage: true
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Install tmux
run: sudo apt-get update && sudo apt-get install -y tmux
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: 'poetry'
- name: Install Python dependencies using Poetry
run: poetry install --without evaluation,llama-index
- name: Build Environment
run: make build
- name: Run tests
run: |
set -e
SANDBOX_FORCE_REBUILD_RUNTIME=True poetry run python3 openhands/core/main.py -t "do a flip" -d ./workspace/ -c DummyAgent
- name: Check exit code
run: |
if [ $? -ne 0 ]; then
echo "Test failed"
exit 1
else
echo "Test passed"
fi

View File

@@ -1,139 +0,0 @@
name: Run SWE-Bench Evaluation
on:
pull_request:
types: [labeled]
workflow_dispatch:
inputs:
reason:
description: "Reason for manual trigger"
required: true
default: ""
env:
N_PROCESSES: 32 # Global configuration for number of parallel processes for evaluation
jobs:
run-evaluation:
if: github.event.label.name == 'eval-this' || github.event_name != 'pull_request'
runs-on: ubuntu-latest
permissions:
contents: "read"
id-token: "write"
pull-requests: "write"
issues: "write"
strategy:
matrix:
python-version: ["3.12"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install tmux
run: sudo apt-get update && sudo apt-get install -y tmux
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: "poetry"
- name: Comment on PR if 'eval-this' label is present
if: github.event_name == 'pull_request' && github.event.label.name == 'eval-this'
uses: KeisukeYamashita/create-comment@v1
with:
unique: false
comment: |
Hi! I started running the evaluation on your PR. You will receive a comment with the results shortly.
- name: Install Python dependencies using Poetry
run: poetry install
- name: Configure config.toml for evaluation
env:
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_LLM_API_KEY }}
run: |
echo "[llm.eval]" > config.toml
echo "model = \"deepseek/deepseek-chat\"" >> config.toml
echo "api_key = \"$DEEPSEEK_API_KEY\"" >> config.toml
echo "temperature = 0.0" >> config.toml
- name: Run SWE-Bench evaluation
env:
ALLHANDS_API_KEY: ${{ secrets.ALLHANDS_EVAL_RUNTIME_API_KEY }}
RUNTIME: remote
SANDBOX_REMOTE_RUNTIME_API_URL: https://runtime.eval.all-hands.dev
EVAL_DOCKER_IMAGE_PREFIX: us-central1-docker.pkg.dev/evaluation-092424/swe-bench-images
run: |
poetry run ./evaluation/benchmarks/swe_bench/scripts/run_infer.sh llm.eval HEAD CodeActAgent 300 30 $N_PROCESSES "princeton-nlp/SWE-bench_Lite" test
OUTPUT_FOLDER=$(find evaluation/evaluation_outputs/outputs/princeton-nlp__SWE-bench_Lite-test/CodeActAgent -name "deepseek-chat_maxiter_50_N_*-no-hint-run_1" -type d | head -n 1)
echo "OUTPUT_FOLDER for SWE-bench evaluation: $OUTPUT_FOLDER"
poetry run ./evaluation/benchmarks/swe_bench/scripts/eval_infer_remote.sh $OUTPUT_FOLDER/output.jsonl $N_PROCESSES "princeton-nlp/SWE-bench_Lite" test
poetry run ./evaluation/benchmarks/swe_bench/scripts/eval/summarize_outputs.py $OUTPUT_FOLDER/output.jsonl > summarize_outputs.log 2>&1
echo "SWEBENCH_REPORT<<EOF" >> $GITHUB_ENV
cat summarize_outputs.log >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Create tar.gz of evaluation outputs
run: |
TIMESTAMP=$(date +'%y-%m-%d-%H-%M')
tar -czvf evaluation_outputs_${TIMESTAMP}.tar.gz evaluation/evaluation_outputs/outputs
- name: Upload evaluation results as artifact
uses: actions/upload-artifact@v4
id: upload_results_artifact
with:
name: evaluation-outputs
path: evaluation_outputs_*.tar.gz
- name: Get artifact URL
run: echo "ARTIFACT_URL=${{ steps.upload_results_artifact.outputs.artifact-url }}" >> $GITHUB_ENV
- name: Authenticate to Google Cloud
uses: 'google-github-actions/auth@v2'
with:
credentials_json: ${{ secrets.GCP_RESEARCH_OBJECT_CREATOR_SA_KEY }}
- name: Set timestamp and trigger reason
run: |
echo "TIMESTAMP=$(date +'%Y-%m-%d-%H-%M')" >> $GITHUB_ENV
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "TRIGGER_REASON=pr-${{ github.event.pull_request.number }}" >> $GITHUB_ENV
elif [[ "${{ github.event_name }}" == "schedule" ]]; then
echo "TRIGGER_REASON=schedule" >> $GITHUB_ENV
else
echo "TRIGGER_REASON=manual-${{ github.event.inputs.reason }}" >> $GITHUB_ENV
fi
- name: Upload evaluation results to Google Cloud Storage
uses: 'google-github-actions/upload-cloud-storage@v2'
with:
path: 'evaluation/evaluation_outputs/outputs'
destination: 'openhands-oss-eval-results/${{ env.TIMESTAMP }}-${{ env.TRIGGER_REASON }}'
- name: Comment with evaluation results and artifact link
id: create_comment
uses: KeisukeYamashita/create-comment@v1
with:
number: ${{ github.event_name == 'pull_request' && github.event.pull_request.number || 4504 }}
unique: false
comment: |
Trigger by: ${{ github.event_name == 'pull_request' && format('Pull Request (eval-this label on PR #{0})', github.event.pull_request.number) || github.event_name == 'schedule' && 'Daily Schedule' || format('Manual Trigger: {0}', github.event.inputs.reason) }}
Commit: ${{ github.sha }}
**SWE-Bench Evaluation Report**
${{ env.SWEBENCH_REPORT }}
---
You can download the full evaluation outputs [here](${{ env.ARTIFACT_URL }}).
- name: Post to a Slack channel
id: slack
uses: slackapi/slack-github-action@v2.0.0
with:
channel-id: 'C07SVQSCR6F'
slack-message: "*Evaluation Trigger:* ${{ github.event_name == 'pull_request' && format('Pull Request (eval-this label on PR #{0})', github.event.pull_request.number) || github.event_name == 'schedule' && 'Daily Schedule' || format('Manual Trigger: {0}', github.event.inputs.reason) }}\n\nLink to summary: [here](https://github.com/${{ github.repository }}/issues/${{ github.event_name == 'pull_request' && github.event.pull_request.number || 4504 }}#issuecomment-${{ steps.create_comment.outputs.comment-id }})"
env:
SLACK_BOT_TOKEN: ${{ secrets.EVAL_NOTIF_SLACK_BOT_TOKEN }}

View File

@@ -21,7 +21,7 @@ jobs:
# Run frontend unit tests
fe-test:
name: FE Unit Tests
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
strategy:
matrix:
node-version: [20, 22]
@@ -30,7 +30,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
uses: useblacksmith/setup-node@v5
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies

View File

@@ -25,38 +25,48 @@ concurrency:
cancel-in-progress: true
env:
BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST: nikolaik/python-nodejs:python3.12-nodejs22
RELEVANT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
jobs:
define-matrix:
runs-on: blacksmith
outputs:
base_image: ${{ steps.define-base-images.outputs.base_image }}
steps:
- name: Define base images
shell: bash
id: define-base-images
run: |
# Only build nikolaik on PRs, otherwise build both nikolaik and ubuntu.
if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
json=$(jq -n -c '[
{ image: "nikolaik/python-nodejs:python3.12-nodejs22", tag: "nikolaik" }
]')
else
json=$(jq -n -c '[
{ image: "nikolaik/python-nodejs:python3.12-nodejs22", tag: "nikolaik" },
{ image: "ubuntu:24.04", tag: "ubuntu" }
]')
fi
echo "base_image=$json" >> "$GITHUB_OUTPUT"
# Builds the OpenHands Docker images
ghcr_build_app:
name: Build App Image
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
contents: read
packages: write
outputs:
# Since this job uses outputs it cannot use matrix
hash_from_app_image: ${{ steps.get_hash_in_app_image.outputs.hash_from_app_image }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: false
swap-storage: true
ref: ${{ github.event.pull_request.head.sha }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.3.0
uses: docker/setup-qemu-action@v3.6.0
with:
image: tonistiigi/binfmt:latest
- name: Login to GHCR
@@ -68,22 +78,22 @@ jobs:
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Lowercase Repository Owner
run: |
echo REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Build and push app image
if: "!github.event.pull_request.head.repo.fork"
run: |
./containers/build.sh -i openhands -o ${{ github.repository_owner }} --push
./containers/build.sh -i openhands -o ${{ env.REPO_OWNER }} --push
- name: Build app image
if: "github.event.pull_request.head.repo.fork"
run: |
./containers/build.sh -i openhands -o ${{ github.repository_owner }} --load
./containers/build.sh -i openhands -o ${{ env.REPO_OWNER }} --load
- name: Get hash in App Image
id: get_hash_in_app_image
run: |
# Lowercase the repository owner
export REPO_OWNER=${{ github.repository_owner }}
REPO_OWNER=$(echo $REPO_OWNER | tr '[:upper:]' '[:lower:]')
# Run the build script in the app image
docker run -e SANDBOX_USER_ID=0 -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/${REPO_OWNER}/openhands:${{ env.RELEVANT_SHA }} /bin/bash -c "mkdir -p containers/runtime; python3 openhands/runtime/utils/runtime_build.py --base_image ${{ env.BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST }} --build_folder containers/runtime --force_rebuild" 2>&1 | tee docker-outputs.txt
docker run -e SANDBOX_USER_ID=0 -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/${{ env.REPO_OWNER }}/openhands:${{ env.RELEVANT_SHA }} /bin/bash -c "mkdir -p containers/runtime; python3 openhands/runtime/utils/runtime_build.py --base_image ${{ env.BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST }} --build_folder containers/runtime --force_rebuild" 2>&1 | tee docker-outputs.txt
# Get the hash from the build script
hash_from_app_image=$(cat docker-outputs.txt | grep "Hash for docker build directory" | awk -F "): " '{print $2}' | uniq | head -n1)
echo "hash_from_app_image=$hash_from_app_image" >> $GITHUB_OUTPUT
@@ -92,34 +102,21 @@ jobs:
# Builds the runtime Docker images
ghcr_build_runtime:
name: Build Image
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
contents: read
packages: write
needs: define-matrix
strategy:
matrix:
base_image:
- image: 'nikolaik/python-nodejs:python3.12-nodejs22'
tag: nikolaik
base_image: ${{ fromJson(needs.define-matrix.outputs.base_image) }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: false
swap-storage: true
ref: ${{ github.event.pull_request.head.sha }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3.3.0
uses: docker/setup-qemu-action@v3.6.0
with:
image: tonistiigi/binfmt:latest
- name: Login to GHCR
@@ -132,70 +129,97 @@ jobs:
id: buildx
uses: docker/setup-buildx-action@v3
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: '3.12'
- name: Cache Poetry dependencies
uses: actions/cache@v4
uses: useblacksmith/cache@v5
with:
path: |
~/.cache/pypoetry
~/.virtualenvs
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
# This is the one that saves the cache, the others set 'lookup-only: true'
restore-keys: |
${{ runner.os }}-poetry-
- name: Install poetry via pipx
run: pipx install poetry
- name: Install Python dependencies using Poetry
run: make install-python-dependencies
run: make install-python-dependencies POETRY_GROUP=main INSTALL_PLAYWRIGHT=0
- name: Create source distribution and Dockerfile
run: poetry run python3 openhands/runtime/utils/runtime_build.py --base_image ${{ matrix.base_image.image }} --build_folder containers/runtime --force_rebuild
- name: Lowercase Repository Owner
run: |
echo REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
- name: Short SHA
run: |
echo SHORT_SHA=$(git rev-parse --short "$RELEVANT_SHA") >> $GITHUB_ENV
- name: Determine docker build params
if: github.event.pull_request.head.repo.fork != true
shell: bash
run: |
./containers/build.sh -i runtime -o ${{ env.REPO_OWNER }} -t ${{ matrix.base_image.tag }} --dry
DOCKER_BUILD_JSON=$(jq -c . < docker-build-dry.json)
echo "DOCKER_TAGS=$(echo "$DOCKER_BUILD_JSON" | jq -r '.tags | join(",")')" >> $GITHUB_ENV
echo "DOCKER_PLATFORM=$(echo "$DOCKER_BUILD_JSON" | jq -r '.platform')" >> $GITHUB_ENV
echo "DOCKER_BUILD_ARGS=$(echo "$DOCKER_BUILD_JSON" | jq -r '.build_args | join(",")')" >> $GITHUB_ENV
- name: Build and push runtime image ${{ matrix.base_image.image }}
if: github.event.pull_request.head.repo.fork != true
run: |
./containers/build.sh -i runtime -o ${{ github.repository_owner }} --push -t ${{ matrix.base_image.tag }}
# Forked repos can't push to GHCR, so we need to upload the image as an artifact
uses: useblacksmith/build-push-action@v1
with:
push: true
tags: ${{ env.DOCKER_TAGS }}
platforms: ${{ env.DOCKER_PLATFORM }}
build-args: ${{ env.DOCKER_BUILD_ARGS }}
context: containers/runtime
provenance: false
# Forked repos can't push to GHCR, so we just build in order to populate the cache for rebuilding
- name: Build runtime image ${{ matrix.base_image.image }} for fork
if: github.event.pull_request.head.repo.fork
uses: docker/build-push-action@v6
uses: useblacksmith/build-push-action@v1
with:
tags: ghcr.io/all-hands-ai/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
outputs: type=docker,dest=/tmp/runtime-${{ matrix.base_image.tag }}.tar
tags: ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
context: containers/runtime
- name: Upload runtime image for fork
- name: Upload runtime source for fork
if: github.event.pull_request.head.repo.fork
uses: actions/upload-artifact@v4
with:
name: runtime-${{ matrix.base_image.tag }}
path: /tmp/runtime-${{ matrix.base_image.tag }}.tar
name: runtime-src-${{ matrix.base_image.tag }}
path: containers/runtime
verify_hash_equivalence_in_runtime_and_app:
name: Verify Hash Equivalence in Runtime and Docker images
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
needs: [ghcr_build_runtime, ghcr_build_app]
strategy:
fail-fast: false
matrix:
base_image: ['nikolaik']
env:
BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST: nikolaik/python-nodejs:python3.12-nodejs22
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Cache Poetry dependencies
uses: actions/cache@v4
uses: useblacksmith/cache@v5
with:
path: |
~/.cache/pypoetry
~/.virtualenvs
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
lookup-only: true
restore-keys: |
${{ runner.os }}-poetry-
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: '3.12'
- name: Install poetry via pipx
run: pipx install poetry
- name: Install Python dependencies using Poetry
run: make install-python-dependencies
run: make install-python-dependencies POETRY_GROUP=main INSTALL_PLAYWRIGHT=0
- name: Get hash in App Image
run: |
echo "Hash from app image: ${{ needs.ghcr_build_app.outputs.hash_from_app_image }}"
@@ -219,63 +243,56 @@ jobs:
exit 1
fi
# Run unit tests with the EventStream runtime Docker images as root
# Run unit tests with the Docker runtime Docker images as root
test_runtime_root:
name: RT Unit Tests (Root)
needs: [ghcr_build_runtime]
runs-on: ubuntu-latest
needs: [ghcr_build_runtime, define-matrix]
runs-on: blacksmith-8vcpu-ubuntu-2204
strategy:
fail-fast: false
matrix:
base_image: ['nikolaik']
base_image: ${{ fromJson(needs.define-matrix.outputs.base_image) }}
steps:
- uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: false
swap-storage: true
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
# Forked repos can't push to GHCR, so we need to download the image as an artifact
- name: Download runtime image for fork
- name: Download runtime source for fork
if: github.event.pull_request.head.repo.fork
uses: actions/download-artifact@v4
with:
name: runtime-${{ matrix.base_image }}
path: /tmp
- name: Load runtime image for fork
if: github.event.pull_request.head.repo.fork
name: runtime-src-${{ matrix.base_image.tag }}
path: containers/runtime
- name: Lowercase Repository Owner
run: |
docker load --input /tmp/runtime-${{ matrix.base_image }}.tar
echo REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
# Forked repos can't push to GHCR, so we need to rebuild using cache
- name: Build runtime image ${{ matrix.base_image.image }} for fork
if: github.event.pull_request.head.repo.fork
uses: useblacksmith/build-push-action@v1
with:
load: true
tags: ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
context: containers/runtime
- name: Cache Poetry dependencies
uses: actions/cache@v4
uses: useblacksmith/cache@v5
with:
path: |
~/.cache/pypoetry
~/.virtualenvs
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
lookup-only: true
restore-keys: |
${{ runner.os }}-poetry-
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: '3.12'
- name: Install poetry via pipx
run: pipx install poetry
- name: Install Python dependencies using Poetry
run: make install-python-dependencies
- name: Run runtime tests
run: make install-python-dependencies POETRY_GROUP=main,test,runtime INSTALL_PLAYWRIGHT=0
- name: Run docker runtime tests
run: |
# We install pytest-xdist in order to run tests across CPUs
poetry run pip install pytest-xdist
@@ -283,75 +300,70 @@ jobs:
# Install to be able to retry on failures for flaky tests
poetry run pip install pytest-rerunfailures
image_name=ghcr.io/${{ github.repository_owner }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image }}
image_name=$(echo $image_name | tr '[:upper:]' '[:lower:]')
image_name=ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
TEST_RUNTIME=eventstream \
# Setting RUN_AS_OPENHANDS to false means use root.
# That should mean SANDBOX_USER_ID is ignored but some tests do not check for RUN_AS_OPENHANDS.
TEST_RUNTIME=docker \
SANDBOX_USER_ID=$(id -u) \
SANDBOX_RUNTIME_CONTAINER_IMAGE=$image_name \
TEST_IN_CI=true \
RUN_AS_OPENHANDS=false \
poetry run pytest -n 3 -raRs --reruns 2 --reruns-delay 5 --cov=openhands --cov-report=xml -s ./tests/runtime --ignore=tests/runtime/test_browsergym_envs.py
poetry run pytest -n 7 -raRs --reruns 2 --reruns-delay 5 --cov=openhands --cov-report=xml -s ./tests/runtime --ignore=tests/runtime/test_browsergym_envs.py --durations=10
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# Run unit tests with the EventStream runtime Docker images as openhands user
# Run unit tests with the Docker runtime Docker images as openhands user
test_runtime_oh:
name: RT Unit Tests (openhands)
runs-on: ubuntu-latest
needs: [ghcr_build_runtime]
runs-on: blacksmith-8vcpu-ubuntu-2204
needs: [ghcr_build_runtime, define-matrix]
strategy:
matrix:
base_image: ['nikolaik']
base_image: ${{ fromJson(needs.define-matrix.outputs.base_image) }}
steps:
- uses: actions/checkout@v4
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: false
swap-storage: true
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
# Forked repos can't push to GHCR, so we need to download the image as an artifact
- name: Download runtime image for fork
- name: Download runtime source for fork
if: github.event.pull_request.head.repo.fork
uses: actions/download-artifact@v4
with:
name: runtime-${{ matrix.base_image }}
path: /tmp
- name: Load runtime image for fork
if: github.event.pull_request.head.repo.fork
name: runtime-src-${{ matrix.base_image.tag }}
path: containers/runtime
- name: Lowercase Repository Owner
run: |
docker load --input /tmp/runtime-${{ matrix.base_image }}.tar
echo REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
# Forked repos can't push to GHCR, so we need to rebuild using cache
- name: Build runtime image ${{ matrix.base_image.image }} for fork
if: github.event.pull_request.head.repo.fork
uses: useblacksmith/build-push-action@v1
with:
load: true
tags: ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
context: containers/runtime
- name: Cache Poetry dependencies
uses: actions/cache@v4
uses: useblacksmith/cache@v5
with:
path: |
~/.cache/pypoetry
~/.virtualenvs
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
lookup-only: true
restore-keys: |
${{ runner.os }}-poetry-
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: '3.12'
- name: Install poetry via pipx
run: pipx install poetry
- name: Install Python dependencies using Poetry
run: make install-python-dependencies
run: make install-python-dependencies POETRY_GROUP=main,test,runtime INSTALL_PLAYWRIGHT=0
- name: Run runtime tests
run: |
# We install pytest-xdist in order to run tests across CPUs
@@ -360,15 +372,14 @@ jobs:
# Install to be able to retry on failures for flaky tests
poetry run pip install pytest-rerunfailures
image_name=ghcr.io/${{ github.repository_owner }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image }}
image_name=$(echo $image_name | tr '[:upper:]' '[:lower:]')
image_name=ghcr.io/${{ env.REPO_OWNER }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image.tag }}
TEST_RUNTIME=eventstream \
TEST_RUNTIME=docker \
SANDBOX_USER_ID=$(id -u) \
SANDBOX_RUNTIME_CONTAINER_IMAGE=$image_name \
TEST_IN_CI=true \
RUN_AS_OPENHANDS=true \
poetry run pytest -n 3 -raRs --reruns 2 --reruns-delay 5 --cov=openhands --cov-report=xml -s ./tests/runtime --ignore=tests/runtime/test_browsergym_envs.py
poetry run pytest -n 7 -raRs --reruns 2 --reruns-delay 5 --cov=openhands --cov-report=xml -s ./tests/runtime --ignore=tests/runtime/test_browsergym_envs.py --durations=10
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
env:
@@ -381,7 +392,7 @@ jobs:
runtime_tests_check_success:
name: All Runtime Tests Passed
if: ${{ !cancelled() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
needs: [test_runtime_root, test_runtime_oh, verify_hash_equivalence_in_runtime_and_app]
steps:
- name: All tests passed
@@ -390,7 +401,7 @@ jobs:
runtime_tests_check_fail:
name: All Runtime Tests Passed
if: ${{ cancelled() || contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
needs: [test_runtime_root, test_runtime_oh, verify_hash_equivalence_in_runtime_and_app]
steps:
- name: Some tests failed
@@ -401,7 +412,7 @@ jobs:
name: Update PR Description
if: github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]'
needs: [ghcr_build_runtime]
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- name: Checkout
uses: actions/checkout@v4

View File

@@ -18,7 +18,7 @@ env:
jobs:
run-integration-tests:
if: github.event.label.name == 'integration-test' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule'
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
contents: "read"
id-token: "write"
@@ -35,11 +35,16 @@ jobs:
run: pipx install poetry
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: "poetry"
- name: Setup Node.js
uses: useblacksmith/setup-node@v5
with:
node-version: '22.x'
- name: Comment on PR if 'integration-test' label is present
if: github.event_name == 'pull_request' && github.event.label.name == 'integration-test'
uses: KeisukeYamashita/create-comment@v1
@@ -49,13 +54,14 @@ jobs:
Hi! I started running the integration tests on your PR. You will receive a comment with the results shortly.
- name: Install Python dependencies using Poetry
run: poetry install --without evaluation,llama-index
run: poetry install --without evaluation
- name: Configure config.toml for testing with Haiku
env:
LLM_MODEL: "litellm_proxy/claude-3-5-haiku-20241022"
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
MAX_ITERATIONS: 10
run: |
echo "[llm.eval]" > config.toml
echo "model = \"$LLM_MODEL\"" >> config.toml
@@ -70,7 +76,7 @@ jobs:
env:
SANDBOX_FORCE_REBUILD_RUNTIME: True
run: |
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD CodeActAgent '' $N_PROCESSES '' 'haiku_run'
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD CodeActAgent '' 10 $N_PROCESSES '' 'haiku_run'
# get integration tests report
REPORT_FILE_HAIKU=$(find evaluation/evaluation_outputs/outputs/integration_tests/CodeActAgent/*haiku*_maxiter_10_N* -name "report.md" -type f | head -n 1)
@@ -88,6 +94,7 @@ jobs:
LLM_MODEL: "litellm_proxy/deepseek-chat"
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
MAX_ITERATIONS: 10
run: |
echo "[llm.eval]" > config.toml
echo "model = \"$LLM_MODEL\"" >> config.toml
@@ -99,7 +106,7 @@ jobs:
env:
SANDBOX_FORCE_REBUILD_RUNTIME: True
run: |
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD CodeActAgent '' $N_PROCESSES '' 'deepseek_run'
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD CodeActAgent '' 10 $N_PROCESSES '' 'deepseek_run'
# get integration tests report
REPORT_FILE_DEEPSEEK=$(find evaluation/evaluation_outputs/outputs/integration_tests/CodeActAgent/deepseek*_maxiter_10_N* -name "report.md" -type f | head -n 1)
@@ -109,11 +116,42 @@ jobs:
echo >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
# -------------------------------------------------------------
# Run VisualBrowsingAgent tests for DeepSeek, limited to t05 and t06
- name: Wait a little bit (again)
run: sleep 5
- name: Configure config.toml for testing VisualBrowsingAgent (DeepSeek)
env:
LLM_MODEL: "litellm_proxy/deepseek-chat"
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
MAX_ITERATIONS: 15
run: |
echo "[llm.eval]" > config.toml
echo "model = \"$LLM_MODEL\"" >> config.toml
echo "api_key = \"$LLM_API_KEY\"" >> config.toml
echo "base_url = \"$LLM_BASE_URL\"" >> config.toml
echo "temperature = 0.0" >> config.toml
- name: Run integration test evaluation for VisualBrowsingAgent (DeepSeek)
env:
SANDBOX_FORCE_REBUILD_RUNTIME: True
run: |
poetry run ./evaluation/integration_tests/scripts/run_infer.sh llm.eval HEAD VisualBrowsingAgent '' 15 $N_PROCESSES "t05_simple_browsing,t06_github_pr_browsing.py" 'visualbrowsing_deepseek_run'
# Find and export the visual browsing agent test results
REPORT_FILE_VISUALBROWSING_DEEPSEEK=$(find evaluation/evaluation_outputs/outputs/integration_tests/VisualBrowsingAgent/deepseek*_maxiter_15_N* -name "report.md" -type f | head -n 1)
echo "REPORT_FILE_VISUALBROWSING_DEEPSEEK: $REPORT_FILE_VISUALBROWSING_DEEPSEEK"
echo "INTEGRATION_TEST_REPORT_VISUALBROWSING_DEEPSEEK<<EOF" >> $GITHUB_ENV
cat $REPORT_FILE_VISUALBROWSING_DEEPSEEK >> $GITHUB_ENV
echo >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Create archive of evaluation outputs
run: |
TIMESTAMP=$(date +'%y-%m-%d-%H-%M')
cd evaluation/evaluation_outputs/outputs # Change to the outputs directory
tar -czvf ../../../integration_tests_${TIMESTAMP}.tar.gz integration_tests/CodeActAgent/* # Only include the actual result directories
tar -czvf ../../../integration_tests_${TIMESTAMP}.tar.gz integration_tests/CodeActAgent/* integration_tests/VisualBrowsingAgent/* # Only include the actual result directories
- name: Upload evaluation results as artifact
uses: actions/upload-artifact@v4
@@ -155,4 +193,7 @@ jobs:
DeepSeek LLM Test Results:
${{ env.INTEGRATION_TEST_REPORT_DEEPSEEK }}
---
**Integration Tests Report VisualBrowsing (DeepSeek)**
${{ env.INTEGRATION_TEST_REPORT_VISUALBROWSING_DEEPSEEK }}
---
Download testing outputs (includes both Haiku and DeepSeek results): [Download](${{ steps.upload_results_artifact.outputs.artifact-url }})

View File

@@ -9,7 +9,7 @@ jobs:
lint-fix-frontend:
if: github.event.label.name == 'lint-fix'
name: Fix frontend linting issues
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
contents: write
pull-requests: write
@@ -22,7 +22,7 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Node.js 20
uses: actions/setup-node@v4
uses: useblacksmith/setup-node@v5
with:
node-version: 20
- name: Install frontend dependencies
@@ -52,7 +52,7 @@ jobs:
lint-fix-python:
if: github.event.label.name == 'lint-fix'
name: Fix Python linting issues
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
permissions:
contents: write
pull-requests: write
@@ -65,7 +65,7 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: 3.12
cache: 'pip'

View File

@@ -19,11 +19,11 @@ jobs:
# Run lint on the frontend code
lint-frontend:
name: Lint frontend
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- uses: actions/checkout@v4
- name: Install Node.js 20
uses: actions/setup-node@v4
uses: useblacksmith/setup-node@v5
with:
node-version: 20
- name: Install dependencies
@@ -39,13 +39,13 @@ jobs:
# Run lint on the python code
lint-python:
name: Lint python
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: 3.12
cache: 'pip'
@@ -57,11 +57,11 @@ jobs:
# Check version consistency across documentation
check-version-consistency:
name: Check version consistency
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- uses: actions/checkout@v4
- name: Set up python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: 3.12
- name: Run version consistency check

View File

@@ -16,10 +16,19 @@ on:
type: string
default: "main"
description: "Target branch to pull and create PR against"
pr_type:
required: false
type: string
default: "draft"
description: "The PR type that is going to be created (draft, ready)"
LLM_MODEL:
required: false
type: string
default: "anthropic/claude-3-5-sonnet-20241022"
default: "anthropic/claude-3-7-sonnet-20250219"
LLM_API_VERSION:
required: false
type: string
default: ""
base_container_image:
required: false
type: string
@@ -84,8 +93,10 @@ jobs:
run: |
python -m pip index versions openhands-ai > openhands_versions.txt
OPENHANDS_VERSION=$(head -n 1 openhands_versions.txt | awk '{print $2}' | tr -d '()')
echo "openhands-ai==${OPENHANDS_VERSION}" >> requirements.txt
cat requirements.txt
# Create a new requirements.txt locally within the workflow, ensuring no reference to the repo's file
echo "openhands-ai==${OPENHANDS_VERSION}" > /tmp/requirements.txt
cat /tmp/requirements.txt
- name: Cache pip dependencies
if: |
@@ -103,15 +114,16 @@ jobs:
uses: actions/cache@v4
with:
path: ${{ env.pythonLocation }}/lib/python3.12/site-packages/*
key: ${{ runner.os }}-pip-openhands-resolver-${{ hashFiles('requirements.txt') }}
key: ${{ runner.os }}-pip-openhands-resolver-${{ hashFiles('/tmp/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-openhands-resolver-${{ hashFiles('requirements.txt') }}
${{ runner.os }}-pip-openhands-resolver-${{ hashFiles('/tmp/requirements.txt') }}
- name: Check required environment variables
env:
LLM_MODEL: ${{ secrets.LLM_MODEL || inputs.LLM_MODEL }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
LLM_API_VERSION: ${{ inputs.LLM_API_VERSION }}
PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
PAT_USERNAME: ${{ secrets.PAT_USERNAME }}
GITHUB_TOKEN: ${{ github.token }}
@@ -138,13 +150,15 @@ jobs:
fi
- name: Set environment variables
env:
REVIEW_BODY: ${{ github.event.review.body || '' }}
run: |
# Handle pull request events first
if [ -n "${{ github.event.pull_request.number }}" ]; then
echo "ISSUE_NUMBER=${{ github.event.pull_request.number }}" >> $GITHUB_ENV
echo "ISSUE_TYPE=pr" >> $GITHUB_ENV
# Handle pull request review events
elif [ -n "${{ github.event.review.body }}" ]; then
elif [ -n "$REVIEW_BODY" ]; then
echo "ISSUE_NUMBER=${{ github.event.pull_request.number }}" >> $GITHUB_ENV
echo "ISSUE_TYPE=pr" >> $GITHUB_ENV
# Handle issue comment events that reference a PR
@@ -157,7 +171,7 @@ jobs:
echo "ISSUE_TYPE=issue" >> $GITHUB_ENV
fi
if [ -n "${{ github.event.review.body }}" ]; then
if [ -n "$REVIEW_BODY" ]; then
echo "COMMENT_ID=${{ github.event.review.id || 'None' }}" >> $GITHUB_ENV
else
echo "COMMENT_ID=${{ github.event.comment.id || 'None' }}" >> $GITHUB_ENV
@@ -165,10 +179,10 @@ jobs:
echo "MAX_ITERATIONS=${{ inputs.max_iterations || 50 }}" >> $GITHUB_ENV
echo "SANDBOX_ENV_GITHUB_TOKEN=${{ secrets.PAT_TOKEN || github.token }}" >> $GITHUB_ENV
echo "SANDBOX_ENV_BASE_CONTAINER_IMAGE=${{ inputs.base_container_image }}" >> $GITHUB_ENV
echo "SANDBOX_BASE_CONTAINER_IMAGE=${{ inputs.base_container_image }}" >> $GITHUB_ENV
# Set branch variables
echo "TARGET_BRANCH=${{ inputs.target_branch }}" >> $GITHUB_ENV
echo "TARGET_BRANCH=${{ inputs.target_branch || 'main' }}" >> $GITHUB_ENV
- name: Comment on issue with start message
uses: actions/github-script@v7
@@ -184,6 +198,7 @@ jobs:
});
- name: Install OpenHands
id: install_openhands
uses: actions/github-script@v7
env:
COMMENT_BODY: ${{ github.event.comment.body || '' }}
@@ -196,7 +211,6 @@ jobs:
const reviewBody = process.env.REVIEW_BODY.trim();
const labelName = process.env.LABEL_NAME.trim();
const eventName = process.env.EVENT_NAME.trim();
// Check conditions
const isExperimentalLabel = labelName === "fix-me-experimental";
const isIssueCommentExperimental =
@@ -205,6 +219,9 @@ jobs:
const isReviewCommentExperimental =
eventName === "pull_request_review" && reviewBody.includes("@openhands-agent-exp");
// Set output variable
core.setOutput('isExperimental', isExperimentalLabel || isIssueCommentExperimental || isReviewCommentExperimental);
// Perform package installation
if (isExperimentalLabel || isIssueCommentExperimental || isReviewCommentExperimental) {
console.log("Installing experimental OpenHands...");
@@ -213,24 +230,27 @@ jobs:
} else {
console.log("Installing from requirements.txt...");
await exec.exec("python -m pip install --upgrade pip");
await exec.exec("pip install -r requirements.txt");
await exec.exec("pip install -r /tmp/requirements.txt");
}
- name: Attempt to resolve issue
env:
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN || github.token }}
GITHUB_USERNAME: ${{ secrets.PAT_USERNAME || 'openhands-agent' }}
GIT_USERNAME: ${{ secrets.PAT_USERNAME || 'openhands-agent' }}
LLM_MODEL: ${{ secrets.LLM_MODEL || inputs.LLM_MODEL }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
LLM_API_VERSION: ${{ inputs.LLM_API_VERSION }}
PYTHONPATH: ""
run: |
cd /tmp && python -m openhands.resolver.resolve_issue \
--repo ${{ github.repository }} \
--selected-repo ${{ github.repository }} \
--issue-number ${{ env.ISSUE_NUMBER }} \
--issue-type ${{ env.ISSUE_TYPE }} \
--max-iterations ${{ env.MAX_ITERATIONS }} \
--comment-id ${{ env.COMMENT_ID }}
--comment-id ${{ env.COMMENT_ID }} \
--is-experimental ${{ steps.install_openhands.outputs.isExperimental }}
- name: Check resolution result
id: check_result
@@ -254,17 +274,20 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN || github.token }}
GITHUB_USERNAME: ${{ secrets.PAT_USERNAME || 'openhands-agent' }}
GIT_USERNAME: ${{ secrets.PAT_USERNAME || 'openhands-agent' }}
LLM_MODEL: ${{ secrets.LLM_MODEL || inputs.LLM_MODEL }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
LLM_API_VERSION: ${{ inputs.LLM_API_VERSION }}
PYTHONPATH: ""
run: |
if [ "${{ steps.check_result.outputs.RESOLUTION_SUCCESS }}" == "true" ]; then
cd /tmp && python -m openhands.resolver.send_pull_request \
--issue-number ${{ env.ISSUE_NUMBER }} \
--pr-type draft \
--target-branch ${{ env.TARGET_BRANCH }} \
--pr-type ${{ inputs.pr_type || 'draft' }} \
--reviewer ${{ github.actor }} | tee pr_result.txt && \
grep "draft created" pr_result.txt | sed 's/.*\///g' > pr_number.txt
grep "PR created" pr_result.txt | sed 's/.*\///g' > pr_number.txt
else
cd /tmp && python -m openhands.resolver.send_pull_request \
--issue-number ${{ env.ISSUE_NUMBER }} \
@@ -279,11 +302,12 @@ jobs:
if: always()
env:
AGENT_RESPONDED: ${{ env.AGENT_RESPONDED || 'false' }}
ISSUE_NUMBER: ${{ env.ISSUE_NUMBER }}
with:
github-token: ${{ secrets.PAT_TOKEN || github.token }}
script: |
const fs = require('fs');
const issueNumber = ${{ env.ISSUE_NUMBER }};
const issueNumber = process.env.ISSUE_NUMBER;
let logContent = '';
try {
@@ -314,13 +338,15 @@ jobs:
if: always() # Comment on issue even if the previous steps fail
env:
AGENT_RESPONDED: ${{ env.AGENT_RESPONDED || 'false' }}
ISSUE_NUMBER: ${{ env.ISSUE_NUMBER }}
RESOLUTION_SUCCESS: ${{ steps.check_result.outputs.RESOLUTION_SUCCESS }}
with:
github-token: ${{ secrets.PAT_TOKEN || github.token }}
script: |
const fs = require('fs');
const path = require('path');
const issueNumber = ${{ env.ISSUE_NUMBER }};
const success = ${{ steps.check_result.outputs.RESOLUTION_SUCCESS }};
const issueNumber = process.env.ISSUE_NUMBER;
const success = process.env.RESOLUTION_SUCCESS === 'true';
let prNumber = '';
let branchName = '';
@@ -385,10 +411,12 @@ jobs:
- name: Fallback Error Comment
uses: actions/github-script@v7
if: ${{ env.AGENT_RESPONDED == 'false' }} # Only run if no conditions were met in previous steps
env:
ISSUE_NUMBER: ${{ env.ISSUE_NUMBER }}
with:
github-token: ${{ secrets.PAT_TOKEN || github.token }}
script: |
const issueNumber = ${{ env.ISSUE_NUMBER }};
const issueNumber = process.env.ISSUE_NUMBER;
github.rest.issues.createComment({
issue_number: issueNumber,

View File

@@ -1,98 +0,0 @@
# Workflow that runs python unit tests on mac
name: Run Python Unit Tests Mac
# This job is flaky so only run it nightly
on:
schedule:
- cron: '0 0 * * *'
jobs:
# Run python unit tests on macOS
test-on-macos:
name: Python Unit Tests on macOS
runs-on: macos-14
env:
INSTALL_DOCKER: '1' # Set to '0' to skip Docker installation
strategy:
matrix:
python-version: ['3.12']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache Poetry dependencies
uses: actions/cache@v4
with:
path: |
~/.cache/pypoetry
~/.virtualenvs
key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
restore-keys: |
${{ runner.os }}-poetry-
- name: Install tmux
run: brew install tmux
- name: Install poetry via pipx
run: pipx install poetry
- name: Install Python dependencies using Poetry
run: poetry install --without evaluation,llama-index
- name: Install & Start Docker
if: env.INSTALL_DOCKER == '1'
run: |
INSTANCE_NAME="colima-${GITHUB_RUN_ID}"
# Uninstall colima to upgrade to the latest version
if brew list colima &>/dev/null; then
brew uninstall colima
# unlinking colima dependency: go
brew uninstall go@1.21
fi
rm -rf ~/.colima ~/.lima
brew install --HEAD colima
brew install docker
start_colima() {
# Find a free port in the range 10000-20000
RANDOM_PORT=$((RANDOM % 10001 + 10000))
# Original line:
if ! colima start --network-address --arch x86_64 --cpu=1 --memory=1 --verbose --ssh-port $RANDOM_PORT; then
echo "Failed to start Colima."
return 1
fi
return 0
}
# Attempt to start Colima for 5 total attempts:
ATTEMPT_LIMIT=5
for ((i=1; i<=ATTEMPT_LIMIT; i++)); do
if start_colima; then
echo "Colima started successfully."
break
else
colima stop -f
sleep 10
colima delete -f
if [ $i -eq $ATTEMPT_LIMIT ]; then
exit 1
fi
sleep 10
fi
done
# For testcontainers to find the Colima socket
# https://github.com/abiosoft/colima/blob/main/docs/FAQ.md#cannot-connect-to-the-docker-daemon-at-unixvarrundockersock-is-the-docker-daemon-running
sudo ln -sf $HOME/.colima/default/docker.sock /var/run/docker.sock
- name: Build Environment
run: make build
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Run Tests
run: poetry run pytest --forked --cov=openhands --cov-report=xml ./tests/unit --ignore=tests/unit/test_memory.py
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -19,7 +19,7 @@ jobs:
# Run python unit tests on Linux
test-on-linux:
name: Python Unit Tests on Linux
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
env:
INSTALL_DOCKER: '0' # Set to '0' to skip Docker installation
strategy:
@@ -32,19 +32,23 @@ jobs:
uses: docker/setup-buildx-action@v3
- name: Install tmux
run: sudo apt-get update && sudo apt-get install -y tmux
- name: Setup Node.js
uses: useblacksmith/setup-node@v5
with:
node-version: '22.x'
- name: Install poetry via pipx
run: pipx install poetry
- name: Set up Python
uses: actions/setup-python@v5
uses: useblacksmith/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
- name: Install Python dependencies using Poetry
run: poetry install --without evaluation,llama-index
run: poetry install --without evaluation
- name: Build Environment
run: make build
- name: Run Tests
run: poetry run pytest --forked -n auto --cov=openhands --cov-report=xml -svv ./tests/unit --ignore=tests/unit/test_memory.py
run: poetry run pytest --forked -n auto --cov=openhands --cov-report=xml -svv ./tests/unit
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
env:

View File

@@ -12,10 +12,10 @@ on:
jobs:
release:
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: useblacksmith/setup-python@v6
with:
python-version: 3.12
- name: Install Poetry

View File

@@ -10,7 +10,7 @@ jobs:
trigger-job:
name: Trigger remote eval job
if: ${{ github.event.label.name == 'run-eval-xs' || github.event.label.name == 'run-eval-s' || github.event.label.name == 'run-eval-m' }}
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- name: Checkout PR branch
@@ -19,9 +19,10 @@ jobs:
ref: ${{ github.head_ref }}
- name: Trigger remote job
env:
PR_BRANCH: ${{ github.head_ref }}
run: |
REPO_URL="https://github.com/${{ github.repository }}"
PR_BRANCH="${{ github.head_ref }}"
echo "Repository URL: $REPO_URL"
echo "PR Branch: $PR_BRANCH"

View File

@@ -8,7 +8,7 @@ on:
jobs:
stale:
runs-on: ubuntu-latest
runs-on: blacksmith-4vcpu-ubuntu-2204
steps:
- uses: actions/stale@v9
with:
@@ -19,3 +19,4 @@ jobs:
close-issue-message: 'This issue was closed because it has been stalled for over 30 days with no activity.'
close-pr-message: 'This PR was closed because it has been stalled for over 30 days with no activity.'
days-before-close: 7
operations-per-run: 150

View File

@@ -0,0 +1,172 @@
# OpenHands Glossary
### Agent
The core AI entity in OpenHands that can perform software development tasks by interacting with tools, browsing the web, and modifying code.
#### Agent Controller
A component that manages the agent's lifecycle, handles its state, and coordinates interactions between the agent and various tools.
#### Agent Delegation
The ability of an agent to hand off specific tasks to other specialized agents for better task completion.
#### Agent Hub
A central registry of different agent types and their capabilities, allowing for easy agent selection and instantiation.
#### Agent Skill
A specific capability or function that an agent can perform, such as file manipulation, web browsing, or code editing.
#### Agent State
The current context and status of an agent, including its memory, active tools, and ongoing tasks.
#### CodeAct Agent
[A generalist agent in OpenHands](https://arxiv.org/abs/2407.16741) designed to perform tasks by editing and executing code.
### Browser
A system for web-based interactions and tasks.
#### Browser Gym
A testing and evaluation environment for browser-based agent interactions and tasks.
#### Web Browser Tool
A tool that enables agents to interact with web pages and perform web-based tasks.
### Commands
Terminal and execution related functionality.
#### Bash Session
A persistent terminal session that maintains state and history for bash command execution.
This uses tmux under the hood.
### Configuration
System-wide settings and options.
#### Agent Configuration
Settings that define an agent's behavior, capabilities, and limitations, including available tools and runtime settings.
#### Configuration Options
Settings that control various aspects of OpenHands behavior, including runtime, security, and agent settings.
#### LLM Config
Configuration settings for language models used by agents, including model selection and parameters.
#### LLM Draft Config
Settings for draft mode operations with language models, typically used for faster, lower-quality responses.
#### Runtime Configuration
Settings that define how the runtime environment should be set up and operated.
#### Security Options
Configuration settings that control security features and restrictions.
### Conversation
A sequence of interactions between a user and an agent, including messages, actions, and their results.
#### Conversation Info
Metadata about a conversation, including its status, participants, and timeline.
#### Conversation Manager
A component that handles the creation, storage, and retrieval of conversations.
#### Conversation Metadata
Additional information about conversations, such as tags, timestamps, and related resources.
#### Conversation Status
The current state of a conversation, including whether it's active, completed, or failed.
#### Conversation Store
A storage system for maintaining conversation history and related data.
### Events
#### Event
Every Conversation comprises a series of Events. Each Event is either an Action or an Observation.
#### Event Stream
A continuous flow of events that represents the ongoing activities and interactions in the system.
#### Action
A specific operation or command that an agent executes through available tools, such as running a command or editing a file.
#### Observation
The response or result returned by a tool after an agent's action, providing feedback about the action's outcome.
### Interface
Different ways to interact with OpenHands.
#### CLI Mode
A command-line interface mode for interacting with OpenHands agents without a graphical interface.
#### GUI Mode
A graphical user interface mode for interacting with OpenHands agents through a web interface.
#### Headless Mode
A mode of operation where OpenHands runs without a user interface, suitable for automation and scripting.
### Agent Memory
The system that decides which parts of the Event Stream (i.e. the conversation history) should be passed into each LLM prompt.
#### Memory Store
A storage system for maintaining agent memory and context across sessions.
#### Condenser
A component that processes and summarizes conversation history to maintain context while staying within token limits.
#### Truncation
A very simple Condenser strategy. Reduces conversation history or content to stay within token limits.
### Microagent
A specialized prompt that enhances OpenHands with domain-specific knowledge, repository-specific context, and task-specific workflows.
#### Microagent Registry
A central repository of available microagents and their configurations.
#### Public Microagent
A general-purpose microagent available to all OpenHands users, triggered by specific keywords.
#### Repository Microagent
A type of microagent that provides repository-specific context and guidelines, stored in the `.openhands/microagents/` directory.
### Prompt
Components for managing and processing prompts.
#### Prompt Caching
A system for caching and reusing common prompts to improve performance.
#### Prompt Manager
A component that handles the loading, processing, and management of prompts used by agents, including microagents.
#### Response Parsing
The process of interpreting and structuring responses from language models and tools.
### Runtime
The execution environment where agents perform their tasks, which can be local, remote, or containerized.
#### Action Execution Server
A REST API that receives agent actions (e.g. bash commands, python code, browsing actions), executes them in the runtime environment, and returns the results.
#### Action Execution Client
A component that handles the execution of actions in the runtime environment, managing the communication between the agent and the runtime.
#### Docker Runtime
A containerized runtime environment that provides isolation and reproducibility for agent operations.
#### E2B Runtime
A specialized runtime environment built on E2B for secure and isolated code execution.
#### Local Runtime
A runtime environment that executes on the local machine, suitable for development and testing.
#### Modal Runtime
A runtime environment built on Modal for scalable and distributed agent operations.
#### Remote Runtime
A sandboxed environment that executes code and commands remotely, providing isolation and security for agent operations.
#### Runtime Builder
A component that builds a Docker image for the Action Execution Server based on a user-specified base image.
### Security
Security-related components and features.
#### Security Analyzer
A component that checks agent actions for potential security risks.

View File

@@ -10,13 +10,21 @@ This repository contains the code for OpenHands, an automated AI software engine
To set up the entire repo, including frontend and backend, run `make build`.
You don't need to do this unless the user asks you to, or if you're trying to run the entire application.
Before pushing any changes, you should ensure that any lint errors or simple test errors have been fixed.
IMPORTANT: Before making any changes to the codebase, ALWAYS run `make install-pre-commit-hooks` to ensure pre-commit hooks are properly installed.
Before pushing any changes, you MUST ensure that any lint errors or simple test errors have been fixed.
* If you've made changes to the backend, you should run `pre-commit run --all-files --config ./dev_config/python/.pre-commit-config.yaml`
* If you've made changes to the frontend, you should run `cd frontend && npm run lint:fix && npm run build ; cd ..`
The pre-commit hooks MUST pass successfully before pushing any changes to the repository. This is a mandatory requirement to maintain code quality and consistency.
If either command fails, it may have automatically fixed some issues. You should fix any issues that weren't automatically fixed,
then re-run the command to ensure it passes.
then re-run the command to ensure it passes. Common issues include:
- Mypy type errors
- Ruff formatting issues
- Trailing whitespace
- Missing newlines at end of files
## Repository Structure
Backend:
@@ -33,6 +41,7 @@ Frontend:
- Testing:
- Run tests: `npm run test`
- To run specific tests: `npm run test -- -t "TestName"`
- Our test framework is vitest
- Building:
- Build for production: `npm run build`
- Environment Variables:
@@ -40,3 +49,25 @@ Frontend:
- Available variables: VITE_BACKEND_HOST, VITE_USE_TLS, VITE_INSECURE_SKIP_VERIFY, VITE_FRONTEND_PORT
- Internationalization:
- Generate i18n declaration file: `npm run make-i18n`
## Template for Github Pull Request
If you are starting a pull request (PR), please follow the template in `.github/pull_request_template.md`.
## Implementation Details
These details may or may not be useful for your current task.
### Frontend
#### Action Handling:
- Actions are defined in `frontend/src/types/action-type.ts`
- The `HANDLED_ACTIONS` array in `frontend/src/state/chat-slice.ts` determines which actions are displayed as collapsible UI elements
- To add a new action type to the UI:
1. Add the action type to the `HANDLED_ACTIONS` array
2. Implement the action handling in `addAssistantAction` function in chat-slice.ts
3. Add a translation key in the format `ACTION_MESSAGE$ACTION_NAME` to the i18n files
- Actions with `thought` property are displayed in the UI based on their action type:
- Regular actions (like "run", "edit") display the thought as a separate message
- Special actions (like "think") are displayed as collapsible elements only

5
.openhands/setup.sh Executable file
View File

@@ -0,0 +1,5 @@
#! /bin/bash
echo "Setting up the environment..."
python -m pip install pre-commit

55
CITATION.cff Normal file
View File

@@ -0,0 +1,55 @@
cff-version: 1.2.0
message: "If you use this software, please cite it using the following metadata."
title: "OpenHands: An Open Platform for AI Software Developers as Generalist Agents"
authors:
- family-names: Wang
given-names: Xingyao
- family-names: Li
given-names: Boxuan
- family-names: Song
given-names: Yufan
- family-names: Xu
given-names: Frank F.
- family-names: Tang
given-names: Xiangru
- family-names: Zhuge
given-names: Mingchen
- family-names: Pan
given-names: Jiayi
- family-names: Song
given-names: Yueqi
- family-names: Li
given-names: Bowen
- family-names: Singh
given-names: Jaskirat
- family-names: Tran
given-names: Hoang H.
- family-names: Li
given-names: Fuqiang
- family-names: Ma
given-names: Ren
- family-names: Zheng
given-names: Mingzhang
- family-names: Qian
given-names: Bill
- family-names: Shao
given-names: Yanjun
- family-names: Muennighoff
given-names: Niklas
- family-names: Zhang
given-names: Yizhe
- family-names: Hui
given-names: Binyuan
- family-names: Lin
given-names: Junyang
- family-names: Brennan
given-names: Robert
- family-names: Peng
given-names: Hao
- family-names: Ji
given-names: Heng
- family-names: Neubig
given-names: Graham
year: 2024
doi: "10.48550/arXiv.2407.16741"
url: "https://arxiv.org/abs/2407.16741"

View File

@@ -113,6 +113,20 @@ individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
### Slack and Discord Etiquettes
These Slack and Discord etiquette guidelines are designed to foster an inclusive, respectful, and productive environment for all community members. By following these best practices, we ensure effective communication and collaboration while minimizing disruptions. Lets work together to build a supportive and welcoming community!
- Communicate respectfully and professionally, avoiding sarcasm or harsh language, and remember that tone can be difficult to interpret in text.
- Use threads for specific discussions to keep channels organized and easier to follow.
- Tag others only when their input is critical or urgent, and use @here, @channel or @everyone sparingly to minimize disruptions.
- Be patient, as open-source contributors and maintainers often have other commitments and may need time to respond.
- Post questions or discussions in the most relevant channel (e.g., for [slack - #general](https://app.slack.com/client/T06P212QSEA/C06P5NCGSFP) for general topics, [slack - #questions](https://openhands-ai.slack.com/archives/C06U8UTKSAD) for queries/questions, [discord - #general](https://discord.com/channels/1222935860639563850/1222935861386018885)).
- When asking for help or raising issues, include necessary details like links, screenshots, or clear explanations to provide context.
- Keep discussions in public channels whenever possible to allow others to benefit from the conversation, unless the matter is sensitive or private.
- Always adhere to [our standards](https://github.com/All-Hands-AI/OpenHands/blob/main/CODE_OF_CONDUCT.md#our-standards) to ensure a welcoming and collaborative environment.
- If you choose to mute a channel, consider setting up alerts for topics that still interest you to stay engaged. For Slack, Go to Settings → Notifications → My Keywords to add specific keywords that will notify you when mentioned. For example, if you're here for discussions about LLMs, mute the channel if its too busy, but set notifications to alert you only when “LLMs” appears in messages. Also for Discord, go to the channel notifications and choose the option that best describes your need.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],

View File

@@ -1,22 +1,26 @@
# Development Guide
This guide is for people working on OpenHands and editing the source code.
If you wish to contribute your changes, check out the [CONTRIBUTING.md](https://github.com/All-Hands-AI/OpenHands/blob/main/CONTRIBUTING.md) on how to clone and setup the project initially before moving on.
Otherwise, you can clone the OpenHands project directly.
## Start the Server for Development
### 1. Requirements
* Linux, Mac OS, or [WSL on Windows](https://learn.microsoft.com/en-us/windows/wsl/install) [Ubuntu <= 22.04]
* [Docker](https://docs.docker.com/engine/install/) (For those on MacOS, make sure to allow the default Docker socket to be used from advanced settings!)
* [Python](https://www.python.org/downloads/) = 3.12
* [NodeJS](https://nodejs.org/en/download/package-manager) >= 20.x
* [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) >= 1.8
* OS-specific dependencies:
- Linux, Mac OS, or [WSL on Windows](https://learn.microsoft.com/en-us/windows/wsl/install) [Ubuntu >= 22.04]
- [Docker](https://docs.docker.com/engine/install/) (For those on MacOS, make sure to allow the default Docker socket to be used from advanced settings!)
- [Python](https://www.python.org/downloads/) = 3.12
- [NodeJS](https://nodejs.org/en/download/package-manager) >= 22.x
- [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) >= 1.8
- OS-specific dependencies:
- Ubuntu: build-essential => `sudo apt-get install build-essential`
- WSL: netcat => `sudo apt-get install netcat`
Make sure you have all these dependencies installed before moving on to `make build`.
#### Develop without sudo access
If you want to develop without system admin/sudo access to upgrade/install `Python` and/or `NodeJs`, you can use `conda` or `mamba` to manage the packages for you:
```bash
@@ -31,6 +35,7 @@ mamba install conda-forge::poetry
```
### 2. Build and Setup The Environment
Begin by building the project which includes setting up the environment and installing dependencies. This step ensures that OpenHands is ready to run on your system:
```bash
@@ -38,54 +43,65 @@ make build
```
### 3. Configuring the Language Model
OpenHands supports a diverse array of Language Models (LMs) through the powerful [litellm](https://docs.litellm.ai) library.
By default, we've chosen Claude Sonnet 3.5 as our go-to model, but the world is your oyster! You can unleash the
potential of any other LM that piques your interest.
To configure the LM of your choice, run:
```bash
make setup-config
```
```bash
make setup-config
```
This command will prompt you to enter the LLM API key, model name, and other variables ensuring that OpenHands is tailored to your specific needs. Note that the model name will apply only when you run headless. If you use the UI, please set the model in the UI.
This command will prompt you to enter the LLM API key, model name, and other variables ensuring that OpenHands is tailored to your specific needs. Note that the model name will apply only when you run headless. If you use the UI, please set the model in the UI.
Note: If you have previously run OpenHands using the docker command, you may have already set some environmental variables in your terminal. The final configurations are set from highest to lowest priority:
Environment variables > config.toml variables > default variables
Note: If you have previously run OpenHands using the docker command, you may have already set some environmental variables in your terminal. The final configurations are set from highest to lowest priority:
Environment variables > config.toml variables > default variables
**Note on Alternative Models:**
See [our documentation](https://docs.all-hands.dev/modules/usage/llms) for recommended models.
### 4. Running the application
#### Option A: Run the Full Application
Once the setup is complete, this command starts both the backend and frontend servers, allowing you to interact with OpenHands:
```bash
make run
```
#### Option B: Individual Server Startup
- **Start the Backend Server:** If you prefer, you can start the backend server independently to focus on backend-related tasks or configurations.
```bash
make start-backend
```
```bash
make start-backend
```
- **Start the Frontend Server:** Similarly, you can start the frontend server on its own to work on frontend-related components or interface enhancements.
```bash
make start-frontend
```
```bash
make start-frontend
```
### 6. LLM Debugging
If you encounter any issues with the Language Model (LM) or you're simply curious, export DEBUG=1 in the environment and restart the backend.
OpenHands will log the prompts and responses in the logs/llm/CURRENT_DATE directory, allowing you to identify the causes.
### 7. Help
Need help or info on available targets and commands? Use the help command for all the guidance you need with OpenHands.
```bash
make help
```
```
### 8. Testing
To run tests, refer to the following:
#### Unit tests
```bash
@@ -93,14 +109,16 @@ poetry run pytest ./tests/unit/test_*.py
```
### 9. Add or update dependency
1. Add your dependency in `pyproject.toml` or use `poetry add xxx`.
2. Update the poetry.lock file via `poetry lock --no-update`.
### 9. Use existing Docker image
To reduce build time (e.g., if no changes were made to the client-runtime component), you can use an existing Docker container image by
setting the SANDBOX_RUNTIME_CONTAINER_IMAGE environment variable to the desired Docker image.
Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.20-nikolaik`
Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.34-nikolaik`
## Develop inside Docker container
@@ -126,3 +144,20 @@ cd ./containers/dev
```
You do need [Docker](https://docs.docker.com/engine/install/) installed on your host though.
## Key Documentation Resources
Here's a guide to the important documentation files in the repository:
- [/README.md](./README.md): Main project overview, features, and basic setup instructions
- [/Development.md](./Development.md) (this file): Comprehensive guide for developers working on OpenHands
- [/CONTRIBUTING.md](./CONTRIBUTING.md): Guidelines for contributing to the project, including code style and PR process
- [/docs/DOC_STYLE_GUIDE.md](./docs/DOC_STYLE_GUIDE.md): Standards for writing and maintaining project documentation
- [/openhands/README.md](./openhands/README.md): Details about the backend Python implementation
- [/frontend/README.md](./frontend/README.md): Frontend React application setup and development guide
- [/containers/README.md](./containers/README.md): Information about Docker containers and deployment
- [/tests/unit/README.md](./tests/unit/README.md): Guide to writing and running unit tests
- [/evaluation/README.md](./evaluation/README.md): Documentation for the evaluation framework and benchmarks
- [/microagents/README.md](./microagents/README.md): Information about the microagents architecture and implementation
- [/openhands/server/README.md](./openhands/server/README.md): Server implementation details and API documentation
- [/openhands/runtime/README.md](./openhands/runtime/README.md): Documentation for the runtime environment and execution model

View File

@@ -2,12 +2,13 @@
These are the procedures and guidelines on how issues are triaged in this repo by the maintainers.
## General
* Most issues must be tagged with **enhancement** or **bug**.
* Issues may be tagged with what it relates to (**backend**, **frontend**, **agent quality**, etc.).
* All issues must be tagged with **enhancement**, **bug** or **troubleshooting/help**.
* Issues may be tagged with what it relates to (**agent quality**, **frontend**, **resolver**, etc.).
## Severity
* **Low**: Minor issues or affecting single user.
* **Medium**: Affecting multiple users.
* **High**: High visibility issues or affecting many users.
* **Critical**: Affecting all users or potential security issues.
## Effort
@@ -18,8 +19,14 @@ These are the procedures and guidelines on how issues are triaged in this repo b
## Not Enough Information
* User is asked to provide more information (logs, how to reproduce, etc.) when the issue is not clear.
* If an issue is unclear and the author does not provide more information or respond to a request, the issue may be closed as **not planned** (Usually after a week).
* If an issue is unclear and the author does not provide more information or respond to a request,
the issue may be closed as **not planned** (Usually after a week).
## Multiple Requests/Fixes in One Issue
* These issues will be narrowed down to one request/fix so the issue is more easily tracked and fixed.
* Issues may be broken down into multiple issues if required.
## Stale and Auto Closures
* In order to keep a maintainable backlog, issues that have no activity within 30 days are automatically marked as **Stale**.
* If issues marked as **Stale** continue to have no activity for 7 more days, they will automatically be closed as not planned.
* Issues may be reopened by maintainers if deemed important.

View File

@@ -1,4 +1,4 @@
SHELL=/bin/bash
SHELL=/usr/bin/env bash
# Makefile for OpenHands project
# Variables
@@ -39,6 +39,7 @@ ifeq ($(INSTALL_DOCKER),)
@$(MAKE) -s check-docker
endif
@$(MAKE) -s check-poetry
@$(MAKE) -s check-tmux
@echo "$(GREEN)Dependencies checked successfully.$(RESET)"
check-system:
@@ -81,10 +82,10 @@ check-nodejs:
@if command -v node > /dev/null; then \
NODE_VERSION=$(shell node --version | sed -E 's/v//g'); \
IFS='.' read -r -a NODE_VERSION_ARRAY <<< "$$NODE_VERSION"; \
if [ "$${NODE_VERSION_ARRAY[0]}" -ge 20 ]; then \
if [ "$${NODE_VERSION_ARRAY[0]}" -ge 22 ]; then \
echo "$(BLUE)Node.js $$NODE_VERSION is already installed.$(RESET)"; \
else \
echo "$(RED)Node.js 20.x or later is required. Please install Node.js 20.x or later to continue.$(RESET)"; \
echo "$(RED)Node.js 22.x or later is required. Please install Node.js 22.x or later to continue.$(RESET)"; \
exit 1; \
fi; \
else \
@@ -101,6 +102,18 @@ check-docker:
exit 1; \
fi
check-tmux:
@echo "$(YELLOW)Checking tmux installation...$(RESET)"
@if command -v tmux > /dev/null; then \
echo "$(BLUE)$(shell tmux -V) is already installed.$(RESET)"; \
else \
echo "$(YELLOW)╔════════════════════════════════════════════════════════════════════════════╗$(RESET)"; \
echo "$(YELLOW)║ OPTIONAL: tmux is not installed. ║$(RESET)"; \
echo "$(YELLOW)║ Some advanced terminal features may not work without tmux. ║$(RESET)"; \
echo "$(YELLOW)║ You can install it if needed, but it's not required for development. ║$(RESET)"; \
echo "$(YELLOW)╚════════════════════════════════════════════════════════════════════════════╝$(RESET)"; \
fi
check-poetry:
@echo "$(YELLOW)Checking Poetry installation...$(RESET)"
@if command -v poetry > /dev/null; then \
@@ -133,20 +146,29 @@ install-python-dependencies:
export HNSWLIB_NO_NATIVE=1; \
poetry run pip install chroma-hnswlib; \
fi
@poetry install --without llama-index
@if [ -f "/etc/manjaro-release" ]; then \
echo "$(BLUE)Detected Manjaro Linux. Installing Playwright dependencies...$(RESET)"; \
poetry run pip install playwright; \
poetry run playwright install chromium; \
@if [ -n "${POETRY_GROUP}" ]; then \
echo "Installing only POETRY_GROUP=${POETRY_GROUP}"; \
poetry install --only $${POETRY_GROUP}; \
else \
if [ ! -f cache/playwright_chromium_is_installed.txt ]; then \
echo "Running playwright install --with-deps chromium..."; \
poetry run playwright install --with-deps chromium; \
mkdir -p cache; \
touch cache/playwright_chromium_is_installed.txt; \
poetry install; \
fi
@if [ "${INSTALL_PLAYWRIGHT}" != "false" ] && [ "${INSTALL_PLAYWRIGHT}" != "0" ]; then \
if [ -f "/etc/manjaro-release" ]; then \
echo "$(BLUE)Detected Manjaro Linux. Installing Playwright dependencies...$(RESET)"; \
poetry run pip install playwright; \
poetry run playwright install chromium; \
else \
echo "Setup already done. Skipping playwright installation."; \
if [ ! -f cache/playwright_chromium_is_installed.txt ]; then \
echo "Running playwright install --with-deps chromium..."; \
poetry run playwright install --with-deps chromium; \
mkdir -p cache; \
touch cache/playwright_chromium_is_installed.txt; \
else \
echo "Setup already done. Skipping playwright installation."; \
fi \
fi \
else \
echo "Skipping Playwright installation (INSTALL_PLAYWRIGHT=${INSTALL_PLAYWRIGHT})."; \
fi
@echo "$(GREEN)Python dependencies installed successfully.$(RESET)"
@@ -166,7 +188,7 @@ install-pre-commit-hooks:
lint-backend:
@echo "$(YELLOW)Running linters...$(RESET)"
@poetry run pre-commit run --files openhands/**/* agenthub/**/* evaluation/**/* --show-diff-on-failure --config $(PRE_COMMIT_CONFIG_PATH)
@poetry run pre-commit run --files openhands/**/* evaluation/**/* tests/**/* --show-diff-on-failure --config $(PRE_COMMIT_CONFIG_PATH)
lint-frontend:
@echo "$(YELLOW)Running linters for frontend...$(RESET)"
@@ -185,7 +207,7 @@ test:
build-frontend:
@echo "$(YELLOW)Building frontend...$(RESET)"
@cd frontend && npm run build
@cd frontend && npm run prepare && npm run build
# Start backend
start-backend:
@@ -195,7 +217,14 @@ start-backend:
# Start frontend
start-frontend:
@echo "$(YELLOW)Starting frontend...$(RESET)"
@cd frontend && VITE_BACKEND_HOST=$(BACKEND_HOST_PORT) VITE_FRONTEND_PORT=$(FRONTEND_PORT) npm run dev -- --port $(FRONTEND_PORT) --host $(BACKEND_HOST)
@cd frontend && \
if grep -qi microsoft /proc/version 2>/dev/null; then \
echo "Detected WSL environment. Using 'dev_wsl'"; \
SCRIPT=dev_wsl; \
else \
SCRIPT=dev; \
fi; \
VITE_BACKEND_HOST=$(BACKEND_HOST_PORT) VITE_FRONTEND_PORT=$(FRONTEND_PORT) npm run $$SCRIPT -- --port $(FRONTEND_PORT) --host $(BACKEND_HOST)
# Common setup for running the app (non-callable)
_run_setup:
@@ -231,12 +260,6 @@ docker-run:
docker compose up $(OPTIONS); \
fi
# Run the app (WSL mode)
run-wsl:
@echo "$(YELLOW)Running the app in WSL mode...$(RESET)"
@$(MAKE) -s _run_setup
@cd frontend && echo "$(BLUE)Starting frontend with npm (WSL mode)...$(RESET)" && npm run dev_wsl -- --port $(FRONTEND_PORT)
@echo "$(GREEN)Application started successfully in WSL mode.$(RESET)"
# Setup config.toml
setup-config:
@@ -265,35 +288,6 @@ setup-config-prompts:
@read -p "Enter your LLM base URL [mostly used for local LLMs, leave blank if not needed - example: http://localhost:5001/v1/]: " llm_base_url; \
if [[ ! -z "$$llm_base_url" ]]; then echo "base_url=\"$$llm_base_url\"" >> $(CONFIG_FILE).tmp; fi
@echo "Enter your LLM Embedding Model"; \
echo "Choices are:"; \
echo " - openai"; \
echo " - azureopenai"; \
echo " - Embeddings available only with OllamaEmbedding:"; \
echo " - llama2"; \
echo " - mxbai-embed-large"; \
echo " - nomic-embed-text"; \
echo " - all-minilm"; \
echo " - stable-code"; \
echo " - bge-m3"; \
echo " - bge-large"; \
echo " - paraphrase-multilingual"; \
echo " - snowflake-arctic-embed"; \
echo " - Leave blank to default to 'BAAI/bge-small-en-v1.5' via huggingface"; \
read -p "> " llm_embedding_model; \
echo "embedding_model=\"$$llm_embedding_model\"" >> $(CONFIG_FILE).tmp; \
if [ "$$llm_embedding_model" = "llama2" ] || [ "$$llm_embedding_model" = "mxbai-embed-large" ] || [ "$$llm_embedding_model" = "nomic-embed-text" ] || [ "$$llm_embedding_model" = "all-minilm" ] || [ "$$llm_embedding_model" = "stable-code" ]; then \
read -p "Enter the local model URL for the embedding model (will set llm.embedding_base_url): " llm_embedding_base_url; \
echo "embedding_base_url=\"$$llm_embedding_base_url\"" >> $(CONFIG_FILE).tmp; \
elif [ "$$llm_embedding_model" = "azureopenai" ]; then \
read -p "Enter the Azure endpoint URL (will overwrite llm.base_url): " llm_base_url; \
echo "base_url=\"$$llm_base_url\"" >> $(CONFIG_FILE).tmp; \
read -p "Enter the Azure LLM Embedding Deployment Name: " llm_embedding_deployment_name; \
echo "embedding_deployment_name=\"$$llm_embedding_deployment_name\"" >> $(CONFIG_FILE).tmp; \
read -p "Enter the Azure API Version: " llm_api_version; \
echo "api_version=\"$$llm_api_version\"" >> $(CONFIG_FILE).tmp; \
fi
# Develop in container
docker-dev:

View File

@@ -12,13 +12,13 @@
<a href="https://codecov.io/github/All-Hands-AI/OpenHands?branch=main"><img alt="CodeCov" src="https://img.shields.io/codecov/c/github/All-Hands-AI/OpenHands?style=for-the-badge&color=blue"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE"><img src="https://img.shields.io/github/license/All-Hands-AI/OpenHands?style=for-the-badge&color=blue" alt="MIT License"></a>
<br/>
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-2wkh4pklz-w~h_DVDtEe9H5kyQlcNxVw"><img src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge" alt="Join our Slack community"></a>
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-2ngejmfw6-9gW4APWOC9XUp1n~SiQ6iw"><img src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge" alt="Join our Slack community"></a>
<a href="https://discord.gg/ESHStjSjD4"><img src="https://img.shields.io/badge/Discord-Join%20Us-purple?logo=discord&logoColor=white&style=for-the-badge" alt="Join our Discord community"></a>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/CREDITS.md"><img src="https://img.shields.io/badge/Project-Credits-blue?style=for-the-badge&color=FFE165&logo=github&logoColor=white" alt="Credits"></a>
<br/>
<a href="https://docs.all-hands.dev/modules/usage/getting-started"><img src="https://img.shields.io/badge/Documentation-000?logo=googledocs&logoColor=FFE165&style=for-the-badge" alt="Check out the documentation"></a>
<a href="https://arxiv.org/abs/2407.16741"><img src="https://img.shields.io/badge/Paper%20on%20Arxiv-000?logoColor=FFE165&logo=arxiv&style=for-the-badge" alt="Paper on Arxiv"></a>
<a href="https://huggingface.co/spaces/OpenHands/evaluation"><img src="https://img.shields.io/badge/Benchmark%20score-000?logoColor=FFE165&logo=huggingface&style=for-the-badge" alt="Evaluation Benchmark Score"></a>
<a href="https://docs.google.com/spreadsheets/d/1wOUdFCMyY6Nt0AIqF705KN4JKOWgeI4wUGUP60krXXs/edit?gid=0#gid=0"><img src="https://img.shields.io/badge/Benchmark%20score-000?logoColor=FFE165&logo=huggingface&style=for-the-badge" alt="Evaluation Benchmark Score"></a>
<hr>
</div>
@@ -27,7 +27,7 @@ Welcome to OpenHands (formerly OpenDevin), a platform for software development a
OpenHands agents can do anything a human developer can: modify code, run commands, browse the web,
call APIs, and yes—even copy code snippets from StackOverflow.
Learn more at [docs.all-hands.dev](https://docs.all-hands.dev), or jump to the [Quick Start](#-quick-start).
Learn more at [docs.all-hands.dev](https://docs.all-hands.dev), or [sign up for OpenHands Cloud](https://app.all-hands.dev) to get started.
> [!IMPORTANT]
> Using OpenHands for work? We'd love to chat! Fill out
@@ -36,49 +36,58 @@ Learn more at [docs.all-hands.dev](https://docs.all-hands.dev), or jump to the [
![App screenshot](./docs/static/img/screenshot.png)
## ⚡ Quick Start
## ☁️ OpenHands Cloud
The easiest way to get started with OpenHands is on [OpenHands Cloud](https://app.all-hands.dev),
which comes with $50 in free credits for new users.
The easiest way to run OpenHands is in Docker.
See the [Installation](https://docs.all-hands.dev/modules/usage/installation) guide for
## 💻 Running OpenHands Locally
OpenHands can also run on your local system using Docker.
See the [Running OpenHands](https://docs.all-hands.dev/modules/usage/installation) guide for
system requirements and more information.
> [!WARNING]
> On a public network? See our [Hardened Docker Installation Guide](https://docs.all-hands.dev/modules/usage/runtimes/docker#hardened-docker-installation)
> to secure your deployment by restricting network binding and implementing additional security measures.
```bash
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.20
docker.all-hands.dev/all-hands-ai/openhands:0.34
```
You'll find OpenHands running at [http://localhost:3000](http://localhost:3000)!
Finally, you'll need a model provider and API key.
When you open the application, you'll be asked to choose an LLM provider and add an API key.
[Anthropic's Claude 3.5 Sonnet](https://www.anthropic.com/api) (`anthropic/claude-3-5-sonnet-20241022`)
works best, but you have [many options](https://docs.all-hands.dev/modules/usage/llms).
---
You can also [connect OpenHands to your local filesystem](https://docs.all-hands.dev/modules/usage/runtimes#connecting-to-your-filesystem),
run OpenHands in a scriptable [headless mode](https://docs.all-hands.dev/modules/usage/how-to/headless-mode),
interact with it via a [friendly CLI](https://docs.all-hands.dev/modules/usage/how-to/cli-mode),
or run it on tagged issues with [a github action](https://docs.all-hands.dev/modules/usage/how-to/github-action).
Visit [Installation](https://docs.all-hands.dev/modules/usage/installation) for more information and setup instructions.
## 💡 Other ways to run OpenHands
> [!CAUTION]
> OpenHands is meant to be run by a single user on their local workstation.
> It is not appropriate for multi-tenant deployments where multiple users share the same instance. There is no built-in isolation or scalability.
> It is not appropriate for multi-tenant deployments where multiple users share the same instance. There is no built-in authentication, isolation, or scalability.
>
> If you're interested in running OpenHands in a multi-tenant environment, please
> [get in touch with us](https://docs.google.com/forms/d/e/1FAIpQLSet3VbGaz8z32gW9Wm-Grl4jpt5WgMXPgJ4EDPVmCETCBpJtQ/viewform)
> for advanced deployment options.
You can also [connect OpenHands to your local filesystem](https://docs.all-hands.dev/modules/usage/runtimes/docker#connecting-to-your-filesystem),
run OpenHands in a scriptable [headless mode](https://docs.all-hands.dev/modules/usage/how-to/headless-mode),
interact with it via a [friendly CLI](https://docs.all-hands.dev/modules/usage/how-to/cli-mode),
or run it on tagged issues with [a github action](https://docs.all-hands.dev/modules/usage/how-to/github-action).
Visit [Running OpenHands](https://docs.all-hands.dev/modules/usage/installation) for more information and setup instructions.
If you want to modify the OpenHands source code, check out [Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md).
Having issues? The [Troubleshooting Guide](https://docs.all-hands.dev/modules/usage/troubleshooting) can help.
@@ -96,7 +105,7 @@ troubleshooting resources, and advanced configuration options.
OpenHands is a community-driven project, and we welcome contributions from everyone. We do most of our communication
through Slack, so this is the best place to start, but we also are happy to have you contact us on Discord or Github:
- [Join our Slack workspace](https://join.slack.com/t/openhands-ai/shared_invite/zt-2wkh4pklz-w~h_DVDtEe9H5kyQlcNxVw) - Here we talk about research, architecture, and future development.
- [Join our Slack workspace](https://join.slack.com/t/openhands-ai/shared_invite/zt-2ngejmfw6-9gW4APWOC9XUp1n~SiQ6iw) - Here we talk about research, architecture, and future development.
- [Join our Discord server](https://discord.gg/ESHStjSjD4) - This is a community-run server for general discussion, questions, and feedback.
- [Read or post Github Issues](https://github.com/All-Hands-AI/OpenHands/issues) - Check out the issues we're working on, or add your own ideas.

View File

@@ -1,5 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
set -e
cp pyproject.toml poetry.lock openhands
poetry build -v

View File

@@ -17,34 +17,46 @@
#modal_api_token_id = ""
#modal_api_token_secret = ""
# API key for Daytona
#daytona_api_key = ""
# Daytona Target
#daytona_target = ""
# Base path for the workspace
workspace_base = "./workspace"
#workspace_base = "./workspace"
# Cache directory path
#cache_dir = "/tmp/cache"
# Reasoning effort for o1 models (low, medium, high, or not set)
#reasoning_effort = "medium"
# Debugging enabled
#debug = false
# Disable color in terminal output
#disable_color = false
# Enable saving and restoring the session when run from CLI
#enable_cli_session = false
# Path to store trajectories, can be a folder or a file
# If it's a folder, the session id will be used as the file name
#save_trajectory_path="./trajectories"
# Whether to save screenshots in the trajectory
# The screenshots are encoded and can make trajectory json files very large
#save_screenshots_in_trajectory = false
# Path to replay a trajectory, must be a file path
# If provided, trajectory will be loaded and replayed before the
# agent responds to any user instruction
#replay_trajectory_path = ""
# File store path
#file_store_path = "/tmp/file_store"
# File store type
#file_store = "memory"
# List of allowed file extensions for uploads
#file_uploads_allowed_extensions = [".*"]
# Maximum file size for uploads, in megabytes
#file_uploads_max_file_size_mb = 0
@@ -52,7 +64,7 @@ workspace_base = "./workspace"
#max_budget_per_task = 0.0
# Maximum number of iterations
#max_iterations = 100
#max_iterations = 250
# Path to mount the workspace in the sandbox
#workspace_mount_path_in_sandbox = "/workspace"
@@ -67,7 +79,7 @@ workspace_base = "./workspace"
#run_as_openhands = true
# Runtime environment
#runtime = "eventstream"
#runtime = "docker"
# Name of the default agent
#default_agent = "CodeActAgent"
@@ -81,6 +93,17 @@ workspace_base = "./workspace"
# List of allowed file extensions for uploads
#file_uploads_allowed_extensions = [".*"]
# Whether to enable the default LLM summarizing condenser when no condenser is specified in config
# When true, a LLMSummarizingCondenserConfig will be used as the default condenser
# When false, a NoOpCondenserConfig (no summarization) will be used
#enable_default_condenser = true
# Maximum number of concurrent conversations per user
#max_concurrent_conversations = 3
# Maximum age of conversations in seconds before they are automatically closed
#conversation_max_age_seconds = 864000 # 10 days
#################################### LLM #####################################
# Configuration for LLM models (group name starts with 'llm')
# use 'llm' for the default LLM config
@@ -96,7 +119,7 @@ workspace_base = "./workspace"
#aws_secret_access_key = ""
# API key to use (For Headless / CLI only - In Web this is overridden by Session Init)
api_key = "your-api-key"
api_key = ""
# API base URL (For Headless / CLI only - In Web this is overridden by Session Init)
#base_url = ""
@@ -113,15 +136,6 @@ api_key = "your-api-key"
# Custom LLM provider
#custom_llm_provider = ""
# Embedding API base URL
#embedding_base_url = ""
# Embedding deployment name
#embedding_deployment_name = ""
# Embedding model to use
embedding_model = "local"
# Maximum number of characters in an observation's content
#max_message_chars = 10000
@@ -186,8 +200,10 @@ model = "gpt-4o"
# https://github.com/All-Hands-AI/OpenHands/pull/4711
#native_tool_calling = None
[llm.gpt4o-mini]
api_key = "your-api-key"
api_key = ""
model = "gpt-4o"
@@ -199,33 +215,41 @@ model = "gpt-4o"
##############################################################################
[agent]
# whether the browsing tool is enabled
codeact_enable_browsing = true
# Whether the browsing tool is enabled
enable_browsing = true
# whether the LLM draft editor is enabled
codeact_enable_llm_editor = false
# Whether the LLM draft editor is enabled
enable_llm_editor = false
# whether the IPython tool is enabled
codeact_enable_jupyter = true
# Whether the standard editor tool (str_replace_editor) is enabled
# Only has an effect if enable_llm_editor is False
enable_editor = true
# Name of the micro agent to use for this agent
#micro_agent_name = ""
# Whether the IPython tool is enabled
enable_jupyter = true
# Memory enabled
#memory_enabled = false
# Whether the command tool is enabled
enable_cmd = true
# Memory maximum threads
#memory_max_threads = 3
# Whether the think tool is enabled
enable_think = true
# Whether the finish tool is enabled
enable_finish = true
# LLM config group to use
#llm_config = 'your-llm-config-group'
# Whether to use microagents at all
#use_microagents = true
# Whether to use prompt extension (e.g., microagent, repo/runtime info) at all
#enable_prompt_extensions = true
# List of microagents to disable
#disabled_microagents = []
# Whether history should be truncated to continue the session when hitting LLM context
# length limit
enable_history_truncation = true
[agent.RepoExplorerAgent]
# Example: use a cheaper model for RepoExplorerAgent to reduce cost, especially
# useful when an agent doesn't demand high quality but uses a lot of tokens
@@ -247,7 +271,7 @@ llm_config = 'gpt3'
# Use host network
#use_host_network = false
# runtime extra build args
# Runtime extra build args
#runtime_extra_build_args = ["--network=host", "--add-host=host.docker.internal:host-gateway"]
# Enable auto linting after editing
@@ -265,6 +289,33 @@ llm_config = 'gpt3'
# BrowserGym environment to use for evaluation
#browsergym_eval_env = ""
# Platform to use for building the runtime image (e.g., "linux/amd64")
#platform = ""
# Force rebuild of runtime image even if it exists
#force_rebuild_runtime = false
# Runtime container image to use (if not provided, will be built from base_container_image)
#runtime_container_image = ""
# Keep runtime alive after session ends
#keep_runtime_alive = false
# Pause closed runtimes instead of stopping them
#pause_closed_runtimes = false
# Delay in seconds before closing idle runtimes
#close_delay = 300
# Remove all containers when stopping the runtime
#rm_all_containers = false
# Enable GPU support in the runtime
#enable_gpu = false
# Additional Docker runtime kwargs
#docker_runtime_kwargs = {}
#################################### Security ###################################
# Configuration for security features
##############################################################################
@@ -276,6 +327,72 @@ llm_config = 'gpt3'
# The security analyzer to use (For Headless / CLI only - In Web this is overridden by Session Init)
#security_analyzer = ""
# Whether to enable security analyzer
#enable_security_analyzer = false
#################################### Condenser #################################
# Condensers control how conversation history is managed and compressed when
# the context grows too large. Each agent uses one condenser configuration.
##############################################################################
[condenser]
# The type of condenser to use. Available options:
# - "noop": No condensing, keeps full history (default)
# - "observation_masking": Keeps full event structure but masks older observations
# - "recent": Keeps only recent events and discards older ones
# - "llm": Uses an LLM to summarize conversation history
# - "amortized": Intelligently forgets older events while preserving important context
# - "llm_attention": Uses an LLM to prioritize most relevant context
type = "noop"
# Examples for each condenser type (uncomment and modify as needed):
# 1. NoOp Condenser - No additional settings needed
#type = "noop"
# 2. Observation Masking Condenser
#type = "observation_masking"
# Number of most-recent events where observations will not be masked
#attention_window = 100
# 3. Recent Events Condenser
#type = "recent"
# Number of initial events to always keep (typically includes task description)
#keep_first = 1
# Maximum number of events to keep in history
#max_events = 100
# 4. LLM Summarizing Condenser
#type = "llm"
# Reference to an LLM config to use for summarization
#llm_config = "condenser"
# Number of initial events to always keep (typically includes task description)
#keep_first = 1
# Maximum size of history before triggering summarization
#max_size = 100
# 5. Amortized Forgetting Condenser
#type = "amortized"
# Number of initial events to always keep (typically includes task description)
#keep_first = 1
# Maximum size of history before triggering forgetting
#max_size = 100
# 6. LLM Attention Condenser
#type = "llm_attention"
# Reference to an LLM config to use for attention scoring
#llm_config = "condenser"
# Number of initial events to always keep (typically includes task description)
#keep_first = 1
# Maximum size of history before triggering attention mechanism
#max_size = 100
# Example of a custom LLM configuration for condensers that require an LLM
# If not provided, it falls back to the default LLM
#[llm.condenser]
#model = "gpt-4o"
#temperature = 0.1
#max_tokens = 1024
#################################### Eval ####################################
# Configuration for the evaluation, please refer to the specific evaluation
# plugin for the available options

View File

@@ -26,7 +26,7 @@ RUN apt-get update -y \
COPY ./pyproject.toml ./poetry.lock ./
RUN touch README.md
RUN export POETRY_CACHE_DIR && poetry install --without evaluation,llama-index --no-root && rm -rf $POETRY_CACHE_DIR
RUN export POETRY_CACHE_DIR && poetry install --without evaluation --no-root && rm -rf $POETRY_CACHE_DIR
FROM python:3.12.3-slim AS openhands-app
@@ -48,7 +48,8 @@ RUN mkdir -p $FILE_STORE_PATH
RUN mkdir -p $WORKSPACE_BASE
RUN apt-get update -y \
&& apt-get install -y curl ssh sudo
&& apt-get install -y curl ssh sudo \
&& rm -rf /var/lib/apt/lists/*
# Default is 1000, but OSX is often 501
RUN sed -i 's/^UID_MIN.*/UID_MIN 499/' /etc/login.defs

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
set -eo pipefail
# Initialize variables with default values
@@ -7,15 +7,17 @@ org_name=""
push=0
load=0
tag_suffix=""
dry_run=0
# Function to display usage information
usage() {
echo "Usage: $0 -i <image_name> [-o <org_name>] [--push] [--load] [-t <tag_suffix>]"
echo "Usage: $0 -i <image_name> [-o <org_name>] [--push] [--load] [-t <tag_suffix>] [--dry]"
echo " -i: Image name (required)"
echo " -o: Organization name"
echo " --push: Push the image"
echo " --load: Load the image"
echo " -t: Tag suffix"
echo " --dry: Don't build, only create build-args.json"
exit 1
}
@@ -27,6 +29,7 @@ while [[ $# -gt 0 ]]; do
--push) push=1; shift ;;
--load) load=1; shift ;;
-t) tag_suffix="$2"; shift 2 ;;
--dry) dry_run=1; shift ;;
*) usage ;;
esac
done
@@ -113,10 +116,13 @@ echo "Repo: $DOCKER_REPOSITORY"
echo "Base dir: $DOCKER_BASE_DIR"
args=""
full_tags=()
for tag in "${tags[@]}"; do
args+=" -t $DOCKER_REPOSITORY:$tag"
full_tags+=("$DOCKER_REPOSITORY:$tag")
done
if [[ $push -eq 1 ]]; then
args+=" --push"
args+=" --cache-to=type=registry,ref=$DOCKER_REPOSITORY:$cache_tag,mode=max"
@@ -136,6 +142,26 @@ else
# For push or without load, build for multiple platforms
platform="linux/amd64,linux/arm64"
fi
if [[ $dry_run -eq 1 ]]; then
echo "Dry Run is enabled. Writing build config to docker-build-dry.json"
jq -n \
--argjson tags "$(printf '%s\n' "${full_tags[@]}" | jq -R . | jq -s .)" \
--arg platform "$platform" \
--arg openhands_build_version "$OPENHANDS_BUILD_VERSION" \
--arg dockerfile "$dir/Dockerfile" \
'{
tags: $tags,
platform: $platform,
build_args: [
"OPENHANDS_BUILD_VERSION=" + $openhands_build_version
],
dockerfile: $dockerfile
}' > docker-build-dry.json
exit 0
fi
echo "Building for platform(s): $platform"

View File

@@ -61,8 +61,8 @@ RUN add-apt-repository ppa:deadsnakes/ppa \
&& apt-get install -y python3.12 python3.12-venv python3.12-dev python3-pip \
&& ln -s /usr/bin/python3.12 /usr/bin/python
# NodeJS >= 18.17.1
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
# NodeJS >= 22.x
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs
# Poetry >= 1.8
@@ -108,7 +108,7 @@ WORKDIR /app
# cache build dependencies
RUN \
--mount=type=bind,source=./,target=/app/ \
--mount=type=bind,source=./,target=/app/,rw \
<<EOF
#!/bin/bash
make -s clean

View File

@@ -11,7 +11,7 @@ services:
- BACKEND_HOST=${BACKEND_HOST:-"0.0.0.0"}
- SANDBOX_API_HOSTNAME=host.docker.internal
#
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.20-nikolaik}
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.34-nikolaik}
- SANDBOX_USER_ID=${SANDBOX_USER_ID:-1234}
- WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace}
ports:

View File

@@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
set -o pipefail
function get_docker() {

View File

@@ -6,6 +6,7 @@ select = [
"I",
"Q",
"B",
"ASYNC",
]
ignore = [
@@ -24,3 +25,6 @@ inline-quotes = "single"
[format]
quote-style = "single"
[lint.flake8-bugbear]
extend-immutable-calls = ["Depends", "fastapi.Depends", "fastapi.params.Depends"]

View File

@@ -7,7 +7,7 @@ services:
image: openhands:latest
container_name: openhands-app-${DATE:-}
environment:
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik}
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik}
#- SANDBOX_USER_ID=${SANDBOX_USER_ID:-1234} # enable this only if you want a specific non-root sandbox user but you will have to manually adjust permissions of openhands-state for this user
- WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace}
ports:

1
docs/.gitignore vendored
View File

@@ -3,6 +3,7 @@
# Production
/build
/static/swagger-ui
# Generated files
.docusaurus

View File

@@ -32,6 +32,8 @@ For instructions or processes that need to be followed in a specific order, use
Example:
1. Step one: Do this.
- First this sub step.
- Then this sub step.
2. Step two: Complete this action.
3. Step three: Verify the result.
@@ -46,3 +48,20 @@ docker run -it \
-e THAT=that
...
```
### Use of Note and Warning
When adding a note or warning, use the built-in note and warning syntax.
Example:
:::note
This section is for advanced users only.
:::
### Referring to UI Elements
When referencing UI elements, use ``.
Example:
1. Toggle the `Advanced` option
2. Enter your model in the `Custom Model` textbox.

View File

@@ -1,21 +1,32 @@
# Website
# OpenHands Documentation
This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator.
This website is built using [Docusaurus](https://docusaurus.io/).
When published, the content will be published at https://docs.all-hands.dev/.
### Installation
```
```bash
$ cd docs
$ yarn
```
### Local Development
```
$ yarn start
$ yarn start # for the default English version
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
Alternatively, you can pass a `--locale` argument to render a specific language in dev mode as in:
```
$ yarn start --locale pt-BR # for the Brazilian Portuguese version
$ yarn start --locale fr # for the French version
$ yarn start --locale zh-Hans # for the Chinese Han (simplified variant) version
```
### Build
```
@@ -24,18 +35,26 @@ $ yarn build
This command generates static content into the `build` directory and can be served using any static contents hosting service.
It compiles all languages.
### Deployment
Using SSH:
Open a new pull request and - when it is merged - the [deploy-docs](.github/workflows/deploy-docs.yml) GH action will take care of everything else.
```
$ USE_SSH=true yarn deploy
## Automatic Translations
Translations can be automatically updated when the original English content changes, this is done by the script [`translation_updater.py`](./translation_updater.py).
From the root of the repository, you can run the following:
```bash
$ export ANTHROPIC_API_KEY=<your_api_key>
$ poetry run python docs/translation_updater.py
# ...
# Change detected in docs/modules/usage/getting-started.mdx
# translating... docs/modules/usage/getting-started.mdx pt-BR
# translation done
# ...
```
Not using SSH:
```
$ GIT_USER=<Your GitHub username> yarn deploy
```
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
This process uses `claude-3-7-sonnet-20250219` as base model and each language consumes at least ~30k input tokens and ~35k output tokens.

View File

@@ -1,30 +1,30 @@
import type * as Preset from "@docusaurus/preset-classic";
import type { Config } from "@docusaurus/types";
import { themes as prismThemes } from "prism-react-renderer";
import type * as Preset from '@docusaurus/preset-classic';
import type { Config } from '@docusaurus/types';
import { themes as prismThemes } from 'prism-react-renderer';
const config: Config = {
title: "OpenHands",
tagline: "Code Less, Make More",
favicon: "img/logo-square.png",
title: 'OpenHands',
tagline: 'Code Less, Make More',
favicon: 'img/logo-square.png',
// Set the production url of your site here
url: "https://docs.all-hands.dev",
baseUrl: "/",
url: 'https://docs.all-hands.dev',
baseUrl: '/',
// GitHub pages deployment config.
organizationName: "All-Hands-AI",
projectName: "OpenHands",
organizationName: 'All-Hands-AI',
projectName: 'OpenHands',
trailingSlash: false,
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
// Even if you don't use internationalization, you can use this field to set
// useful metadata like html lang. For example, if your site is Chinese, you
// may want to replace "en" with "zh-Hans".
i18n: {
defaultLocale: 'en',
locales: ['en', 'fr', 'zh-Hans'],
locales: ['en', 'fr', 'zh-Hans', 'ja', 'pt-BR'],
localeConfigs: {
en: {
htmlLang: 'en-GB',
@@ -36,64 +36,64 @@ const config: Config = {
mermaid: true,
},
themes: ['@docusaurus/theme-mermaid'],
plugins: [],
presets: [
[
"classic",
'classic',
{
docs: {
path: "modules",
routeBasePath: "modules",
sidebarPath: "./sidebars.ts",
path: 'modules',
routeBasePath: 'modules',
sidebarPath: './sidebars.ts',
exclude: [
// '**/_*.{js,jsx,ts,tsx,md,mdx}',
// '**/_*/**',
"**/*.test.{js,jsx,ts,tsx}",
"**/__tests__/**",
'**/*.test.{js,jsx,ts,tsx}',
'**/__tests__/**',
],
},
blog: {
showReadingTime: true,
},
theme: {
customCss: "./src/css/custom.css",
customCss: './src/css/custom.css',
},
} satisfies Preset.Options,
],
],
themeConfig: {
image: "img/docusaurus.png",
image: 'img/docusaurus.png',
navbar: {
title: "OpenHands",
title: 'OpenHands',
logo: {
alt: "OpenHands",
src: "img/logo.png",
alt: 'OpenHands',
src: 'img/logo.png',
},
items: [
{
type: "docSidebar",
sidebarId: "docsSidebar",
position: "left",
label: "User Guides",
type: 'docSidebar',
sidebarId: 'docsSidebar',
position: 'left',
label: 'User Guides',
},
{
type: "docSidebar",
sidebarId: "apiSidebar",
position: "left",
label: "Python API",
href: 'https://docs.all-hands.dev/swagger-ui/', // FIXME: this should be a relative path, but docusarus steals the click
label: 'API',
position: 'left',
},
{
type: 'localeDropdown',
position: 'left',
},
{
href: "https://all-hands.dev",
label: "Company",
position: "right",
href: 'https://all-hands.dev',
label: 'Company',
position: 'right',
},
{
href: "https://github.com/All-Hands-AI/OpenHands",
label: "GitHub",
position: "right",
href: 'https://github.com/All-Hands-AI/OpenHands',
label: 'GitHub',
position: 'right',
},
],
},

102
docs/generate-swagger-ui.js Normal file
View File

@@ -0,0 +1,102 @@
const fs = require('fs');
const path = require('path');
const swaggerUiDist = require('swagger-ui-dist');
/**
* This script manually sets up Swagger UI for the Docusaurus documentation.
*
* Why we need this approach:
* 1. Docusaurus doesn't have a built-in way to integrate Swagger UI
* 2. We need to copy the necessary files from swagger-ui-dist to our static directory
* 3. We need to create a custom index.html file that points to our OpenAPI spec
* 4. This approach allows us to customize the Swagger UI to match our documentation style
*/
// Get the absolute path to the swagger-ui-dist package
const swaggerUiDistPath = swaggerUiDist.getAbsoluteFSPath();
// Create the target directory if it doesn't exist
const targetDir = path.join(__dirname, 'static', 'swagger-ui');
if (!fs.existsSync(targetDir)) {
fs.mkdirSync(targetDir, { recursive: true });
}
// Copy all files from swagger-ui-dist to our target directory
const files = fs.readdirSync(swaggerUiDistPath);
files.forEach(file => {
const sourcePath = path.join(swaggerUiDistPath, file);
const targetPath = path.join(targetDir, file);
// Skip directories and non-essential files
if (fs.statSync(sourcePath).isDirectory() ||
file === 'package.json' ||
file === 'README.md' ||
file.endsWith('.map')) {
return;
}
fs.copyFileSync(sourcePath, targetPath);
});
// Create a custom index.html file that points to our OpenAPI spec
const indexHtml = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>OpenHands API Documentation</title>
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" />
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
<style>
html {
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 0;
background: #fafafa;
}
</style>
</head>
<body>
<div id="swagger-ui"></div>
<script src="./swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="./swagger-ui-standalone-preset.js" charset="UTF-8"> </script>
<script>
window.onload = function() {
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
url: "/openapi.json",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
});
// End Swagger UI call region
window.ui = ui;
};
</script>
</body>
</html>
`;
fs.writeFileSync(path.join(targetDir, 'index.html'), indexHtml);
console.log('Swagger UI files generated successfully in static/swagger-ui/');

View File

@@ -402,5 +402,26 @@
"theme.unlistedContent.message": {
"message": "Cette page n'est pas répertoriée. Les moteurs de recherche ne l'indexeront pas, et seuls les utilisateurs ayant un lien direct peuvent y accéder.",
"description": "The unlisted content banner message"
},
"Use AI to tackle the toil in your backlog. Our agents have all the same tools as a human developer: they can modify code, run commands, browse the web, call APIs, and yes-even copy code snippets from StackOverflow.": {
"message": "Utilisez l'IA pour gérer les tâches répétitives de votre backlog. Nos agents disposent des mêmes outils qu'un développeur humain : ils peuvent modifier du code, exécuter des commandes, naviguer sur le web, appeler des API et même copier des extraits de code depuis StackOverflow."
},
"Get started with OpenHands.": {
"message": "Commencer avec OpenHands"
},
"Most Popular Links": {
"message": "Liens Populaires"
},
"Customizing OpenHands to a repository": {
"message": "Personnaliser OpenHands pour un dépôt"
},
"Integrating OpenHands with Github": {
"message": "Intégrer OpenHands avec Github"
},
"Recommended models to use": {
"message": "Modèles recommandés"
},
"Connecting OpenHands to your filesystem": {
"message": "Connecter OpenHands à votre système de fichiers"
}
}

View File

@@ -14,5 +14,197 @@
"sidebar.apiSidebar.category.Backend": {
"message": "Backend",
"description": "The label for category Backend in sidebar apiSidebar"
},
"sidebar.docsSidebar.category.User Guides": {
"message": "Guides d'Utilisateur",
"description": "The label for category User Guides in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Running OpenHands": {
"message": "Exécution d'OpenHands",
"description": "The label for category Running OpenHands in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Prompting": {
"message": "Prompting",
"description": "The label for category Prompting in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Architecture": {
"message": "Architecture",
"description": "The label for category Architecture in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Running OpenHands": {
"message": "Exécution d'OpenHands",
"description": "The label for document Running OpenHands in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Getting Started": {
"message": "Commencer",
"description": "The label for document Getting Started in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Key Features": {
"message": "Fonctionnalités Clés",
"description": "The label for document Key Features in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Customization": {
"message": "Personnalisation",
"description": "The label for category Customization in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Usage Methods": {
"message": "Méthodes d'Utilisation",
"description": "The label for category Usage Methods in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Advanced Configuration": {
"message": "Configuration Avancée",
"description": "The label for category Advanced Configuration in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Troubleshooting": {
"message": "Dépannage",
"description": "The label for document Troubleshooting in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Feedback": {
"message": "Retour d'Information",
"description": "The label for document Feedback in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.For OpenHands Developers": {
"message": "Pour les Développeurs OpenHands",
"description": "The label for category For OpenHands Developers in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.About": {
"message": "À Propos",
"description": "The label for document About in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Best Practices": {
"message": "Meilleures Pratiques",
"description": "The label for document Best Practices in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Microagents": {
"message": "Micro-agents",
"description": "The label for category Microagents in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Overview": {
"message": "Aperçu",
"description": "The label for document Overview in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Repository": {
"message": "Dépôt",
"description": "The label for document Repository in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Public": {
"message": "Public",
"description": "The label for document Public in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Repository Customization": {
"message": "Personnalisation du Dépôt",
"description": "The label for document Repository Customization in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.GUI Mode": {
"message": "Mode GUI",
"description": "The label for document GUI Mode in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.CLI Mode": {
"message": "Mode CLI",
"description": "The label for document CLI Mode in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Headless Mode": {
"message": "Mode Sans Interface",
"description": "The label for document Headless Mode in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Github Action": {
"message": "Action GitHub",
"description": "The label for document Github Action in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Cloud": {
"message": "Cloud",
"description": "The label for category Cloud in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Openhands Cloud": {
"message": "OpenHands Cloud",
"description": "The label for document Openhands Cloud in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Cloud GitHub Resolver": {
"message": "Résolveur GitHub Cloud",
"description": "The label for document Cloud GitHub Resolver in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.LLM Configuration": {
"message": "Configuration LLM",
"description": "The label for category LLM Configuration in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Providers": {
"message": "Fournisseurs",
"description": "The label for category Providers in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Azure": {
"message": "Azure",
"description": "The label for document Azure in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Google": {
"message": "Google",
"description": "The label for document Google in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Groq": {
"message": "Groq",
"description": "The label for document Groq in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.LiteLLM Proxy": {
"message": "Proxy LiteLLM",
"description": "The label for document LiteLLM Proxy in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.OpenAI": {
"message": "OpenAI",
"description": "The label for document OpenAI in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.OpenRouter": {
"message": "OpenRouter",
"description": "The label for document OpenRouter in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Runtime Configuration": {
"message": "Configuration d'Exécution",
"description": "The label for category Runtime Configuration in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Docker Runtime": {
"message": "Environnement Docker",
"description": "The label for document Docker Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Remote Runtime": {
"message": "Environnement Distant",
"description": "The label for document Remote Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Modal Runtime": {
"message": "Environnement Modal",
"description": "The label for document Modal Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Daytona Runtime": {
"message": "Environnement Daytona",
"description": "The label for document Daytona Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Local Runtime": {
"message": "Environnement Local",
"description": "The label for document Local Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Configuration Options": {
"message": "Options de Configuration",
"description": "The label for document Configuration Options in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Custom Sandbox": {
"message": "Bac à Sable Personnalisé",
"description": "The label for document Custom Sandbox in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Development Overview": {
"message": "Aperçu du Développement",
"description": "The label for document Development Overview in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Backend": {
"message": "Backend",
"description": "The label for document Backend in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Runtime": {
"message": "Environnement d'Exécution",
"description": "The label for document Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Debugging": {
"message": "Débogage",
"description": "The label for document Debugging in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Evaluation": {
"message": "Évaluation",
"description": "The label for document Evaluation in sidebar docsSidebar"
}
}

View File

@@ -1,8 +1,8 @@
# 📦 Runtime EventStream
# 📦 Runtime Docker
Le Runtime EventStream d'OpenHands est le composant principal qui permet l'exécution sécurisée et flexible des actions des agents d'IA.
Le Runtime Docker d'OpenHands est le composant principal qui permet l'exécution sécurisée et flexible des actions des agents d'IA.
Il crée un environnement en bac à sable (sandbox) en utilisant Docker, où du code arbitraire peut être exécuté en toute sécurité sans risquer le système hôte.
## Pourquoi avons-nous besoin d'un runtime en bac à sable ?

View File

@@ -1,5 +1,3 @@
# Options de configuration
Ce guide détaille toutes les options de configuration disponibles pour OpenHands, vous aidant à personnaliser son comportement et à l'intégrer avec d'autres services.
@@ -13,41 +11,39 @@ la priorité.
# Table des matières
1. [Configuration de base](#configuration-de-base)
- [Clés API](#clés-api)
- [Espace de travail](#espace-de-travail)
- [Débogage et journalisation](#débogage-et-journalisation)
- [Gestion des sessions](#gestion-des-sessions)
- [Trajectoires](#trajectoires)
- [Stockage de fichiers](#stockage-de-fichiers)
- [Gestion des tâches](#gestion-des-tâches)
- [Configuration du bac à sable](#configuration-du-bac-à-sable)
- [Divers](#divers)
2. [Configuration LLM](#configuration-llm)
- [Informations d'identification AWS](#informations-didentification-aws)
- [Configuration de l'API](#configuration-de-lapi)
- [Fournisseur LLM personnalisé](#fournisseur-llm-personnalisé)
1. [Configuration de base](#core-configuration)
- [Clés API](#api-keys)
- [Espace de travail](#workspace)
- [Débogage et journalisation](#debugging-and-logging)
- [Trajectoires](#trajectories)
- [Stockage de fichiers](#file-store)
- [Gestion des tâches](#task-management)
- [Configuration du bac à sable](#sandbox-configuration)
- [Divers](#miscellaneous)
2. [Configuration LLM](#llm-configuration)
- [Informations d'identification AWS](#aws-credentials)
- [Configuration de l'API](#api-configuration)
- [Fournisseur LLM personnalisé](#custom-llm-provider)
- [Embeddings](#embeddings)
- [Gestion des messages](#gestion-des-messages)
- [Sélection du modèle](#sélection-du-modèle)
- [Nouvelles tentatives](#nouvelles-tentatives)
- [Options avancées](#options-avancées)
3. [Configuration de l'agent](#configuration-de-lagent)
- [Configuration du micro-agent](#configuration-du-micro-agent)
- [Configuration de la mémoire](#configuration-de-la-mémoire)
- [Configuration LLM](#configuration-llm-2)
- [Configuration de l'espace d'action](#configuration-de-lespace-daction)
- [Utilisation du micro-agent](#utilisation-du-micro-agent)
4. [Configuration du bac à sable](#configuration-du-bac-à-sable-2)
- [Exécution](#exécution)
- [Image de conteneur](#image-de-conteneur)
- [Mise en réseau](#mise-en-réseau)
- [Linting et plugins](#linting-et-plugins)
- [Dépendances et environnement](#dépendances-et-environnement)
- [Évaluation](#évaluation)
5. [Configuration de sécurité](#configuration-de-sécurité)
- [Mode de confirmation](#mode-de-confirmation)
- [Analyseur de sécurité](#analyseur-de-sécurité)
- [Gestion des messages](#message-handling)
- [Sélection du modèle](#model-selection)
- [Nouvelles tentatives](#retrying)
- [Options avancées](#advanced-options)
3. [Configuration de l'agent](#agent-configuration)
- [Configuration de la mémoire](#memory-configuration)
- [Configuration LLM](#llm-configuration-1)
- [Configuration de l'espace d'action](#actionspace-configuration)
- [Utilisation du micro-agent](#microagent-usage)
4. [Configuration du bac à sable](#sandbox-configuration-1)
- [Exécution](#execution)
- [Image de conteneur](#container-image)
- [Mise en réseau](#networking)
- [Linting et plugins](#linting-and-plugins)
- [Dépendances et environnement](#dependencies-and-environment)
- [Évaluation](#evaluation)
5. [Configuration de sécurité](#security-configuration)
- [Mode de confirmation](#confirmation-mode)
- [Analyseur de sécurité](#security-analyzer)
---
@@ -165,7 +161,7 @@ Les options de configuration de base sont définies dans la section `[core]` du
- `runtime`
- Type : `str`
- Valeur par défaut : `"eventstream"`
- Valeur par défaut : `"docker"`
- Description : Environnement d'exécution
- `default_agent`
@@ -184,6 +180,10 @@ Les options de configuration LLM (Large Language Model) sont définies dans la s
Pour les utiliser avec la commande docker, passez `-e LLM_<option>`. Exemple : `-e LLM_NUM_RETRIES`.
:::note
Pour les configurations de développement, vous pouvez également définir des configurations LLM personnalisées. Voir [Configurations LLM personnalisées](./llms/custom-llm-configs) pour plus de détails.
:::
**Informations d'identification AWS**
- `aws_access_key_id`
- Type : `str`
@@ -331,12 +331,6 @@ Pour les utiliser avec la commande docker, passez `-e LLM_<option>`. Exemple : `
Les options de configuration de l'agent sont définies dans les sections `[agent]` et `[agent.<agent_name>]` du fichier `config.toml`.
**Configuration du micro-agent**
- `micro_agent_name`
- Type : `str`
- Valeur par défaut : `""`
- Description : Nom du micro-agent à utiliser pour cet agent
**Configuration de la mémoire**
- `memory_enabled`
- Type : `bool`
@@ -360,12 +354,34 @@ Les options de configuration de l'agent sont définies dans les sections `[agent
- Valeur par défaut : `true`
- Description : Si l'appel de fonction est activé
- `codeact_enable_browsing`
- `enable_browsing`
- Type : `bool`
- Valeur par défaut : `false`
- Description : Si le délégué de navigation est activé dans l'espace d'action (fonctionne uniquement avec l'appel de fonction)
- `codeact_enable_llm_editor`
- `enable_llm_editor`
- Type : `bool`
- Valeur par défaut : `false`
- Description : Si l'éditeur LLM est activé dans l'espace d'action (foncti
- Description : Si l'éditeur LLM est activé dans l'espace d'action (fonctionne uniquement avec l'appel de fonction)
**Utilisation du micro-agent**
- `enable_prompt_extensions`
- Type : `bool`
- Valeur par défaut : `true`
- Description : Indique si l'utilisation des micro-agents est activée ou non
- `disabled_microagents`
- Type : `list of str`
- Valeur par défaut : `None`
- Description : Liste des micro-agents à désactiver
### Exécution
- `timeout`
- Type : `int`
- Valeur par défaut : `120`
- Description : Délai d'expiration du bac à sable, en secondes
- `user_id`
- Type : `int`
- Valeur par défaut : `1000`
- Description : ID de l'utilisateur du bac à sable

View File

@@ -42,10 +42,11 @@ Créez un fichier ```config.toml``` dans le répertoire OpenHands et entrez ces
[core]
workspace_base="./workspace"
run_as_openhands=true
sandbox_base_container_image="image_personnalisée"
[sandbox]
base_container_image="image_personnalisée"
```
> Assurez-vous que ```sandbox_base_container_image``` est défini sur le nom de votre image personnalisée précédente.
> Assurez-vous que ```base_container_image``` est défini sur le nom de votre image personnalisée précédente.
## Exécution
@@ -59,43 +60,22 @@ Félicitations !
## Explication technique
Lorsqu'une image personnalisée est utilisée pour la première fois, elle ne sera pas trouvée et donc elle sera construite (à l'exécution ultérieure, l'image construite sera trouvée et renvoyée).
L'image personnalisée est construite avec [_build_sandbox_image()](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/runtime/docker/image_agnostic_util.py#L29), qui crée un fichier docker en utilisant votre image personnalisée comme base et configure ensuite l'environnement pour OpenHands, comme ceci:
```python
dockerfile_content = (
f'FROM {base_image}\n'
'RUN apt update && apt install -y openssh-server wget sudo\n'
'RUN mkdir -p -m0755 /var/run/sshd\n'
'RUN mkdir -p /openhands && mkdir -p /openhands/logs && chmod 777 /openhands/logs\n'
'RUN wget "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"\n'
'RUN bash Miniforge3-$(uname)-$(uname -m).sh -b -p /openhands/miniforge3\n'
'RUN bash -c ". /openhands/miniforge3/etc/profile.d/conda.sh && conda config --set changeps1 False && conda config --append channels conda-forge"\n'
'RUN echo "export PATH=/openhands/miniforge3/bin:$PATH" >> ~/.bashrc\n'
'RUN echo "export PATH=/openhands/miniforge3/bin:$PATH" >> /openhands/bash.bashrc\n'
).strip()
```
> Remarque: Le nom de l'image est modifié via [_get_new_image_name()](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/runtime/docker/image_agnostic_util.py#L63) et c'est ce nom modifié qui sera recherché lors des exécutions ultérieures.
Veuillez consulter le [chapitre sur les images Docker personnalisées dans la documentation d'exécution](https://docs.all-hands.dev/fr/modules/usage/architecture/runtime) pour obtenir des explications plus détaillées.
## Dépannage / Erreurs
### Erreur: ```useradd: UID 1000 est non unique```
Si vous voyez cette erreur dans la sortie de la console, il s'agit du fait que OpenHands essaie de créer le utilisateur openhands dans le sandbox avec un ID d'utilisateur de 1000, cependant cet ID d'utilisateur est déjà utilisé dans l'image (pour une raison inconnue). Pour résoudre ce problème, changez la valeur du champ sandbox_user_id dans le fichier config.toml en une valeur différente:
Si vous voyez cette erreur dans la sortie de la console, il s'agit du fait que OpenHands essaie de créer le utilisateur openhands dans le sandbox avec un ID d'utilisateur de 1000, cependant cet ID d'utilisateur est déjà utilisé dans l'image (pour une raison inconnue). Pour résoudre ce problème, changez la valeur du champ user_id dans le fichier config.toml en une valeur différente:
```toml
[core]
workspace_base="./workspace"
run_as_openhands=true
sandbox_base_container_image="image_personnalisée"
sandbox_user_id="1001"
[sandbox]
base_container_image="image_personnalisée"
user_id="1001"
```
### Erreurs de port d'utilisation
Si vous voyez un message d'erreur indiquant que le port est utilisé ou indisponible, essayez de supprimer toutes les containers docker en cours d'exécution (exécutez `docker ps` et `docker rm` des containers concernés) puis ré-exécutez ```make run```
## Discuter
Pour d'autres problèmes ou questions rejoignez le [Slack](https://join.slack.com/t/openhands-ai/shared_invite/zt-2wkh4pklz-w~h_DVDtEe9H5kyQlcNxVw) ou le [Discord](https://discord.gg/ESHStjSjD4) et demandez!

View File

@@ -52,7 +52,7 @@ LLM_API_KEY="sk_test_12345"
```bash
docker run -it \
--pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik \
-e SANDBOX_USER_ID=$(id -u) \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-e LLM_API_KEY=$LLM_API_KEY \
@@ -61,7 +61,7 @@ docker run -it \
-v /var/run/docker.sock:/var/run/docker.sock \
--add-host host.docker.internal:host-gateway \
--name openhands-app-$(date +%Y%m%d%H%M%S) \
docker.all-hands.dev/all-hands-ai/openhands:0.20 \
docker.all-hands.dev/all-hands-ai/openhands:0.34 \
python -m openhands.core.cli
```

View File

@@ -44,12 +44,13 @@ Tout d'abord, assurez-vous de pouvoir exécuter OpenHands en suivant les instruc
### Spécifier l'Image de Base du Sandbox
Dans le fichier `config.toml` dans le répertoire OpenHands, définissez `sandbox_base_container_image` sur l'image que vous souhaitez utiliser. Cela peut être une image que vous avez déjà extraite ou une que vous avez construite :
Dans le fichier `config.toml` dans le répertoire OpenHands, définissez `base_container_image` sur l'image que vous souhaitez utiliser. Cela peut être une image que vous avez déjà extraite ou une que vous avez construite :
```bash
[core]
...
sandbox_base_container_image="custom-image"
[sandbox]
base_container_image="custom-image"
```
### Exécution

View File

@@ -114,7 +114,7 @@ Pour créer un workflow d'évaluation pour votre benchmark, suivez ces étapes :
def get_config(instance: pd.Series, metadata: EvalMetadata) -> AppConfig:
config = AppConfig(
default_agent=metadata.agent_class,
runtime='eventstream',
runtime='docker',
max_iterations=metadata.max_iterations,
sandbox=SandboxConfig(
base_container_image='your_container_image',

View File

@@ -21,14 +21,18 @@ OpenHands fournit un mode Interface Graphique (GUI) convivial pour interagir ave
3. Entrez la `Clé API` correspondante pour le fournisseur choisi.
4. Cliquez sur "Enregistrer" pour appliquer les paramètres.
### Configuration du Jeton GitHub
### Jetons de Contrôle de Version
OpenHands prend en charge plusieurs fournisseurs de contrôle de version. Vous pouvez configurer des jetons pour plusieurs fournisseurs simultanément.
#### Configuration du Jeton GitHub
OpenHands exporte automatiquement un `GITHUB_TOKEN` vers l'environnement shell s'il est disponible. Cela peut se produire de deux manières :
1. **Localement (OSS)** : L'utilisateur saisit directement son jeton GitHub
2. **En ligne (SaaS)** : Le jeton est obtenu via l'authentification OAuth GitHub
#### Configuration d'un Jeton GitHub Local
##### Configuration d'un Jeton GitHub Local
1. **Générer un Personal Access Token (PAT)** :
- Allez dans Paramètres GitHub > Paramètres développeur > Personal Access Tokens > Tokens (classique)
@@ -40,11 +44,11 @@ OpenHands exporte automatiquement un `GITHUB_TOKEN` vers l'environnement shell s
2. **Entrer le Jeton dans OpenHands** :
- Cliquez sur le bouton Paramètres (icône d'engrenage) en haut à droite
- Accédez à la section "GitHub"
- Accédez à la section "Git Provider Settings"
- Collez votre jeton dans le champ "Jeton GitHub"
- Cliquez sur "Enregistrer" pour appliquer les modifications
#### Politiques de Jetons Organisationnels
##### Politiques de Jetons Organisationnels
Si vous travaillez avec des dépôts organisationnels, une configuration supplémentaire peut être nécessaire :
@@ -59,7 +63,7 @@ Si vous travaillez avec des dépôts organisationnels, une configuration supplé
- Si nécessaire, cliquez sur "Activer SSO" à côté de votre organisation
- Terminez le processus d'autorisation SSO
#### Authentification OAuth (Mode En Ligne)
##### Authentification OAuth (Mode En Ligne)
Lorsque vous utilisez OpenHands en mode en ligne, le flux OAuth GitHub :
@@ -74,7 +78,7 @@ Lorsque vous utilisez OpenHands en mode en ligne, le flux OAuth GitHub :
- Autorisez OpenHands à accéder à votre compte GitHub
- Si vous utilisez une organisation, autorisez l'accès à l'organisation si vous y êtes invité
#### Dépannage
##### Dépannage
Problèmes courants et solutions :
@@ -95,6 +99,43 @@ Problèmes courants et solutions :
- Vérifiez la console du navigateur pour tout message d'erreur
- Utilisez le bouton "Tester la connexion" dans les paramètres s'il est disponible
#### Configuration du Jeton GitLab
OpenHands exporte automatiquement un `GITLAB_TOKEN` vers l'environnement shell, uniquement pour les installations locales, s'il est disponible.
##### Configuration d'un Jeton GitLab
1. **Générer un Personal Access Token (PAT)** :
- Sur GitLab, allez dans Paramètres utilisateur > Jetons d'accès
- Créez un nouveau jeton avec les portées suivantes :
- `api` (Accès API)
- `read_user` (Lecture des informations utilisateur)
- `read_repository` (Lecture du dépôt)
- `write_repository` (Écriture du dépôt)
- Définissez une date d'expiration ou laissez vide pour un jeton sans expiration
2. **Entrer le Jeton dans OpenHands** :
- Cliquez sur le bouton Paramètres (icône d'engrenage)
- Accédez à la section `Git Provider Settings`
- Collez votre jeton dans le champ `Jeton GitLab`
- Si vous utilisez GitLab auto-hébergé, entrez l'URL de votre instance GitLab
- Cliquez sur `Enregistrer les modifications` pour appliquer les changements
##### Dépannage
Problèmes courants et solutions :
1. **Jeton Non Reconnu** :
- Assurez-vous que le jeton est correctement enregistré dans les paramètres
- Vérifiez que le jeton n'a pas expiré
- Vérifiez que le jeton a les portées requises
- Pour les instances auto-hébergées, vérifiez l'URL correcte de l'instance
2. **Accès Refusé** :
- Vérifiez les permissions d'accès au projet
- Vérifiez si le jeton possède les portées nécessaires
- Pour les dépôts de groupe/organisation, assurez-vous d'avoir les accès appropriés
### Paramètres Avancés
1. Basculez sur `Options Avancées` pour accéder aux paramètres supplémentaires.

View File

@@ -46,7 +46,7 @@ LLM_API_KEY="sk_test_12345"
```bash
docker run -it \
--pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik \
-e SANDBOX_USER_ID=$(id -u) \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-e LLM_API_KEY=$LLM_API_KEY \
@@ -56,6 +56,6 @@ docker run -it \
-v /var/run/docker.sock:/var/run/docker.sock \
--add-host host.docker.internal:host-gateway \
--name openhands-app-$(date +%Y%m%d%H%M%S) \
docker.all-hands.dev/all-hands-ai/openhands:0.20 \
docker.all-hands.dev/all-hands-ai/openhands:0.34 \
python -m openhands.core.main -t "write a bash script that prints hi" --no-auto-continue
```

View File

@@ -1,6 +1,6 @@
# Installation
# Exécution d'OpenHands
## Configuration système requise
@@ -13,16 +13,16 @@
La façon la plus simple d'exécuter OpenHands est avec Docker.
```bash
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.20
docker.all-hands.dev/all-hands-ai/openhands:0.34
```
Vous pouvez également exécuter OpenHands en mode [headless scriptable](https://docs.all-hands.dev/modules/usage/how-to/headless-mode), en tant que [CLI interactive](https://docs.all-hands.dev/modules/usage/how-to/cli-mode), ou en utilisant l'[Action GitHub OpenHands](https://docs.all-hands.dev/modules/usage/how-to/github-action).

View File

@@ -42,7 +42,7 @@ Explorez le code source d'OpenHands sur [GitHub](https://github.com/All-Hands-AI
/>
</a>
<br></br>
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-2wkh4pklz-w~h_DVDtEe9H5kyQlcNxVw">
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-2ngejmfw6-9gW4APWOC9XUp1n~SiQ6iw">
<img
src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge"
alt="Join our Slack community"

View File

@@ -0,0 +1,106 @@
# Configurations LLM personnalisées
OpenHands permet de définir plusieurs configurations LLM nommées dans votre fichier `config.toml`. Cette fonctionnalité vous permet d'utiliser différentes configurations LLM pour différents usages, comme utiliser un modèle moins coûteux pour les tâches qui ne nécessitent pas de réponses de haute qualité, ou utiliser différents modèles avec différents paramètres pour des agents spécifiques.
## Comment ça fonctionne
Les configurations LLM nommées sont définies dans le fichier `config.toml` en utilisant des sections qui commencent par `llm.`. Par exemple :
```toml
# Configuration LLM par défaut
[llm]
model = "gpt-4"
api_key = "votre-clé-api"
temperature = 0.0
# Configuration LLM personnalisée pour un modèle moins coûteux
[llm.gpt3]
model = "gpt-3.5-turbo"
api_key = "votre-clé-api"
temperature = 0.2
# Une autre configuration personnalisée avec des paramètres différents
[llm.haute-creativite]
model = "gpt-4"
api_key = "votre-clé-api"
temperature = 0.8
top_p = 0.9
```
Chaque configuration nommée hérite de tous les paramètres de la section `[llm]` par défaut et peut remplacer n'importe lequel de ces paramètres. Vous pouvez définir autant de configurations personnalisées que nécessaire.
## Utilisation des configurations personnalisées
### Avec les agents
Vous pouvez spécifier quelle configuration LLM un agent doit utiliser en définissant le paramètre `llm_config` dans la section de configuration de l'agent :
```toml
[agent.RepoExplorerAgent]
# Utiliser la configuration GPT-3 moins coûteuse pour cet agent
llm_config = 'gpt3'
[agent.CodeWriterAgent]
# Utiliser la configuration haute créativité pour cet agent
llm_config = 'haute-creativite'
```
### Options de configuration
Chaque configuration LLM nommée prend en charge toutes les mêmes options que la configuration LLM par défaut. Celles-ci incluent :
- Sélection du modèle (`model`)
- Configuration de l'API (`api_key`, `base_url`, etc.)
- Paramètres du modèle (`temperature`, `top_p`, etc.)
- Paramètres de nouvelle tentative (`num_retries`, `retry_multiplier`, etc.)
- Limites de jetons (`max_input_tokens`, `max_output_tokens`)
- Et toutes les autres options de configuration LLM
Pour une liste complète des options disponibles, consultez la section Configuration LLM dans la documentation des [Options de configuration](../configuration-options).
## Cas d'utilisation
Les configurations LLM personnalisées sont particulièrement utiles dans plusieurs scénarios :
- **Optimisation des coûts** : Utiliser des modèles moins coûteux pour les tâches qui ne nécessitent pas de réponses de haute qualité, comme l'exploration de dépôt ou les opérations simples sur les fichiers.
- **Réglage spécifique aux tâches** : Configurer différentes valeurs de température et de top_p pour les tâches qui nécessitent différents niveaux de créativité ou de déterminisme.
- **Différents fournisseurs** : Utiliser différents fournisseurs LLM ou points d'accès API pour différentes tâches.
- **Tests et développement** : Basculer facilement entre différentes configurations de modèles pendant le développement et les tests.
## Exemple : Optimisation des coûts
Un exemple pratique d'utilisation des configurations LLM personnalisées pour optimiser les coûts :
```toml
# Configuration par défaut utilisant GPT-4 pour des réponses de haute qualité
[llm]
model = "gpt-4"
api_key = "votre-clé-api"
temperature = 0.0
# Configuration moins coûteuse pour l'exploration de dépôt
[llm.repo-explorer]
model = "gpt-3.5-turbo"
temperature = 0.2
# Configuration pour la génération de code
[llm.code-gen]
model = "gpt-4"
temperature = 0.0
max_output_tokens = 2000
[agent.RepoExplorerAgent]
llm_config = 'repo-explorer'
[agent.CodeWriterAgent]
llm_config = 'code-gen'
```
Dans cet exemple :
- L'exploration de dépôt utilise un modèle moins coûteux car il s'agit principalement de comprendre et de naviguer dans le code
- La génération de code utilise GPT-4 avec une limite de jetons plus élevée pour générer des blocs de code plus importants
- La configuration par défaut reste disponible pour les autres tâches
:::note
Les configurations LLM personnalisées ne sont disponibles que lors de l'utilisation d'OpenHands en mode développement, via `main.py` ou `cli.py`. Lors de l'exécution via `docker run`, veuillez utiliser les options de configuration standard.
:::

View File

@@ -13,7 +13,7 @@ C'est le Runtime par défaut qui est utilisé lorsque vous démarrez OpenHands.
```
docker run # ...
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik \
-v /var/run/docker.sock:/var/run/docker.sock \
# ...
```

427
docs/i18n/ja/code.json Normal file
View File

@@ -0,0 +1,427 @@
{
"footer.title": {
"message": "OpenHands"
},
"footer.docs": {
"message": "ドキュメント"
},
"footer.community": {
"message": "コミュニティ"
},
"footer.copyright": {
"message": "© {year} OpenHands"
},
"faq.title": {
"message": "よくある質問",
"description": "FAQ Title"
},
"faq.description": {
"message": "よくある質問"
},
"faq.section.title.1": {
"message": "OpenHandsとは何ですか",
"description": "First Section Title"
},
"faq.section.highlight": {
"message": "OpenHands",
"description": "Highlight Text"
},
"faq.section.description.1": {
"message": "はソフトウェアエンジニアリングとウェブナビゲーションのタスクをいつでも解決できる自律型ソフトウェアエンジニアです。「過去数ヶ月間のOpenHandsリポジトリへのプルリクエスト数を調べる」などのデータサイエンスクエリや、「このファイルにテストを追加して、すべてのテストが通るか確認してください。通らない場合は、ファイルを修正してください」などのソフトウェアエンジニアリングタスクを実行できます。",
"description": "Description for OpenHands"
},
"faq.section.description.2": {
"message": "さらに、OpenHandsは新しいエージェントをテストおよび評価したいエージェント開発者向けのプラットフォームとコミュニティでもあります。",
"description": "Further Description for OpenHands"
},
"faq.section.title.2": {
"message": "サポート",
"description": "Support Section Title"
},
"faq.section.support.answer": {
"message": "他のユーザーも同様に発生する可能性のある問題が発生した場合は、{githubLink}で報告してください。インストールに関する問題や一般的な質問がある場合は、{discordLink}または{slackLink}にご参加ください。",
"description": "Support Answer"
},
"faq.section.title.3": {
"message": "OpenHandsでGitHubの問題を解決するには",
"description": "GitHub Issue Section Title"
},
"faq.section.github.steps.intro": {
"message": "OpenHandsを使用してGitHubの問題を解決するには、以下のようなステップを実行するようOpenHandsにコマンドを送信します",
"description": "GitHub Steps Introduction"
},
"faq.section.github.step1": {
"message": "イシュー https://github.com/All-Hands-AI/OpenHands/issues/1611 を読む",
"description": "GitHub Step 1"
},
"faq.section.github.step2": {
"message": "リポジトリをクローンして新しいブランチをチェックアウトする",
"description": "GitHub Step 2"
},
"faq.section.github.step3": {
"message": "イシューの説明に基づいて、問題を解決するためにファイルを修正する",
"description": "GitHub Step 3"
},
"faq.section.github.step4": {
"message": "GITHUB_TOKEN環境変数を使用して結果をGitHubにプッシュする",
"description": "GitHub Step 4"
},
"faq.section.github.step5": {
"message": "プルリクエストを送信するために使用するリンクを教えてください",
"description": "GitHub Step 5"
},
"faq.section.github.steps.preRun": {
"message": "OpenHandsを起動する前に、以下を実行できます",
"description": "GitHub Steps Pre-Run"
},
"faq.section.github.steps.tokenInfo": {
"message": "ここでXXXはあなたが作成したGitHubトークンで、OpenHandsリポジトリにプッシュする権限を持っています。OpenHandsリポジトリの変更権限がない場合は、次のように変更する必要があるかもしれません",
"description": "GitHub Steps Token Info"
},
"faq.section.github.steps.usernameInfo": {
"message": "ここでUSERNAMEはあなたのGitHubユーザー名です。",
"description": "GitHub Steps Username Info"
},
"faq.section.title.4": {
"message": "OpenHandsはDevinとどう違いますか",
"description": "Devin Section Title"
},
"faq.section.openhands.linkText": {
"message": "Devin",
"description": "Devin Link Text"
},
"faq.section.openhands.description": {
"message": "はCognition Inc.の商用製品で、OpenHandsの最初のインスピレーションとなりました。どちらもソフトウェアエンジニアリングの仕事をうまくこなすことを目指していますが、OpenHandsはダウンロード、使用、修正が可能である一方、DevinはCognitionのサイトを通じてのみ使用できます。さらに、OpenHandsは最初のインスピレーションを超えて進化し、現在はエージェント開発全般のためのコミュニティエコシステムとなっており、あなたの参加と",
"description": "Devin Description"
},
"faq.section.openhands.contribute": {
"message": "貢献",
"description": "Contribute Link"
},
"faq.section.title.5": {
"message": "OpenHandsはChatGPTとどう違いますか",
"description": "ChatGPT Section Title"
},
"faq.section.chatgpt.description": {
"message": "ChatGPTはオンラインでアクセスでき、ローカルファイルに接続せず、コード実行能力も限られています。コードを書くことはできますが、テストや実行が難しいです。",
"description": "ChatGPT Description"
},
"homepage.description": {
"message": "ソフトウェアエンジニアリングのためのAIコード生成。",
"description": "The homepage description"
},
"homepage.getStarted": {
"message": "はじめる"
},
"welcome.message": {
"message": "OpenHandsへようこそ。複雑なエンジニアリングタスクを実行し、ソフトウェア開発プロジェクトでユーザーと積極的に協力できる自律型AIソフトウェアエンジニアシステムです。"
},
"theme.ErrorPageContent.title": {
"message": "このページはクラッシュしました。",
"description": "The title of the fallback page when the page crashed"
},
"theme.BackToTopButton.buttonAriaLabel": {
"message": "ページの先頭に戻る",
"description": "The ARIA label for the back to top button"
},
"theme.blog.archive.title": {
"message": "アーカイブ",
"description": "The page & hero title of the blog archive page"
},
"theme.blog.archive.description": {
"message": "アーカイブ",
"description": "The page & hero description of the blog archive page"
},
"theme.blog.paginator.navAriaLabel": {
"message": "ブログ記事リストのページネーション",
"description": "The ARIA label for the blog pagination"
},
"theme.blog.paginator.newerEntries": {
"message": "新しい記事",
"description": "The label used to navigate to the newer blog posts page (previous page)"
},
"theme.blog.paginator.olderEntries": {
"message": "古い記事",
"description": "The label used to navigate to the older blog posts page (next page)"
},
"theme.blog.post.paginator.navAriaLabel": {
"message": "ブログ記事のページネーション",
"description": "The ARIA label for the blog posts pagination"
},
"theme.blog.post.paginator.newerPost": {
"message": "新しい記事",
"description": "The blog post button label to navigate to the newer/previous post"
},
"theme.blog.post.paginator.olderPost": {
"message": "古い記事",
"description": "The blog post button label to navigate to the older/next post"
},
"theme.blog.post.plurals": {
"message": "1記事|{count}記事",
"description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.blog.tagTitle": {
"message": "「{tagName}」のタグが付いた{nPosts}",
"description": "The title of the page for a blog tag"
},
"theme.tags.tagsPageLink": {
"message": "すべてのタグを表示",
"description": "The label of the link targeting the tag list page"
},
"theme.colorToggle.ariaLabel": {
"message": "ダークモードとライトモードを切り替える(現在は{mode}",
"description": "The ARIA label for the navbar color mode toggle"
},
"theme.colorToggle.ariaLabel.mode.dark": {
"message": "ダークモード",
"description": "The name for the dark color mode"
},
"theme.colorToggle.ariaLabel.mode.light": {
"message": "ライトモード",
"description": "The name for the light color mode"
},
"theme.docs.breadcrumbs.navAriaLabel": {
"message": "パンくずリストナビゲーション",
"description": "The ARIA label for the breadcrumbs"
},
"theme.docs.DocCard.categoryDescription.plurals": {
"message": "1項目|{count}項目",
"description": "The default description for a category card in the generated index about how many items this category includes"
},
"theme.docs.paginator.navAriaLabel": {
"message": "ドキュメントページ",
"description": "The ARIA label for the docs pagination"
},
"theme.docs.paginator.previous": {
"message": "前へ",
"description": "The label used to navigate to the previous doc"
},
"theme.docs.paginator.next": {
"message": "次へ",
"description": "The label used to navigate to the next doc"
},
"theme.docs.tagDocListPageTitle.nDocsTagged": {
"message": "1つのドキュメントにタグ付け|{count}のドキュメントにタグ付け",
"description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.tagDocListPageTitle": {
"message": "\"{tagName}\"で{nDocsTagged}",
"description": "The title of the page for a docs tag"
},
"theme.docs.versionBadge.label": {
"message": "バージョン: {versionLabel}"
},
"theme.docs.versions.unreleasedVersionLabel": {
"message": "これは{siteTitle}の次期バージョン{versionLabel}のドキュメントです。",
"description": "The label used to tell the user that he's browsing an unreleased doc version"
},
"theme.docs.versions.unmaintainedVersionLabel": {
"message": "これは{siteTitle} {versionLabel}のドキュメントで、現在はアクティブにメンテナンスされていません。",
"description": "The label used to tell the user that he's browsing an unmaintained doc version"
},
"theme.docs.versions.latestVersionSuggestionLabel": {
"message": "最新のドキュメントについては、{latestVersionLink}{versionLabel})をご覧ください。",
"description": "The label used to tell the user to check the latest version"
},
"theme.docs.versions.latestVersionLinkLabel": {
"message": "最新バージョン",
"description": "The label used for the latest version suggestion link label"
},
"theme.common.editThisPage": {
"message": "このページを編集",
"description": "The link label to edit the current page"
},
"theme.common.headingLinkTitle": {
"message": "{heading}への直接リンク",
"description": "Title for link to heading"
},
"theme.lastUpdated.atDate": {
"message": " {date}に",
"description": "The words used to describe on which date a page has been last updated"
},
"theme.lastUpdated.byUser": {
"message": " {user}によって",
"description": "The words used to describe by who the page has been last updated"
},
"theme.lastUpdated.lastUpdatedAtBy": {
"message": "最終更新{atDate}{byUser}",
"description": "The sentence used to display when a page has been last updated, and by who"
},
"theme.navbar.mobileVersionsDropdown.label": {
"message": "バージョン",
"description": "The label for the navbar versions dropdown on mobile view"
},
"theme.NotFound.title": {
"message": "ページが見つかりません",
"description": "The title of the 404 page"
},
"theme.tags.tagsListLabel": {
"message": "タグ:",
"description": "The label alongside a tag list"
},
"theme.admonition.caution": {
"message": "注意",
"description": "The default label used for the Caution admonition (:::caution)"
},
"theme.admonition.danger": {
"message": "危険",
"description": "The default label used for the Danger admonition (:::danger)"
},
"theme.admonition.info": {
"message": "情報",
"description": "The default label used for the Info admonition (:::info)"
},
"theme.admonition.note": {
"message": "メモ",
"description": "The default label used for the Note admonition (:::note)"
},
"theme.admonition.tip": {
"message": "ヒント",
"description": "The default label used for the Tip admonition (:::tip)"
},
"theme.admonition.warning": {
"message": "警告",
"description": "The default label used for the Warning admonition (:::warning)"
},
"theme.AnnouncementBar.closeButtonAriaLabel": {
"message": "閉じる",
"description": "The ARIA label for close button of announcement bar"
},
"theme.blog.sidebar.navAriaLabel": {
"message": "最近のブログ記事ナビゲーション",
"description": "The ARIA label for recent posts in the blog sidebar"
},
"theme.CodeBlock.copied": {
"message": "コピーしました",
"description": "The copied button label on code blocks"
},
"theme.CodeBlock.copyButtonAriaLabel": {
"message": "コードをコピー",
"description": "The ARIA label for copy code blocks button"
},
"theme.CodeBlock.copy": {
"message": "コピー",
"description": "The copy button label on code blocks"
},
"theme.CodeBlock.wordWrapToggle": {
"message": "折り返し表示の切り替え",
"description": "The title attribute for toggle word wrapping button of code block lines"
},
"theme.DocSidebarItem.expandCategoryAriaLabel": {
"message": "サイドバーカテゴリ「{label}」を展開",
"description": "The ARIA label to expand the sidebar category"
},
"theme.DocSidebarItem.collapseCategoryAriaLabel": {
"message": "サイドバーカテゴリ「{label}」を折りたたむ",
"description": "The ARIA label to collapse the sidebar category"
},
"theme.NavBar.navAriaLabel": {
"message": "メイン",
"description": "The ARIA label for the main navigation"
},
"theme.navbar.mobileLanguageDropdown.label": {
"message": "言語",
"description": "The label for the mobile language switcher dropdown"
},
"theme.NotFound.p1": {
"message": "お探しのものが見つかりませんでした。",
"description": "The first paragraph of the 404 page"
},
"theme.NotFound.p2": {
"message": "元のURLにリンクしたサイトの所有者に連絡して、リンクが切れていることを知らせてください。",
"description": "The 2nd paragraph of the 404 page"
},
"theme.TOCCollapsible.toggleButtonLabel": {
"message": "このページの内容",
"description": "The label used by the button on the collapsible TOC component"
},
"theme.blog.post.readMore": {
"message": "もっと読む",
"description": "The label used in blog post item excerpts to link to full blog posts"
},
"theme.blog.post.readMoreLabel": {
"message": "{title}についてもっと読む",
"description": "The ARIA label for the link to full blog posts from excerpts"
},
"theme.blog.post.readingTime.plurals": {
"message": "1分で読めます|{readingTime}分で読めます",
"description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)"
},
"theme.docs.breadcrumbs.home": {
"message": "ホームページ",
"description": "The ARIA label for the home page in the breadcrumbs"
},
"theme.docs.sidebar.collapseButtonTitle": {
"message": "サイドバーを折りたたむ",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.collapseButtonAriaLabel": {
"message": "サイドバーを折りたたむ",
"description": "The title attribute for collapse button of doc sidebar"
},
"theme.docs.sidebar.navAriaLabel": {
"message": "ドキュメントサイドバーナビゲーション",
"description": "The ARIA label for the sidebar navigation"
},
"theme.docs.sidebar.closeSidebarButtonAriaLabel": {
"message": "ナビゲーションバーを閉じる",
"description": "The ARIA label for close button of mobile sidebar"
},
"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": {
"message": "← メインメニューに戻る",
"description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"
},
"theme.docs.sidebar.toggleSidebarButtonAriaLabel": {
"message": "ナビゲーションバーの開閉",
"description": "The ARIA label for hamburger menu button of mobile navigation"
},
"theme.docs.sidebar.expandButtonTitle": {
"message": "サイドバーを展開",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.docs.sidebar.expandButtonAriaLabel": {
"message": "サイドバーを展開",
"description": "The ARIA label and title attribute for expand button of doc sidebar"
},
"theme.ErrorPageContent.tryAgain": {
"message": "再試行",
"description": "The label of the button to try again rendering when the React error boundary captures an error"
},
"theme.common.skipToMainContent": {
"message": "メインコンテンツに直接移動",
"description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation"
},
"theme.tags.tagsPageTitle": {
"message": "タグ",
"description": "The title of the tag list page"
},
"theme.unlistedContent.title": {
"message": "非公開ページ",
"description": "The unlisted content banner title"
},
"theme.unlistedContent.message": {
"message": "このページは非公開です。検索エンジンにインデックスされず、直接リンクを持つユーザーのみがアクセスできます。",
"description": "The unlisted content banner message"
},
"Use AI to tackle the toil in your backlog. Our agents have all the same tools as a human developer: they can modify code, run commands, browse the web, call APIs, and yes-even copy code snippets from StackOverflow.": {
"message": "AIを使用してバックログの作業を効率化しましょう。私たちのエージェントは人間の開発者と同じツールを持っていますコードの修正、コマンドの実行、ウェブの閲覧、APIの呼び出し、そしてStackOverflowからのコードスニペットのコピーさえも可能です。"
},
"Get started with OpenHands.": {
"message": "OpenHandsを始める"
},
"Most Popular Links": {
"message": "人気のリンク"
},
"Customizing OpenHands to a repository": {
"message": "リポジトリ向けにOpenHandsをカスタマイズする"
},
"Integrating OpenHands with Github": {
"message": "OpenHandsをGithubと統合する"
},
"Recommended models to use": {
"message": "推奨モデル"
},
"Connecting OpenHands to your filesystem": {
"message": "OpenHandsをファイルシステムに接続する"
}
}

View File

@@ -0,0 +1,14 @@
{
"title": {
"message": "ブログ",
"description": "The title for the blog used in SEO"
},
"description": {
"message": "OpenHands ブログ",
"description": "The description for the blog used in SEO"
},
"sidebar.title": {
"message": "最近の投稿",
"description": "The label for the left sidebar"
}
}

View File

@@ -0,0 +1,210 @@
{
"version.label": {
"message": "次のバージョン",
"description": "The label for version current"
},
"sidebar.docsSidebar.category.🤖 Backends LLM": {
"message": "🤖 LLMバックエンド",
"description": "The label for category 🤖 Backends LLM in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.🚧 Dépannage": {
"message": "🚧 トラブルシューティング",
"description": "The label for category 🚧 Dépannage in sidebar docsSidebar"
},
"sidebar.apiSidebar.category.Backend": {
"message": "バックエンド",
"description": "The label for category Backend in sidebar apiSidebar"
},
"sidebar.docsSidebar.category.User Guides": {
"message": "ユーザーガイド",
"description": "The label for category User Guides in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Running OpenHands": {
"message": "OpenHandsの実行",
"description": "The label for category Running OpenHands in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Prompting": {
"message": "プロンプト",
"description": "The label for category Prompting in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Architecture": {
"message": "アーキテクチャ",
"description": "The label for category Architecture in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Running OpenHands": {
"message": "OpenHandsの実行",
"description": "The label for document Running OpenHands in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Getting Started": {
"message": "はじめに",
"description": "The label for document Getting Started in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Key Features": {
"message": "主な機能",
"description": "The label for document Key Features in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Customization": {
"message": "カスタマイズ",
"description": "The label for category Customization in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Usage Methods": {
"message": "使用方法",
"description": "The label for category Usage Methods in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Advanced Configuration": {
"message": "高度な設定",
"description": "The label for category Advanced Configuration in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Troubleshooting": {
"message": "トラブルシューティング",
"description": "The label for document Troubleshooting in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Feedback": {
"message": "フィードバック",
"description": "The label for document Feedback in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.For OpenHands Developers": {
"message": "OpenHands開発者向け",
"description": "The label for category For OpenHands Developers in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.About": {
"message": "概要",
"description": "The label for document About in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Best Practices": {
"message": "ベストプラクティス",
"description": "The label for document Best Practices in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Microagents": {
"message": "マイクロエージェント",
"description": "The label for category Microagents in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Overview": {
"message": "概要",
"description": "The label for document Overview in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Repository": {
"message": "リポジトリ",
"description": "The label for document Repository in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Public": {
"message": "パブリック",
"description": "The label for document Public in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Repository Customization": {
"message": "リポジトリのカスタマイズ",
"description": "The label for document Repository Customization in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.GUI Mode": {
"message": "GUIモード",
"description": "The label for document GUI Mode in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.CLI Mode": {
"message": "CLIモード",
"description": "The label for document CLI Mode in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Headless Mode": {
"message": "ヘッドレスモード",
"description": "The label for document Headless Mode in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Github Action": {
"message": "GitHub アクション",
"description": "The label for document Github Action in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Cloud": {
"message": "クラウド",
"description": "The label for category Cloud in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Openhands Cloud": {
"message": "OpenHands クラウド",
"description": "The label for document Openhands Cloud in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Cloud GitHub Resolver": {
"message": "クラウド GitHub リゾルバー",
"description": "The label for document Cloud GitHub Resolver in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.LLM Configuration": {
"message": "LLM 設定",
"description": "The label for category LLM Configuration in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Providers": {
"message": "プロバイダー",
"description": "The label for category Providers in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Azure": {
"message": "Azure",
"description": "The label for document Azure in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Google": {
"message": "Google",
"description": "The label for document Google in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Groq": {
"message": "Groq",
"description": "The label for document Groq in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.LiteLLM Proxy": {
"message": "LiteLLM プロキシ",
"description": "The label for document LiteLLM Proxy in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.OpenAI": {
"message": "OpenAI",
"description": "The label for document OpenAI in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.OpenRouter": {
"message": "OpenRouter",
"description": "The label for document OpenRouter in sidebar docsSidebar"
},
"sidebar.docsSidebar.category.Runtime Configuration": {
"message": "ランタイム設定",
"description": "The label for category Runtime Configuration in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Docker Runtime": {
"message": "Docker ランタイム",
"description": "The label for document Docker Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Remote Runtime": {
"message": "リモートランタイム",
"description": "The label for document Remote Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Modal Runtime": {
"message": "Modal ランタイム",
"description": "The label for document Modal Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Daytona Runtime": {
"message": "Daytona ランタイム",
"description": "The label for document Daytona Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Local Runtime": {
"message": "ローカルランタイム",
"description": "The label for document Local Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Configuration Options": {
"message": "設定オプション",
"description": "The label for document Configuration Options in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Custom Sandbox": {
"message": "カスタムサンドボックス",
"description": "The label for document Custom Sandbox in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Development Overview": {
"message": "開発概要",
"description": "The label for document Development Overview in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Backend": {
"message": "バックエンド",
"description": "The label for document Backend in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Runtime": {
"message": "ランタイム",
"description": "The label for document Runtime in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Debugging": {
"message": "デバッグ",
"description": "The label for document Debugging in sidebar docsSidebar"
},
"sidebar.docsSidebar.doc.Evaluation": {
"message": "評価",
"description": "The label for document Evaluation in sidebar docsSidebar"
}
}

View File

@@ -0,0 +1,88 @@
# Python API
OpenHandsは、Pythonコードから直接使用できる豊富なAPIを提供しています。以下は、主要なAPIの概要です。
## OpenHands クライアント
```python
from openhands import OpenHandsClient
# クライアントの初期化
client = OpenHandsClient(
api_key="your-api-key", # OpenAI APIキーなど
model="gpt-4", # 使用するLLMモデル
workspace="/path/to/workspace" # 作業ディレクトリ
)
# タスクの実行
result = client.execute_task("新しいPythonファイルを作成してください")
# 結果の取得
print(result.success) # タスクが成功したかどうか
print(result.output) # タスクの出力
print(result.error) # エラーメッセージ(存在する場合)
```
## サンドボックス設定
```python
from openhands import SandboxConfig
# サンドボックス設定のカスタマイズ
config = SandboxConfig(
allowed_commands=["git", "python"], # 許可するコマンド
timeout=300, # タイムアウト(秒)
max_memory="2g", # メモリ制限
network_access=True # ネットワークアクセスの許可
)
# 設定を使用してクライアントを初期化
client = OpenHandsClient(
api_key="your-api-key",
model="gpt-4",
workspace="/path/to/workspace",
sandbox_config=config
)
```
## イベントハンドリング
```python
from openhands import OpenHandsClient
def on_progress(event):
print(f"進捗: {event.message}")
def on_error(event):
print(f"エラー: {event.error}")
# イベントハンドラーを設定してクライアントを初期化
client = OpenHandsClient(
api_key="your-api-key",
model="gpt-4",
workspace="/path/to/workspace",
on_progress=on_progress,
on_error=on_error
)
```
## 非同期API
```python
import asyncio
from openhands import AsyncOpenHandsClient
async def main():
# 非同期クライアントの初期化
client = AsyncOpenHandsClient(
api_key="your-api-key",
model="gpt-4",
workspace="/path/to/workspace"
)
# タスクの非同期実行
result = await client.execute_task("新しいPythonファイルを作成してください")
print(result.output)
# 非同期メインの実行
asyncio.run(main())

View File

@@ -0,0 +1,5 @@
{
"items": ["python/python"],
"label": "バックエンド",
"type": "categorie"
}

View File

@@ -0,0 +1,27 @@
# OpenHands について
## 研究戦略
LLM を使用して本番レベルのアプリケーションを完全に複製することは複雑な endeavor です。私たちの戦略は以下の通りです:
- **コア技術研究:** コード生成と処理の技術的側面を理解し改善するための基礎研究に注力します。
- **タスク計画:** バグ検出、コードベース管理、最適化の機能を開発します。
- **評価:** 私たちのエージェントをより良く理解し改善するための包括的な評価指標を確立します。
## デフォルトエージェント
現在のデフォルトエージェントは、コードの生成とファイル処理が可能な [CodeActAgent](agents) です。
## 構築技術
OpenHands は、強力なフレームワークとライブラリを組み合わせて構築されており、開発のための堅牢な基盤を提供しています。
プロジェクトで使用されている主要な技術は以下の通りです:
![FastAPI](https://img.shields.io/badge/FastAPI-black?style=for-the-badge) ![uvicorn](https://img.shields.io/badge/uvicorn-black?style=for-the-badge) ![LiteLLM](https://img.shields.io/badge/LiteLLM-black?style=for-the-badge) ![Docker](https://img.shields.io/badge/Docker-black?style=for-the-badge) ![Ruff](https://img.shields.io/badge/Ruff-black?style=for-the-badge) ![MyPy](https://img.shields.io/badge/MyPy-black?style=for-the-badge) ![LlamaIndex](https://img.shields.io/badge/LlamaIndex-black?style=for-the-badge) ![React](https://img.shields.io/badge/React-black?style=for-the-badge)
これらの技術の選択は進行中であり、プロジェクトの進化に伴って新しい技術が追加されたり、既存の技術が削除されたりする可能性があることに注意してください。
私たちは OpenHands の機能を強化するために、最も適切で効率的なツールを採用するよう努めています。
## ライセンス
MIT [ライセンス](https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE) の下で配布されています。

View File

@@ -0,0 +1,23 @@
# 🧠 メインエージェントと機能
## CodeActAgent
### 説明
このエージェントは、CodeActのアイデア ([論文](https://arxiv.org/abs/2402.01030), [ツイート](https://twitter.com/xingyaow_/status/1754556835703751087)) を実装しており、LLMエージェントの**行動**を、_シンプルさ_と_パフォーマンス_の両方のために、統一された**コード**行動空間に統合します。
概念的なアイデアは以下の図に示されています。各ターンで、エージェントは以下のことができます。
1. **会話**: 明確化、確認などのために、自然言語で人間とコミュニケーションをとる。
2. **CodeAct**: コードを実行してタスクを実行することを選択する
- 任意の有効なLinux `bash`コマンドを実行する
- [対話型Pythonインタープリター](https://ipython.org/)で任意の有効な`Python`コードを実行する。これは`bash`コマンドを通してシミュレートされます。詳細はプラグインシステムを参照してください。
![image](https://github.com/All-Hands-AI/OpenHands/assets/38853559/92b622e3-72ad-4a61-8f41-8c040b6d5fb3)
### デモ
https://github.com/All-Hands-AI/OpenHands/assets/38853559/f592a192-e86c-4f48-ad31-d69282d5f6ac
_データサイエンスタスク(線形回帰)を実行する`gpt-4-turbo-2024-04-09`を使用したCodeActAgentの例_

View File

@@ -0,0 +1,50 @@
---
sidebar_position: 4
---
# 🏛️ システムアーキテクチャの概要
以下は、システムアーキテクチャの高レベルな概要です。システムは主に2つのコンポーネントに分かれています: フロントエンドとバックエンドです。フロントエンドはユーザーとのインタラクションの管理と結果の表示を担当します。バックエンドはビジネスロジックの管理とエージェントの実行を担当します。
![system_architecture.svg](/img/system_architecture.svg)
この概要は、主要なコンポーネントとそれらの相互作用を示すために簡略化されています。バックエンドアーキテクチャのより詳細なビューについては、[バックエンドアーキテクチャ](#backend-architecture-ja)のセクションを参照してください。
# バックエンドアーキテクチャ {#backend-architecture-ja}
_**注意**: バックエンドアーキテクチャは開発中であり、変更される可能性があります。以下の図は、図のフッターに示されているコミットに基づく現在のバックエンドアーキテクチャを示しています。_
![backend_architecture.svg](/img/backend_architecture.svg)
<details>
<summary>この図の更新</summary>
<div>
バックエンドアーキテクチャ図の生成は部分的に自動化されています。
図はpy2pumlツールを使用してコード内の型アテーションから生成されます。
その後、図は手動でレビューされ、調整され、PNGとSVGにエクスポートされます。
## 前提条件
- openhandsが実行可能なPython環境
(リポジトリのルートにあるREADME.mdファイルの指示に従って)
- [py2puml](https://github.com/lucsorel/py2puml)がインストールされていること
## 手順
1. リポジトリのルートから以下のコマンドを実行して、図を自動的に生成します:
`py2puml openhands openhands > docs/architecture/backend_architecture.puml`
2. 生成されたファイルをPlantUMLエディタ(Visual Studio CodeのPlantUML拡張機能や[PlantText](https://www.planttext.com/)など)で開きます。
3. 生成されたPUMLを確認し、図に必要な変更を加えます(欠落している部分を追加し、エラーを修正し、レイアウトを改善します)。
_py2pumlはコード内の型アテーションから図を作成するため、型アテーションが欠落していたり正しくない場合、図が不完全または不正確になる可能性があります。_
4. 新しい図と以前の図の違いを確認し、変更が正しいかどうかを手動で確認します。
_過去に図に手動で追加され、現在も関連性のある部分を削除しないように注意してください。_
5. 図の生成に使用されたコミットのハッシュを図のフッターに追加します。
6. 図をPNGファイルとSVGファイルにエクスポートし、`docs/architecture`ディレクトリ内の既存の図を置き換えます。これは(例えば[PlantText](https://www.planttext.com/)を使用して)行うことができます。
</div>
</details>

View File

@@ -0,0 +1,53 @@
# 🏛️ システムアーキテクチャ
<div style={{ textAlign: 'center' }}>
<img src="https://github.com/All-Hands-AI/OpenHands/assets/16201837/97d747e3-29d8-4ccb-8d34-6ad1adb17f38" alt="OpenHands System Architecture Diagram Jul 4 2024" />
<p><em>OpenHands システムアーキテクチャ図 (2024年7月4日)</em></p>
</div>
これはシステムアーキテクチャの高レベルな概要です。システムはフロントエンドとバックエンドの2つの主要コンポーネントに分かれています。フロントエンドはユーザーインタラクションを処理し、結果を表示する役割を担います。バックエンドはビジネスロジックを処理し、エージェントを実行する役割を担います。
# フロントエンドアーキテクチャ {#frontend-architecture-ja}
![system_architecture.svg](/img/system_architecture.svg)
この概要は、主要なコンポーネントとそれらの相互作用を示すために簡略化されています。バックエンドアーキテクチャのより詳細なビューについては、以下のバックエンドアーキテクチャのセクションを参照してください。
# バックエンドアーキテクチャ {#backend-architecture-ja}
_**免責事項**: バックエンドアーキテクチャは現在進行中の作業であり、変更される可能性があります。以下の図は、図のフッターに示されているコミットに基づくバックエンドの現在のアーキテクチャを示しています。_
![backend_architecture.svg](/img/backend_architecture.svg)
<details>
<summary>この図の更新</summary>
<div>
バックエンドアーキテクチャ図の生成は部分的に自動化されています。
この図は、py2pumlツールを使用してコード内の型ヒントから生成されます。
その後、図は手動でレビュー、調整され、PNGとSVGにエクスポートされます。
## 前提条件
- openhandsが実行可能なPython環境
(リポジトリのルートにあるREADME.mdファイルの指示に従って)
- [py2puml](https://github.com/lucsorel/py2puml)がインストールされていること
## 手順
1. リポジトリのルートから以下のコマンドを実行して、図を自動生成します:
`py2puml openhands openhands > docs/architecture/backend_architecture.puml`
2. 生成されたファイルをPlantUMLエディタで開きます。例えば、PlantUML拡張機能を使用したVisual Studio Codeや[PlantText](https://www.planttext.com/)など。
3. 生成されたPUMLをレビューし、図に必要な調整を行います(欠落部分の追加、ミスの修正、位置の改善など)。
_py2pumlは、コード内の型ヒントに基づいて図を作成するため、型ヒントが欠落していたり正しくない場合、図が不完全または不正確になることがあります。_
4. 新旧の図の差分をレビューし、変更が正しいかどうかを手動で確認します。
_過去に図に手動で追加され、現在も関連性のある部分を削除しないように注意してください。_
5. 図のフッターに、図の生成に使用されたコミットのコミットハッシュを追加します。
6. 図をPNGとSVGファイルとしてエクスポートし、`docs/architecture`ディレクトリ内の既存の図を置き換えます。これは(例えば[PlantText](https://www.planttext.com/))で行うことができます。
</div>
</details>

View File

@@ -0,0 +1,129 @@
以下に翻訳結果を示します。
# 📦 Dockerランタイム
OpenHands Dockerランタイムは、AIエージェントのアクションを安全かつ柔軟に実行できるようにするコアコンポーネントです。
Dockerを使用してサンドボックス化された環境を作成し、ホストシステムを危険にさらすことなく任意のコードを安全に実行できます。
## サンドボックス化されたランタイムが必要な理由
OpenHandsでは、いくつかの理由から、信頼できないコードを安全で隔離された環境で実行する必要があります。
1. セキュリティ: 信頼できないコードを実行すると、ホストシステムに重大なリスクを及ぼす可能性があります。サンドボックス化された環境では、悪意のあるコードがホストシステムのリソースにアクセスしたり、変更したりすることを防ぐことができます。
2. 一貫性: サンドボックス化された環境では、異なるマシンやセットアップ間でコードの実行が一貫していることが保証され、「自分のマシンでは動作する」という問題が解消されます。
3. リソース制御: サンドボックス化により、リソースの割り当てと使用をより適切に制御でき、暴走プロセスがホストシステムに影響を与えることを防ぐことができます。
4. 分離: 異なるプロジェクトやユーザーは、ホストシステムや他のプロジェクトに干渉することなく、分離された環境で作業できます。
5. 再現性: サンドボックス化された環境では、実行環境が一貫しており制御可能であるため、バグや問題を再現しやすくなります。
## ランタイムの仕組み
OpenHandsランタイムシステムは、Dockerコンテナを使用してクライアント-サーバーアーキテクチャを実装しています。以下は、その仕組みの概要です。
```mermaid
graph TD
A[ユーザー提供のカスタムDockerイメージ] --> B[OpenHandsバックエンド]
B -->|ビルド| C[OHランタイムイメージ]
C -->|起動| D[アクション実行サーバー]
D -->|初期化| E[ブラウザ]
D -->|初期化| F[Bashシェル]
D -->|初期化| G[プラグイン]
G -->|初期化| L[Jupyterサーバー]
B -->|生成| H[エージェント]
B -->|生成| I[EventStream]
I <--->|REST APIを介して
アクションを実行し
観測結果を取得
| D
H -->|アクション生成| I
I -->|観測結果取得| H
subgraph "Dockerコンテナ"
D
E
F
G
L
end
```
1. ユーザー入力: ユーザーがカスタムベースDockerイメージを提供します。
2. イメージのビルド: OpenHandsは、ユーザー提供のイメージをベースに新しいDockerイメージ「OHランタイムイメージ」をビルドします。この新しいイメージには、主に「ランタイムクライアント」であるOpenHands固有のコードが含まれます。
3. コンテナの起動: OpenHandsが起動すると、OHランタイムイメージを使用してDockerコンテナが起動します。
4. アクション実行サーバーの初期化: アクション実行サーバーは、コンテナ内で`ActionExecutor`を初期化し、Bashシェルなどの必要なコンポーネントをセットアップし、指定されたプラグインをロードします。
5. 通信: OpenHandsバックエンド`openhands/runtime/impl/eventstream/eventstream_runtime.py`は、RESTful APIを介してアクション実行サーバーと通信し、アクションを送信し、観測結果を受信します。
6. アクションの実行: ランタイムクライアントはバックエンドからアクションを受信し、サンドボックス化された環境内でそれらを実行し、観測結果を送り返します。
7. 観測結果の返却: アクション実行サーバーは、実行結果を観測結果としてOpenHandsバックエンドに送り返します。
クライアントの役割:
- OpenHandsバックエンドとサンドボックス化された環境の間の仲介役を果たします。
- コンテナ内で様々なタイプのアクションシェルコマンド、ファイル操作、Pythonコードなどを安全に実行します。
- 現在の作業ディレクトリやロードされたプラグインなど、サンドボックス化された環境の状態を管理します。
- 観測結果をフォーマットしてバックエンドに返し、結果を処理するための一貫したインターフェースを確保します。
## OpenHandsがOHランタイムイメージをビルドおよび管理する方法
OpenHandsのランタイムイメージのビルドと管理に対するアプローチは、本番環境と開発環境の両方でDockerイメージを効率的、一貫性のある、柔軟な方法で作成および維持することを保証します。
詳細に興味がある場合は、[関連コード](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/runtime/utils/runtime_build.py)をチェックしてください。
### イメージタグ付けシステム
OpenHandsは、再現性と柔軟性のバランスを取るために、ランタイムイメージに3つのタグシステムを使用しています。
タグは以下の2つの形式のいずれかになります。
- **バージョン付きタグ**: `oh_v{openhands_version}_{base_image}` (例: `oh_v0.9.9_nikolaik_s_python-nodejs_t_python3.12-nodejs22`)
- **ロックタグ**: `oh_v{openhands_version}_{16_digit_lock_hash}` (例: `oh_v0.9.9_1234567890abcdef`)
- **ソースタグ**: `oh_v{openhands_version}_{16_digit_lock_hash}_{16_digit_source_hash}`
(例: `oh_v0.9.9_1234567890abcdef_1234567890abcdef`)
#### ソースタグ - 最も具体的
これは、ソースディレクトリのディレクトリハッシュのMD5の最初の16桁です。これにより、openhandsソースのみのハッシュが得られます。
#### ロックタグ
このハッシュは、以下のMD5の最初の16桁から構築されます。
- イメージがビルドされたベースイメージの名前(例: `nikolaik/python-nodejs:python3.12-nodejs22`
- イメージに含まれる`pyproject.toml`の内容
- イメージに含まれる`poetry.lock`の内容
これにより、ソースコードとは無関係に、Openhandsの依存関係のハッシュが効果的に得られます。
#### バージョン付きタグ - 最も一般的
このタグは、openhandsのバージョンとベースイメージ名タグ標準に適合するように変換されたものを連結したものです。
#### ビルドプロセス
イメージを生成する際...
- **再ビルドなし**: OpenHandsは最初に、同じ**最も具体的なソースタグ**を持つイメージが存在するかどうかをチェックします。そのようなイメージが存在する場合、ビルドは実行されず、既存のイメージが使用されます。
- **最速の再ビルド**: 次に、OpenHandsは**一般的なロックタグ**を持つイメージが存在するかどうかをチェックします。そのようなイメージが存在する場合、OpenHandsはそれに基づいて新しいイメージをビルドし、現在のソースコードをコピーする最終操作を除くすべてのインストール手順`poetry install``apt-get`など)をバイパスします。新しいイメージには**ソース**タグのみが付けられます。
- **まあまあの再ビルド**: **ソース**タグも**ロック**タグも存在しない場合、**バージョン付き**タグイメージに基づいてイメージがビルドされます。バージョン付きタグイメージでは、ほとんどの依存関係がすでにインストールされているため、時間を節約できます。
- **最も遅い再ビルド**: 3つのタグのすべてが存在しない場合、ベースイメージに基づいて新しいイメージがビルドされますこれは遅い操作です。この新しいイメージには、**ソース**、**ロック**、**バージョン付き**の各タグが付けられます。
このタグ付けアプローチにより、OpenHandsは開発環境と本番環境の両方を効率的に管理できます。
1. 同一のソースコードとDockerfileは、常に同じイメージを生成しますハッシュベースのタグを介して
2. 小さな変更が発生した場合、システムはイメージを迅速に再ビルドできます(最近の互換性のあるイメージを活用することで)。
3. **ロック**タグ(例: `runtime:oh_v0.9.3_1234567890abcdef`は、特定のベースイメージ、依存関係、およびOpenHandsバージョンの組み合わせに対する最新のビルドを常に指します。
## ランタイムプラグインシステム
OpenHandsランタイムは、機能を拡張し、ランタイム環境をカスタマイズできるプラグインシステムをサポートしています。プラグインは、ランタイムクライアントの起動時に初期化されます。
独自のプラグインを実装したい場合は、[Jupyterプラグインの例](https://github.com/All-Hands-AI/OpenHands/blob/ecf4aed28b0cf7c18d4d8ff554883ba182fc6bdd/openhands/runtime/plugins/jupyter/__init__.py#L21-L55)をチェックしてください。
*プラグインシステムの詳細はまだ作成中です - 貢献を歓迎します!*
プラグインシステムの主な側面:
1. プラグインの定義: プラグインは、基本の`Plugin`クラスを継承するPythonクラスとして定義されます。
2. プラグインの登録: 利用可能なプラグインは、`ALL_PLUGINS`辞書に登録されます。
3. プラグインの指定: プラグインは、`Agent.sandbox_plugins: list[PluginRequirement]`に関連付けられます。ユーザーは、ランタイムを初期化するときにロードするプラグインを指定できます。
4. 初期化: プラグインは、ランタイムクライアントの起動時に非同期で初期化されます。
5. 使用: ランタイムクライアントは、初期化されたプラグインを使用して機能を拡張できます(例: IPythonセルを実行するためのJupyterPlugin

View File

@@ -0,0 +1,381 @@
# 設定オプション
このガイドでは、OpenHandsで利用可能なすべての設定オプションを詳しく説明し、その動作をカスタマイズし、他のサービスと統合するのに役立ちます。
:::note
[GUIモード](https://docs.all-hands.dev/modules/usage/how-to/gui-mode)で実行している場合、設定UIで利用可能な設定が常に優先されます。
:::
---
# 目次
1. [基本設定](#core-configuration)
- [APIキー](#api-keys)
- [ワークスペース](#workspace)
- [デバッグとロギング](#debugging-and-logging)
- [トラジェクトリ](#trajectories)
- [ファイルストア](#file-store)
- [タスク管理](#task-management)
- [サンドボックス設定](#sandbox-configuration)
- [その他](#miscellaneous)
2. [LLM設定](#llm-configuration)
- [AWS認証情報](#aws-credentials)
- [API設定](#api-configuration)
- [カスタムLLMプロバイダー](#custom-llm-provider)
- [埋め込み](#embeddings)
- [メッセージ処理](#message-handling)
- [モデル選択](#model-selection)
- [リトライ](#retrying)
- [詳細オプション](#advanced-options)
3. [エージェント設定](#agent-configuration)
- [メモリ設定](#memory-configuration)
- [LLM設定](#llm-configuration-1)
- [アクションスペース設定](#actionspace-configuration)
- [マイクロエージェントの使用](#microagent-usage)
4. [サンドボックス設定](#sandbox-configuration-1)
- [実行](#execution)
- [コンテナイメージ](#container-image)
- [ネットワーキング](#networking)
- [リンティングとプラグイン](#linting-and-plugins)
- [依存関係と環境](#dependencies-and-environment)
- [評価](#evaluation)
5. [セキュリティ設定](#security-configuration)
- [確認モード](#confirmation-mode)
- [セキュリティアナライザー](#security-analyzer)
---
## 基本設定
基本設定オプションは`config.toml`ファイルの`[core]`セクションで定義されます。
**APIキー**
- `e2b_api_key`
- 型: `str`
- デフォルト値: `""`
- 説明: E2BのAPIキー
- `modal_api_token_id`
- 型: `str`
- デフォルト値: `""`
- 説明: ModalのAPIトークンID
- `modal_api_token_secret`
- 型: `str`
- デフォルト値: `""`
- 説明: ModalのAPIトークンシークレット
**ワークスペース**
- `workspace_base`
- 型: `str`
- デフォルト値: `"./workspace"`
- 説明: ワークスペースのベースパス
- `cache_dir`
- 型: `str`
- デフォルト値: `"/tmp/cache"`
- 説明: キャッシュディレクトリのパス
**デバッグとロギング**
- `debug`
- 型: `bool`
- デフォルト値: `false`
- 説明: デバッグを有効にする
- `disable_color`
- 型: `bool`
- デフォルト値: `false`
- 説明: ターミナル出力のカラー表示を無効にする
**トラジェクトリ**
- `save_trajectory_path`
- 型: `str`
- デフォルト値: `"./trajectories"`
- 説明: トラジェクトリを保存するパスフォルダまたはファイル。フォルダの場合、トラジェクトリはセッションIDと.json拡張子を持つファイルとしてそのフォルダに保存されます。
**ファイルストア**
- `file_store_path`
- 型: `str`
- デフォルト値: `"/tmp/file_store"`
- 説明: ファイルストアのパス
- `file_store`
- 型: `str`
- デフォルト値: `"memory"`
- 説明: ファイルストアのタイプ
- `file_uploads_allowed_extensions`
- 型: `list of str`
- デフォルト値: `[".*"]`
- 説明: アップロードを許可するファイル拡張子のリスト
- `file_uploads_max_file_size_mb`
- 型: `int`
- デフォルト値: `0`
- 説明: アップロードの最大ファイルサイズ(メガバイト)
- `file_uploads_restrict_file_types`
- 型: `bool`
- デフォルト値: `false`
- 説明: ファイルアップロードのファイルタイプを制限する
**タスク管理**
- `max_budget_per_task`
- 型: `float`
- デフォルト値: `0.0`
- 説明: タスクごとの最大予算0.0は制限なし)
- `max_iterations`
- 型: `int`
- デフォルト値: `100`
- 説明: 最大イテレーション数
**サンドボックス設定**
- `workspace_mount_path_in_sandbox`
- 型: `str`
- デフォルト値: `"/workspace"`
- 説明: サンドボックス内のワークスペースマウントパス
- `workspace_mount_path`
- 型: `str`
- デフォルト値: `""`
- 説明: ワークスペースマウントパス
- `workspace_mount_rewrite`
- 型: `str`
- デフォルト値: `""`
- 説明: ワークスペースマウントパスを書き換えるパス。通常は無視できます。別のコンテナ内での実行の特殊なケースを参照します。
**その他**
- `run_as_openhands`
- 型: `bool`
- デフォルト値: `true`
- 説明: OpenHandsとして実行する
- `runtime`
- 型: `str`
- デフォルト値: `"docker"`
- 説明: 実行環境
- `default_agent`
- 型: `str`
- デフォルト値: `"CodeActAgent"`
- 説明: デフォルトのエージェント名
- `jwt_secret`
- 型: `str`
- デフォルト値: `uuid.uuid4().hex`
- 説明: 認証用のJWTシークレット。独自の値に設定してください。
## LLM設定
LLM大規模言語モデル設定オプションは`config.toml`ファイルの`[llm]`セクションで定義されます。
dockerコマンドで使用する場合は、`-e LLM_<option>`として渡します。例:`-e LLM_NUM_RETRIES`
:::note
開発設定では、カスタムLLM設定も定義できます。詳細は[カスタムLLM設定](./llms/custom-llm-configs)を参照してください。
:::
**AWS認証情報**
- `aws_access_key_id`
- 型: `str`
- デフォルト値: `""`
- 説明: AWSアクセスキーID
- `aws_region_name`
- 型: `str`
- デフォルト値: `""`
- 説明: AWSリージョン名
- `aws_secret_access_key`
- 型: `str`
- デフォルト値: `""`
- 説明: AWSシークレットアクセスキー
**API設定**
- `api_key`
- 型: `str`
- デフォルト値: `None`
- 説明: 使用するAPIキー
- `base_url`
- 型: `str`
- デフォルト値: `""`
- 説明: APIのベースURL
- `api_version`
- 型: `str`
- デフォルト値: `""`
- 説明: APIバージョン
- `input_cost_per_token`
- 型: `float`
- デフォルト値: `0.0`
- 説明: 入力トークンあたりのコスト
- `output_cost_per_token`
- 型: `float`
- デフォルト値: `0.0`
- 説明: 出力トークンあたりのコスト
**カスタムLLMプロバイダー**
- `custom_llm_provider`
- 型: `str`
- デフォルト値: `""`
- 説明: カスタムLLMプロバイダー
**埋め込み**
- `embedding_base_url`
- 型: `str`
- デフォルト値: `""`
- 説明: 埋め込みAPIのベースURL
- `embedding_deployment_name`
- 型: `str`
- デフォルト値: `""`
- 説明: 埋め込みデプロイメント名
- `embedding_model`
- 型: `str`
- デフォルト値: `"local"`
- 説明: 使用する埋め込みモデル
**メッセージ処理**
- `max_message_chars`
- 型: `int`
- デフォルト値: `30000`
- 説明: LLMプロンプトに含まれるイベントコンテンツの最大文字数概算。より大きな観察は切り捨てられます。
- `max_input_tokens`
- 型: `int`
- デフォルト値: `0`
- 説明: 最大入力トークン数
- `max_output_tokens`
- 型: `int`
- デフォルト値: `0`
- 説明: 最大出力トークン数
**モデル選択**
- `model`
- 型: `str`
- デフォルト値: `"claude-3-5-sonnet-20241022"`
- 説明: 使用するモデル
**リトライ**
- `num_retries`
- 型: `int`
- デフォルト値: `8`
- 説明: リトライ回数
- `retry_max_wait`
- 型: `int`
- デフォルト値: `120`
- 説明: リトライ間の最大待機時間(秒)
- `retry_min_wait`
- 型: `int`
- デフォルト値: `15`
- 説明: リトライ間の最小待機時間(秒)
- `retry_multiplier`
- 型: `float`
- デフォルト値: `2.0`
- 説明: 指数バックオフ計算の乗数
**詳細オプション**
- `drop_params`
- 型: `bool`
- デフォルト値: `false`
- 説明: マッピングされていない(サポートされていない)パラメータを例外を発生させずに削除する
- `caching_prompt`
- 型: `bool`
- デフォルト値: `true`
- 説明: LLMによって提供され、サポートされている場合、プロンプトキャッシュ機能を使用する
- `ollama_base_url`
- 型: `str`
- デフォルト値: `""`
- 説明: OLLAMA APIのベースURL
- `temperature`
- 型: `float`
- デフォルト値: `0.0`
- 説明: APIの温度パラメータ
- `timeout`
- 型: `int`
- デフォルト値: `0`
- 説明: APIのタイムアウト
- `top_p`
- 型: `float`
- デフォルト値: `1.0`
- 説明: APIのtop_pパラメータ
- `disable_vision`
- 型: `bool`
- デフォルト値: `None`
- 説明: モデルがビジョン機能を持つ場合、この設定で画像処理を無効にできます(コスト削減に有用)
## エージェント設定
エージェント設定オプションは`config.toml`ファイルの`[agent]`および`[agent.<agent_name>]`セクションで定義されます。
**メモリ設定**
- `memory_enabled`
- 型: `bool`
- デフォルト値: `false`
- 説明: 長期メモリ(埋め込み)が有効かどうか
- `memory_max_threads`
- 型: `int`
- デフォルト値: `3`
- 説明: 埋め込みのために同時にインデックスを作成する最大スレッド数
**LLM設定**
- `llm_config`
- 型: `str`
- デフォルト値: `'your-llm-config-group'`
- 説明: 使用するLLM設定の名前
**アクションスペース設定**
- `function_calling`
- 型: `bool`
- デフォルト値: `true`
- 説明: 関数呼び出しが有効かどうか
- `enable_browsing`
- 型: `bool`
- デフォルト値: `false`
- 説明: アクションスペースでブラウジングデリゲートが有効かどうか(関数呼び出しでのみ機能)
- `enable_llm_editor`
- 型: `bool`
- デフォルト値: `false`
- 説明: アクションスペースでLLMエディタが有効かどうか関数呼び出しでのみ機能
**マイクロエージェントの使用**
- `enable_prompt_extensions`
- 型: `bool`
- デフォルト値: `true`
- 説明: マイクロエージェントの使用が有効かどうか
- `disabled_microagents`
- 型: `list of str`
- デフォルト値: `None`
- 説明: 無効にするマイクロエージェントのリスト
### 実行
- `timeout`
- 型: `int`
- デフォルト値: `120`
- 説明: サンドボックスのタイムアウト(秒)
- `user_id`
- 型: `int`
- デフォルト値: `1000`
- 説明: サンドボックスのユーザーID

View File

@@ -0,0 +1,81 @@
# 💿 カスタム Docker サポートを作成する方法
デフォルトの OpenHands サンドボックスは、最小限の ubuntu 構成で提供されています。ユースケースによっては、デフォルトでインストールされているソフトウェアが必要になる場合があります。この記事では、カスタム docker イメージを使用してこれを実現する方法について説明します。
## セットアップ
[Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md) のドキュメントに従って、OpenHands を使用できるようにしてください。
## カスタム Docker イメージの作成
次に、debian/ubuntu ベースのカスタム docker イメージを作成する必要があります。たとえば、OpenHands で "node" バイナリにアクセスできるようにしたい場合は、次のような Dockerfile を使用します:
```bash
# 最新の ubuntu イメージから開始
FROM ubuntu:latest
# 必要なアップデートを実行
RUN apt-get update && apt-get install
# nodejs をインストール
RUN apt-get install -y nodejs
```
次に、選択した名前でカスタム docker イメージをビルドします。たとえば、"custom_image" とします。そのためには、ディレクトリを作成し、"Dockerfile" という名前のファイルをその中に配置し、ディレクトリ内でこのコマンドを実行します:
```bash
docker build -t custom_image .
```
これにより、```custom_image``` という名前の新しいイメージが作成され、Docker Engine で利用できるようになります。
> 注: ここで説明する設定では、OpenHands はサンドボックス内で "openhands" ユーザーとして動作するため、Dockerfile 経由でインストールされたパッケージは、root だけでなくシステム上のすべてのユーザーが利用できるようになります。
>
> 上記の apt-get によるインストールでは、すべてのユーザー向けに nodejs がインストールされます。
## config.toml ファイルでカスタムイメージを指定
OpenHands の設定は、トップレベルの ```config.toml``` ファイルを介して行われます。
OpenHands ディレクトリに ```config.toml``` ファイルを作成し、次の内容を入力します:
```toml
[core]
workspace_base="./workspace"
run_as_openhands=true
[sandbox]
base_container_image="custom_image"
```
> ```base_container_image``` が前述のカスタムイメージ名に設定されていることを確認してください。
## 実行
ルートディレクトリで ```make run``` を実行して OpenHands を起動します。
```localhost:3001``` に移動し、目的の依存関係が利用可能かどうかを確認します。
上記の例の場合、コンソールで ```node -v``` コマンドを実行すると ```v18.19.1``` が出力されます。
おめでとうございます!
## 技術的な説明
詳細な説明については、[実行時ドキュメントのカスタムDockerイメージの章](https://docs.all-hands.dev/ja/modules/usage/architecture/runtime)を参照してください。
## トラブルシューティング / エラー
### エラー: ```useradd: UID 1000 は一意ではありません```
このエラーがコンソール出力に表示される場合、OpenHands がサンドボックス内に UID 1000 で openhands ユーザーを作成しようとしていますが、この UID は (何らかの理由で) イメージ内ですでに使用されているためです。この問題を解決するには、config.toml ファイルの user_id フィールドの値を別の値に変更します:
```toml
[core]
workspace_base="./workspace"
run_as_openhands=true
[sandbox]
base_container_image="custom_image"
user_id="1001"
```
### ポート使用エラー
ポートが使用中または利用不可であることを示すエラーメッセージが表示される場合は、実行中のすべての docker コンテナを削除してみてください (`docker ps` を実行し、関連するコンテナに対して `docker rm` を実行します)。その後、```make run``` を再実行します。

View File

@@ -0,0 +1,40 @@
# ✅ フィードバックの提供
OpenHandsを使用する際、うまくいく場合もあれば、そうでない場合もあります。開発チームにフィードバックを提供し、おそらくより重要なことですが、コーディングエージェントのトレーニング例のオープンなコーパスを作成するために、OpenHandsを使用する際にフィードバックを提供することをお勧めします -- Share-OpenHands!
## 📝 フィードバックの提供方法
フィードバックの提供は簡単です! OpenHandsを使用している際、インタラクションの任意のポイントで親指を上または下に向けるボタンを押すことができます。メールアドレスの入力を求められます (例: フォローアップの質問をしたい場合に連絡できるように)。また、フィードバックを公開するか非公開にするかを選択できます。
<iframe width="560" height="315" src="https://www.youtube.com/embed/5rFx-StMVV0?si=svo7xzp6LhGK_GXr" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## 📜 データの使用とプライバシー
### データ共有設定
データを送信する際、公開または非公開で送信できます。
- **公開**データは、OpenHands自体と同様にMITライセンスの下で配布され、コミュニティがモデルのトレーニングとテストに使用できます。明らかに、公開できるフィードバックは、コミュニティ全体にとってより価値があるでしょう。機密情報を扱っていない場合は、このオプションを選択することをお勧めします!
- **非公開**データは、OpenHandsの改善を目的としてOpenHandsチームが利用できるようになります。ただし、一意のIDを持つリンクが作成され、他の人と公開で共有できます。
### データの収集と保存は誰が行うのか?
データは、OpenHandsのメンテナーによって設立されたOpenHandsのサポートと改善を目的とする企業である[All Hands AI](https://all-hands.dev)によって収集および保存されます。
### 公開データはどのようにリリースされるのか?
公開データは、1,000件の公開例、10,000件の公開例などの固定されたマイルストーンに達した時点でリリースされます。
その際、以下のリリースプロセスに従います:
1. 公開フィードバックを提供したすべての人に、データのリリースについて説明し、オプトアウトする機会を与えるメールが送信されます。
2. データリリースを担当する人は、データの品質管理を行い、低品質のフィードバックを削除し、
提出者のメールアドレスを削除し、機密情報を削除するよう試みます。
3. データは、GitHubやHugging Faceなどの一般的に使用されているサイトを通じて、MITライセンスの下で公開されます。
### データを削除したい場合はどうすればよいですか?
All Hands AIのサーバー上のデータについては、リクエストに応じて削除いたします:
**1つのデータ:** 1つのデータを削除したい場合、データ送信時にインターフェイスに表示されるリンクとパスワードを使用してデータを削除するメカニズムを近日中に追加する予定です。
**すべてのデータ:** すべてのデータを削除したい場合、またはデータ送信時に受け取ったIDとパスワードがない場合は、元のデータ送信時に登録したメールアドレスから`contact@all-hands.dev`までご連絡ください。

View File

@@ -0,0 +1,108 @@
# OpenHandsを始める
[OpenHandsをインストール](./installation)し、[LLMを設定](./installation#setup)しました。次は何をしましょうか?
OpenHandsは、さまざまなエンジニアリングタスクを支援できます。しかし、この技術はまだ新しく、
エージェントが支援なしで広範で複雑なエンジニアリングタスクを処理できるようになるまでには時間がかかります。
そのため、エージェントが得意とすることと、支援が必要な部分を理解することが重要です。
## Hello World
最初に試してみたいのは、シンプルな「hello world」の例かもしれません。
これは見た目以上に複雑になる可能性があります!
エージェントに以下のように依頼してみてください:
> "hello world!"と表示するbashスクリプトhello.shを作成してください
エージェントがスクリプトを作成するだけでなく、適切な権限を設定し、
スクリプトを実行して出力を確認することに気付くでしょう。
エージェントにコードの改良を続けて依頼することもできます。これはエージェントと
作業する優れた方法です。シンプルに始めて、反復的に改良していきます。
> hello.shを修正して、最初の引数として名前を受け取るようにしてください。デフォルトは"world"にしてください
また、エージェントが環境のセットアップに時間を要する可能性はありますが、
必要な任意の言語で作業することができます!
> hello.shをRubyスクリプトに変換して実行してください
## ゼロからの構築
エージェントは、「グリーンフィールド」タスク(既存のコードベースに関する文脈を必要としないタスク)で
特に優れた性能を発揮し、ゼロから始めることができます。
シンプルなタスクから始めて、反復的に改良していくのがベストです。また、
要望する内容、使用する技術スタックなどについて、できるだけ具体的に指定することをお勧めします。
例えば、TODOアプリケーションを構築できます
> フロントエンドのみのReactベースの基本的なTODOリストアプリケーションを作成してください。
> すべての状態はlocalStorageに保存してください。
基本的な構造ができたら、アプリケーションの改良を続けることができます:
> 各タスクにオプションの期限を追加できるようにしてください
通常の開発と同様に、頻繁にコミットとプッシュを行うことをお勧めします。
これにより、エージェントが予期せぬ方向に進んだ場合でも、以前の状態に戻ることができます。
エージェントにコミットとプッシュを依頼することもできます:
> 変更をコミットして、"feature/due-dates"という新しいブランチにプッシュしてください
## 新しいコードの追加
OpenHandsは、既存のコードベースに新しいコードを追加する作業も優れています。
例えば、OpenHandsにコードを分析するGitHubアクションをプロジェクトに追加するよう依頼できます。
OpenHandsはコードベースを確認して使用すべき言語を判断し、新しいファイルを
`./github/workflows/lint.yml`に作成できます。
> このリポジトリのコードを分析するGitHubアクションを追加してください
一部のタスクではより多くの文脈が必要かもしれません。OpenHandsは`ls`や`grep`を使用して
コードベースを検索できますが、事前に文脈を提供することで、より速く、より正確に作業を
進めることができます。また、トークンの消費も少なくなります!
> ./backend/api/routes.jsを修正して、すべてのタスクのリストを返す新しいルートを追加してください
> ./frontend/componentsディレクトリにWidgetのリストを表示する新しいReactコンポーネントを追加してください。
> 既存のWidgetコンポーネントを使用する必要があります。
## リファクタリング
OpenHandsは、特に小規模な既存コードのリファクタリングに優れています。
コードベース全体のアーキテクチャを変更しようとするのは避けた方がよいですが、
長いファイルや関数の分割、変数名の変更などは非常にうまく機能する傾向があります。
> ./app.goの1文字の変数名をすべて変更してください
> widget.phpの`build_and_deploy_widgets`関数を`build_widgets`と`deploy_widgets`の2つの関数に分割してください
> ./api/routes.jsを各ルートごとの別々のファイルに分割してください
## バグ修正
OpenHandsは、コードのバグの追跡と修正も支援できます。しかし、すべての
開発者が知っているように、バグ修正は非常に繊細な作業になる可能性があり、多くの場合OpenHandsはより多くの文脈を
必要とします。バグを診断済みで、OpenHandsにロジックを理解してもらいたい場合に特に役立ちます。
> 現在、`/subscribe`エンドポイントのemailフィールドが.ioドメインを拒否しています。これを修正してください。
> ./app.pyの`search_widgets`関数が大文字小文字を区別して検索を行っています。大文字小文字を区別しないように修正してください。
エージェントとバグを修正する際は、テスト駆動開発を行うと便利なことが多いです。
エージェントに新しいテストを書かせ、バグが修正されるまで反復することができます:
> `hello`関数が空文字列でクラッシュします。このバグを再現するテストを書いて、コードを修正してテストが通るようにしてください。
## その他
OpenHandsは、ほぼすべてのコーディングタスクを支援できます。しかし、最大限に
活用するには練習が必要です。以下の点を忘れないでください:
* タスクを小さく保つ
* できるだけ具体的に指定する
* できるだけ多くの文脈を提供する
* 頻繁にコミットとプッシュを行う
OpenHandsを最大限に活用する方法についての詳細なアドバイスは、[プロンプトのベストプラクティス](./prompting/prompting-best-practices)をご覧ください。

View File

@@ -0,0 +1,95 @@
# CLI モード
OpenHands は対話型の CLI モードで実行できます。これにより、ユーザーはコマンドラインから対話型セッションを開始できます。
このモードは、非対話型でスクリプティングに適した [ヘッドレスモード](headless-mode) とは異なります。
## Python を使用する場合
コマンドラインから対話型の OpenHands セッションを開始するには:
1. [開発セットアップの手順](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md) に従っていることを確認してください。
2. 以下のコマンドを実行します:
```bash
poetry run python -m openhands.core.cli
```
このコマンドを実行すると、タスクを入力して OpenHands からレスポンスを受け取ることができる対話型セッションが開始されます。
環境変数 [または `config.toml` ファイル](https://github.com/All-Hands-AI/OpenHands/blob/main/config.template.toml) を使用して、モデル、API キー、その他の設定を確実に設定する必要があります。
## Docker を使用する場合
Docker で OpenHands を CLI モードで実行するには:
1. ターミナルで以下の環境変数を設定します:
- `WORKSPACE_BASE` を OpenHands に編集させたいディレクトリに設定 (例: `export WORKSPACE_BASE=$(pwd)/workspace`)。
- `LLM_MODEL` を使用するモデルに設定 (例: `export LLM_MODEL="anthropic/claude-3-5-sonnet-20241022"`)。
- `LLM_API_KEY` を API キーに設定 (例: `export LLM_API_KEY="sk_test_12345"`)。
2. 以下の Docker コマンドを実行します:
```bash
docker run -it \
--pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik \
-e SANDBOX_USER_ID=$(id -u) \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-e LLM_API_KEY=$LLM_API_KEY \
-e LLM_MODEL=$LLM_MODEL \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
--add-host host.docker.internal:host-gateway \
--name openhands-app-$(date +%Y%m%d%H%M%S) \
docker.all-hands.dev/all-hands-ai/openhands:0.34 \
python -m openhands.core.cli
```
このコマンドを実行すると、Docker 内で対話型セッションが開始され、タスクを入力して OpenHands からレスポンスを受け取ることができます。
## CLI コマンドと期待される出力の例
CLI コマンドとその期待される出力の例を以下に示します:
### 例1: シンプルなタスク
```bash
>> "Hello, World!" と出力する Python スクリプトを書いてください
```
期待される出力:
```bash
🤖 はい! "Hello, World!" と出力する Python スクリプトは以下のようになります:
print("Hello, World!")
```
### 例2: Bash コマンド
```bash
>> "test_dir" という名前のディレクトリを作成してください
```
期待される出力:
```bash
🤖 "test_dir" という名前のディレクトリを作成します:
mkdir test_dir
```
### 例3: エラー処理
```bash
>> 存在しないファイルを削除してください
```
期待される出力:
```bash
🤖 エラーが発生しました。もう一度お試しください。
```

View File

@@ -0,0 +1,92 @@
# カスタムサンドボックス
サンドボックスは、エージェントがタスクを実行する場所です。コンピュータ上で直接コマンドを実行するこれはリスクがある可能性があります代わりに、エージェントはDockerコンテナ内でそれらを実行します。
デフォルトのOpenHandsサンドボックス[nikolaik/python-nodejs](https://hub.docker.com/r/nikolaik/python-nodejs)の`python-nodejs:python3.12-nodejs22`にはPythonやNode.jsなどのパッケージがインストールされていますが、デフォルトでインストールする必要のある他のソフトウェアがある場合があります。
カスタマイズには2つのオプションがあります:
- 必要なソフトウェアがインストールされている既存のイメージを使用する。
- 独自のカスタムDockerイメージを作成する。
最初のオプションを選択した場合は、`Dockerイメージの作成`セクションをスキップできます。
## Dockerイメージの作成
カスタムDockerイメージを作成するには、Debianベースである必要があります。
たとえば、OpenHandsに`ruby`をインストールしたい場合は、次の内容で`Dockerfile`を作成できます:
```dockerfile
FROM nikolaik/python-nodejs:python3.12-nodejs22
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y ruby
```
または、Ruby固有のベースイメージを使用することもできます:
```dockerfile
FROM ruby:latest
```
このファイルをフォルダに保存します。次に、ターミナルでフォルダに移動し、次のコマンドを実行して、Dockerイメージたとえば、custom-imageという名前をビルドします:
```bash
docker build -t custom-image .
```
これにより、`custom-image`という新しいイメージが作成され、Dockerで利用できるようになります。
## Dockerコマンドの使用
[dockerコマンド](/modules/usage/installation#start-the-app)を使用してOpenHandsを実行する場合は、`-e SANDBOX_RUNTIME_CONTAINER_IMAGE=...``-e SANDBOX_BASE_CONTAINER_IMAGE=<カスタムイメージ名>`に置き換えます:
```commandline
docker run -it --rm --pull=always \
-e SANDBOX_BASE_CONTAINER_IMAGE=custom-image \
...
```
## 開発ワークフローの使用
### セットアップ
まず、[Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md)の手順に従って、OpenHandsを実行できることを確認してください。
### ベースサンドボックスイメージの指定
OpenHandsディレクトリ内の`config.toml`ファイルで、`base_container_image`を使用するイメージに設定します。これは、すでにプルしたイメージまたは構築したイメージにすることができます:
```bash
[core]
...
[sandbox]
base_container_image="custom-image"
```
### その他の設定オプション
`config.toml`ファイルは、サンドボックスをカスタマイズするためのいくつかの他のオプションをサポートしています:
```toml
[core]
# ランタイムのビルド時に追加の依存関係をインストールする
# 有効なシェルコマンドを含めることができる
# これらのコマンドのいずれかでPythonインタープリターへのパスが必要な場合は、$OH_INTERPRETER_PATH変数を使用できる
runtime_extra_deps = """
pip install numpy pandas
apt-get update && apt-get install -y ffmpeg
"""
# ランタイムの環境変数を設定する
# ランタイムで使用可能である必要がある設定に役立つ
runtime_startup_env_vars = { DATABASE_URL = "postgresql://user:pass@localhost/db" }
# マルチアーキテクチャビルドのプラットフォームを指定する(例: "linux/amd64"または"linux/arm64"
platform = "linux/amd64"
```
### 実行
トップレベルのディレクトリで```make run```を実行して、OpenHandsを実行します。

View File

@@ -0,0 +1,69 @@
以下は、OpenHandsのデバッグに関する入門書です。開発目的で使用してください。
## サーバー / VSCode
以下の`launch.json`は、エージェント、コントローラー、サーバー要素のデバッグを可能にしますが、サンドボックスDockerの中で動作するはデバッグできません。`workspace/`ディレクトリ内の変更は無視されます。
```
{
"version": "0.2.0",
"configurations": [
{
"name": "OpenHands CLI",
"type": "debugpy",
"request": "launch",
"module": "openhands.core.cli",
"justMyCode": false
},
{
"name": "OpenHands WebApp",
"type": "debugpy",
"request": "launch",
"module": "uvicorn",
"args": [
"openhands.server.listen:app",
"--reload",
"--reload-exclude",
"${workspaceFolder}/workspace",
"--port",
"3000"
],
"justMyCode": false
}
]
}
```
より具体的なデバッグ設定では、より多くのパラメータを指定できます。
```
...
{
"name": "Debug CodeAct",
"type": "debugpy",
"request": "launch",
"module": "openhands.core.main",
"args": [
"-t",
"Ask me what your task is.",
"-d",
"${workspaceFolder}/workspace",
"-c",
"CodeActAgent",
"-l",
"llm.o1",
"-n",
"prompts"
],
"justMyCode": false
}
...
```
上記のスニペットの値は、以下のように更新できます。
* *t*: タスク
* *d*: openhandsワークスペースディレクトリ
* *c*: エージェント
* *l*: LLM設定config.tomlで事前定義
* *n*: セッション名eventstream名

View File

@@ -0,0 +1,277 @@
# 評価
このガイドでは、独自の評価ベンチマークをOpenHandsフレームワークに統合する方法の概要を説明します。
## 環境のセットアップとLLMの設定
ローカル開発環境のセットアップ方法については、[こちら](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md)の手順に従ってください。
開発モードのOpenHandsは、ほとんどの設定を追跡するために`config.toml`を使用します。
複数のLLMを定義して使用するために使用できる設定ファイルの例を以下に示します。
```toml
[llm]
# 重要: ここにAPIキーを追加し、モデルを評価したいものに設定してください
model = "claude-3-5-sonnet-20241022"
api_key = "sk-XXX"
[llm.eval_gpt4_1106_preview_llm]
model = "gpt-4-1106-preview"
api_key = "XXX"
temperature = 0.0
[llm.eval_some_openai_compatible_model_llm]
model = "openai/MODEL_NAME"
base_url = "https://OPENAI_COMPATIBLE_URL/v1"
api_key = "XXX"
temperature = 0.0
```
## コマンドラインでOpenHandsを使用する方法
OpenHandsは、以下の形式でコマンドラインから実行できます。
```bash
poetry run python ./openhands/core/main.py \
-i <max_iterations> \
-t "<task_description>" \
-c <agent_class> \
-l <llm_config>
```
例:
```bash
poetry run python ./openhands/core/main.py \
-i 10 \
-t "Write me a bash script that prints hello world." \
-c CodeActAgent \
-l llm
```
このコマンドは、以下の設定でOpenHandsを実行します:
- 最大10回の反復
- 指定されたタスクの説明
- CodeActAgentを使用
- `config.toml`ファイルの`llm`セクションで定義されたLLM設定
## OpenHandsの動作原理
OpenHandsのメインエントリーポイントは`openhands/core/main.py`にあります。簡略化された動作の流れは次のとおりです。
1. コマンドライン引数を解析し、設定を読み込む
2. `create_runtime()`を使用して実行時環境を作成する
3. 指定されたエージェントを初期化する
4. `run_controller()`を使用してコントローラーを実行する
- 実行時環境をエージェントにアタッチする
- エージェントのタスクを実行する
- 完了時に最終状態を返す
`run_controller()`関数は、OpenHandsの実行の中核です。エージェント、実行時環境、およびタスク間の相互作用を管理し、ユーザー入力シミュレーションやイベント処理などを処理します。
## 最も簡単な開始方法: 既存のベンチマークの探索
リポジトリの[`evaluation/benchmarks/`ディレクトリ](https://github.com/All-Hands-AI/OpenHands/blob/main/evaluation/benchmarks)にある様々な評価ベンチマークを確認することをお勧めします。
独自のベンチマークを統合するには、ニーズに最も近いものから始めることをお勧めします。このアプローチは、既存の構造を基にして特定の要件に適応させることで、統合プロセスを大幅に合理化できます。
## 評価ワークフローの作成方法
ベンチマークの評価ワークフローを作成するには、次の手順に従います。
1. 関連するOpenHandsユーティリティをインポートします:
```python
import openhands.agenthub
from evaluation.utils.shared import (
EvalMetadata,
EvalOutput,
make_metadata,
prepare_dataset,
reset_logger_for_multiprocessing,
run_evaluation,
)
from openhands.controller.state.state import State
from openhands.core.config import (
AppConfig,
SandboxConfig,
get_llm_config_arg,
parse_arguments,
)
from openhands.core.logger import openhands_logger as logger
from openhands.core.main import create_runtime, run_controller
from openhands.events.action import CmdRunAction
from openhands.events.observation import CmdOutputObservation, ErrorObservation
from openhands.runtime.runtime import Runtime
```
2. 設定を作成します:
```python
def get_config(instance: pd.Series, metadata: EvalMetadata) -> AppConfig:
config = AppConfig(
default_agent=metadata.agent_class,
runtime='docker',
max_iterations=metadata.max_iterations,
sandbox=SandboxConfig(
base_container_image='your_container_image',
enable_auto_lint=True,
timeout=300,
),
)
config.set_llm_config(metadata.llm_config)
return config
```
3. 実行時環境を初期化し、評価環境をセットアップします:
```python
def initialize_runtime(runtime: Runtime, instance: pd.Series):
# ここで評価環境をセットアップします
# 例えば、環境変数の設定、ファイルの準備など
pass
```
4. 各インスタンスを処理する関数を作成します:
```python
from openhands.utils.async_utils import call_async_from_sync
def process_instance(instance: pd.Series, metadata: EvalMetadata) -> EvalOutput:
config = get_config(instance, metadata)
runtime = create_runtime(config)
call_async_from_sync(runtime.connect)
initialize_runtime(runtime, instance)
instruction = get_instruction(instance, metadata)
state = run_controller(
config=config,
task_str=instruction,
runtime=runtime,
fake_user_response_fn=your_user_response_function,
)
# エージェントのアクションを評価する
evaluation_result = await evaluate_agent_actions(runtime, instance)
return EvalOutput(
instance_id=instance.instance_id,
instruction=instruction,
test_result=evaluation_result,
metadata=metadata,
history=compatibility_for_eval_history_pairs(state.history),
metrics=state.metrics.get() if state.metrics else None,
error=state.last_error if state and state.last_error else None,
)
```
5. 評価を実行します:
```python
metadata = make_metadata(llm_config, dataset_name, agent_class, max_iterations, eval_note, eval_output_dir)
output_file = os.path.join(metadata.eval_output_dir, 'output.jsonl')
instances = prepare_dataset(your_dataset, output_file, eval_n_limit)
await run_evaluation(
instances,
metadata,
output_file,
num_workers,
process_instance
)
```
このワークフローでは、設定をセットアップし、実行時環境を初期化し、エージェントを実行して各インスタンスのアクションを評価し、結果を`EvalOutput`オブジェクトに収集します。`run_evaluation`関数は、並列化と進捗状況の追跡を処理します。
`get_instruction`、`your_user_response_function`、および`evaluate_agent_actions`関数は、特定のベンチマークの要件に応じてカスタマイズすることを忘れないでください。
この構造に従うことで、OpenHandsフレームワーク内で独自のベンチマークの堅牢な評価ワークフローを作成できます。
## `user_response_fn`の理解
`user_response_fn`は、OpenHandsの評価ワークフローにおいて重要な役割を果たします。これは、評価プロセス中にエージェントとのユーザー対話をシミュレートし、自動化された応答を可能にします。この関数は、エージェントのクエリやアクションに対して一貫性のある事前定義された応答を提供したい場合に特に役立ちます。
### ワークフローと相互作用
アクションと`user_response_fn`を処理するための正しいワークフローは次のとおりです。
1. エージェントがタスクを受け取り、処理を開始する
2. エージェントがアクションを発行する
3. アクションが実行可能な場合(CmdRunAction、IPythonRunCellActionなど):
- 実行時環境がアクションを処理する
- 実行時環境が観測結果を返す
4. アクションが実行不可能な場合(通常はMessageAction):
- `user_response_fn`が呼び出される
- シミュレートされたユーザー応答を返す
5. エージェントは、観測結果またはシミュレートされた応答のいずれかを受け取る
6. ステップ2〜5が、タスクが完了するか最大反復回数に達するまで繰り返される
より正確な視覚的表現は次のとおりです。
```
[Agent]
|
v
[Emit Action]
|
v
[Is Action Executable?]
/ \
Yes No
| |
v v
[Runtime] [user_response_fn]
| |
v v
[Return Observation] [Simulated Response]
\ /
\ /
v v
[Agent receives feedback]
|
v
[Continue or Complete Task]
```
このワークフローでは:
- 実行可能なアクション(コマンドの実行やコードの実行など)は、実行時環境によって直接処理される
- 実行不可能なアクション(通常、エージェントがコミュニケーションを取ったり、明確化を求めたりする場合)は、`user_response_fn`によって処理される
- エージェントは、実行時環境からの観測結果または`user_response_fn`からのシミュレートされた応答のいずれかのフィードバックを処理する
このアプローチにより、具体的なアクションとシミュレートされたユーザー対話の両方を自動的に処理できるため、人的介入を最小限に抑えてエージェントのタスク完了能力をテストしたい評価シナリオに適しています。
### 実装例
SWE-Benchの評価で使用される`user_response_fn`の例を以下に示します。
```python
def codeact_user_response(state: State | None) -> str:
msg = (
'Please continue working on the task on whatever approach you think is suitable.\n'
'If you think you have solved the task, please first send your answer to user through message and then <execute_bash> exit </execute_bash>.\n'
'IMPORTANT: YOU SHOULD NEVER ASK FOR HUMAN HELP.\n'
)
if state and state.history:
# check if the agent has tried to talk to the user 3 times, if so, let the agent know it can give up
user_msgs = [
event
for event in state.history
if isinstance(event, MessageAction) and event.source == 'user'
]
if len(user_msgs) >= 2:
# let the agent know that it can give up when it has tried 3 times
return (
msg
+ 'If you want to give up, run: <execute_bash> exit </execute_bash>.\n'
)
return msg
```
この関数は次のことを行います。
1. エージェントに作業を続けるよう促す標準メッセージを提供する
2. エージェントがユーザーとのコミュニケーションを試みた回数をチェックする
3. エージェントが複数回試行した場合、諦めるオプションを提供する
この関数を使用することで、複数の評価実行全体で一貫した動作を確保し、エージェントが人間の入力を待って停止するのを防ぐことができます。

View File

@@ -0,0 +1,50 @@
# OpenHands GitHub Actionの使用方法
このガイドでは、OpenHands自体のリポジトリ内および独自のプロジェクトの両方で、OpenHands GitHub Actionを使用する方法について説明します。
## OpenHands リポジトリ内でのActionの使用
リポジトリ内でOpenHands GitHub Actionを使用するには、以下の手順を実行します。
1. リポジトリ内にissueを作成します。
2. issueに`fix-me`ラベルを追加するか、`@openhands-agent`で始まるコメントをissueに残します。
アクションは自動的にトリガーされ、issueの解決を試みます。
## 新しいリポジトリへのActionのインストール
独自のリポジトリにOpenHands GitHub Actionをインストールするには、[OpenHands Resolverの README](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/resolver/README.md)に従ってください。
## 使用のヒント
### 反復的な解決
1. リポジトリ内にissueを作成します。
2. issueに`fix-me`ラベルを追加するか、`@openhands-agent`で始まるコメントを残します。
3. プルリクエストを確認して、issueを解決する試みをレビューします。
4. 一般的なコメント、レビューコメント、またはインラインスレッドコメントを通じてフィードバックをフォローアップします。
5. プルリクエストに`fix-me`ラベルを追加するか、`@openhands-agent`で始まる特定のコメントに対処します。
### ラベルとマクロ
- ラベル(`fix-me`OpenHandsに**全体の** issueまたはプルリクエストへの対処を要求します。
- マクロ(`@openhands-agent`OpenHandsにissue/プルリクエストの説明と**特定のコメント**のみを考慮するように要求します。
## 高度な設定
### カスタムリポジトリ設定の追加
[resolverのREADME](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/resolver/README.md#providing-custom-instructions)に従って、OpenHandsにカスタムの指示を提供できます。
### カスタム構成
GitHub resolverは、自動的に有効な[リポジトリシークレット](https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions?tool=webui#creating-secrets-for-a-repository)または[リポジトリ変数](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#creating-configuration-variables-for-a-repository)をチェックして、その動作をカスタマイズします。
設定可能なカスタマイズオプションは次のとおりです。
| **属性名** | **タイプ** | **目的** | **例** |
| -------------------------------- | -------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| `LLM_MODEL` | Variable | OpenHandsで使用するLLMを設定 | `LLM_MODEL="anthropic/claude-3-5-sonnet-20241022"` |
| `OPENHANDS_MAX_ITER` | Variable | エージェントの反復の最大制限を設定 | `OPENHANDS_MAX_ITER=10` |
| `OPENHANDS_MACRO` | Variable | リゾルバを呼び出すためのデフォルトマクロをカスタマイズ | `OPENHANDS_MACRO=@resolveit` |
| `OPENHANDS_BASE_CONTAINER_IMAGE` | Variable | カスタムSandbox[詳細](https://docs.all-hands.dev/modules/usage/how-to/custom-sandbox-guide) | `OPENHANDS_BASE_CONTAINER_IMAGE="custom_image"` |
| `TARGET_BRANCH` | Variable | `main`以外のブランチにマージ | `TARGET_BRANCH="dev"` |

View File

@@ -0,0 +1,160 @@
# GUIモード
OpenHandsは、AI アシスタントとやり取りするためのグラフィカルユーザーインターフェースGUIモードを提供しています。
## インストールとセットアップ
1. インストール手順に従って、OpenHandsをインストールします。
2. コマンドを実行した後、[http://localhost:3000](http://localhost:3000)でOpenHandsにアクセスします。
## GUIでのやり取り
### 初期設定
1. 初回起動時に、設定ページが表示されます。
2. ドロップダウンメニューから`LLM Provider``LLM Model`を選択します。必要なモデルがリストにない場合は、`Advanced`オプションを切り替えて、正しいプレフィックスを付けて`Custom Model`テキストボックスに入力します。
3. 選択したプロバイダーに対応する`API Key`を入力します。
4. `Save Changes`をクリックして設定を適用します。
### バージョン管理トークン
OpenHandsは複数のバージョン管理プロバイダーをサポートしています。複数のプロバイダーのトークンを同時に設定できます。
#### GitHubトークンの設定
OpenHandsは、利用可能な場合、自動的に`GITHUB_TOKEN`をシェル環境にエクスポートします。これは2つの方法で行われます。
**ローカルインストール**: ユーザーが直接GitHubトークンを入力します。
<details>
<summary>GitHubトークンの設定</summary>
1. **Personal Access TokenPATの生成**:
- GitHubで、Settings > Developer Settings > Personal Access Tokens > Tokens (classic)に移動します。
- **New token (classic)**
- 必要なスコープ:
- `repo`(プライベートリポジトリの完全な制御)
- **Fine-Grained Tokens**
- All Repositories特定のリポジトリを選択できますが、これはリポジトリ検索の結果に影響します
- Minimal Permissions検索用に**Meta Data = Read-only**を選択し、ブランチ作成用に**Pull Requests = Read and Write**、**Content = Read and Write**を選択します)
2. **OpenHandsにトークンを入力**:
- 設定ボタン(歯車アイコン)をクリックします。
- `Git Provider Settings`セクションに移動します。
- `GitHub Token`フィールドにトークンを貼り付けます。
- `Save Changes`をクリックして変更を適用します。
</details>
<details>
<summary>組織のトークンポリシー</summary>
組織のリポジトリを使用する場合は、追加の設定が必要になる場合があります。
1. **組織の要件を確認**:
- 組織の管理者は、特定のトークンポリシーを適用することがあります。
- 一部の組織では、SSOを有効にしてトークンを作成する必要があります。
- 組織の[トークンポリシー設定](https://docs.github.com/en/organizations/managing-programmatic-access-to-your-organization/setting-a-personal-access-token-policy-for-your-organization)を確認してください。
2. **組織へのアクセスを確認**:
- GitHubのトークン設定に移動します。
- `Organization access`の下で組織を探します。
- 必要に応じて、組織の横にある`Enable SSO`をクリックします。
- SSOの認証プロセスを完了します。
</details>
<details>
<summary>トラブルシューティング</summary>
一般的な問題と解決策:
- **トークンが認識されない**:
- トークンが設定に正しく保存されていることを確認します。
- トークンの有効期限が切れていないことを確認します。
- トークンに必要なスコープがあることを確認します。
- トークンを再生成してみてください。
- **組織へのアクセスが拒否された**:
- SSOが必要だが有効になっていないかどうかを確認します。
- 組織のメンバーシップを確認します。
- トークンポリシーがアクセスをブロックしている場合は、組織の管理者に連絡してください。
- **トークンが機能することを確認**:
- トークンが有効な場合、アプリにグリーンのチェックマークが表示されます。
- リポジトリにアクセスして、権限を確認してみてください。
- ブラウザのコンソールでエラーメッセージを確認してください。
</details>
**OpenHands Cloud**: トークンはGitHub OAuth認証を通じて取得されます。
<details>
<summary>OAuth認証</summary>
OpenHands Cloudを使用する場合、GitHub OAuthフローは以下の権限を要求します:
- リポジトリアクセス(読み取り/書き込み)
- ワークフロー管理
- 組織の読み取りアクセス
OpenHandsを認証するには:
- プロンプトが表示されたら、`Sign in with GitHub`をクリックします。
- 要求された権限を確認します。
- OpenHandsがGitHubアカウントにアクセスすることを承認します。
- 組織を使用している場合は、プロンプトが表示されたら組織へのアクセスを承認します。
</details>
#### GitLabトークンの設定
OpenHandsは、利用可能な場合、ローカルインストールのみ、自動的に`GITLAB_TOKEN`をシェル環境にエクスポートします。
<details>
<summary>GitLabトークンの設定</summary>
1. **Personal Access TokenPATの生成**:
- GitLabで、User Settings > Access Tokensに移動します。
- 以下のスコープを持つ新しいトークンを作成します:
- `api`APIアクセス
- `read_user`(ユーザー情報の読み取り)
- `read_repository`(リポジトリ読み取り)
- `write_repository`(リポジトリ書き込み)
- 有効期限を設定するか、無期限トークンの場合は空白のままにします。
2. **OpenHandsにトークンを入力**:
- 設定ボタン(歯車アイコン)をクリックします。
- `Git Provider Settings`セクションに移動します。
- `GitLab Token`フィールドにトークンを貼り付けます。
- セルフホスト型GitLabを使用している場合は、GitLabインスタンスのURLを入力します。
- `Save Changes`をクリックして変更を適用します。
</details>
<details>
<summary>トラブルシューティング</summary>
一般的な問題と解決策:
- **トークンが認識されない**:
- トークンが設定に正しく保存されていることを確認します。
- トークンの有効期限が切れていないことを確認します。
- トークンに必要なスコープがあることを確認します。
- セルフホスト型インスタンスの場合は、正しいインスタンスURLを確認します。
- **アクセスが拒否された**:
- プロジェクトのアクセス権限を確認します。
- トークンに必要なスコープがあるかどうかを確認します。
- グループ/組織のリポジトリの場合は、適切なアクセス権があることを確認します。
</details>
### 高度な設定
1. 設定ページ内で、`Advanced`オプションを切り替えて追加の設定にアクセスします。
2. `Custom Model`テキストボックスを使用して、リストにないモデルを手動で入力します。
3. LLMプロバイダーで必要な場合は、`Base URL`を指定します。
### AIとのやり取り
1. 入力ボックスにプロンプトを入力します。
2. 送信ボタンをクリックするか、Enterキーを押してメッセージを送信します。
3. AIは入力を処理し、チャットウィンドウに応答を提供します。
4. フォローアップの質問をしたり、追加情報を提供したりして、会話を続けることができます。
## 効果的な使用のためのヒント
- [プロンプトのベストプラクティス](../prompting/prompting-best-practices)で説明されているように、要求を具体的にすることで、最も正確で役立つ応答を得ることができます。
- ワークスペースパネルを使用して、プロジェクト構造を探索します。
- [LLMsセクション](usage/llms/llms.md)で説明されているように、推奨モデルの1つを使用します。
OpenHandsのGUIモードは、AIアシスタントとのやり取りをできるだけスムーズで直感的にすることを目的としています。生産性を最大限に高めるために、ぜひその機能を探ってみてください。

View File

@@ -0,0 +1,55 @@
# ヘッドレスモード
OpenHandsは、Webアプリケーションを起動せずに、単一のコマンドで実行できます。
これにより、OpenHandsを使用してスクリプトを作成したり、タスクを自動化したりするのが簡単になります。
これは、インタラクティブで、アクティブな開発に適した[CLIモード](cli-mode)とは異なります。
## Pythonを使用する場合
PythonでOpenHandsをヘッドレスモードで実行するには:
1. [開発セットアップの手順](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md)に従っていることを確認してください。
2. 以下のコマンドを実行します:
```bash
poetry run python -m openhands.core.main -t "write a bash script that prints hi"
```
モデル、APIキー、その他の設定は、環境変数[または`config.toml`ファイル](https://github.com/All-Hands-AI/OpenHands/blob/main/config.template.toml)を介して設定する必要があります。
## Dockerを使用する場合
DockerでOpenHandsをヘッドレスモードで実行するには:
1. ターミナルで以下の環境変数を設定します:
- `WORKSPACE_BASE`をOpenHandsが編集するディレクトリに設定 (例: `export WORKSPACE_BASE=$(pwd)/workspace`)。
- `LLM_MODEL`を使用するモデルに設定 (例: `export LLM_MODEL="anthropic/claude-3-5-sonnet-20241022"`)。
- `LLM_API_KEY`をAPIキーに設定 (例: `export LLM_API_KEY="sk_test_12345"`)。
2. 以下のDockerコマンドを実行します:
```bash
docker run -it \
--pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.34-nikolaik \
-e SANDBOX_USER_ID=$(id -u) \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-e LLM_API_KEY=$LLM_API_KEY \
-e LLM_MODEL=$LLM_MODEL \
-e LOG_ALL_EVENTS=true \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
--add-host host.docker.internal:host-gateway \
--name openhands-app-$(date +%Y%m%d%H%M%S) \
docker.all-hands.dev/all-hands-ai/openhands:0.34 \
python -m openhands.core.main -t "write a bash script that prints hi"
```
## 高度なヘッドレス設定
ヘッドレスモードで利用可能なすべての設定オプションを表示するには、`--help`フラグを付けてPythonコマンドを実行します。
### 追加のログ
ヘッドレスモードでエージェントのすべてのアクションをログに記録するには、ターミナルで`export LOG_ALL_EVENTS=true`を実行します。

View File

@@ -0,0 +1,18 @@
# Persistance des données de session
Avec l'installation standard, les données de session sont stockées en mémoire. Actuellement, si le service OpenHands est redémarré,
les sessions précédentes deviennent invalides (un nouveau secret est généré) et ne sont donc pas récupérables.
## Comment persister les données de session
### Workflow de développement
Dans le fichier `config.toml`, spécifiez ce qui suit :
```
[core]
...
file_store="local"
file_store_path="/absolute/path/to/openhands/cache/directory"
jwt_secret="secretpass"
```

View File

@@ -0,0 +1,55 @@
# OpenHandsの実行
## システム要件
* Docker バージョン26.0.0+またはDocker Desktop 4.31.0+
* LinuxまたはMac OSを使用する必要があります
* Windowsを使用している場合は、[WSL](https://learn.microsoft.com/en-us/windows/wsl/install)を使用する必要があります
## アプリケーションの起動
OpenHandsを実行する最も簡単な方法は、Dockerを使用することです。
```bash
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.29-nikolaik
docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.29-nikolaik \
-e LOG_ALL_EVENTS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.29
```
また、[ヘッドレススクリプトモード](https://docs.all-hands.dev/modules/usage/how-to/headless-mode)、[対話型CLI](https://docs.all-hands.dev/modules/usage/how-to/cli-mode)、または[OpenHands GitHub Action](https://docs.all-hands.dev/modules/usage/how-to/github-action)としても実行できます。
## 設定
上記のコマンドを実行すると、OpenHandsは[http://localhost:3000](http://localhost:3000)で動作します。
OpenHandsを起動すると、設定モーダルウィンドウが表示されます。`LLMプロバイダー`と`LLMモデル`を選択し、対応する`APIキー`を入力する**必要があります**。
これらの設定は、UIの`設定`ボタン(歯車アイコン)を選択することでいつでも変更できます。
必要な`LLMモデル`がリストに存在しない場合は、`詳細オプション`を有効にして、
`カスタムモデル`テキストボックスに適切なプレフィックスを付けて手動で入力できます。
`詳細オプション`では、必要に応じて`ベースURL`も指定できます。
<div style={{ display: 'flex', justifyContent: 'center', gap: '20px' }}>
<img src="/img/settings-screenshot.png" alt="settings-modal" width="340" />
<img src="/img/settings-advanced.png" alt="settings-modal" width="335" />
</div>
## バージョン
上記のコマンドは、OpenHandsの最新の安定版を取得します。他のオプションもあります
- 特定のバージョンを使用する場合は、`docker.all-hands.dev/all-hands-ai/openhands:$VERSION`を使用し、$VERSIONをバージョン番号に置き換えてください。
- semverを使用しており、メジャー、マイナー、パッチバージョンのタグを公開しています。したがって、`0.9`は最新の`0.9.x`バージョンを、`0`は最新の`0.x.x`バージョンを指します。
- 最新の開発バージョンを使用する場合は、`docker.all-hands.dev/all-hands-ai/openhands:main`を使用できます。このバージョンは不安定で、テストまたは開発目的でのみ推奨されます。
安定性要件と必要な機能に応じて、最適なタグを選択できます。
開発ワークフローについては、[Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md)を参照してください。
問題がありますか?[トラブルシューティングガイド](https://docs.all-hands.dev/modules/usage/troubleshooting)をご確認ください。

View File

@@ -0,0 +1,109 @@
---
sidebar_position: 1
---
# 💻 OpenHands
OpenHandsは、複雑なエンジニアリングタスクを実行し、ソフトウェア開発プロジェクトでユーザーと積極的に協力できる**自律型AIソフトウェアエンジニア**です。
このプロジェクトは完全にオープンソースなので、自由に使用・改変することができます。
:::tip
OpenHandsのソースコードを[GitHub](https://github.com/All-Hands-AI/OpenHands)で確認するか、コミュニティに参加してください!
<a href="https://github.com/All-Hands-AI/OpenHands/graphs/contributors">
<img
src="https://img.shields.io/github/contributors/All-Hands-AI/OpenHands?style=for-the-badge"
alt="Contributors"
/>
</a>
<a href="https://github.com/All-Hands-AI/OpenHands/network/members">
<img
src="https://img.shields.io/github/forks/All-Hands-AI/OpenHands?style=for-the-badge"
alt="Forks"
/>
</a>
<a href="https://github.com/All-Hands-AI/OpenHands/stargazers">
<img
src="https://img.shields.io/github/stars/All-Hands-AI/OpenHands?style=for-the-badge"
alt="Stargazers"
/>
</a>
<a href="https://github.com/All-Hands-AI/OpenHands/issues">
<img
src="https://img.shields.io/github/issues/All-Hands-AI/OpenHands?style=for-the-badge"
alt="Issues"
/>
</a>
<br></br>
<a href="https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE">
<img
src="https://img.shields.io/github/license/All-Hands-AI/OpenHands?style=for-the-badge"
alt="MIT License"
/>
</a>
<br></br>
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-2ngejmfw6-9gW4APWOC9XUp1n~SiQ6iw">
<img
src="https://img.shields.io/badge/Slack-Join%20Us-red?logo=slack&logoColor=white&style=for-the-badge"
alt="Slackコミュニティに参加"
/>
</a>
<a href="https://discord.gg/ESHStjSjD4">
<img
src="https://img.shields.io/badge/Discord-Join%20Us-purple?logo=discord&logoColor=white&style=for-the-badge"
alt="Discordコミュニティに参加"
/>
</a>
:::
## 🛠️ はじめに
OpenHandsを実行する最も簡単な方法は、Dockerコンテナ内で実行することです。最新バージョンのDocker`26.0.0`)で最もよく動作します。
Linux、Mac OS、またはWindows上のWSLを使用する必要があります。
OpenHandsをDockerコンテナで起動するには、ターミナルで以下のコマンドを実行します
:::warning
以下のコマンドを実行すると、`./workspace`内のファイルが変更または削除される可能性があります。
:::
```bash
WORKSPACE_BASE=$(pwd)/workspace
docker run -it \
--pull=always \
-e SANDBOX_USER_ID=$(id -u) \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app-$(date +%Y%m%d%H%M%S) \
ghcr.io/all-hands-ai/openhands:main
```
OpenHandsは[http://localhost:3000](http://localhost:3000)で動作し、`./workspace`にアクセスできます。OpenHandsにコードを操作させるには、そのコードを`./workspace`に配置してください。
OpenHandsはこのワークスペースフォルダにのみアクセスできます。Dockerの安全なサンドボックス内で実行されるため、システムの他の部分には影響を与えません。
:::tip
最新の**(不安定!)**バージョンを使用したい場合は、イメージとして`ghcr.io/all-hands-ai/openhands:main`を使用できます(最後の行)。
:::
開発ワークフローについては、[Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md)を参照してください。
問題がありますか?[トラブルシューティングガイド](https://docs.all-hands.dev/modules/usage/troubleshooting)をご確認ください。
:::warning
OpenHandsは現在開発中ですが、アルファ版を実行してエンドツーエンドのシステムを動作させることができます。
:::
[contributors-shield]: https://img.shields.io/github/contributors/All-Hands-AI/OpenHands?style=for-the-badge
[contributors-url]: https://github.com/All-Hands-AI/OpenHands/graphs/contributors
[forks-shield]: https://img.shields.io/github/forks/All-Hands-AI/OpenHands?style=for-the-badge
[forks-url]: https://github.com/All-Hands-AI/OpenHands/network/members
[stars-shield]: https://img.shields.io/github/stars/All-Hands-AI/OpenHands?style=for-the-badge
[stars-url]: https://github.com/All-Hands-AI/OpenHands/stargazers
[issues-shield]: https://img.shields.io/github/issues/All-Hands-AI/OpenHands?style=for-the-badge
[issues-url]: https://github.com/All-Hands-AI/OpenHands/issues
[license-shield]: https://img.shields.io/github/license/All-Hands-AI/OpenHands?style=for-the-badge
[license-url]: https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE

View File

@@ -0,0 +1,72 @@
# 主な機能
![overview](https://www.all-hands.dev/assets/product/product-slide-1.webp)
## 1. ワークスペース
ワークスペース機能は、以下の主要な機能を備えた包括的な開発環境を提供します:
* ファイルエクスプローラー:プロジェクトのファイルとディレクトリの閲覧、表示、管理
* プロジェクト管理:異なるプロジェクトのインポート、作成、ナビゲーション
* 統合開発ツール:様々な開発ワークフローとのシームレスな統合
* ファイル操作:
* ファイル内容の表示
* 新規ファイルとフォルダの作成
* ファイルのアップロードとダウンロード
* 基本的なファイル操作
## 2. Jupyterートブック
Jupyterートブック機能は、インタラクティブなコーディングとデータ分析環境を提供します
* インタラクティブなコードセルセルベースのインターフェースでPythonコードを実行
* 入出力の追跡:コード入力とその出力の履歴を保持
* 永続的なセッション:セル間でコード実行コンテキストを保持
* 様々なPython操作とデータ分析タスクをサポート
* リアルタイムのコード実行と結果の可視化
## 3. ブラウザ(ベータ)
ブラウザ機能は、Web操作機能を提供します
* Webページナビゲーションアプリケーション内でウェブサイトを開いて閲覧
* スクリーンショット取得Webページのスクリーンショットを自動生成
* インタラクション機能:
* 要素のクリック
* フォームの入力
* ページのスクロール
* Web内容のナビゲーション
* 15種類のブラウザ操作機能をサポート
## 4. ターミナル
ターミナル機能は、アプリケーション内でコマンドラインインターフェースを提供します:
* シェルコマンドの実行bashとシステムコマンドを実行
* コマンド履歴:過去のコマンドを追跡して呼び出し
* 環境との対話:システムのコマンドラインと直接対話
* 様々なプログラミングとシステム管理タスクをサポート
## 5. チャット / AI会話
チャットインターフェースは、AIを活用した会話体験を提供します
* インタラクティブなAIアシスタント自然言語での会話に参加
* コンテキストを理解した応答:開発関連の質問を理解して応答
* アクション提案:タスクに対する実行可能な推奨事項を提供
* 会話管理:異なる会話スレッドの作成、削除、管理
## 6. アプリケーション(ベータ)
メインアプリケーションインターフェースは、これらすべての機能を統合します:
* 統合ワークスペースワークスペース、ブラウザ、ターミナル、AIチャットのシームレスな統合
* カスタマイズ可能なレイアウト:異なる機能パネルの配置をカスタマイズ
* 状態管理:異なる機能間でコンテキストと状態を維持
* セキュリティとプライバシー制御:アプリケーションの設定と権限を管理
### 追加情報
* アプリケーションは現在ベータ版で、継続的な改善と機能追加が行われています
* 様々な開発ワークフローとAIアシストコーディングをサポート
* 統合ツールとAIアシスタンスを通じて開発者の生産性を向上するように設計

View File

@@ -0,0 +1,82 @@
# 🤖 LLMバックエンド
OpenHandsは、LiteLLMがサポートするすべてのLLMに接続できます。ただし、機能するには強力なモデルが必要です。
## モデルの推奨事項
コーディングタスクに対する言語モデルの評価SWE-benchデータセットを使用に基づいて、モデル選択に関するいくつかの推奨事項を提供できます。分析の一部は、[LLMを比較したこのブログ記事](https://www.all-hands.dev/blog/evaluation-of-llms-as-coding-agents-on-swe-bench-at-30x-speed)と[より最近の結果を含むこのブログ記事](https://www.all-hands.dev/blog/openhands-codeact-21-an-open-state-of-the-art-software-development-agent)で確認できます。
モデルを選択する際は、出力の品質とコストの両方を考慮してください。結果の要約は以下の通りです:
* Claude 3.5 Sonnetが圧倒的に優れており、OpenHandsのデフォルトエージェントでSWE-Bench Verifiedの53%の解決率を達成しています。
* GPT-4oは遅れを取っており、o1-miniは実際にGPT-4oよりもわずかに低いパフォーマンスを示しました。結果を少し分析したところ、o1は時々「考えすぎ」て、タスクを完了できるのに追加の環境設定タスクを実行していたようです。
* 最後に、最も強力なオープンモデルはLlama 3.1 405 BとDeepseek-v2.5で、合理的なパフォーマンスを示し、一部のクローズドモデルを上回りました。
詳細については、[完全な記事](https://www.all-hands.dev/blog/evaluation-of-llms-as-coding-agents-on-swe-bench-at-30x-speed)を参照してください。
これらの結果とコミュニティからのフィードバックに基づいて、以下のモデルがOpenHandsで合理的に機能することが確認されています
* claude-3-5-sonnet推奨
* gpt-4 / gpt-4o
* llama-3.1-405b
* deepseek-v2.5
:::warning prudence
OpenHandsは、設定したLLMに多くのプロンプトを送信します。これらのLLMのほとんどは有料なので、支出制限を設定し、使用状況を監視してください。
:::
リストにない特定のLLMでOpenHandsの実行に成功した場合は、検証済みリストに追加してください。また、同じプロバイダーとLLMを使用する他のユーザーを支援するため、設定プロセスを共有するPRを開くことをお勧めします
利用可能なプロバイダーとモデルの完全なリストについては、[litellmのドキュメント](https://docs.litellm.ai/docs/providers)を参照してください。
:::note remarque
現在のほとんどのローカルおよびオープンソースモデルは、それほど強力ではありません。このようなモデルを使用する場合、メッセージ間の長い待機時間、品質の低い応答、または不正なJSONに関するエラーが発生する可能性があります。OpenHandsは、それを駆動するモデルと同じくらい強力にしかなりません。ただし、機能するモデルを見つけた場合は、上記の検証済みリストに追加してください。
:::
## LLM設定
以下の項目は、OpenHandsのUIで設定メニューから設定できます
* `LLMプロバイダー`
* `LLMモデル`
* `APIキー`
* `ベースURL``詳細設定`から)
一部のLLM/プロバイダーで必要となる可能性があるが、UIでは設定できないパラメータがあります。これらは代わりに、[docker runコマンド](./installation#start-the-app)に`-e`を使用して環境変数として渡すことができます:
* `LLM_API_VERSION`
* `LLM_EMBEDDING_MODEL`
* `LLM_EMBEDDING_DEPLOYMENT_NAME`
* `LLM_DROP_PARAMS`
* `LLM_DISABLE_VISION`
* `LLM_CACHING_PROMPT`
特定のモデルプロバイダーでOpenHandsを実行するためのガイドがいくつかあります
* [Azure](./llms/azure-llms)
* [Google](./llms/google-llms)
* [Groq](./llms/groq)
* [LiteLLM Proxy](./llms/litellm-proxy)
* [OpenAI](./llms/openai-llms)
* [OpenRouter](./llms/openrouter)
### APIリトライとレート制限
LLMプロバイダーは通常、レート制限を持っており、時には非常に低い制限で、リトライが必要になる場合があります。OpenHandsは、レート制限エラーエラーコード429、API接続エラー、またはその他の一時的なエラーを受信した場合、自動的にリクエストを再試行します。
使用しているプロバイダーのニーズに応じて、これらのオプションをカスタマイズできます。プロバイダーのドキュメントを確認し、以下の環境変数を設定してリトライ回数とリトライ間の待機時間を制御してください:
* `LLM_NUM_RETRIES`デフォルト8
* `LLM_RETRY_MIN_WAIT`デフォルト15秒
* `LLM_RETRY_MAX_WAIT`デフォルト120秒
* `LLM_RETRY_MULTIPLIER`デフォルト2
OpenHandsを開発モードで実行している場合、これらのオプションを`config.toml`ファイルで設定することもできます:
```toml
[llm]
num_retries = 8
retry_min_wait = 15
retry_max_wait = 120
retry_multiplier = 2
```

View File

@@ -0,0 +1,38 @@
# Azure
OpenHands は LiteLLM を使用して Azure のチャットモデルを呼び出します。Azure をプロバイダとして使用する方法については、[こちら](https://docs.litellm.ai/docs/providers/azure)のドキュメントをご覧ください。
## Azure OpenAI 設定
OpenHands を実行する際には、以下の環境変数を [docker run コマンド](../installation#running-openhands) で `-e` を使用して設定する必要があります。
```
LLM_API_VERSION="<api-version>" # 例: "2023-05-15"
```
例:
```bash
docker run -it --pull=always \
-e LLM_API_VERSION="2023-05-15"
...
```
その後、OpenHands UI の設定で以下を行います。
:::note
Azure の deployments ページで ChatGPT のデプロイメント名を確認する必要があります。以下では &lt;deployment-name&gt; と表記しています。
:::
1. `Advanced` オプションを有効にします。
2. 以下を設定します:
- `Custom Model` を azure/&lt;deployment-name&gt; に設定
- `Base URL` を Azure API の Base URL に設定 (例: `https://example-endpoint.openai.azure.com`)
- `API Key` を Azure API キーに設定
### Azure OpenAI 設定
OpenHands を実行する際には、以下の環境変数を [docker run コマンド](../installation#running-openhands) で `-e` を使用して設定します。
```
LLM_API_VERSION="<api-version>" # 例: "2024-02-15-preview"
```

View File

@@ -0,0 +1,37 @@
# Azure OpenAI LLM
## 補完
OpenHandsはLiteLLMを使用して補完リクエストを行います。Azureに関するドキュメントは[こちら](https://docs.litellm.ai/docs/providers/azure)にあります。
### Azure OpenAI の設定
OpenHands Dockerイメージを実行する際には、以下の環境変数を `-e` を使用して設定する必要があります:
```
LLM_BASE_URL="<azure-api-base-url>" # 例: "https://openai-gpt-4-test-v-1.openai.azure.com/"
LLM_API_KEY="<azure-api-key>"
LLM_MODEL="azure/<your-gpt-deployment-name>"
LLM_API_VERSION = "<api-version>" # 例: "2024-02-15-preview"
```
:::note
ChatGPTデプロイメント名は、Azureのデプロイメントページで確認できます。デフォルトまたは初期状態では、チャットモデル名例えば'GPT4-1106-preview'と同じ場合がありますが、必ずしもそうである必要はありません。OpenHandsを実行し、ブラウザに読み込まれたら、設定に移動し、モデルを次のように設定します"azure/&lt;your-actual-gpt-deployment-name&gt;"。リストにない場合は、独自のテキストを入力して保存します。
:::
## Embeddings
OpenHandsはllama-indexを使用してembeddingsを生成します。Azureに関するドキュメントは[こちら](https://docs.llamaindex.ai/en/stable/api_reference/embeddings/azure_openai/)にあります。
### Azure OpenAI の設定
Azure OpenAI embeddingsで使用されるモデルは "text-embedding-ada-002" です。
Azureアカウントでこのモデルの正しいデプロイメント名が必要です。
DockerでOpenHandsを実行する際には、以下の環境変数を `-e` を使用して設定してください:
```
LLM_EMBEDDING_MODEL="azureopenai"
LLM_EMBEDDING_DEPLOYMENT_NAME = "<your-embedding-deployment-name>" # 例: "TextEmbedding...<etc>"
LLM_API_VERSION = "<api-version>" # 例: "2024-02-15-preview"
```

View File

@@ -0,0 +1,106 @@
# カスタムLLM設定
OpenHandsでは、`config.toml`ファイルで複数の名前付きLLM設定を定義できます。この機能により、高品質な応答が不要なタスクには低コストのモデルを使用したり、特定のエージェントに対して異なるパラメータを持つ異なるモデルを使用したりするなど、異なる用途に応じて異なるLLM設定を使用できます。
## 仕組み
名前付きLLM設定は、`config.toml`ファイルで`llm.`で始まるセクションを使用して定義されます。例:
```toml
# デフォルトのLLM設定
[llm]
model = "gpt-4"
api_key = "あなたのAPIキー"
temperature = 0.0
# 低コストモデル用のカスタムLLM設定
[llm.gpt3]
model = "gpt-3.5-turbo"
api_key = "あなたのAPIキー"
temperature = 0.2
# 異なるパラメータを持つ別のカスタム設定
[llm.high-creativity]
model = "gpt-4"
api_key = "あなたのAPIキー"
temperature = 0.8
top_p = 0.9
```
各名前付き設定は、デフォルトの`[llm]`セクションからすべてのパラメータを継承し、これらのパラメータを上書きできます。必要な数のカスタム設定を定義できます。
## カスタム設定の使用
### エージェントでの使用
エージェントの設定セクションで`llm_config`パラメータを設定することで、エージェントが使用するLLM設定を指定できます
```toml
[agent.RepoExplorerAgent]
# このエージェントには低コストのGPT-3設定を使用
llm_config = 'gpt3'
[agent.CodeWriterAgent]
# このエージェントには高創造性の設定を使用
llm_config = 'high-creativity'
```
### 設定オプション
各名前付きLLM設定は、デフォルトのLLM設定と同じすべてのオプションをサポートしています。これらには以下が含まれます
- モデルの選択(`model`
- API設定`api_key``base_url`など)
- モデルパラメータ(`temperature``top_p`など)
- リトライパラメータ(`num_retries``retry_multiplier`など)
- トークン制限(`max_input_tokens``max_output_tokens`
- その他すべてのLLM設定オプション
利用可能なオプションの完全なリストについては、[設定オプション](../configuration-options)のドキュメントのLLM設定セクションを参照してください。
## ユースケース
カスタムLLM設定は、以下のようなシナリオで特に有用です
- **コスト最適化**:リポジトリの探索やシンプルなファイル操作など、高品質な応答が不要なタスクには低コストのモデルを使用
- **タスク固有の調整**異なるレベルの創造性や決定論的な応答が必要なタスクに対して、異なるtemperatureやtop_p値を設定
- **異なるプロバイダー**異なるタスクに対して異なるLLMプロバイダーやAPIエンドポイントを使用
- **テストと開発**:開発とテスト中に異なるモデル設定を簡単に切り替え
## 例:コスト最適化
コスト最適化のためのカスタムLLM設定の実践的な例
```toml
# 高品質な応答用のGPT-4を使用するデフォルト設定
[llm]
model = "gpt-4"
api_key = "あなたのAPIキー"
temperature = 0.0
# リポジトリ探索用の低コスト設定
[llm.repo-explorer]
model = "gpt-3.5-turbo"
temperature = 0.2
# コード生成用の設定
[llm.code-gen]
model = "gpt-4"
temperature = 0.0
max_output_tokens = 2000
[agent.RepoExplorerAgent]
llm_config = 'repo-explorer'
[agent.CodeWriterAgent]
llm_config = 'code-gen'
```
この例では:
- リポジトリ探索は主にコードの理解とナビゲーションなので、低コストモデルを使用
- コード生成は、より大きなコードブロックを生成するためにGPT-4とより高いトークン制限を使用
- デフォルト設定は他のタスクで引き続き利用可能
:::note
カスタムLLM設定は、`main.py`または`cli.py`を介して開発モードでOpenHandsを使用する場合にのみ利用可能です。`docker run`を介して実行する場合は、標準の設定オプションを使用してください。
:::

View File

@@ -0,0 +1,31 @@
以下は、指定されたコンテンツの日本語訳です。
# Google Gemini/Vertex
OpenHandsはLiteLLMを使用して、Googleのチャットモデルを呼び出します。Googleをプロバイダとして使用する方法については、以下のドキュメントを参照してください。
- [Gemini - Google AI Studio](https://docs.litellm.ai/docs/providers/gemini)
- [VertexAI - Google Cloud Platform](https://docs.litellm.ai/docs/providers/vertex)
## Gemini - Google AI Studio の設定
OpenHandsを実行する際、設定画面で以下を設定する必要があります。
- `LLM Provider``Gemini` に設定
- `LLM Model` を使用するモデルに設定
モデルがリストにない場合は、`Advanced` オプションを切り替えて、`Custom Model` に入力します(例: `gemini/gemini-2.0-flash` のように gemini/&lt;model-name&gt;)。
- `API Key` を Gemini API キーに設定
## VertexAI - Google Cloud Platform の設定
Google Cloud Platform 経由で Vertex AI を使用して OpenHands を実行するには、[docker run コマンド](../installation#running-openhands)で `-e` を使用して以下の環境変数を設定する必要があります。
```
GOOGLE_APPLICATION_CREDENTIALS="<json-dump-of-gcp-service-account-json>"
VERTEXAI_PROJECT="<your-gcp-project-id>"
VERTEXAI_LOCATION="<your-gcp-location>"
```
その後、設定画面で以下を設定します。
- `LLM Provider``VertexAI` に設定
- `LLM Model` を使用するモデルに設定
モデルがリストにない場合は、`Advanced` オプションを切り替えて、`Custom Model` に入力します(例: vertex_ai/&lt;model-name&gt;)。

View File

@@ -0,0 +1,28 @@
# Google Gemini/Vertex LLM
## 補完
OpenHandsはLiteLLMを使用して補完リクエストを行います。以下のリソースは、OpenHandsをGoogleのLLMと一緒に使用する際に関連があります。
- [Gemini - Google AI Studio](https://docs.litellm.ai/docs/providers/gemini)
- [VertexAI - Google Cloud Platform](https://docs.litellm.ai/docs/providers/vertex)
### Gemini - Google AI Studioの設定
OpenHandsのDockerイメージを実行する際にGoogle AI Studio経由でGeminiを使用するには、以下の環境変数を`-e`を使って設定する必要があります。
```
GEMINI_API_KEY="<your-google-api-key>"
LLM_MODEL="gemini/gemini-1.5-pro"
```
### Vertex AI - Google Cloud Platformの設定
OpenHandsのDockerイメージを実行する際にGoogle Cloud Platform経由でVertex AIを使用するには、以下の環境変数を`-e`を使って設定する必要があります。
```
GOOGLE_APPLICATION_CREDENTIALS="<gcp-service-account-json-dump>"
VERTEXAI_PROJECT="<your-gcp-project-id>"
VERTEXAI_LOCATION="<your-gcp-location>"
LLM_MODEL="vertex_ai/<desired-llm-model>"
```

View File

@@ -0,0 +1,20 @@
# Groq
OpenHandsは、GroqのチャットモデルへのAPIコールにLiteLLMを使用します。Groqをプロバイダーとして使用する方法については、[こちら](https://docs.litellm.ai/docs/providers/groq)のドキュメントを参照してください。
## 設定
OpenHandsを実行する際、OpenHandsのUIで設定メニューから以下の項目を設定する必要があります
* `LLMプロバイダー``Groq`に設定
* `LLMモデル`を使用するモデルに設定。[Groqがホストするモデルのリストはこちら](https://console.groq.com/docs/models)を参照してください。モデルがリストにない場合は、`詳細設定`を有効にし、`カスタムモデル`に入力してくださいgroq/&lt;model-name&gt;として`groq/llama3-70b-8192`)。
* `APIキー`をGroq APIキーに設定。Groq APIキーの確認または作成については、[こちら](https://console.groq.com/keys)を参照してください。
## OpenAI互換エンドポイントとしてのGroqの使用
Groqのチャット補完エンドポイントは[主にOpenAI互換](https://console.groq.com/docs/openai)です。そのため、他のOpenAI互換エンドポイントと同様の方法でGroqのモデルにアクセスできます。OpenHandsのUIで設定メニューから以下の項目を設定します
* `詳細設定`を有効にする
* `カスタムモデル`にプレフィックス`openai/`と使用するモデルを設定(例:`openai/llama3-70b-8192`
* `ベースURL``https://api.groq.com/openai/v1`に設定
* `APIキー`をGroq APIキーに設定

View File

@@ -0,0 +1,20 @@
# LiteLLM プロキシ
OpenHandsは、様々なLLMプロバイダーにアクセスするために[LiteLLMプロキシ](https://docs.litellm.ai/docs/proxy/quick_start)の使用をサポートしています。
## 設定
OpenHandsでLiteLLMプロキシを使用するには、以下の手順が必要です
1. LiteLLMプロキシサーバーを設定する[LiteLLMのドキュメント](https://docs.litellm.ai/docs/proxy/quick_start)を参照)
2. OpenHandsを実行する際、OpenHandsのUIで設定メニューから以下の項目を設定する必要があります
* `詳細設定`を有効にする
* `カスタムモデル`にプレフィックス`litellm_proxy/`と使用するモデルを設定(例:`litellm_proxy/anthropic.claude-3-5-sonnet-20241022-v2:0`
* `ベースURL`をLiteLLMプロキシのURL`https://your-litellm-proxy.com`)に設定
* `APIキー`をLiteLLMプロキシのAPIキーに設定
## サポートされているモデル
サポートされているモデルは、LiteLLMプロキシの設定に依存します。OpenHandsは、LiteLLMプロキシが処理するように設定されているすべてのモデルをサポートします。
利用可能なモデルとその名前のリストについては、LiteLLMプロキシの設定を参照してください。

View File

@@ -0,0 +1,82 @@
# 🤖 LLMバックエンド
OpenHandsは、LiteLLMがサポートするすべてのLLMに接続できます。ただし、機能するには強力なモデルが必要です。
## モデルの推奨事項
コーディングタスクに対する言語モデルの評価SWE-benchデータセットを使用に基づいて、モデル選択に関するいくつかの推奨事項を提供できます。分析の一部は、[LLMを比較したこのブログ記事](https://www.all-hands.dev/blog/evaluation-of-llms-as-coding-agents-on-swe-bench-at-30x-speed)と[より最近の結果を含むこのブログ記事](https://www.all-hands.dev/blog/openhands-codeact-21-an-open-state-of-the-art-software-development-agent)で確認できます。
モデルを選択する際は、出力の品質とコストの両方を考慮してください。結果の要約は以下の通りです:
- Claude 3.5 Sonnetが圧倒的に優れており、OpenHandsのデフォルトエージェントでSWE-Bench Verifiedの53%の解決率を達成しています。
- GPT-4oは遅れを取っており、o1-miniは実際にGPT-4oよりもわずかに低いパフォーマンスを示しました。結果を少し分析したところ、o1は時々「考えすぎ」て、タスクを完了できるのに追加の環境設定タスクを実行していたようです。
- 最後に、最も強力なオープンモデルはLlama 3.1 405 BとDeepseek-v2.5で、合理的なパフォーマンスを示し、一部のクローズドモデルを上回りました。
詳細については、[完全な記事](https://www.all-hands.dev/blog/evaluation-of-llms-as-coding-agents-on-swe-bench-at-30x-speed)を参照してください。
これらの結果とコミュニティからのフィードバックに基づいて、以下のモデルがOpenHandsで合理的に機能することが確認されています
- claude-3-5-sonnet推奨
- gpt-4 / gpt-4o
- llama-3.1-405b
- deepseek-v2.5
:::warning
OpenHandsは、設定したLLMに多くのプロンプトを送信します。これらのLLMのほとんどは有料なので、支出制限を設定し、使用状況を監視してください。
:::
リストにない特定のLLMでOpenHandsの実行に成功した場合は、検証済みリストに追加してください。また、同じプロバイダーとLLMを使用する他のユーザーを支援するため、設定プロセスを共有するPRを開くことをお勧めします
利用可能なプロバイダーとモデルの完全なリストについては、[litellmのドキュメント](https://docs.litellm.ai/docs/providers)を参照してください。
:::note
現在のほとんどのローカルおよびオープンソースモデルは、それほど強力ではありません。このようなモデルを使用する場合、メッセージ間の長い待機時間、品質の低い応答、または不正なJSONに関するエラーが発生する可能性があります。OpenHandsは、それを駆動するモデルと同じくらい強力にしかなりません。ただし、機能するモデルを見つけた場合は、上記の検証済みリストに追加してください。
:::
## LLM設定
以下の項目は、OpenHandsのUIで設定メニューから設定できます
- `LLMプロバイダー`
- `LLMモデル`
- `APIキー`
- `ベースURL``詳細設定`から)
一部のLLM/プロバイダーで必要となる可能性があるが、UIでは設定できないパラメータがあります。これらは代わりに、[docker runコマンド](/modules/usage/installation#start-the-app)に`-e`を使用して環境変数として渡すことができます:
- `LLM_API_VERSION`
- `LLM_EMBEDDING_MODEL`
- `LLM_EMBEDDING_DEPLOYMENT_NAME`
- `LLM_DROP_PARAMS`
- `LLM_DISABLE_VISION`
- `LLM_CACHING_PROMPT`
特定のモデルプロバイダーでOpenHandsを実行するためのガイドがいくつかあります
- [Azure](llms/azure-llms)
- [Google](llms/google-llms)
- [Groq](llms/groq)
- [LiteLLM Proxy](llms/litellm-proxy)
- [OpenAI](llms/openai-llms)
- [OpenRouter](llms/openrouter)
### APIリトライとレート制限
LLMプロバイダーは通常、レート制限を持っており、時には非常に低い制限で、リトライが必要になる場合があります。OpenHandsは、レート制限エラーエラーコード429、API接続エラー、またはその他の一時的なエラーを受信した場合、自動的にリクエストを再試行します。
使用しているプロバイダーのニーズに応じて、これらのオプションをカスタマイズできます。プロバイダーのドキュメントを確認し、以下の環境変数を設定してリトライ回数とリトライ間の待機時間を制御してください:
- `LLM_NUM_RETRIES`デフォルト8
- `LLM_RETRY_MIN_WAIT`デフォルト15秒
- `LLM_RETRY_MAX_WAIT`デフォルト120秒
- `LLM_RETRY_MULTIPLIER`デフォルト2
OpenHandsを開発モードで実行している場合、これらのオプションを`config.toml`ファイルで設定することもできます:
```toml
[llm]
num_retries = 8
retry_min_wait = 15
retry_max_wait = 120
retry_multiplier = 2
```

View File

@@ -0,0 +1,190 @@
# ローカルLLMとOllama
:::warning
ローカルLLMを使用する場合、OpenHandsの機能が制限される可能性があります。
:::
Ollamaサーバーが起動し、実行中であることを確認してください。
詳細な起動手順については、[こちら](https://github.com/ollama/ollama)を参照してください。
このガイドでは、`ollama serve`でollamaを起動したことを前提としています。ollamaを別の方法で実行している場合dockerの中で、手順を変更する必要があるかもしれません。WSLを実行している場合、デフォルトのollama設定ではdockerコンテナからのリクエストがブロックされることに注意してください。[こちら](#configuring-ollama-service-wsl-ja)を参照してください。
## モデルのプル
Ollamaモデル名は[こちら](https://ollama.com/library)で確認できます。小さな例として、`codellama:7b`モデルを使用できます。一般的に、より大きなモデルの方が性能が良くなります。
```bash
ollama pull codellama:7b
```
ダウンロードしたモデルは以下のように確認できます:
```bash
~$ ollama list
NAME ID SIZE MODIFIED
codellama:7b 8fdf8f752f6e 3.8 GB 6 weeks ago
mistral:7b-instruct-v0.2-q4_K_M eb14864c7427 4.4 GB 2 weeks ago
starcoder2:latest f67ae0f64584 1.7 GB 19 hours ago
```
## DockerでOpenHandsを実行
### OpenHandsの起動
[こちら](../getting-started)の手順を使用して、DockerでOpenHandsを起動します。
ただし、`docker run`を実行する際に、いくつかの引数を追加する必要があります:
```bash
docker run # ...
--add-host host.docker.internal:host-gateway \
-e LLM_OLLAMA_BASE_URL="http://host.docker.internal:11434" \
# ...
```
LLM_OLLAMA_BASE_URLはオプションです。設定すると、UIでインストール済みの利用可能なモデルを表示するために使用されます。
### Webアプリケーションの設定
`openhands`を実行する際、OpenHands UIの設定で以下を設定する必要があります
- モデルを"ollama/&lt;model-name&gt;"に
- ベースURLを`http://host.docker.internal:11434`
- APIキーはオプションで、`ollama`などの任意の文字列を使用できます。
## 開発モードでOpenHandsを実行
### ソースからビルド
[Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md)の手順を使用して、OpenHandsをビルドします。
`make setup-config`を実行して`config.toml`が存在することを確認してください。これにより、設定ファイルが作成されます。`config.toml`に以下を入力します:
```
[core]
workspace_base="./workspace"
[llm]
embedding_model="local"
ollama_base_url="http://localhost:11434"
```
これで完了です!`make run`でOpenHandsを起動できるようになりました。`http://localhost:3000/`に接続できるはずです。
### Webアプリケーションの設定
OpenHands UIで、左下の設定ホイールをクリックします。
次に、`Model`入力に`ollama/codellama:7b`、または先ほどプルしたモデルの名前を入力します。
ドロップダウンに表示されない場合は、`Advanced Settings`を有効にして入力してください。注意:`ollama list`で表示されるモデル名に、接頭辞`ollama/`を付ける必要があります。
APIキーフィールドには、特定のキーが不要なので、`ollama`または任意の値を入力します。
ベースURLフィールドには、`http://localhost:11434`を入力します。
これで準備完了です!
## ollamaサービスの設定WSL {#configuring-ollama-service-wsl-ja}
WSLのollamaのデフォルト設定では、localhostのみにサービスを提供します。つまり、dockerコンテナからアクセスできません。例えば、OpenHandsでは動作しません。まず、ollamaが正しく実行されていることをテストしましょう。
```bash
ollama list # インストール済みモデルのリストを取得
curl http://localhost:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#例 curl http://localhost:11434/api/generate -d '{"model":"codellama:7b","prompt":"hi"}'
#例 curl http://localhost:11434/api/generate -d '{"model":"codellama","prompt":"hi"}' #タグは1つしかない場合はオプション
```
完了したら、dockerコンテナ内からの「外部」リクエストを許可するかテストします。
```bash
docker ps # 実行中のdockerコンテナのリストを取得。最も正確なテストのためにOpenHandsサンドボックスコンテナを選択。
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#例 docker exec cd9cc82f7a11 curl http://host.docker.internal:11434/api/generate -d '{"model":"codellama","prompt":"hi"}'
```
## 修正方法
それでは、動作するようにしましょう。sudo権限で/etc/systemd/system/ollama.serviceを編集します。パスはLinuxの種類によって異なる場合があります
```bash
sudo vi /etc/systemd/system/ollama.service
```
または
```bash
sudo nano /etc/systemd/system/ollama.service
```
[Service]ブラケットにこれらの行を追加します
```
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
```
そして保存し、設定をリロードしてサービスを再起動します。
```bash
sudo systemctl daemon-reload
sudo systemctl restart ollama
```
最後に、コンテナ内からollamaにアクセスできることをテストします
```bash
ollama list # インストール済みモデルのリストを取得
docker ps # 実行中のdockerコンテナのリストを取得。最も正確なテストのためにOpenHandsサンドボックスコンテナを選択。
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
```
# ローカルLLMとLM Studio
LM Studioのセットアップ手順
1. LM Studioを開きます
2. ローカルサーバータブに移動します。
3. 「サーバーを起動」ボタンをクリックします。
4. ドロップダウンから使用するモデルを選択します。
以下の設定を行います:
```bash
LLM_MODEL="openai/lmstudio"
LLM_BASE_URL="http://localhost:1234/v1"
CUSTOM_LLM_PROVIDER="openai"
```
### Docker
```bash
docker run # ...
-e LLM_MODEL="openai/lmstudio" \
-e LLM_BASE_URL="http://host.docker.internal:1234/v1" \
-e CUSTOM_LLM_PROVIDER="openai" \
# ...
```
これで、`http://localhost:3000/`に接続できるはずです。
開発環境では、`config.toml`ファイルに以下の設定を行うことができます:
```
[core]
workspace_base="./workspace"
[llm]
model="openai/lmstudio"
base_url="http://localhost:1234/v1"
custom_llm_provider="openai"
```
完了ですこれで、Dockerなしで`make run`を実行してOpenHandsを起動できます。`http://localhost:3000/`に接続できるはずです。
# 注意
WSLの場合、cmdで以下のコマンドを実行して、ネットワークモードをミラーに設定します
```
python -c "print('[wsl2]\nnetworkingMode=mirrored',file=open(r'%UserProfile%\.wslconfig','w'))"
wsl --shutdown
```

View File

@@ -0,0 +1,140 @@
# Ollama を使用したローカル LLM
Ollama サーバーが実行中であることを確認してください。
詳細な起動手順については、[こちら](https://github.com/ollama/ollama)を参照してください。
このガイドでは、`ollama serve` で ollama を起動していることを前提としています。ollama を別の方法で実行している場合例えば、docker 内で実行している場合、手順を変更する必要があるかもしれません。WSL を使用している場合、ollama のデフォルト設定では docker コンテナからのリクエストがブロックされることに注意してください。[こちら](#configuring-ollama-service-ja)を参照してください。
## モデルのダウンロード
Ollama のモデル名は[こちら](https://ollama.com/library)で確認できます。小さなサンプルとしては、`codellama:7b` モデルを使用できます。一般的に、より大きなモデルの方がパフォーマンスが良くなります。
```bash
ollama pull codellama:7b
```
ダウンロードしたモデルは以下のように確認できます:
```bash
~$ ollama list
NAME ID SIZE MODIFIED
codellama:7b 8fdf8f752f6e 3.8 GB 6 weeks ago
mistral:7b-instruct-v0.2-q4_K_M eb14864c7427 4.4 GB 2 weeks ago
starcoder2:latest f67ae0f64584 1.7 GB 19 hours ago
```
## OpenHands の起動
### Docker
[こちら](../intro)の手順を使用して、Docker で OpenHands を起動します。
ただし、`docker run` を実行する際に、いくつかの追加引数が必要になります:
```bash
--add-host host.docker.internal:host-gateway \
-e LLM_API_KEY="ollama" \
-e LLM_BASE_URL="http://host.docker.internal:11434" \
```
例:
```bash
# OpenHands に変更させたいディレクトリ。絶対パスでなければなりません!
export WORKSPACE_BASE=$(pwd)/workspace
docker run \
-it \
--pull=always \
--add-host host.docker.internal:host-gateway \
-e SANDBOX_USER_ID=$(id -u) \
-e LLM_API_KEY="ollama" \
-e LLM_BASE_URL="http://host.docker.internal:11434" \
-e WORKSPACE_MOUNT_PATH=$WORKSPACE_BASE \
-v $WORKSPACE_BASE:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 3000:3000 \
ghcr.io/all-hands-ai/openhands:main
```
これで `http://localhost:3000/` に接続できるはずです。
### ソースからのビルド
[Development.md](https://github.com/All-Hands-AI/OpenHands/blob/main/Development.md) の手順を使用して、OpenHands をビルドします。
`make setup-config` を実行して `config.toml` が存在することを確認してください。これにより、`config.toml` が作成されます。`config.toml` に以下を入力します:
```
LLM_MODEL="ollama/codellama:7b"
LLM_API_KEY="ollama"
LLM_EMBEDDING_MODEL="local"
LLM_BASE_URL="http://localhost:11434"
WORKSPACE_BASE="./workspace"
WORKSPACE_DIR="$(pwd)/workspace"
```
必要に応じて、`LLM_MODEL` を選択したものに置き換えてください。
以上で完了ですこれで、Docker なしで `make run` を使用して OpenHands を起動できます。`http://localhost:3000/` に接続できるはずです。
## モデルの選択
OpenHands のインターフェースで、左下の設定アイコンをクリックします。
次に、`Model` の入力欄に `ollama/codellama:7b` または先ほどダウンロードしたモデル名を入力します。
ドロップダウンメニューに表示されなくても問題ありません。そのまま入力してください。完了したら、保存をクリックします。
これで、開始する準備が整いました!
## ollama サービスの設定 (WSL){#configuring-ollama-service-ja}
WSL 上の ollama のデフォルト設定では、localhost のみが提供されます。つまり、docker コンテナなどから到達できないため、OpenHands では動作しません。まず、ollama が正しく実行されているかテストしてみましょう。
```bash
ollama list # インストールされているモデルのリストを取得
curl http://localhost:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#例 curl http://localhost:11434/api/generate -d '{"model":"codellama:7b","prompt":"hi"}'
#例 curl http://localhost:11434/api/generate -d '{"model":"codellama","prompt":"hi"}' #タグは1つしかない場合はオプション
```
これが完了したら、docker コンテナなどからの「外部」リクエストを受け入れるかどうかをテストします。
```bash
docker ps # 実行中の docker コンテナのリストを取得。最も正確なテストのために OpenHands サンドボックスコンテナを選択。
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
#例 docker exec cd9cc82f7a11 curl http://host.docker.internal:11434/api/generate -d '{"model":"codellama","prompt":"hi"}'
```
## 修正
これで動作するようにしましょう。sudo 権限で /etc/systemd/system/ollama.service を編集します。(パスは Linux ディストリビューションによって異なる場合があります)
```bash
sudo vi /etc/systemd/system/ollama.service
```
または
```bash
sudo nano /etc/systemd/system/ollama.service
```
[Service] セクションに、以下の行を追加します
```
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
```
次に、保存し、設定をリロードしてサービスを再起動します。
```bash
sudo systemctl daemon-reload
sudo systemctl restart ollama
```
最後に、コンテナから ollama にアクセスできることをテストします
```bash
ollama list # インストールされているモデルのリストを取得
docker ps # 実行中の docker コンテナのリストを取得。最も正確なテストのために OpenHands サンドボックスコンテナを選択。
docker exec [CONTAINER ID] curl http://host.docker.internal:11434/api/generate -d '{"model":"[NAME]","prompt":"hi"}'
```

View File

@@ -0,0 +1,26 @@
# OpenAI
OpenHandsは、OpenAIのチャットモデルへのAPIコールにLiteLLMを使用します。OpenAIをプロバイダーとして使用する方法については、[こちら](https://docs.litellm.ai/docs/providers/openai)のドキュメントを参照してください。
## 設定
OpenHandsを実行する際、OpenHandsのUIで設定メニューから以下の項目を設定する必要があります
* `LLMプロバイダー``OpenAI`に設定
* `LLMモデル`を使用するモデルに設定。
[LiteLLMがサポートするOpenAIモデルの完全なリストはこちら](https://docs.litellm.ai/docs/providers/openai#openai-chat-completion-models)を参照してください。
モデルがリストにない場合は、`詳細設定`を有効にし、`カスタムモデル`に入力してくださいopenai/&lt;model-name&gt;として`openai/gpt-4o`)。
* `APIキー`をOpenAI APIキーに設定。OpenAIプロジェクトのAPIキーの確認または作成については、[こちら](https://platform.openai.com/api-keys)を参照してください。
## OpenAI互換エンドポイントの使用
OpenAIのチャット補完と同様に、OpenAI互換エンドポイントにもLiteLLMを使用します。この件に関する完全なドキュメントは[こちら](https://docs.litellm.ai/docs/providers/openai_compatible)を参照してください。
## OpenAIプロキシの使用
OpenAIプロキシを使用する場合、OpenHandsのUIで設定メニューから以下の項目を設定する必要があります
* `詳細設定`を有効にする
* `カスタムモデル`をopenai/&lt;model-name&gt;に設定(例:`openai/gpt-4o`またはopenai/&lt;proxy-prefix&gt;/&lt;model-name&gt;
* `ベースURL`をOpenAIプロキシのURLに設定
* `APIキー`をOpenAI APIキーに設定

View File

@@ -0,0 +1,13 @@
# OpenRouter
OpenHandsは、OpenRouterのチャットモデルへのAPIコールにLiteLLMを使用します。OpenRouterをプロバイダーとして使用する方法については、[こちら](https://docs.litellm.ai/docs/providers/openrouter)のドキュメントを参照してください。
## 設定
OpenHandsを実行する際、OpenHandsのUIで設定メニューから以下の項目を設定する必要があります
* `LLMプロバイダー``OpenRouter`に設定
* `LLMモデル`を使用するモデルに設定。
[OpenRouterのモデルの完全なリストはこちら](https://openrouter.ai/models)を参照してください。
モデルがリストにない場合は、`詳細設定`を有効にし、`カスタムモデル`に入力してくださいopenrouter/&lt;model-name&gt;として`openrouter/anthropic/claude-3.5-sonnet`)。
* `APIキー`をOpenRouter APIキーに設定。

View File

@@ -0,0 +1,41 @@
# プロンプトのベストプラクティス
OpenHands AIソフトウェア開発者と連携する際、明確で効果的なプロンプトを提供することが非常に重要です。このガイドでは、最も正確で有用な応答を生み出すプロンプトを作成するためのベストプラクティスについて説明します。
## 良いプロンプトの特徴
良いプロンプトは以下のような特徴があります。
1. **具体的** : どの機能を追加するか、どのバグを修正する必要があるかを正確に説明します。
2. **場所を特定** : 可能な場合は、コードベース内のどの場所を変更する必要があるかを説明します。
3. **適切なサイズ** : 1つの機能に対応したサイズで、通常は100行以内のコードに収まります。
## 例
### 良いプロンプトの例
1. "`utils/math_operations.py``calculate_average` 関数を追加してください。この関数は数値のリストを入力として受け取り、その平均値を返します。"
2. "`frontend/src/components/UserProfile.tsx` の42行目で発生している TypeError を修正してください。このエラーは、undefined のプロパティにアクセスしようとしていることを示唆しています。"
3. "サインアップフォームの email フィールドに入力検証を実装してください。`frontend/src/components/RegistrationForm.tsx` を更新し、送信前にメールアドレスが有効な形式であるかどうかを確認します。"
### 悪いプロンプトの例
1. "コードを改善してください。" (あまりにも曖昧で具体性に欠ける)
2. "バックエンド全体を別のフレームワークを使用するように書き換えてください。" (適切なサイズではない)
3. "ユーザー認証のどこかにバグがあります。それを見つけて修正できますか?" (具体性と場所情報が不足している)
## 効果的なプロンプトのヒント
1. 望ましい結果や解決すべき問題について、できるだけ具体的に説明してください。
2. 関連するファイルパスや行番号など、コンテキストを提供してください。
3. 大きなタスクは、より小さく管理しやすいプロンプトに分割してください。
4. 関連するエラーメッセージやログをすべて含めてください。
5. コンテキストから明らかでない場合は、プログラミング言語やフレームワークを指定してください。
プロンプトが具体的で情報量が多いほど、AIはOpenHandsソフトウェアの開発や修正をより効果的に支援できることを忘れないでください。
役立つプロンプトの他の例については、[OpenHands入門](./getting-started)を参照してください。

View File

@@ -0,0 +1,64 @@
# リポジトリ固有の動作のカスタマイズ
OpenHandsは、リポジトリ固有のコンテキストとガイダンスを提供することで、特定のリポジトリでより効果的に機能するようにカスタマイズできます。このセクションでは、OpenHandsをプロジェクトに最適化する方法について説明します。
## リポジトリの設定
リポジトリのルートに`.openhands`ディレクトリを作成することで、OpenHandsの動作をリポジトリ用にカスタマイズできます。最低限、このディレクトリには`.openhands/microagents/repo.md`ファイルが含まれている必要があります。このファイルには、エージェントがこのリポジトリで作業するたびに与えられる指示が含まれています。
以下の情報を含めることをお勧めします。
1. **リポジトリの概要**: プロジェクトの目的とアーキテクチャの簡単な説明
2. **ディレクトリ構造**: 主要なディレクトリとその目的
3. **開発ガイドライン**: プロジェクト固有のコーディング標準と慣行
4. **テスト要件**: テストの実行方法と必要なテストの種類
5. **セットアップ手順**: プロジェクトのビルドと実行に必要な手順
### リポジトリ設定の例
`.openhands/microagents/repo.md`ファイルの例:
```
Repository: MyProject
Description: タスク管理用のWebアプリケーション
ディレクトリ構造:
- src/: アプリケーションのメインコード
- tests/: テストファイル
- docs/: ドキュメンテーション
セットアップ:
- `npm install`を実行して依存関係をインストールします
- 開発には`npm run dev`を使用します
- テストには`npm test`を実行します
ガイドライン:
- ESLint設定に従ってください
- 新機能にはすべてテストを書いてください
- 新しいコードにはTypeScriptを使用してください
```
### プロンプトのカスタマイズ
カスタマイズされたリポジトリで作業する場合:
1. **プロジェクトの標準を参照する**: プロジェクトで使用されている特定のコーディング標準やパターンに言及する
2. **コンテキストを含める**: 関連するドキュメンテーションや既存の実装を参照する
3. **テスト要件を指定する**: プロジェクト固有のテスト要件をプロンプトに含める
カスタムプロンプトの例:
```
既存のコンポーネントパターンに従って、src/components/TaskList.tsxにタスク完了の新機能を追加してください。
tests/components/にユニットテストを含め、docs/features/のドキュメントを更新してください。
コンポーネントはsrc/styles/componentsの共有スタイルを使用する必要があります。
```
### リポジトリカスタマイズのベストプラクティス
1. **指示を最新に保つ**: プロジェクトの進化に合わせて、`.openhands`ディレクトリを定期的に更新する
2. **具体的にする**: プロジェクト固有のパス、パターン、要件を含める
3. **依存関係を文書化する**: 開発に必要なすべてのツールと依存関係を列挙する
4. **例を含める**: プロジェクトからの良いコード例を提供する
5. **規約を指定する**: 命名規則、ファイル構成、コードスタイルの好みを文書化する
OpenHandsをリポジトリ用にカスタマイズすることで、プロジェクトの標準と要件に沿ったより正確で一貫した結果が得られます。
## その他のマイクロエージェント
`.openhands/microagents/`ディレクトリに、`test``frontend``migration`などの特定のキーワードが見つかった場合にエージェントに送信される追加の指示を作成できます。詳細については、[Microagents](microagents.md)を参照してください。

View File

@@ -0,0 +1,33 @@
# Microagentsの概要
Microagentsは、ドメイン固有の知識、リポジトリ固有のコンテキスト、タスク固有のワークフローでOpenHandsを強化する特殊なプロンプトです。専門家のガイダンスを提供し、一般的なタスクを自動化し、プロジェクト全体で一貫したプラクティスを確保するのに役立ちます。
## Microagentの種類
現在、OpenHandsは以下の種類のmicroagentsをサポートしています:
* [リポジトリMicroagents](./microagents-repo): OpenHands用のリポジトリ固有のコンテキストとガイドライン。
* [パブリックMicroagents](./microagents-public): すべてのOpenHandsユーザーのためにキーワードによってトリガーされる一般的なガイドライン。
OpenHandsがリポジトリで動作する際:
1. リポジトリに`.openhands/microagents/`が存在する場合、そこからリポジトリ固有の指示を読み込みます。
2. 会話のキーワードによってトリガーされる一般的なガイドラインを読み込みます。
現在の[パブリックMicroagents](https://github.com/All-Hands-AI/OpenHands/tree/main/microagents/knowledge)を参照してください。
## Microagentのフォーマット
すべてのmicroagentsは、YAMLのfrontmatterを持つmarkdownファイルを使用します。これには、OpenHandsがタスクを達成するための特別な指示が含まれています:
```
---
name: <Microagentの名前>
type: <Microagentのタイプ>
version: <Microagentのバージョン>
agent: <エージェントのタイプ (通常はCodeActAgent)>
triggers:
- <オプション: microagentをトリガーするキーワード。トリガーを削除すると、常に含まれるようになります>
---
<OpenHandsが従うべき特別なガイドライン、指示、プロンプトを含むMarkdown。
ベストプラクティスに関する各microagentの具体的なドキュメントを確認してください。>
```

View File

@@ -0,0 +1,91 @@
# パブリックマイクロエージェント
## 概要
パブリックマイクロエージェントは、OpenHandsのすべてのユーザーが利用できる一般的なガイドラインを提供します。これらは、特定のキーワードによってトリガーされ、特定のドメインやタスクに関する専門知識を提供します。
## 現在のパブリックマイクロエージェント
### GitHubエージェント
GitHubエージェントは、GitHubリポジトリとの対話を支援します。主な機能
* リポジトリのクローン
* ブランチの作成と切り替え
* コミットとプッシュ
* プルリクエストの作成
### NPMエージェント
NPMエージェントは、Node.jsプロジェクトの管理を支援します
* パッケージのインストールと更新
* 依存関係の管理
* スクリプトの実行
* バージョン管理
## パブリックマイクロエージェントの貢献
### パブリックマイクロエージェントのベストプラクティス
1. **明確なトリガー**:エージェントをトリガーするキーワードを明確に定義します
2. **集中的な範囲**1つのドメインまたはタスクに焦点を当てます
3. **明確なガイドライン**:エージェントの責任と制限を明確に説明します
4. **実用的な例**:一般的なユースケースの例を含めます
### パブリックマイクロエージェントを貢献するステップ
1. [マイクロエージェントのフォーマット](./microagents-overview#microagent-format)を確認します
2. 新しいマイクロエージェントファイルを作成します
3. ガイドラインとベストプラクティスに従っていることを確認します
4. プルリクエストを作成します
### パブリックマイクロエージェントの実装例
```
---
name: Dockerエージェント
type: public
version: 1.0
agent: CodeActAgent
triggers:
- docker
- container
---
あなたはDockerコンテナの管理とDockerfileの作成を担当します。
主な責任:
1. Dockerfileの作成と修正
2. コンテナのライフサイクル管理
3. Docker Compose設定の処理
ガイドライン:
- 可能な限り公式ベースイメージを使用
- 必要なセキュリティ考慮事項を含める
- レイヤー最適化のためのDockerベストプラクティスに従う
例:
1. Dockerfileの作成
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
2. Docker Composeの使用
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
忘れないこと:
- Dockerfileの構文を検証
- セキュリティ脆弱性をチェック
- ビルド時間とイメージサイズを最適化
```
より多くの例については、[現在のパブリックマイクロエージェント](https://github.com/All-Hands-AI/OpenHands/tree/main/microagents/knowledge)をご覧ください。

Some files were not shown because too many files have changed in this diff Show More