Ctrl K
ComunidadGuías…

butler/tools/provider_layers.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""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)