Files

92 lines
2.8 KiB
Python

"""ASV benchmarks for skill-level file operation tools.
Measures the performance of:
- ReadFile with binary detection
- WriteFile with atomic writes
- EditFile with permission preservation
- DeleteFile operations
- Registration helpers
"""
from __future__ import annotations
import shutil
import sys
import tempfile
from pathlib import Path
try:
from cleveragents.skills.builtins.file_ops import register_skill_file_tools
from cleveragents.tool.registry import ToolRegistry
from cleveragents.tool.runner import ToolRunner
except ModuleNotFoundError:
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
from cleveragents.skills.builtins.file_ops import register_skill_file_tools
from cleveragents.tool.registry import ToolRegistry
from cleveragents.tool.runner import ToolRunner
class SkillFileToolSuite:
"""Benchmark skill-level file tool operations."""
def setup(self) -> None:
self.sandbox = tempfile.mkdtemp()
self.registry = ToolRegistry()
register_skill_file_tools(self.registry)
self.runner = ToolRunner(self.registry)
# Create test files
(Path(self.sandbox) / "read_test.txt").write_text("hello benchmark\n" * 100)
(Path(self.sandbox) / "edit_test.txt").write_text(
"original content here\n" * 10
)
def teardown(self) -> None:
shutil.rmtree(self.sandbox, ignore_errors=True)
def time_skill_file_read(self) -> None:
self.runner.execute(
"skill/file-read",
{"path": "read_test.txt", "sandbox_root": self.sandbox},
)
def time_skill_file_write(self) -> None:
self.runner.execute(
"skill/file-write",
{
"path": "bench_write.txt",
"content": "benchmark data",
"sandbox_root": self.sandbox,
},
)
def time_skill_file_edit(self) -> None:
# Reset file content first
(Path(self.sandbox) / "edit_test.txt").write_text(
"original content here\n" * 10
)
self.runner.execute(
"skill/file-edit",
{
"path": "edit_test.txt",
"old_text": "original",
"new_text": "modified",
"sandbox_root": self.sandbox,
},
)
def time_skill_file_delete(self) -> None:
# Create file to delete
(Path(self.sandbox) / "delete_me.txt").write_text("bye")
self.runner.execute(
"skill/file-delete",
{"path": "delete_me.txt", "sandbox_root": self.sandbox},
)
class SkillFileRegistrationSuite:
"""Benchmark skill file tool registration."""
def time_register_skill_file_tools(self) -> None:
registry = ToolRegistry()
register_skill_file_tools(registry)