butler/tools/provider_layers.py
Rama main · réplica de lectura del repositorio original.
"""Tool provider layering for diagnostics (Dify ToolProvider subset)."""
from __future__ import annotations
from collections import Counter
def tool_provider_layer(name: str) -> str:
n = str(name or "").strip()
if not n:
return "unknown"
if n.startswith("mcp_") or n.startswith("mcp."):
return "mcp"
if n in {"run_workflow", "delegate_task"}:
return "workflow"
if n in {"butler_remember", "butler_recall", "search_transcript"}:
return "memory"
if n.startswith("http_") or n.endswith("_http"):
return "http"
return "builtin"
def summarize_tool_layers(tool_names: list[str]) -> dict[str, int]:
counts: Counter[str] = Counter()
for name in tool_names:
counts[tool_provider_layer(name)] += 1
return dict(counts)
def format_tool_layers_line(tool_names: list[str]) -> str:
summary = summarize_tool_layers(tool_names)
if not summary:
return "工具分层: (无)"
parts = [f"{layer}={count}" for layer, count in sorted(summary.items())]
return "工具分层: " + ", ".join(parts)