57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
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
|