from __future__ import annotations from app.agents.tools.types import RegisteredTool class ToolRegistry: """등록된 도구를 관리하는 레지스트리.""" def __init__(self) -> None: self._tools: dict[str, RegisteredTool] = {} def register(self, tool: RegisteredTool) -> None: self._tools[tool.name] = tool def get(self, name: str) -> RegisteredTool | None: return self._tools.get(name) def list_tools(self) -> list[RegisteredTool]: return list(self._tools.values()) def get_concurrency_map(self) -> dict[str, bool]: return {t.name: t.concurrency_safe for t in self._tools.values()} def build_compact_descriptions(self) -> str: lines = [ f"- {t.name}: {t.compact_description}" for t in self._tools.values() ] return "\n".join(lines) @classmethod def auto_register(cls) -> ToolRegistry: """설정에 따라 사용 가능한 도구를 자동 등록한다.""" from app.agents.tools.finance.get_market_data import MarketDataTool from app.agents.tools.finance.get_financials import FinancialsTool registry = cls() market = MarketDataTool() registry.register(RegisteredTool( name=MarketDataTool.NAME, description=MarketDataTool.DESCRIPTION, compact_description=MarketDataTool.DESCRIPTION, concurrency_safe=True, execute=market.execute, )) financials = FinancialsTool() registry.register(RegisteredTool( name=FinancialsTool.NAME, description=FinancialsTool.DESCRIPTION, compact_description=FinancialsTool.DESCRIPTION, concurrency_safe=True, execute=financials.execute, )) return registry