Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion hud/eval/runtime.py
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,9 @@ def __init__(
self.snapshot_name = snapshot_name
# Default command serves on *port*, so the SSH forward target always
# matches what's listening; override only for a non-default layout.
self.command = command or f"hud serve env.py --host 0.0.0.0 --port {port}"
self.command = (
command or f'PATH="$PWD/.venv/bin:$PATH" hud serve env.py --host 0.0.0.0 --port {port}'
)
self.workdir = workdir
self.port = port
self.ssh_host = ssh_host
Expand Down Expand Up @@ -720,6 +722,7 @@ async def __call__(self, task: Task) -> AsyncIterator[Runtime]:
kwargs: dict[str, Any] = {
"image": Image.base(config.image),
"ephemeral": True,
"auto_stop_interval": 0,
}
if daytona_resources is not None:
kwargs["resources"] = daytona_resources
Expand Down Expand Up @@ -751,6 +754,7 @@ async def __call__(self, task: Task) -> AsyncIterator[Runtime]:
sandbox_params = CreateSandboxFromSnapshotParams(
snapshot=self.snapshot_name,
ephemeral=True,
auto_stop_interval=0,
)

create_timeout = 120
Expand Down
27 changes: 26 additions & 1 deletion hud/eval/tests/test_docker_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ async def create(*args: str, **kwargs: object) -> _FakeModalSandbox:
class _CreateSandboxFromSnapshotParams:
snapshot: str
ephemeral: bool
auto_stop_interval: int


@dataclass(frozen=True)
Expand All @@ -207,6 +208,7 @@ class _CreateSnapshotParams:
class _CreateSandboxFromImageParams:
image: object
ephemeral: bool
auto_stop_interval: int
resources: object | None = None


Expand Down Expand Up @@ -641,6 +643,7 @@ async def test_daytona_runtime_config_flows_into_daytona_sdk(
assert create_params == _CreateSandboxFromImageParams(
image=_DaytonaImage("img:tag"),
ephemeral=True,
auto_stop_interval=0,
resources=_DaytonaResources(
cpu=2,
memory=4,
Expand All @@ -653,7 +656,9 @@ async def test_daytona_runtime_config_flows_into_daytona_sdk(
assert calls["execute"] == (
"hud-serve",
_SessionExecuteRequest(
command="cd /app && hud serve env.py --host 0.0.0.0 --port 8765",
command=(
'cd /app && PATH="$PWD/.venv/bin:$PATH" hud serve env.py --host 0.0.0.0 --port 8765'
),
run_async=True,
),
)
Expand Down Expand Up @@ -692,11 +697,31 @@ async def test_daytona_task_runtime_config_overlays_provider_defaults(
assert create_params == _CreateSandboxFromImageParams(
image=_DaytonaImage("img:task"),
ephemeral=True,
auto_stop_interval=0,
resources=_DaytonaResources(cpu=2, memory=4),
)
assert create_timeout == 45


async def test_daytona_snapshot_sandboxes_disable_auto_stop(
monkeypatch: pytest.MonkeyPatch,
) -> None:
calls = _install_fake_daytona(monkeypatch)

async with DaytonaRuntime("snapshot")(_row()):
pass

create_call = calls["create"]
assert isinstance(create_call, tuple)
create_params, create_timeout = create_call
assert create_params == _CreateSandboxFromSnapshotParams(
snapshot="snapshot",
ephemeral=True,
auto_stop_interval=0,
)
assert create_timeout == 120


async def test_daytona_runtime_config_rejects_unsupported_fields(
monkeypatch: pytest.MonkeyPatch,
) -> None:
Expand Down
Loading