64 lines
2.4 KiB
Python
64 lines
2.4 KiB
Python
from pathlib import Path
|
|
|
|
from agents.sandbox.entries import BaseEntry, Dir, DockerVolumeMountStrategy, S3Mount
|
|
from agents.sandbox.manifest import Manifest
|
|
from agents.sandbox.remote_mount_policy import build_remote_mount_policy_instructions
|
|
|
|
|
|
def _s3_mount(*, read_only: bool) -> S3Mount:
|
|
return S3Mount(
|
|
bucket="example-bucket",
|
|
mount_strategy=DockerVolumeMountStrategy(driver="rclone"),
|
|
read_only=read_only,
|
|
)
|
|
|
|
|
|
def _policy_for(entries: dict[str | Path, BaseEntry]) -> str:
|
|
policy = build_remote_mount_policy_instructions(Manifest(entries=entries))
|
|
assert policy is not None
|
|
return policy
|
|
|
|
|
|
def test_remote_mount_policy_does_not_suggest_direct_edits_for_read_only_mounts() -> None:
|
|
policy = _policy_for({"data": _s3_mount(read_only=True)})
|
|
|
|
assert "/workspace/data (mounted in read-only mode)" in policy
|
|
assert "`apply_patch` directly" not in policy
|
|
assert "copy it back" not in policy
|
|
assert "Do not edit paths marked read-only in place" in policy
|
|
assert "including with `apply_patch`" in policy
|
|
assert "do not write edited files back" in policy
|
|
|
|
|
|
def test_remote_mount_policy_keeps_direct_and_copy_back_guidance_for_read_write_mounts() -> None:
|
|
policy = _policy_for({"data": _s3_mount(read_only=False)})
|
|
|
|
assert "/workspace/data (mounted in read+write mode)" in policy
|
|
assert "Use `apply_patch` directly for text edits on read+write mounts." in policy
|
|
assert "For shell-based edits on read+write mounts" in policy
|
|
assert "copy it back" in policy
|
|
assert "Do not edit paths marked read-only" not in policy
|
|
|
|
|
|
def test_remote_mount_policy_handles_mixed_read_only_and_read_write_mounts() -> None:
|
|
policy = _policy_for(
|
|
{
|
|
"input": _s3_mount(read_only=True),
|
|
"output": _s3_mount(read_only=False),
|
|
}
|
|
)
|
|
|
|
assert "/workspace/input (mounted in read-only mode)" in policy
|
|
assert "/workspace/output (mounted in read+write mode)" in policy
|
|
assert "Use `apply_patch` directly for text edits on read+write mounts." in policy
|
|
assert "For shell-based edits on read+write mounts" in policy
|
|
assert "Do not edit paths marked read-only in place" in policy
|
|
assert "including with `apply_patch`" in policy
|
|
assert "do not write edited files back" in policy
|
|
|
|
|
|
def test_remote_mount_policy_returns_none_without_remote_mounts() -> None:
|
|
policy = build_remote_mount_policy_instructions(Manifest(entries={"local": Dir()}))
|
|
|
|
assert policy is None
|