mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-15 17:30:13 +08:00
107 lines
2.9 KiB
Python
107 lines
2.9 KiB
Python
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from astrbot.core.agent.tool import FunctionTool
|
|
from astrbot.core.provider.func_tool_manager import FunctionToolManager
|
|
from astrbot.core.star.context import Context
|
|
from astrbot.core.star.star import StarMetadata, star_registry
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def restore_star_registry():
|
|
original_registry = list(star_registry)
|
|
star_registry.clear()
|
|
try:
|
|
yield
|
|
finally:
|
|
star_registry[:] = original_registry
|
|
|
|
|
|
def make_context() -> Context:
|
|
context = Context.__new__(Context)
|
|
context.provider_manager = SimpleNamespace(llm_tools=FunctionToolManager())
|
|
return context
|
|
|
|
|
|
def make_tool(name: str, module_path: str) -> FunctionTool:
|
|
tool = FunctionTool(
|
|
name=name,
|
|
description="test tool",
|
|
parameters={"type": "object", "properties": {}},
|
|
)
|
|
tool.__module__ = module_path
|
|
return tool
|
|
|
|
|
|
def test_add_llm_tools_resolves_subdirectory_plugin_without_name_prefix():
|
|
star_registry.append(
|
|
StarMetadata(
|
|
name="Custom Plugin",
|
|
root_dir_name="custom_plugin",
|
|
module_path="data.plugins.custom_plugin.main",
|
|
)
|
|
)
|
|
context = make_context()
|
|
tool = make_tool("search", "custom_plugin.tools.search")
|
|
|
|
context.add_llm_tools(tool)
|
|
|
|
assert tool.handler_module_path == "data.plugins.custom_plugin.main"
|
|
|
|
|
|
def test_add_llm_tools_uses_registered_non_main_plugin_entrypoint():
|
|
star_registry.append(
|
|
StarMetadata(
|
|
name="Custom Plugin",
|
|
module_path="data.plugins.custom_plugin.custom_plugin",
|
|
)
|
|
)
|
|
context = make_context()
|
|
tool = make_tool("search", "custom_plugin.tools.search")
|
|
|
|
context.add_llm_tools(tool)
|
|
|
|
assert tool.handler_module_path == "data.plugins.custom_plugin.custom_plugin"
|
|
|
|
|
|
def test_add_llm_tools_resolves_prefixed_subdirectory_tool_from_registry():
|
|
star_registry.append(
|
|
StarMetadata(
|
|
name="Custom Plugin",
|
|
root_dir_name="custom_plugin",
|
|
module_path="data.plugins.custom_plugin.custom_plugin",
|
|
)
|
|
)
|
|
context = make_context()
|
|
tool = make_tool("search", "data.plugins.custom_plugin.tools.search")
|
|
|
|
context.add_llm_tools(tool)
|
|
|
|
assert tool.handler_module_path == "data.plugins.custom_plugin.custom_plugin"
|
|
|
|
|
|
def test_add_llm_tools_does_not_treat_unknown_module_as_plugin():
|
|
star_registry.append(
|
|
StarMetadata(
|
|
name="Custom Plugin",
|
|
root_dir_name="custom_plugin",
|
|
module_path="data.plugins.custom_plugin.main",
|
|
)
|
|
)
|
|
context = make_context()
|
|
tool = make_tool("search", "external_package.tools.search")
|
|
|
|
context.add_llm_tools(tool)
|
|
|
|
assert tool.handler_module_path == "external_package.tools.search"
|
|
|
|
|
|
def test_add_llm_tools_handles_empty_tool_module_path():
|
|
context = make_context()
|
|
tool = make_tool("search", "")
|
|
|
|
context.add_llm_tools(tool)
|
|
|
|
assert tool.handler_module_path == ""
|