92 lines
2.8 KiB
Python
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)
|