Files
AstrBot/tests/unit/test_star_context.py

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 == ""