[Arch] Implement EventStream Runtime Client with Jupyter Support using Agnostic Sandbox (#2879)

* support loading a particular runtime class via config.runtime (default to server to not break things)

* move image agnostic util to shared runtime util

* move dependency

* include poetry.lock in sdist

* accept port as arg for client

* make client start server with specified port

* update image agnostic utility for eventstream runtime

* make client and runtime working with REST API

* rename execute_server

* add plugin to initialize stuff inside es-runtime;
cleanup runtime methods to delegate everything to container

* remove redundant ls -alh

* fix jupyter

* improve logging in agnostic sandbox

* improve logging of test function

* add read & edit

* update agnostic sandbox

* support setting work dir at start

* fix file read/write test

* fix unit test

* update tescase

* Fix unit test again

* fix unit test again again
This commit is contained in:
Xingyao Wang
2024-07-12 01:52:26 +08:00
committed by GitHub
parent 43c3e904b7
commit e45d46c993
16 changed files with 1896 additions and 404 deletions

View File

@@ -2,14 +2,14 @@ from unittest.mock import MagicMock, patch
from opendevin.runtime.utils.image_agnostic import (
_get_new_image_name,
generate_dockerfile_content,
generate_dockerfile,
get_od_sandbox_image,
)
def test_generate_dockerfile_content():
def test_generate_dockerfile():
base_image = 'debian:11'
dockerfile_content = generate_dockerfile_content(base_image)
dockerfile_content = generate_dockerfile(base_image)
assert base_image in dockerfile_content
assert (
'RUN apt update && apt install -y openssh-server wget sudo'
@@ -17,17 +17,18 @@ def test_generate_dockerfile_content():
)
def test_get_new_image_name():
def test_get_new_image_name_legacy():
# test non-eventstream runtime (sandbox-based)
base_image = 'debian:11'
new_image_name = _get_new_image_name(base_image)
new_image_name = _get_new_image_name(base_image, is_eventstream_runtime=False)
assert new_image_name == 'od_sandbox:debian__11'
base_image = 'ubuntu:22.04'
new_image_name = _get_new_image_name(base_image)
new_image_name = _get_new_image_name(base_image, is_eventstream_runtime=False)
assert new_image_name == 'od_sandbox:ubuntu__22.04'
base_image = 'ubuntu'
new_image_name = _get_new_image_name(base_image)
new_image_name = _get_new_image_name(base_image, is_eventstream_runtime=False)
assert new_image_name == 'od_sandbox:ubuntu__latest'
@@ -46,5 +47,11 @@ def test_get_od_sandbox_image(mock_docker_client, mock_build_sandbox_image):
image_name = get_od_sandbox_image(base_image, mock_docker_client)
assert image_name == 'od_sandbox:debian__11'
mock_build_sandbox_image.assert_called_once_with(
base_image, 'od_sandbox:debian__11', mock_docker_client
base_image,
'od_sandbox:debian__11',
mock_docker_client,
# eventstream runtime specific arguments, not used for sandbox-based runtime
# is_eventstream_runtime=
False,
skip_init=False,
)