catalog.py 883 B

1234567891011121314151617181920212223242526272829
  1. """工具目录 — 按类别组织、搜索"""
  2. from __future__ import annotations
  3. from tool_agent.models import ToolMeta, ToolStatus
  4. class Catalog:
  5. """工具目录查询"""
  6. def __init__(self, tools: list[ToolMeta]) -> None:
  7. self._tools = tools
  8. def by_category(self) -> dict[str, list[ToolMeta]]:
  9. """按类别分组"""
  10. result: dict[str, list[ToolMeta]] = {}
  11. for t in self._tools:
  12. if t.status == ToolStatus.ACTIVE:
  13. result.setdefault(t.category or "uncategorized", []).append(t)
  14. return result
  15. def search(self, keyword: str) -> list[ToolMeta]:
  16. """关键词搜索"""
  17. keyword = keyword.lower()
  18. return [
  19. t for t in self._tools
  20. if t.status == ToolStatus.ACTIVE
  21. and (keyword in t.name.lower() or keyword in t.description.lower())
  22. ]