머니페니 76e3220e77
All checks were successful
Deploy to Production / deploy (push) Successful in 3m10s
feat: 에이전트 기능 추가 (LLM 서비스, 에이전트 API, 테스트)
2026-05-06 20:56:45 +09:00

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