feat: Initial library extraction from PIN LLM benchmark

DockerSandbox + LangChain file/shell tools extracted into a standalone package.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-02 11:47:44 +02:00
commit 80c2f9b159
17 changed files with 758 additions and 0 deletions

View File

@@ -0,0 +1,37 @@
"""copy_file.py tool for copying files inside the sandbox."""
from __future__ import annotations
from shlex import quote
from typing import TYPE_CHECKING
from langchain_core.tools import BaseTool, tool
from loguru import logger
from docker_agent_sandbox.tools._utils import _parent
if TYPE_CHECKING:
from docker_agent_sandbox.sandbox import DockerSandbox
def make_copy_file_tool(sandbox: "DockerSandbox") -> BaseTool:
"""Return a copy_file tool bound to *sandbox*."""
@tool
def copy_file(src: str, dst: str) -> str:
"""
Copy a file from *src* to *dst*.
Parent directories of *dst* are created automatically.
Returns a confirmation message or an error.
"""
logger.debug("Copying file inside sandbox: {!r} -> {!r}", src, dst)
mkdir_cmd = f"mkdir -p -- {quote(_parent(dst))}"
exit_code, output = sandbox.exec(
f"{mkdir_cmd} && cp -- {quote(src)} {quote(dst)}"
)
if exit_code != 0:
return f"[ERROR copying {src!r} to {dst!r}] {output.strip()}"
return f"[OK] Copied {src} -> {dst}"
return copy_file