Browse Source

Chore Bump python version (#3545)

tofarr 1 năm trước cách đây
mục cha
commit
152f99c64f
89 tập tin đã thay đổi với 581 bổ sung544 xóa
  1. 2 4
      .devcontainer/on_create.sh
  2. 1 1
      .github/workflows/deploy-docs.yml
  3. 1 1
      .github/workflows/dummy-agent-test.yml
  4. 7 7
      .github/workflows/ghcr-build.yml
  5. 1 1
      .github/workflows/lint.yml
  6. 2 2
      .github/workflows/py-unit-tests.yml
  7. 1 1
      .github/workflows/pypi-release.yml
  8. 1 1
      .github/workflows/regenerate_integration_tests.yml
  9. 1 1
      .github/workflows/review-pr.yml
  10. 3 3
      Development.md
  11. 1 1
      Makefile
  12. 1 1
      config.template.toml
  13. 4 4
      containers/dev/Dockerfile
  14. 2 2
      containers/runtime/README.md
  15. 1 1
      docs/modules/usage/how-to/custom-sandbox-guide.md
  16. 1 1
      evaluation/EDA/run_infer.py
  17. 1 1
      evaluation/agent_bench/run_infer.py
  18. 1 1
      evaluation/aider_bench/run_infer.py
  19. 1 1
      evaluation/bird/run_infer.py
  20. 1 1
      evaluation/browsing_delegation/run_infer.py
  21. 1 1
      evaluation/gaia/run_infer.py
  22. 1 1
      evaluation/gorilla/run_infer.py
  23. 1 1
      evaluation/gpqa/run_infer.py
  24. 1 1
      evaluation/humanevalfix/run_infer.py
  25. 1 1
      evaluation/logic_reasoning/Dockerfile
  26. 1 1
      evaluation/miniwob/Dockerfile
  27. 1 1
      evaluation/mint/Dockerfile
  28. 0 0
      evaluation/swe_bench/examples/example_agent_output.jsonl
  29. 1 1
      evaluation/toolqa/Dockerfile
  30. 1 1
      evaluation/toolqa/run_infer.py
  31. 1 1
      evaluation/webarena/run_infer.py
  32. 1 1
      frontend/src/components/terminal/Terminal.test.tsx
  33. 1 1
      frontend/src/utils/parseTerminalOutput.test.ts
  34. 1 1
      frontend/src/utils/parseTerminalOutput.ts
  35. 1 1
      openhands/core/config/sandbox_config.py
  36. 1 1
      openhands/runtime/utils/runtime_build.py
  37. 2 2
      openhands/runtime/utils/runtime_templates/Dockerfile.j2
  38. 398 360
      poetry.lock
  39. 2 1
      pyproject.toml
  40. 1 1
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_002.log
  41. 2 2
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_003.log
  42. 3 3
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_004.log
  43. 4 4
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_005.log
  44. 1 1
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython/prompt_002.log
  45. 2 2
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython/prompt_003.log
  46. 1 1
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython_module/prompt_002.log
  47. 2 2
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython_module/prompt_003.log
  48. 3 3
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython_module/prompt_004.log
  49. 1 1
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_002.log
  50. 2 2
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_003.log
  51. 3 3
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_004.log
  52. 4 4
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_005.log
  53. 5 5
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_006.log
  54. 6 6
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_007.log
  55. 7 7
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_008.log
  56. 8 8
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_009.log
  57. 3 3
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_write_simple_script/prompt_002.log
  58. 4 4
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_write_simple_script/prompt_003.log
  59. 5 5
      tests/integration/mock/eventstream_runtime/CodeActAgent/test_write_simple_script/prompt_004.log
  60. 1 1
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_browse_internet/prompt_002.log
  61. 1 1
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_002.log
  62. 2 2
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_003.log
  63. 3 3
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_004.log
  64. 4 4
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_005.log
  65. 1 1
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython/prompt_002.log
  66. 2 2
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython/prompt_003.log
  67. 1 1
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython_module/prompt_002.log
  68. 2 2
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython_module/prompt_003.log
  69. 3 3
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython_module/prompt_004.log
  70. 1 1
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_simple_task_rejection/prompt_002.log
  71. 2 2
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_simple_task_rejection/prompt_003.log
  72. 2 2
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_write_simple_script/prompt_002.log
  73. 4 4
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_write_simple_script/prompt_003.log
  74. 5 5
      tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_write_simple_script/prompt_004.log
  75. 1 1
      tests/integration/mock/eventstream_runtime/DelegatorAgent/test_edits/prompt_002.log
  76. 1 1
      tests/integration/mock/eventstream_runtime/DelegatorAgent/test_edits/prompt_003.log
  77. 1 1
      tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_002.log
  78. 1 1
      tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_005.log
  79. 1 1
      tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_006.log
  80. 1 1
      tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_009.log
  81. 1 1
      tests/integration/mock/eventstream_runtime/ManagerAgent/test_simple_task_rejection/prompt_003.log
  82. 1 1
      tests/integration/mock/eventstream_runtime/PlannerAgent/test_write_simple_script/prompt_010.log
  83. 1 1
      tests/integration/mock/eventstream_runtime/PlannerAgent/test_write_simple_script/prompt_011.log
  84. 1 1
      tests/integration/regenerate.sh
  85. 1 1
      tests/runtime/conftest.py
  86. 2 2
      tests/runtime/test_images.py
  87. 11 11
      tests/runtime/test_ipython.py
  88. 1 1
      tests/unit/test_config.py
  89. 4 4
      tests/unit/test_runtime_build.py

+ 2 - 4
.devcontainer/on_create.sh

@@ -2,7 +2,5 @@
 sudo apt update
 sudo apt install -y netcat
 sudo add-apt-repository -y ppa:deadsnakes/ppa
-sudo apt install -y python3.11
-curl -sSL https://install.python-poetry.org | python3.11 -
-# chromadb requires SQLite > 3.35 but SQLite in Python3.11.9 comes with 3.31.1
-sudo cp /opt/conda/lib/libsqlite3.so.0 /lib/x86_64-linux-gnu/libsqlite3.so.0
+sudo apt install -y python3.12
+curl -sSL https://install.python-poetry.org | python3.12 -

+ 1 - 1
.github/workflows/deploy-docs.yml

@@ -32,7 +32,7 @@ jobs:
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
-          python-version: '3.11'
+          python-version: '3.12'
       - name: Generate Python Docs
         run: rm -rf docs/modules/python && pip install pydoc-markdown && pydoc-markdown
       - name: Install dependencies

+ 1 - 1
.github/workflows/dummy-agent-test.yml

@@ -36,7 +36,7 @@ jobs:
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
-          python-version: '3.11'
+          python-version: '3.12'
           cache: 'poetry'
       - name: Install Python dependencies using Poetry
         run: poetry install --without evaluation,llama-index

+ 7 - 7
.github/workflows/ghcr-build.yml

@@ -26,7 +26,7 @@ on:
         default: ''
 
 env:
-  BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST: nikolaik/python-nodejs:python3.11-nodejs22
+  BASE_IMAGE_FOR_HASH_EQUIVALENCE_TEST: nikolaik/python-nodejs:python3.12-nodejs22
 
 jobs:
   # Builds the OpenHands Docker images
@@ -100,7 +100,7 @@ jobs:
     strategy:
       matrix:
         base_image:
-          - image: 'nikolaik/python-nodejs:python3.11-nodejs22'
+          - image: 'nikolaik/python-nodejs:python3.12-nodejs22'
             tag: nikolaik
     steps:
       - name: Checkout
@@ -135,7 +135,7 @@ jobs:
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
-          python-version: '3.11'
+          python-version: '3.12'
       - name: Cache Poetry dependencies
         uses: actions/cache@v4
         with:
@@ -192,7 +192,7 @@ jobs:
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
-          python-version: '3.11'
+          python-version: '3.12'
       - name: Install poetry via pipx
         run: pipx install poetry
       - name: Install Python dependencies using Poetry
@@ -271,7 +271,7 @@ jobs:
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
-          python-version: '3.11'
+          python-version: '3.12'
       - name: Install poetry via pipx
         run: pipx install poetry
       - name: Install Python dependencies using Poetry
@@ -349,7 +349,7 @@ jobs:
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
-          python-version: '3.11'
+          python-version: '3.12'
       - name: Install poetry via pipx
         run: pipx install poetry
       - name: Install Python dependencies using Poetry
@@ -428,7 +428,7 @@ jobs:
       - name: Set up Python
         uses: actions/setup-python@v5
         with:
-          python-version: '3.11'
+          python-version: '3.12'
       - name: Install poetry via pipx
         run: pipx install poetry
       - name: Install Python dependencies using Poetry

+ 1 - 1
.github/workflows/lint.yml

@@ -41,7 +41,7 @@ jobs:
       - name: Set up python
         uses: actions/setup-python@v5
         with:
-          python-version: 3.11
+          python-version: 3.12
           cache: 'pip'
       - name: Install pre-commit
         run: pip install pre-commit==3.7.0

+ 2 - 2
.github/workflows/py-unit-tests.yml

@@ -19,7 +19,7 @@ jobs:
       INSTALL_DOCKER: '1' # Set to '0' to skip Docker installation
     strategy:
       matrix:
-        python-version: ['3.11']
+        python-version: ['3.12']
     steps:
       - uses: actions/checkout@v4
       - name: Set up Python ${{ matrix.python-version }}
@@ -107,7 +107,7 @@ jobs:
       INSTALL_DOCKER: '0' # Set to '0' to skip Docker installation
     strategy:
       matrix:
-        python-version: ['3.11']
+        python-version: ['3.12']
     steps:
       - uses: actions/checkout@v4
       - name: Set up Docker Buildx

+ 1 - 1
.github/workflows/pypi-release.yml

@@ -17,7 +17,7 @@ jobs:
       - uses: actions/checkout@v4
       - uses: actions/setup-python@v5
         with:
-          python-version: 3.11
+          python-version: 3.12
       - name: Install Poetry
         uses: snok/install-poetry@v1.4.1
         with:

+ 1 - 1
.github/workflows/regenerate_integration_tests.yml

@@ -35,7 +35,7 @@ jobs:
     - name: Set up Python
       uses: actions/setup-python@v5
       with:
-        python-version: "3.11"
+        python-version: "3.12"
     - name: Cache Poetry dependencies
       uses: actions/cache@v4
       with:

+ 1 - 1
.github/workflows/review-pr.yml

@@ -21,7 +21,7 @@ jobs:
     - name: Set up Python
       uses: actions/setup-python@v5
       with:
-        python-version: '3.11'
+        python-version: '3.12'
     - name: install git, github cli
       run: |
         sudo apt-get install -y git gh

+ 3 - 3
Development.md

@@ -7,7 +7,7 @@ Otherwise, you can clone the OpenHands project directly.
 ### 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.11
+* [Python](https://www.python.org/downloads/) = 3.12
 * [NodeJS](https://nodejs.org/en/download/package-manager) >= 18.17.1
 * [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) >= 1.8
 * netcat => sudo apt-get install netcat
@@ -22,8 +22,8 @@ If you want to develop without system admin/sudo access to upgrade/install `Pyth
 curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh"
 bash Miniforge3-$(uname)-$(uname -m).sh
 
-# Install Python 3.11, nodejs, and poetry
-mamba install python=3.11
+# Install Python 3.12, nodejs, and poetry
+mamba install python=3.12
 mamba install conda-forge::nodejs
 mamba install conda-forge::poetry
 ```

+ 1 - 1
Makefile

@@ -10,7 +10,7 @@ DEFAULT_WORKSPACE_DIR = "./workspace"
 DEFAULT_MODEL = "gpt-4o"
 CONFIG_FILE = config.toml
 PRE_COMMIT_CONFIG_PATH = "./dev_config/python/.pre-commit-config.yaml"
-PYTHON_VERSION = 3.11
+PYTHON_VERSION = 3.12
 
 # ANSI color codes
 GREEN=$(shell tput -Txterm setaf 2)

+ 1 - 1
config.template.toml

@@ -206,7 +206,7 @@ llm_config = 'gpt3'
 #user_id = 1000
 
 # Container image to use for the sandbox
-#base_container_image = "nikolaik/python-nodejs:python3.11-nodejs22"
+#base_container_image = "nikolaik/python-nodejs:python3.12-nodejs22"
 
 # Use host network
 #use_host_network = false

+ 4 - 4
containers/dev/Dockerfile

@@ -55,18 +55,18 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | d
   && apt-get clean \
   && apt-get autoremove -y
 
-# Python 3.11
+# Python 3.12
 RUN add-apt-repository ppa:deadsnakes/ppa \
     && apt-get update \
-    && apt-get install -y python3.11 python3.11-venv python3.11-dev python3-pip \
-    && ln -s /usr/bin/python3.11 /usr/bin/python
+    && 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 - \
     && apt-get install -y nodejs
 
 # Poetry >= 1.8
-RUN curl -fsSL https://install.python-poetry.org | python3.11 - \
+RUN curl -fsSL https://install.python-poetry.org | python3.12 - \
     && ln -s ~/.local/bin/poetry /usr/local/bin/poetry
 
 #

+ 2 - 2
containers/runtime/README.md

@@ -3,10 +3,10 @@
 This folder builds a runtime image (sandbox), which will use a dynamically generated `Dockerfile`
 that depends on the `base_image` **AND** a [Python source distribution](https://docs.python.org/3.10/distutils/sourcedist.html) that is based on the current commit of `openhands`.
 
-The following command will generate a `Dockerfile` file for `nikolaik/python-nodejs:python3.11-nodejs22` (the default base image), an updated `config.sh` and the runtime source distribution files/folders into `containers/runtime`:
+The following command will generate a `Dockerfile` file for `nikolaik/python-nodejs:python3.12-nodejs22` (the default base image), an updated `config.sh` and the runtime source distribution files/folders into `containers/runtime`:
 
 ```bash
 poetry run python3 openhands/runtime/utils/runtime_build.py \
-    --base_image nikolaik/python-nodejs:python3.11-nodejs22 \
+    --base_image nikolaik/python-nodejs:python3.12-nodejs22 \
     --build_folder containers/runtime
 ```

+ 1 - 1
docs/modules/usage/how-to/custom-sandbox-guide.md

@@ -3,7 +3,7 @@
 The sandbox is where the agent does its work. Instead of running commands directly on your computer
 (which could be dangerous), the agent runs them inside of a Docker container.
 
-The default OpenHands sandbox (`python-nodejs:python3.11-nodejs22`
+The default OpenHands sandbox (`python-nodejs:python3.12-nodejs22`
 from [nikolaik/python-nodejs](https://hub.docker.com/r/nikolaik/python-nodejs)) comes with some packages installed such
 as python and Node.js but your use case may need additional software installed by default.
 

+ 1 - 1
evaluation/EDA/run_infer.py

@@ -62,7 +62,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=False,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/agent_bench/run_infer.py

@@ -44,7 +44,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/aider_bench/run_infer.py

@@ -49,7 +49,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
             timeout=100,

+ 1 - 1
evaluation/bird/run_infer.py

@@ -75,7 +75,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/browsing_delegation/run_infer.py

@@ -40,7 +40,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=False,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/gaia/run_infer.py

@@ -51,7 +51,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/gorilla/run_infer.py

@@ -43,7 +43,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/gpqa/run_infer.py

@@ -65,7 +65,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/humanevalfix/run_infer.py

@@ -86,7 +86,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/logic_reasoning/Dockerfile

@@ -1,4 +1,4 @@
-FROM python:3.11-bookworm
+FROM python:3.12-bookworm
 
 RUN pip install scitools-pyke
 

+ 1 - 1
evaluation/miniwob/Dockerfile

@@ -1,4 +1,4 @@
-FROM python:3.11-bookworm
+FROM python:3.12-bookworm
 
 RUN apt-get update && apt-get install -y python3 python3-pip git
 

+ 1 - 1
evaluation/mint/Dockerfile

@@ -1,4 +1,4 @@
-FROM python:3.11-bookworm
+FROM python:3.12-bookworm
 
 RUN apt-get update && apt-get install -y python3 python3-pip git gcc
 

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
evaluation/swe_bench/examples/example_agent_output.jsonl


+ 1 - 1
evaluation/toolqa/Dockerfile

@@ -1,4 +1,4 @@
-FROM python:3.11-bookworm
+FROM python:3.12-bookworm
 
 RUN apt-get update && apt-get install -y python3 python3-pip
 

+ 1 - 1
evaluation/toolqa/run_infer.py

@@ -45,7 +45,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
         ),

+ 1 - 1
evaluation/webarena/run_infer.py

@@ -54,7 +54,7 @@ def get_config(
         runtime='eventstream',
         max_iterations=metadata.max_iterations,
         sandbox=SandboxConfig(
-            base_container_image='python:3.11-bookworm',
+            base_container_image='python:3.12-bookworm',
             enable_auto_lint=True,
             use_host_network=False,
             browsergym_eval_env=env_id,

+ 1 - 1
frontend/src/components/terminal/Terminal.test.tsx

@@ -108,7 +108,7 @@ describe("Terminal", () => {
       {
         type: "output",
         content:
-          "Hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-5O4_aCHf-py3.11/bin/python]\nopenhands@659478cb008c:/workspace $ ",
+          "Hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-5O4_aCHf-py3.12/bin/python]\nopenhands@659478cb008c:/workspace $ ",
       },
     ]);
 

+ 1 - 1
frontend/src/utils/parseTerminalOutput.test.ts

@@ -4,7 +4,7 @@ import { parseTerminalOutput } from "./parseTerminalOutput";
 describe("parseTerminalOutput", () => {
   it("should parse the command, env, and symbol", () => {
     const raw =
-      "web_scraper.py\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-5O4_aCHf-py3.11/bin/python]\nopenhands@659478cb008c:/workspace $ ";
+      "web_scraper.py\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-5O4_aCHf-py3.12/bin/python]\nopenhands@659478cb008c:/workspace $ ";
 
     const parsed = parseTerminalOutput(raw);
 

+ 1 - 1
frontend/src/utils/parseTerminalOutput.ts

@@ -5,7 +5,7 @@
  *
  * @example
  * const raw =
- *  "web_scraper.py\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-5O4_aCHf-py3.11/bin/python]\nopenhands@659478cb008c:/workspace $ ";
+ *  "web_scraper.py\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-5O4_aCHf-py3.12/bin/python]\nopenhands@659478cb008c:/workspace $ ";
  *
  * const parsed = parseTerminalOutput(raw);
  *

+ 1 - 1
openhands/core/config/sandbox_config.py

@@ -35,7 +35,7 @@ class SandboxConfig:
     remote_runtime_api_url: str = 'http://localhost:8000'
     local_runtime_url: str = 'http://localhost'
     api_key: str | None = None
-    base_container_image: str = 'nikolaik/python-nodejs:python3.11-nodejs22'  # default to nikolaik/python-nodejs:python3.11-nodejs22 for eventstream runtime
+    base_container_image: str = 'nikolaik/python-nodejs:python3.12-nodejs22'  # default to nikolaik/python-nodejs:python3.12-nodejs22 for eventstream runtime
     runtime_container_image: str | None = None
     user_id: int = os.getuid() if hasattr(os, 'getuid') else 1000
     timeout: int = 120

+ 1 - 1
openhands/runtime/utils/runtime_build.py

@@ -389,7 +389,7 @@ def _build_sandbox_image(
 if __name__ == '__main__':
     parser = argparse.ArgumentParser()
     parser.add_argument(
-        '--base_image', type=str, default='nikolaik/python-nodejs:python3.11-nodejs22'
+        '--base_image', type=str, default='nikolaik/python-nodejs:python3.12-nodejs22'
     )
     parser.add_argument('--build_folder', type=str, default=None)
     parser.add_argument('--force_rebuild', action='store_true', default=False)

+ 2 - 2
openhands/runtime/utils/runtime_templates/Dockerfile.j2

@@ -36,7 +36,7 @@ RUN mkdir -p /openhands/micromamba/bin && \
 
 # Create the openhands virtual environment and install poetry and python
 RUN /openhands/micromamba/bin/micromamba create -n openhands -y && \
-    /openhands/micromamba/bin/micromamba install -n openhands -c conda-forge poetry python=3.11 -y
+    /openhands/micromamba/bin/micromamba install -n openhands -c conda-forge poetry python=3.12 -y
 
 # ================================================================
 # END: Build Runtime Image from Scratch
@@ -61,7 +61,7 @@ RUN \
     /openhands/micromamba/bin/micromamba config set changeps1 False && \
     # Configure Poetry and create virtual environment
     /openhands/micromamba/bin/micromamba run -n openhands poetry config virtualenvs.path /openhands/poetry && \
-    /openhands/micromamba/bin/micromamba run -n openhands poetry env use python3.11 && \
+    /openhands/micromamba/bin/micromamba run -n openhands poetry env use python3.12 && \
     # Install project dependencies
     /openhands/micromamba/bin/micromamba run -n openhands poetry install --only main,runtime --no-interaction --no-root && \
     # Update and install additional tools

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 398 - 360
poetry.lock


+ 2 - 1
pyproject.toml

@@ -13,7 +13,7 @@ packages = [
 ]
 
 [tool.poetry.dependencies]
-python = "^3.11"
+python = "^3.12"
 datasets = "*"
 pandas = "*"
 litellm = "*"
@@ -54,6 +54,7 @@ python-pptx = "*"
 pylatexenc = "*"
 tornado = "*"
 python-dotenv = "*"
+protobuf = "^4.21.6" # chromadb currently fails on 5.0+
 
 [tool.poetry.group.llama-index.dependencies]
 llama-index = "*"

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_002.log

@@ -425,7 +425,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 
 ENVIRONMENT REMINDER: You have 18 turns left to complete the task. When finished reply with <finish></finish>.

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_003.log

@@ -425,7 +425,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -456,7 +456,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 
 ENVIRONMENT REMINDER: You have 17 turns left to complete the task. When finished reply with <finish></finish>.

+ 3 - 3
tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_004.log

@@ -425,7 +425,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -456,7 +456,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -481,7 +481,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 3). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 
 ENVIRONMENT REMINDER: You have 16 turns left to complete the task. When finished reply with <finish></finish>.

+ 4 - 4
tests/integration/mock/eventstream_runtime/CodeActAgent/test_edits/prompt_005.log

@@ -425,7 +425,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -456,7 +456,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -481,7 +481,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 3). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -501,7 +501,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 
 ENVIRONMENT REMINDER: You have 15 turns left to complete the task. When finished reply with <finish></finish>.

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython/prompt_002.log

@@ -419,7 +419,7 @@ OBSERVATION:
 (this is the end of the file)
 [File /workspace/test.txt created.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 
 ENVIRONMENT REMINDER: You have 18 turns left to complete the task. When finished reply with <finish></finish>.

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython/prompt_003.log

@@ -419,7 +419,7 @@ OBSERVATION:
 (this is the end of the file)
 [File /workspace/test.txt created.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -437,7 +437,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 
 ENVIRONMENT REMINDER: You have 17 turns left to complete the task. When finished reply with <finish></finish>.

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython_module/prompt_002.log

@@ -428,7 +428,7 @@ Successfully installed pymsgbox-1.0.9
 [notice] To update, run: pip install --upgrade pip
 Note: you may need to restart the kernel to use updated packages.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 18 turns left to complete the task. When finished reply with <finish></finish>.
 

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython_module/prompt_003.log

@@ -428,7 +428,7 @@ Successfully installed pymsgbox-1.0.9
 [notice] To update, run: pip install --upgrade pip
 Note: you may need to restart the kernel to use updated packages.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -447,7 +447,7 @@ with open('/workspace/test.txt', 'w') as file:
 OBSERVATION:
 [Code executed successfully with no output]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 17 turns left to complete the task. When finished reply with <finish></finish>.
 

+ 3 - 3
tests/integration/mock/eventstream_runtime/CodeActAgent/test_ipython_module/prompt_004.log

@@ -428,7 +428,7 @@ Successfully installed pymsgbox-1.0.9
 [notice] To update, run: pip install --upgrade pip
 Note: you may need to restart the kernel to use updated packages.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -447,7 +447,7 @@ with open('/workspace/test.txt', 'w') as file:
 OBSERVATION:
 [Code executed successfully with no output]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -461,7 +461,7 @@ cat /workspace/test.txt
 OBSERVATION:
 pymsgbox version: 1.0.9
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_002.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_003.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -449,7 +449,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 

+ 3 - 3
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_004.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -449,7 +449,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -470,7 +470,7 @@ drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .
 drwxr-xr-x 1 root root 4096 Sep  8 15:57 ..
 drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .git
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 4 - 4
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_005.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -449,7 +449,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -470,7 +470,7 @@ drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .
 drwxr-xr-x 1 root root 4096 Sep  8 15:57 ..
 drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .git
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 
@@ -487,7 +487,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 

+ 5 - 5
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_006.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -449,7 +449,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -470,7 +470,7 @@ drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .
 drwxr-xr-x 1 root root 4096 Sep  8 15:57 ..
 drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .git
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 
@@ -487,7 +487,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -504,7 +504,7 @@ mkdir my_project && cd my_project
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 

+ 6 - 6
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_007.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -449,7 +449,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -470,7 +470,7 @@ drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .
 drwxr-xr-x 1 root root 4096 Sep  8 15:57 ..
 drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .git
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 
@@ -487,7 +487,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -504,7 +504,7 @@ mkdir my_project && cd my_project
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 
@@ -521,7 +521,7 @@ echo "Hello, this is a test file." > test.txt
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 

+ 7 - 7
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_008.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -449,7 +449,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -470,7 +470,7 @@ drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .
 drwxr-xr-x 1 root root 4096 Sep  8 15:57 ..
 drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .git
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 
@@ -487,7 +487,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -504,7 +504,7 @@ mkdir my_project && cd my_project
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 
@@ -521,7 +521,7 @@ echo "Hello, this is a test file." > test.txt
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 
@@ -550,7 +550,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/my_project/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 128]
 

+ 8 - 8
tests/integration/mock/eventstream_runtime/CodeActAgent/test_simple_task_rejection/prompt_009.log

@@ -420,7 +420,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -449,7 +449,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -470,7 +470,7 @@ drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .
 drwxr-xr-x 1 root root 4096 Sep  8 15:57 ..
 drwxrwxrwx 1 pn   pn   4096 Sep  8 15:57 .git
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 
@@ -487,7 +487,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -504,7 +504,7 @@ mkdir my_project && cd my_project
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 
@@ -521,7 +521,7 @@ echo "Hello, this is a test file." > test.txt
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 
@@ -550,7 +550,7 @@ hint: 	git branch -m <name>
 error: chmod on /workspace/my_project/.git/config.lock failed: Operation not permitted
 fatal: could not set 'core.filemode' to 'false'
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 128]
 
@@ -574,7 +574,7 @@ Initial commit: Add test.txt
 - Created a new file 'test.txt' with a simple hello message
 - This is the first commit in the repository
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace/my_project $
 [Command -1 finished with exit code 0]
 

+ 3 - 3
tests/integration/mock/eventstream_runtime/CodeActAgent/test_write_simple_script/prompt_002.log

@@ -420,14 +420,14 @@ chmod +x hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ echo 'echo "hello"' >> hello.sh
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ chmod +x hello.sh
 chmod: changing permissions of 'hello.sh': Operation not permitted
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 1]
 

+ 4 - 4
tests/integration/mock/eventstream_runtime/CodeActAgent/test_write_simple_script/prompt_003.log

@@ -420,14 +420,14 @@ chmod +x hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ echo 'echo "hello"' >> hello.sh
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ chmod +x hello.sh
 chmod: changing permissions of 'hello.sh': Operation not permitted
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 1]
 
@@ -444,7 +444,7 @@ OBSERVATION:
 #!/bin/bash
 echo "hello"
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 5 - 5
tests/integration/mock/eventstream_runtime/CodeActAgent/test_write_simple_script/prompt_004.log

@@ -420,14 +420,14 @@ chmod +x hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ echo 'echo "hello"' >> hello.sh
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ chmod +x hello.sh
 chmod: changing permissions of 'hello.sh': Operation not permitted
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 1]
 
@@ -444,7 +444,7 @@ OBSERVATION:
 #!/bin/bash
 echo "hello"
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 
@@ -460,7 +460,7 @@ bash hello.sh
 OBSERVATION:
 hello
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_browse_internet/prompt_002.log

@@ -662,7 +662,7 @@ OBSERVATION:
 </body>
 </html>
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_002.log

@@ -607,6 +607,6 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 18 turns left to complete the task. When finished reply with <finish></finish>.

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_003.log

@@ -607,7 +607,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -630,6 +630,6 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 17 turns left to complete the task. When finished reply with <finish></finish>.

+ 3 - 3
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_004.log

@@ -607,7 +607,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -630,7 +630,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -653,6 +653,6 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 3). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 16 turns left to complete the task. When finished reply with <finish></finish>.

+ 4 - 4
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_edits/prompt_005.log

@@ -607,7 +607,7 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -630,7 +630,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -653,7 +653,7 @@ OBSERVATION:
 (this is the end of the file)
 [File updated (edited at line 3). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -673,6 +673,6 @@ OBSERVATION:
 4|Enjoy!
 (this is the end of the file)
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 15 turns left to complete the task. When finished reply with <finish></finish>.

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython/prompt_002.log

@@ -599,6 +599,6 @@ print("File created successfully.")
 OBSERVATION:
 File created successfully.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 18 turns left to complete the task. When finished reply with <finish></finish>.

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython/prompt_003.log

@@ -599,7 +599,7 @@ print("File created successfully.")
 OBSERVATION:
 File created successfully.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -615,6 +615,6 @@ print(f"Contents of /workspace/test.txt: {content}")
 OBSERVATION:
 Contents of /workspace/test.txt: hello world
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 17 turns left to complete the task. When finished reply with <finish></finish>.

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython_module/prompt_002.log

@@ -619,6 +619,6 @@ Successfully installed pymsgbox-1.0.9
 [notice] To update, run: pip install --upgrade pip
 Note: you may need to restart the kernel to use updated packages.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 13 turns left to complete the task. When finished reply with <finish></finish>.

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython_module/prompt_003.log

@@ -619,7 +619,7 @@ Successfully installed pymsgbox-1.0.9
 [notice] To update, run: pip install --upgrade pip
 Note: you may need to restart the kernel to use updated packages.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -640,6 +640,6 @@ version_info
 OBSERVATION:
 '1.0.9'
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ENVIRONMENT REMINDER: You have 12 turns left to complete the task. When finished reply with <finish></finish>.

+ 3 - 3
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_ipython_module/prompt_004.log

@@ -619,7 +619,7 @@ Successfully installed pymsgbox-1.0.9
 [notice] To update, run: pip install --upgrade pip
 Note: you may need to restart the kernel to use updated packages.
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -640,7 +640,7 @@ version_info
 OBSERVATION:
 '1.0.9'
 [Jupyter current working directory: /workspace]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 
 ----------
 
@@ -654,7 +654,7 @@ cat /workspace/test.txt
 OBSERVATION:
 pymsgbox version: 1.0.9
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 1 - 1
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_simple_task_rejection/prompt_002.log

@@ -605,7 +605,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_simple_task_rejection/prompt_003.log

@@ -605,7 +605,7 @@ OBSERVATION:
 fatal: not a git repository (or any parent up to mount point /)
 Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 128]
 
@@ -626,7 +626,7 @@ total 4
 drwxrwxrwx 1 pn   pn   4096 Sep  3 12:17 .
 drwxr-xr-x 1 root root 4096 Sep  3 12:18 ..
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 2 - 2
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_write_simple_script/prompt_002.log

@@ -602,11 +602,11 @@ chmod +x hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ chmod +x hello.sh
 chmod: changing permissions of 'hello.sh': Operation not permitted
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 1]
 

+ 4 - 4
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_write_simple_script/prompt_003.log

@@ -602,11 +602,11 @@ chmod +x hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ chmod +x hello.sh
 chmod: changing permissions of 'hello.sh': Operation not permitted
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 1]
 
@@ -623,12 +623,12 @@ cat hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ cat hello.sh
 #!/bin/bash
 echo "hello"
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 5 - 5
tests/integration/mock/eventstream_runtime/CodeActSWEAgent/test_write_simple_script/prompt_004.log

@@ -602,11 +602,11 @@ chmod +x hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ chmod +x hello.sh
 chmod: changing permissions of 'hello.sh': Operation not permitted
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 1]
 
@@ -623,12 +623,12 @@ cat hello.sh
 
 OBSERVATION:
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $ cat hello.sh
 #!/bin/bash
 echo "hello"
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 
@@ -644,7 +644,7 @@ bash hello.sh
 OBSERVATION:
 hello
 
-[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 openhands@docker-desktop:/workspace $
 [Command -1 finished with exit code 0]
 

+ 1 - 1
tests/integration/mock/eventstream_runtime/DelegatorAgent/test_edits/prompt_002.log

@@ -37,7 +37,7 @@ as well as observations you've made. This only includes the MOST RECENT
 actions and observations--more may have happened before that.
 They are time-ordered, with your most recent action at the bottom.
 
-[{"source": "agent", "action": "run", "args": {"command": "ls", "thought": ""}}, {"source": "agent", "observation": "run", "content": "bad.txt\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "ls", "exit_code": 0}}]
+[{"source": "agent", "action": "run", "args": {"command": "ls", "thought": ""}}, {"source": "agent", "observation": "run", "content": "bad.txt\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "ls", "exit_code": 0}}]
 
 ## Format
 Your response MUST be in JSON format. It must be an object, and it must contain two fields:

+ 1 - 1
tests/integration/mock/eventstream_runtime/DelegatorAgent/test_edits/prompt_003.log

@@ -37,7 +37,7 @@ as well as observations you've made. This only includes the MOST RECENT
 actions and observations--more may have happened before that.
 They are time-ordered, with your most recent action at the bottom.
 
-[{"source": "agent", "action": "run", "args": {"command": "ls", "thought": ""}}, {"source": "agent", "observation": "run", "content": "bad.txt\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "ls", "exit_code": 0}}, {"source": "agent", "action": "read", "args": {"path": "bad.txt", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "read", "content": "This is a stupid typoo.\nReally?\nNo mor typos!\nEnjoy!\n", "extras": {"path": "/workspace/bad.txt"}}]
+[{"source": "agent", "action": "run", "args": {"command": "ls", "thought": ""}}, {"source": "agent", "observation": "run", "content": "bad.txt\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "ls", "exit_code": 0}}, {"source": "agent", "action": "read", "args": {"path": "bad.txt", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "read", "content": "This is a stupid typoo.\nReally?\nNo mor typos!\nEnjoy!\n", "extras": {"path": "/workspace/bad.txt"}}]
 
 ## Format
 Your response MUST be in JSON format. It must be an object, and it must contain two fields:

+ 1 - 1
tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_002.log

@@ -37,7 +37,7 @@ as well as observations you've made. This only includes the MOST RECENT
 actions and observations--more may have happened before that.
 They are time-ordered, with your most recent action at the bottom.
 
-[{"source": "agent", "action": "run", "args": {"command": "ls", "thought": ""}}, {"source": "agent", "observation": "run", "content": "\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "ls", "exit_code": 0}}]
+[{"source": "agent", "action": "run", "args": {"command": "ls", "thought": ""}}, {"source": "agent", "observation": "run", "content": "\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "ls", "exit_code": 0}}]
 
 ## Format
 Your response MUST be in JSON format. It must be an object, and it must contain two fields:

+ 1 - 1
tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_005.log

@@ -37,7 +37,7 @@ as well as observations you've made. This only includes the MOST RECENT
 actions and observations--more may have happened before that.
 They are time-ordered, with your most recent action at the bottom.
 
-[{"source": "agent", "action": "write", "args": {"path": "hello.sh", "content": "#!/bin/bash\n\necho 'hello'", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "write", "content": "", "extras": {"path": "/workspace/hello.sh"}}, {"source": "agent", "action": "run", "args": {"command": "chmod +x hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "chmod +x hello.sh", "exit_code": 0}}]
+[{"source": "agent", "action": "write", "args": {"path": "hello.sh", "content": "#!/bin/bash\n\necho 'hello'", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "write", "content": "", "extras": {"path": "/workspace/hello.sh"}}, {"source": "agent", "action": "run", "args": {"command": "chmod +x hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "chmod +x hello.sh", "exit_code": 0}}]
 
 ## Format
 Your response MUST be in JSON format. It must be an object, and it must contain two fields:

+ 1 - 1
tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_006.log

@@ -37,7 +37,7 @@ as well as observations you've made. This only includes the MOST RECENT
 actions and observations--more may have happened before that.
 They are time-ordered, with your most recent action at the bottom.
 
-[{"source": "agent", "action": "write", "args": {"path": "hello.sh", "content": "#!/bin/bash\n\necho 'hello'", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "write", "content": "", "extras": {"path": "/workspace/hello.sh"}}, {"source": "agent", "action": "run", "args": {"command": "chmod +x hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "chmod +x hello.sh", "exit_code": 0}}, {"source": "agent", "action": "run", "args": {"command": "./hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "./hello.sh", "exit_code": 0}}]
+[{"source": "agent", "action": "write", "args": {"path": "hello.sh", "content": "#!/bin/bash\n\necho 'hello'", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "write", "content": "", "extras": {"path": "/workspace/hello.sh"}}, {"source": "agent", "action": "run", "args": {"command": "chmod +x hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "chmod +x hello.sh", "exit_code": 0}}, {"source": "agent", "action": "run", "args": {"command": "./hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "./hello.sh", "exit_code": 0}}]
 
 ## Format
 Your response MUST be in JSON format. It must be an object, and it must contain two fields:

+ 1 - 1
tests/integration/mock/eventstream_runtime/DelegatorAgent/test_write_simple_script/prompt_009.log

@@ -35,7 +35,7 @@ as well as observations you've made. This only includes the MOST RECENT
 actions and observations--more may have happened before that.
 They are time-ordered, with your most recent action at the bottom.
 
-[{"source": "agent", "action": "read", "args": {"path": "hello.sh", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "read", "content": "#!/bin/bash\n\necho 'hello'\n", "extras": {"path": "/workspace/hello.sh"}}, {"source": "agent", "action": "run", "args": {"command": "bash hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "bash hello.sh", "exit_code": 0}}]
+[{"source": "agent", "action": "read", "args": {"path": "hello.sh", "start": 0, "end": -1, "thought": ""}}, {"source": "agent", "observation": "read", "content": "#!/bin/bash\n\necho 'hello'\n", "extras": {"path": "/workspace/hello.sh"}}, {"source": "agent", "action": "run", "args": {"command": "bash hello.sh", "thought": ""}}, {"source": "agent", "observation": "run", "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "bash hello.sh", "exit_code": 0}}]
 
 ## Format
 Your response MUST be in JSON format. It must be an object, and it must contain two fields:

+ 1 - 1
tests/integration/mock/eventstream_runtime/ManagerAgent/test_simple_task_rejection/prompt_003.log

@@ -24,7 +24,7 @@ as well as observations you've made. This only includes the MOST RECENT
 actions and observations--more may have happened before that.
 They are time-ordered, with your most recent action at the bottom.
 
-[{"source": "agent", "action": "run", "args": {"command": "git status", "thought": ""}}, {"source": "agent", "observation": "run", "content": "fatal: not a git repository (or any parent up to mount point /)\r\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "git status", "exit_code": 128}}]
+[{"source": "agent", "action": "run", "args": {"command": "git status", "thought": ""}}, {"source": "agent", "observation": "run", "content": "fatal: not a git repository (or any parent up to mount point /)\r\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ", "extras": {"command_id": -1, "command": "git status", "exit_code": 128}}]
 
 If the last item in the history is an error, you should try to fix it.
 

+ 1 - 1
tests/integration/mock/eventstream_runtime/PlannerAgent/test_write_simple_script/prompt_010.log

@@ -199,7 +199,7 @@ ten actions--more happened before that.
   {
     "source": "agent",
     "observation": "run",
-    "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ",
+    "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ",
     "extras": {
       "command_id": -1,
       "command": "bash hello.sh",

+ 1 - 1
tests/integration/mock/eventstream_runtime/PlannerAgent/test_write_simple_script/prompt_011.log

@@ -198,7 +198,7 @@ ten actions--more happened before that.
   {
     "source": "agent",
     "observation": "run",
-    "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]\nopenhands@docker-desktop:/workspace $ ",
+    "content": "hello\r\n\r\n[Python Interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]\nopenhands@docker-desktop:/workspace $ ",
     "extras": {
       "command_id": -1,
       "command": "bash hello.sh",

+ 1 - 1
tests/integration/regenerate.sh

@@ -73,7 +73,7 @@ mkdir -p "$WORKSPACE_BASE"
 # use environmental variable if exists
 TEST_RUNTIME="${TEST_RUNTIME:-eventstream}"
 if [ -z "$SANDBOX_BASE_CONTAINER_IMAGE" ]; then
-  SANDBOX_BASE_CONTAINER_IMAGE="nikolaik/python-nodejs:python3.11-nodejs22"
+  SANDBOX_BASE_CONTAINER_IMAGE="nikolaik/python-nodejs:python3.12-nodejs22"
 fi
 
 MAX_ITERATIONS=20

+ 1 - 1
tests/runtime/conftest.py

@@ -193,7 +193,7 @@ def base_container_image(request):
                 request.param = None
         if request.param is None:
             request.param = pytest.param(
-                'nikolaik/python-nodejs:python3.11-nodejs22',
+                'nikolaik/python-nodejs:python3.12-nodejs22',
                 'golang:1.23-bookworm',
             )
     print(f'Container image: {request.param}')

+ 2 - 2
tests/runtime/test_images.py

@@ -14,7 +14,7 @@ from openhands.events.action import CmdRunAction
 def test_bash_python_version(temp_dir, box_class, base_container_image):
     """Make sure Python is available in bash."""
     if base_container_image not in [
-        'python:3.11-bookworm',
+        'python:3.12-bookworm',
     ]:
         pytest.skip('This test is only for python-related images')
 
@@ -33,7 +33,7 @@ def test_bash_python_version(temp_dir, box_class, base_container_image):
     obs = runtime.run_action(action)
     logger.info(obs, extra={'msg_type': 'OBSERVATION'})
     assert obs.exit_code == 0
-    assert 'Python 3.11' in obs.content  # Check for specific version
+    assert 'Python 3.12' in obs.content  # Check for specific version
 
     action = CmdRunAction(command='pip --version')
     logger.info(action, extra={'msg_type': 'ACTION'})

+ 11 - 11
tests/runtime/test_ipython.py

@@ -55,7 +55,7 @@ def test_simple_cmd_ipython_and_fileop(temp_dir, box_class, run_as_openhands):
     assert obs.content.strip() == (
         'Hello, `World`!\n'
         f'[Jupyter current working directory: {sandbox_dir}]\n'
-        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
     )
 
     # Test read file (file should not exist)
@@ -132,7 +132,7 @@ def test_ipython_multi_user(temp_dir, box_class, run_as_openhands):
         == (
             '/workspace\n'
             '[Jupyter current working directory: /workspace]\n'
-            '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+            '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
         ).strip()
     )
 
@@ -148,7 +148,7 @@ def test_ipython_multi_user(temp_dir, box_class, run_as_openhands):
         == (
             '[Code executed successfully with no output]\n'
             '[Jupyter current working directory: /workspace]\n'
-            '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+            '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
         ).strip()
     )
 
@@ -192,7 +192,7 @@ def test_ipython_simple(temp_dir, box_class):
         == (
             '1\n'
             f'[Jupyter current working directory: {sandbox_dir}]\n'
-            '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+            '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
         ).strip()
     )
 
@@ -229,7 +229,7 @@ def _test_ipython_agentskills_fileop_pwd_impl(
         '(this is the end of the file)\n'
         '[File hello.py created.]\n'
         f'[Jupyter current working directory: {sandbox_dir}]\n'
-        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
     ).strip().split('\n')
 
     action = CmdRunAction(command='cd test')
@@ -253,7 +253,7 @@ def _test_ipython_agentskills_fileop_pwd_impl(
         '(this is the end of the file)\n'
         '[File hello.py created.]\n'
         f'[Jupyter current working directory: {sandbox_dir}/test]\n'
-        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
     ).strip().split('\n')
 
     if enable_auto_lint:
@@ -287,7 +287,7 @@ Your changes have NOT been applied. Please fix your edit command and try again.
 You either need to 1) Specify the correct start/end line arguments or 2) Correct your edit code.
 DO NOT re-run the same failed edit command. Running it again will lead to the same error.
 [Jupyter current working directory: {sandbox_dir}/test]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 """
         ).strip().split('\n')
 
@@ -307,7 +307,7 @@ DO NOT re-run the same failed edit command. Running it again will lead to the sa
 (this is the end of the file)
 [File updated (edited at line 1). Please review the changes and make sure they are correct (correct indentation, no duplicate lines, etc). Edit the file again if necessary.]
 [Jupyter current working directory: {sandbox_dir}/test]
-[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]
+[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]
 """
     ).strip().split('\n')
 
@@ -378,7 +378,7 @@ def test_ipython_agentskills_fileop_pwd_with_userdir(temp_dir, box_class):
         '(this is the end of the file)\n'
         '[File hello.py created.]\n'
         '[Jupyter current working directory: /root]\n'
-        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
     ).strip().split('\n')
 
     action = CmdRunAction(command='cd test')
@@ -402,7 +402,7 @@ def test_ipython_agentskills_fileop_pwd_with_userdir(temp_dir, box_class):
         '(this is the end of the file)\n'
         '[File hello.py created.]\n'
         '[Jupyter current working directory: /root/test]\n'
-        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
     ).strip().split('\n')
 
     _close_test_runtime(runtime)
@@ -438,7 +438,7 @@ def test_ipython_package_install(temp_dir, box_class, run_as_openhands):
     assert obs.content.strip() == (
         '[Code executed successfully with no output]\n'
         f'[Jupyter current working directory: {sandbox_dir}]\n'
-        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.11/bin/python]'
+        '[Jupyter Python interpreter: /openhands/poetry/openhands-ai-5O4_aCHf-py3.12/bin/python]'
     )
 
     _close_test_runtime(runtime)

+ 1 - 1
tests/unit/test_config.py

@@ -359,7 +359,7 @@ def test_defaults_dict_after_updates(default_config):
     assert defaults_after_updates['sandbox']['timeout']['default'] == 120
     assert (
         defaults_after_updates['sandbox']['base_container_image']['default']
-        == 'nikolaik/python-nodejs:python3.11-nodejs22'
+        == 'nikolaik/python-nodejs:python3.12-nodejs22'
     )
     assert defaults_after_updates == initial_defaults
 

+ 4 - 4
tests/unit/test_runtime_build.py

@@ -22,7 +22,7 @@ from openhands.runtime.utils.runtime_build import (
 )
 
 OH_VERSION = f'oh_v{oh_version}'
-DEFAULT_BASE_IMAGE = 'nikolaik/python-nodejs:python3.11-nodejs22'
+DEFAULT_BASE_IMAGE = 'nikolaik/python-nodejs:python3.12-nodejs22'
 
 
 @pytest.fixture
@@ -157,7 +157,7 @@ def test_generate_dockerfile_scratch():
     assert 'apt-get update' in dockerfile_content
     assert 'apt-get install -y wget curl sudo apt-utils' in dockerfile_content
     assert 'poetry' in dockerfile_content and '-c conda-forge' in dockerfile_content
-    assert 'python=3.11' in dockerfile_content
+    assert 'python=3.12' in dockerfile_content
 
     # Check the update command
     assert 'COPY ./code /openhands/code' in dockerfile_content
@@ -177,7 +177,7 @@ def test_generate_dockerfile_skip_init():
     # These commands SHOULD NOT include in the dockerfile if skip_init is True
     assert 'RUN apt update && apt install -y wget sudo' not in dockerfile_content
     assert '-c conda-forge' not in dockerfile_content
-    assert 'python=3.11' not in dockerfile_content
+    assert 'python=3.12' not in dockerfile_content
     assert 'https://micro.mamba.pm/install.sh' not in dockerfile_content
 
     # These update commands SHOULD still in the dockerfile
@@ -197,7 +197,7 @@ def test_get_runtime_image_repo_and_tag_eventstream():
     assert (
         img_repo == f'{get_runtime_image_repo()}'
         and img_tag
-        == f'{OH_VERSION}_image_nikolaik_s_python-nodejs_tag_python3.11-nodejs22'
+        == f'{OH_VERSION}_image_nikolaik_s_python-nodejs_tag_python3.12-nodejs22'
     )
 
     base_image = 'ubuntu'

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác