ml-intern-api / agent /core /usage_thresholds.py
abidlabs's picture
abidlabs HF Staff
Deploy ML Intern API (backend + self-documenting frontend)
1635e66 verified
Raw
History Blame Contribute Delete
1.93 kB
"""Helpers for session usage-threshold approval warnings."""
from typing import Any
USAGE_THRESHOLD_TOOL_NAME = "usage_threshold"
USAGE_WARNING_FIRST_THRESHOLD_USD = 5.0
USAGE_WARNING_MULTIPLIER = 2.0
def normalize_usage_threshold(value: Any) -> float:
"""Return a usable positive threshold, defaulting to the first warning."""
if isinstance(value, bool):
return USAGE_WARNING_FIRST_THRESHOLD_USD
try:
threshold = float(value)
except (TypeError, ValueError):
return USAGE_WARNING_FIRST_THRESHOLD_USD
if threshold <= 0:
return USAGE_WARNING_FIRST_THRESHOLD_USD
return threshold
def next_usage_warning_threshold(
current_spend_usd: float,
acknowledged_threshold_usd: float,
) -> float:
"""Advance the next threshold until it is above the current spend."""
threshold = normalize_usage_threshold(acknowledged_threshold_usd)
current = max(0.0, float(current_spend_usd or 0.0))
while threshold <= current:
threshold *= USAGE_WARNING_MULTIPLIER
return round(threshold, 4)
def is_usage_threshold_pending(pending_approval: Any) -> bool:
return (
isinstance(pending_approval, dict)
and pending_approval.get("kind") == USAGE_THRESHOLD_TOOL_NAME
)
def usage_threshold_pending_to_tool(pending_approval: dict[str, Any]) -> dict[str, Any]:
"""Represent a synthetic usage approval as the existing pending-tool shape."""
tool_call_id = str(pending_approval.get("tool_call_id") or "")
arguments = {
"threshold_usd": pending_approval.get("threshold_usd"),
"current_spend_usd": pending_approval.get("current_spend_usd"),
"next_threshold_usd": pending_approval.get("next_threshold_usd"),
"billing_source": pending_approval.get("billing_source"),
}
return {
"tool": USAGE_THRESHOLD_TOOL_NAME,
"tool_call_id": tool_call_id,
"arguments": arguments,
}