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:
37
docker_agent_sandbox/tools/copy_file.py
Normal file
37
docker_agent_sandbox/tools/copy_file.py
Normal 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
|
||||
Reference in New Issue
Block a user