toolmanager to handle the tool configs

This commit is contained in:
2025-10-15 17:25:53 +08:00
parent 4838a251b7
commit 0b02aed3f1

View File

@@ -11,7 +11,7 @@ from lang_agent.rag.simple import SimpleRagConfig
from lang_agent.base import LangToolBase from lang_agent.base import LangToolBase
from lang_agent.config import InstantiateConfig, ToolConfig from lang_agent.config import InstantiateConfig, ToolConfig
from lang_agent.dummy.calculator import Calculator, CalculatorConfig from lang_agent.dummy.calculator import Calculator, CalculatorConfig
from lang_agent.tool_manager import ToolManager, ToolManagerConfig
from catering_end.lang_tool import CartToolConfig, CartTool from catering_end.lang_tool import CartToolConfig, CartTool
@@ -31,46 +31,26 @@ class MCPServerConfig(InstantiateConfig):
transport:Literal["stdio", "sse", "streamable-http"] = "streamable-http" transport:Literal["stdio", "sse", "streamable-http"] = "streamable-http"
"""transport method""" """transport method"""
# tool configs here; toolmanager_config: ToolManagerConfig = field(default_factory=ToolManagerConfig)
rag_config: SimpleRagConfig = field(default_factory=SimpleRagConfig)
cart_config: CartToolConfig = field(default_factory=CartToolConfig)
calc_config: CalculatorConfig = field(default_factory=CalculatorConfig)
class MCPServer: class MCPServer:
def __init__(self, config: MCPServerConfig): def __init__(self, config: MCPServerConfig):
self.config = config self.config = config
self.mcp = FastMCP(self.config.server_name) self.mcp = FastMCP(self.config.server_name)
self.populate_modules()
self.register_mcp_functions() self.register_mcp_functions()
def _register_tool_fnc(self, tool:LangToolBase): def populate_modules(self):
for fnc in tool.get_tool_fnc(): self.tool_manager:ToolManager = self.config.toolmanager_config.setup()
if isinstance(fnc, FunctionTool):
fnc = fnc.fn
self.mcp.tool(fnc)
def _get_tool_config(self):
tool_confs = []
for e in dir(self.config):
el = getattr(self.config, e)
if ("calc_config" in e) and is_dataclass(el):
tool_confs.append(el)
return tool_confs
def register_mcp_functions(self): def register_mcp_functions(self):
fncs = self.tool_manager.get_tool_fncs()
for fnc in fncs:
self.mcp.tool(fnc)
# NOTE: add config here for new tools; too stupid to do this automatically
tool_configs = self._get_tool_config()
for tool_conf in tool_configs:
if tool_conf.use_tool:
logger.info(f"using tool:{tool_conf._target}")
self._register_tool_fnc(tool_conf.setup())
else:
logger.info(f"skipping tool:{tool_conf._target}")
def run(self): def run(self):
# 获取FastAPI应用实例 # 获取FastAPI应用实例