mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-06 17:38:35 +00:00
Narrow tool config decoupling diff
This commit is contained in:
parent
e015f469ad
commit
cc7e0d7244
@ -217,7 +217,6 @@ class AgentLoop:
|
|||||||
runtime_events: RuntimeEventBus | None = None,
|
runtime_events: RuntimeEventBus | None = None,
|
||||||
runtime_model_publisher: Callable[[str, str | None], None] | None = None,
|
runtime_model_publisher: Callable[[str, str | None], None] | None = None,
|
||||||
):
|
):
|
||||||
from nanobot.agent.tools.config import tool_config_by_key
|
|
||||||
from nanobot.config.schema import ToolsConfig
|
from nanobot.config.schema import ToolsConfig
|
||||||
|
|
||||||
_tc = tools_config or ToolsConfig()
|
_tc = tools_config or ToolsConfig()
|
||||||
@ -255,8 +254,8 @@ class AgentLoop:
|
|||||||
else defaults.tool_hint_max_length
|
else defaults.tool_hint_max_length
|
||||||
)
|
)
|
||||||
self.tools_config = _tc
|
self.tools_config = _tc
|
||||||
self.web_config = tool_config_by_key(_tc, "web")
|
self.web_config = _tc.web
|
||||||
self.exec_config = tool_config_by_key(_tc, "exec")
|
self.exec_config = _tc.exec
|
||||||
self._image_generation_provider_configs = dict(image_generation_provider_configs or {})
|
self._image_generation_provider_configs = dict(image_generation_provider_configs or {})
|
||||||
if (
|
if (
|
||||||
image_generation_provider_config is not None
|
image_generation_provider_config is not None
|
||||||
@ -440,7 +439,6 @@ class AgentLoop:
|
|||||||
|
|
||||||
def _register_default_tools(self) -> None:
|
def _register_default_tools(self) -> None:
|
||||||
"""Register the default set of tools via plugin loader."""
|
"""Register the default set of tools via plugin loader."""
|
||||||
from nanobot.agent.tools.config import tool_config
|
|
||||||
from nanobot.agent.tools.context import ToolContext
|
from nanobot.agent.tools.context import ToolContext
|
||||||
from nanobot.agent.tools.loader import ToolLoader
|
from nanobot.agent.tools.loader import ToolLoader
|
||||||
|
|
||||||
@ -461,10 +459,9 @@ class AgentLoop:
|
|||||||
registered = loader.load(ctx, self.tools)
|
registered = loader.load(ctx, self.tools)
|
||||||
|
|
||||||
# MyTool needs runtime state reference — manual registration
|
# MyTool needs runtime state reference — manual registration
|
||||||
my_config = tool_config(self.tools_config, MyTool)
|
if self.tools_config.my.enable:
|
||||||
if my_config.enable:
|
|
||||||
self.tools.register(
|
self.tools.register(
|
||||||
MyTool(runtime_state=self, modify_allowed=my_config.allow_set)
|
MyTool(runtime_state=self, modify_allowed=self.tools_config.my.allow_set)
|
||||||
)
|
)
|
||||||
registered.append("my")
|
registered.append("my")
|
||||||
|
|
||||||
|
|||||||
@ -115,12 +115,10 @@ class SubagentManager:
|
|||||||
|
|
||||||
def _subagent_tools_config(self) -> ToolsConfig:
|
def _subagent_tools_config(self) -> ToolsConfig:
|
||||||
"""Build a ToolsConfig scoped for subagent use."""
|
"""Build a ToolsConfig scoped for subagent use."""
|
||||||
from nanobot.agent.tools.config import tool_config_by_key
|
|
||||||
|
|
||||||
return ToolsConfig(
|
return ToolsConfig(
|
||||||
exec=tool_config_by_key(self.tools_config, "exec"),
|
exec=self.tools_config.exec,
|
||||||
web=tool_config_by_key(self.tools_config, "web"),
|
web=self.tools_config.web,
|
||||||
file=tool_config_by_key(self.tools_config, "file"),
|
file=self.tools_config.file,
|
||||||
restrict_to_workspace=self.restrict_to_workspace,
|
restrict_to_workspace=self.restrict_to_workspace,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -58,17 +58,6 @@ def _materialize_config(config: BaseModel, key: str, config_cls: type[BaseModel]
|
|||||||
return parsed
|
return parsed
|
||||||
|
|
||||||
|
|
||||||
def tool_config(config: Any, tool_cls: type[Any]) -> Any:
|
|
||||||
"""Return the parsed config section for one tool class."""
|
|
||||||
key = getattr(tool_cls, "config_key", "")
|
|
||||||
config_cls = tool_cls.config_cls()
|
|
||||||
if not key or config_cls is None:
|
|
||||||
return None
|
|
||||||
if not isinstance(config, BaseModel):
|
|
||||||
return getattr(config, key)
|
|
||||||
return _materialize_config(config, key, config_cls)
|
|
||||||
|
|
||||||
|
|
||||||
def tool_config_by_key(config: Any, key: str) -> Any:
|
def tool_config_by_key(config: Any, key: str) -> Any:
|
||||||
"""Return the parsed config section for a tool config key."""
|
"""Return the parsed config section for a tool config key."""
|
||||||
if not isinstance(config, BaseModel):
|
if not isinstance(config, BaseModel):
|
||||||
|
|||||||
@ -97,8 +97,6 @@ class ToolLoader:
|
|||||||
return plugins
|
return plugins
|
||||||
|
|
||||||
def load(self, ctx: Any, registry: ToolRegistry, *, scope: str = "core") -> list[str]:
|
def load(self, ctx: Any, registry: ToolRegistry, *, scope: str = "core") -> list[str]:
|
||||||
from nanobot.agent.tools.config import tool_config
|
|
||||||
|
|
||||||
registered: list[str] = []
|
registered: list[str] = []
|
||||||
builtin_names: set[str] = set()
|
builtin_names: set[str] = set()
|
||||||
sources = [(self.discover(), False), (self._discover_plugins().values(), True)]
|
sources = [(self.discover(), False), (self._discover_plugins().values(), True)]
|
||||||
@ -108,7 +106,6 @@ class ToolLoader:
|
|||||||
try:
|
try:
|
||||||
if scope not in getattr(tool_cls, "_scopes", {"core"}):
|
if scope not in getattr(tool_cls, "_scopes", {"core"}):
|
||||||
continue
|
continue
|
||||||
tool_config(ctx.config, tool_cls)
|
|
||||||
if not tool_cls.enabled(ctx):
|
if not tool_cls.enabled(ctx):
|
||||||
continue
|
continue
|
||||||
tool = tool_cls.create(ctx)
|
tool = tool_cls.create(ctx)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user