fix(cache): stabilize tool ordering and cache markers for MCP
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from nanobot.agent.tools.base import Tool
|
||||
from nanobot.agent.tools.registry import ToolRegistry
|
||||
|
||||
|
||||
class _FakeTool(Tool):
|
||||
def __init__(self, name: str):
|
||||
self._name = name
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def description(self) -> str:
|
||||
return f"{self._name} tool"
|
||||
|
||||
@property
|
||||
def parameters(self) -> dict[str, Any]:
|
||||
return {"type": "object", "properties": {}}
|
||||
|
||||
async def execute(self, **kwargs: Any) -> Any:
|
||||
return kwargs
|
||||
|
||||
|
||||
def _tool_names(definitions: list[dict[str, Any]]) -> list[str]:
|
||||
names: list[str] = []
|
||||
for definition in definitions:
|
||||
fn = definition.get("function", {})
|
||||
names.append(fn.get("name", ""))
|
||||
return names
|
||||
|
||||
|
||||
def test_get_definitions_orders_builtins_then_mcp_tools() -> None:
|
||||
registry = ToolRegistry()
|
||||
registry.register(_FakeTool("mcp_git_status"))
|
||||
registry.register(_FakeTool("write_file"))
|
||||
registry.register(_FakeTool("mcp_fs_list"))
|
||||
registry.register(_FakeTool("read_file"))
|
||||
|
||||
assert _tool_names(registry.get_definitions()) == [
|
||||
"read_file",
|
||||
"write_file",
|
||||
"mcp_fs_list",
|
||||
"mcp_git_status",
|
||||
]
|
||||
Reference in New Issue
Block a user