Files
nanobot/tests/tools/test_tool_descriptions.py
T

76 lines
3.0 KiB
Python

import sys
from nanobot.agent.tools.apply_patch import ApplyPatchTool
from nanobot.agent.tools.exec_session import ExecSessionTool, ListExecSessionsTool
from nanobot.agent.tools.filesystem import EditFileTool, ReadFileTool, WriteFileTool
from nanobot.agent.tools.search import FindFilesTool, GrepTool
from nanobot.agent.tools.shell import ExecTool
def test_coding_tool_descriptions_steer_editing_priority() -> None:
apply_patch = ApplyPatchTool().description.lower()
edit_file = EditFileTool().description.lower()
write_file = WriteFileTool().description.lower()
assert "default tool for code edits" in apply_patch
assert "multi-file" in apply_patch
assert "dry_run=true" in apply_patch
assert "edit_file only for small exact replacements" in apply_patch
assert "small, exact replacement" in edit_file
assert "copied from read_file" in edit_file
assert "prefer apply_patch" in edit_file
assert "replace an entire file" in write_file
assert "prefer apply_patch" in write_file
def test_coding_tool_descriptions_steer_discovery() -> None:
read_file = ReadFileTool().description.lower()
find_files = FindFilesTool().description.lower()
grep = GrepTool().description.lower()
assert "find_files/list_dir first" in read_file
assert "before editing" in read_file
assert "uploaded non-image attachments are referenced by path" in read_file
assert "only when their contents are needed" in read_file
assert "prefer it over shell find/ls" in find_files
assert "prefer this over shell grep" in grep
def test_exec_tool_descriptions_are_concise() -> None:
assert ExecTool().description == "Execute a shell command."
assert ExecSessionTool().description == "Manage a session returned by exec."
assert ListExecSessionsTool().description == "List active exec sessions."
exec_parameters = ExecTool().parameters["properties"]
assert "omit to wait for exit" in exec_parameters["yield_time_ms"]["description"]
session_parameters = ExecSessionTool().parameters["properties"]
assert set(session_parameters) == {
"session_id",
"input",
"close_stdin",
"terminate",
"wait_for",
"until_exit",
"timeout_ms",
}
assert session_parameters["until_exit"]["description"] == "Wait for the process to exit."
assert "wait_for" in session_parameters["timeout_ms"]["description"]
assert "until_exit" in session_parameters["timeout_ms"]["description"]
def test_exec_shell_parameter_guidance_matches_platform() -> None:
shell_parameter = ExecTool().parameters["properties"]["shell"]["description"].lower()
if sys.platform == "win32":
assert "omit for powershell" in shell_parameter
assert "powershell" in shell_parameter
assert "cmd" in shell_parameter
assert "bash" not in shell_parameter
else:
assert "omit for bash" in shell_parameter
assert "zsh" in shell_parameter
assert "powershell" not in shell_parameter
assert "cmd" not in shell_parameter