Ctrl K
ComunidadGuías…

butler/transport/fusion_client_ops.py

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

Archivo original ↗Preguntar a KiBot
"""Fusion client best-effort helpers (P0-A)."""

from __future__ import annotations

from typing import Any

from butler.core.best_effort import safe_best_effort


def record_fusion_llm_cost_safe(session_key: str, usage: Any) -> None:
    if not session_key or usage is None:
        return

    def _run() -> None:
        from butler.ops.cost_tracker import get_session_cost

        get_session_cost(session_key).record_llm_call(
            input_tokens=getattr(usage, "prompt_tokens", 0) or 0,
            output_tokens=getattr(usage, "completion_tokens", 0) or 0,
        )

    safe_best_effort(_run, label="fusion_client.record_cost", default=None)


def current_fusion_session_key_safe() -> str:
    def _run() -> str:
        from butler.execution_context import get_current_session_key

        return str(get_current_session_key() or "")

    result = safe_best_effort(
        _run,
        label="fusion_client.session_key",
        default="",
    )
    return str(result or "")


def fusion_complete_or_raise_unavailable(complete_fn: Any, prompt: str) -> str:
    from butler.skills.consolidator import ConsolidatorLLMUnavailable

    try:
        return str(complete_fn(prompt))
    except ConsolidatorLLMUnavailable:
        raise
    except Exception as exc:
        raise ConsolidatorLLMUnavailable(str(exc)) from exc