Skip to content

Commit 0b1ec8a

Browse files
Merge remote-tracking branch 'upstream/main' into main
2 parents 072d956 + e47aaba commit 0b1ec8a

File tree

288 files changed

+11629
-4968
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

288 files changed

+11629
-4968
lines changed

.github/ISSUE_TEMPLATE/bug_template.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ body:
3030
description: How are you running OpenHands?
3131
options:
3232
- Docker command in README
33+
- GitHub resolver
3334
- Development workflow
3435
- app.all-hands.dev
3536
- Other

.github/workflows/ghcr-build.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ jobs:
219219
exit 1
220220
fi
221221
222-
# Run unit tests with the EventStream runtime Docker images as root
222+
# Run unit tests with the Docker runtime Docker images as root
223223
test_runtime_root:
224224
name: RT Unit Tests (Root)
225225
needs: [ghcr_build_runtime]
@@ -286,7 +286,7 @@ jobs:
286286
image_name=ghcr.io/${{ github.repository_owner }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image }}
287287
image_name=$(echo $image_name | tr '[:upper:]' '[:lower:]')
288288
289-
TEST_RUNTIME=eventstream \
289+
TEST_RUNTIME=docker \
290290
SANDBOX_USER_ID=$(id -u) \
291291
SANDBOX_RUNTIME_CONTAINER_IMAGE=$image_name \
292292
TEST_IN_CI=true \
@@ -297,7 +297,7 @@ jobs:
297297
env:
298298
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
299299

300-
# Run unit tests with the EventStream runtime Docker images as openhands user
300+
# Run unit tests with the Docker runtime Docker images as openhands user
301301
test_runtime_oh:
302302
name: RT Unit Tests (openhands)
303303
runs-on: ubuntu-latest
@@ -363,7 +363,7 @@ jobs:
363363
image_name=ghcr.io/${{ github.repository_owner }}/runtime:${{ env.RELEVANT_SHA }}-${{ matrix.base_image }}
364364
image_name=$(echo $image_name | tr '[:upper:]' '[:lower:]')
365365
366-
TEST_RUNTIME=eventstream \
366+
TEST_RUNTIME=docker \
367367
SANDBOX_USER_ID=$(id -u) \
368368
SANDBOX_RUNTIME_CONTAINER_IMAGE=$image_name \
369369
TEST_IN_CI=true \

.github/workflows/integration-runner.yml

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,6 @@ jobs:
160160
echo "api_key = \"$LLM_API_KEY\"" >> config.toml
161161
echo "base_url = \"$LLM_BASE_URL\"" >> config.toml
162162
echo "temperature = 0.0" >> config.toml
163-
164163
- name: Run integration test evaluation for DelegatorAgent (DeepSeek)
165164
env:
166165
SANDBOX_FORCE_REBUILD_RUNTIME: True
@@ -174,12 +173,42 @@ jobs:
174173
cat $REPORT_FILE_DELEGATOR_DEEPSEEK >> $GITHUB_ENV
175174
echo >> $GITHUB_ENV
176175
echo "EOF" >> $GITHUB_ENV
176+
# -------------------------------------------------------------
177+
# Run VisualBrowsingAgent tests for DeepSeek, limited to t05 and t06
178+
- name: Wait a little bit (again)
179+
run: sleep 5
180+
181+
- name: Configure config.toml for testing VisualBrowsingAgent (DeepSeek)
182+
env:
183+
LLM_MODEL: "litellm_proxy/deepseek-chat"
184+
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
185+
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
186+
MAX_ITERATIONS: 15
187+
run: |
188+
echo "[llm.eval]" > config.toml
189+
echo "model = \"$LLM_MODEL\"" >> config.toml
190+
echo "api_key = \"$LLM_API_KEY\"" >> config.toml
191+
echo "base_url = \"$LLM_BASE_URL\"" >> config.toml
192+
echo "temperature = 0.0" >> config.toml
193+
- name: Run integration test evaluation for VisualBrowsingAgent (DeepSeek)
194+
env:
195+
SANDBOX_FORCE_REBUILD_RUNTIME: True
196+
run: |
197+
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'
198+
199+
# Find and export the visual browsing agent test results
200+
REPORT_FILE_VISUALBROWSING_DEEPSEEK=$(find evaluation/evaluation_outputs/outputs/integration_tests/VisualBrowsingAgent/deepseek*_maxiter_15_N* -name "report.md" -type f | head -n 1)
201+
echo "REPORT_FILE_VISUALBROWSING_DEEPSEEK: $REPORT_FILE_VISUALBROWSING_DEEPSEEK"
202+
echo "INTEGRATION_TEST_REPORT_VISUALBROWSING_DEEPSEEK<<EOF" >> $GITHUB_ENV
203+
cat $REPORT_FILE_VISUALBROWSING_DEEPSEEK >> $GITHUB_ENV
204+
echo >> $GITHUB_ENV
205+
echo "EOF" >> $GITHUB_ENV
177206
178207
- name: Create archive of evaluation outputs
179208
run: |
180209
TIMESTAMP=$(date +'%y-%m-%d-%H-%M')
181210
cd evaluation/evaluation_outputs/outputs # Change to the outputs directory
182-
tar -czvf ../../../integration_tests_${TIMESTAMP}.tar.gz integration_tests/CodeActAgent/* integration_tests/DelegatorAgent/* # Only include the actual result directories
211+
tar -czvf ../../../integration_tests_${TIMESTAMP}.tar.gz integration_tests/CodeActAgent/* integration_tests/DelegatorAgent/* integration_tests/VisualBrowsingAgent/* # Only include the actual result directories
183212
184213
- name: Upload evaluation results as artifact
185214
uses: actions/upload-artifact@v4
@@ -227,4 +256,7 @@ jobs:
227256
**Integration Tests Report Delegator (DeepSeek)**
228257
${{ env.INTEGRATION_TEST_REPORT_DELEGATOR_DEEPSEEK }}
229258
---
259+
**Integration Tests Report VisualBrowsing (DeepSeek)**
260+
${{ env.INTEGRATION_TEST_REPORT_VISUALBROWSING_DEEPSEEK }}
261+
---
230262
Download testing outputs (includes both Haiku and DeepSeek results): [Download](${{ steps.upload_results_artifact.outputs.artifact-url }})

.github/workflows/openhands-resolver.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ on:
2020
required: false
2121
type: string
2222
default: "anthropic/claude-3-5-sonnet-20241022"
23+
LLM_API_VERSION:
24+
required: false
25+
type: string
26+
default: ""
2327
base_container_image:
2428
required: false
2529
type: string
@@ -84,6 +88,10 @@ jobs:
8488
run: |
8589
python -m pip index versions openhands-ai > openhands_versions.txt
8690
OPENHANDS_VERSION=$(head -n 1 openhands_versions.txt | awk '{print $2}' | tr -d '()')
91+
# Ensure requirements.txt ends with newline before appending
92+
if [ -f requirements.txt ] && [ -s requirements.txt ]; then
93+
sed -i -e '$a\' requirements.txt
94+
fi
8795
echo "openhands-ai==${OPENHANDS_VERSION}" >> requirements.txt
8896
cat requirements.txt
8997
@@ -112,6 +120,7 @@ jobs:
112120
LLM_MODEL: ${{ secrets.LLM_MODEL || inputs.LLM_MODEL }}
113121
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
114122
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
123+
LLM_API_VERSION: ${{ inputs.LLM_API_VERSION }}
115124
PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
116125
PAT_USERNAME: ${{ secrets.PAT_USERNAME }}
117126
GITHUB_TOKEN: ${{ github.token }}
@@ -226,6 +235,7 @@ jobs:
226235
LLM_MODEL: ${{ secrets.LLM_MODEL || inputs.LLM_MODEL }}
227236
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
228237
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
238+
LLM_API_VERSION: ${{ inputs.LLM_API_VERSION }}
229239
PYTHONPATH: ""
230240
run: |
231241
cd /tmp && python -m openhands.resolver.resolve_issue \
@@ -261,6 +271,7 @@ jobs:
261271
LLM_MODEL: ${{ secrets.LLM_MODEL || inputs.LLM_MODEL }}
262272
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
263273
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
274+
LLM_API_VERSION: ${{ inputs.LLM_API_VERSION }}
264275
PYTHONPATH: ""
265276
run: |
266277
if [ "${{ steps.check_result.outputs.RESOLUTION_SUCCESS }}" == "true" ]; then

.github/workflows/py-unit-tests-mac.yml

Lines changed: 0 additions & 98 deletions
This file was deleted.

.github/workflows/stale.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ jobs:
1919
close-issue-message: 'This issue was closed because it has been stalled for over 30 days with no activity.'
2020
close-pr-message: 'This PR was closed because it has been stalled for over 30 days with no activity.'
2121
days-before-close: 7
22+
operations-per-run: 150

Development.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ poetry run pytest ./tests/unit/test_*.py
100100
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
101101
setting the SANDBOX_RUNTIME_CONTAINER_IMAGE environment variable to the desired Docker image.
102102
103-
Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.20-nikolaik`
103+
Example: `export SANDBOX_RUNTIME_CONTAINER_IMAGE=ghcr.io/all-hands-ai/runtime:0.23-nikolaik`
104104
105105
## Develop inside Docker container
106106

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<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>
1313
<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>
1414
<br/>
15-
<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>
15+
<a href="https://join.slack.com/t/openhands-ai/shared_invite/zt-2ypg5jweb-d~6hObZDbXi_HEL8PDrbHg"><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>
1616
<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>
1717
<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>
1818
<br/>
@@ -39,21 +39,21 @@ Learn more at [docs.all-hands.dev](https://docs.all-hands.dev), or jump to the [
3939
## ⚡ Quick Start
4040

4141
The easiest way to run OpenHands is in Docker.
42-
See the [Installation](https://docs.all-hands.dev/modules/usage/installation) guide for
42+
See the [Running OpenHands](https://docs.all-hands.dev/modules/usage/installation) guide for
4343
system requirements and more information.
4444

4545
```bash
46-
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik
46+
docker pull docker.all-hands.dev/all-hands-ai/runtime:0.23-nikolaik
4747

4848
docker run -it --rm --pull=always \
49-
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik \
49+
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.23-nikolaik \
5050
-e LOG_ALL_EVENTS=true \
5151
-v /var/run/docker.sock:/var/run/docker.sock \
5252
-v ~/.openhands-state:/.openhands-state \
5353
-p 3000:3000 \
5454
--add-host host.docker.internal:host-gateway \
5555
--name openhands-app \
56-
docker.all-hands.dev/all-hands-ai/openhands:0.20
56+
docker.all-hands.dev/all-hands-ai/openhands:0.23
5757
```
5858

5959
You'll find OpenHands running at [http://localhost:3000](http://localhost:3000)!
@@ -69,7 +69,7 @@ run OpenHands in a scriptable [headless mode](https://docs.all-hands.dev/modules
6969
interact with it via a [friendly CLI](https://docs.all-hands.dev/modules/usage/how-to/cli-mode),
7070
or run it on tagged issues with [a github action](https://docs.all-hands.dev/modules/usage/how-to/github-action).
7171

72-
Visit [Installation](https://docs.all-hands.dev/modules/usage/installation) for more information and setup instructions.
72+
Visit [Running OpenHands](https://docs.all-hands.dev/modules/usage/installation) for more information and setup instructions.
7373

7474
> [!CAUTION]
7575
> OpenHands is meant to be run by a single user on their local workstation.
@@ -96,7 +96,7 @@ troubleshooting resources, and advanced configuration options.
9696
OpenHands is a community-driven project, and we welcome contributions from everyone. We do most of our communication
9797
through Slack, so this is the best place to start, but we also are happy to have you contact us on Discord or Github:
9898

99-
- [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.
99+
- [Join our Slack workspace](https://join.slack.com/t/openhands-ai/shared_invite/zt-2ypg5jweb-d~6hObZDbXi_HEL8PDrbHg) - Here we talk about research, architecture, and future development.
100100
- [Join our Discord server](https://discord.gg/ESHStjSjD4) - This is a community-run server for general discussion, questions, and feedback.
101101
- [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.
102102

config.template.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ workspace_base = "./workspace"
7575
#run_as_openhands = true
7676

7777
# Runtime environment
78-
#runtime = "eventstream"
78+
#runtime = "docker"
7979

8080
# Name of the default agent
8181
#default_agent = "CodeActAgent"
@@ -104,7 +104,7 @@ workspace_base = "./workspace"
104104
#aws_secret_access_key = ""
105105

106106
# API key to use (For Headless / CLI only - In Web this is overridden by Session Init)
107-
api_key = "your-api-key"
107+
api_key = ""
108108

109109
# API base URL (For Headless / CLI only - In Web this is overridden by Session Init)
110110
#base_url = ""
@@ -195,7 +195,7 @@ model = "gpt-4o"
195195
#native_tool_calling = None
196196

197197
[llm.gpt4o-mini]
198-
api_key = "your-api-key"
198+
api_key = ""
199199
model = "gpt-4o"
200200

201201

containers/dev/compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ services:
1111
- BACKEND_HOST=${BACKEND_HOST:-"0.0.0.0"}
1212
- SANDBOX_API_HOSTNAME=host.docker.internal
1313
#
14-
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.20-nikolaik}
14+
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-ghcr.io/all-hands-ai/runtime:0.23-nikolaik}
1515
- SANDBOX_USER_ID=${SANDBOX_USER_ID:-1234}
1616
- WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace}
1717
ports:

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ services:
77
image: openhands:latest
88
container_name: openhands-app-${DATE:-}
99
environment:
10-
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-docker.all-hands.dev/all-hands-ai/runtime:0.20-nikolaik}
10+
- SANDBOX_RUNTIME_CONTAINER_IMAGE=${SANDBOX_RUNTIME_CONTAINER_IMAGE:-docker.all-hands.dev/all-hands-ai/runtime:0.23-nikolaik}
1111
#- 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
1212
- WORKSPACE_MOUNT_PATH=${WORKSPACE_BASE:-$PWD/workspace}
1313
ports:

docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/architecture/runtime.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

22

3-
# 📦 Runtime EventStream
3+
# 📦 Runtime Docker
44

5-
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.
5+
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.
66
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.
77

88
## Pourquoi avons-nous besoin d'un runtime en bac à sable ?

docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/configuration-options.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ Les options de configuration de base sont définies dans la section `[core]` du
163163

164164
- `runtime`
165165
- Type : `str`
166-
- Valeur par défaut : `"eventstream"`
166+
- Valeur par défaut : `"docker"`
167167
- Description : Environnement d'exécution
168168

169169
- `default_agent`
@@ -373,7 +373,7 @@ Les options de configuration de l'agent sont définies dans les sections `[agent
373373
- Description : Si l'éditeur LLM est activé dans l'espace d'action (fonctionne uniquement avec l'appel de fonction)
374374

375375
**Utilisation du micro-agent**
376-
- `use_microagents`
376+
- `enable_prompt_extensions`
377377
- Type : `bool`
378378
- Valeur par défaut : `true`
379379
- Description : Indique si l'utilisation des micro-agents est activée ou non

docs/i18n/fr/docusaurus-plugin-content-docs/current/usage/custom_sandbox_guide.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,3 @@ sandbox_user_id="1001"
9595
### Erreurs de port d'utilisation
9696

9797
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```
98-
99-
## Discuter
100-
101-
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!

0 commit comments

Comments
 (0)