Agent FinOps
Per-agent cost caps, attribution, and warehouse budget enforcement
pramiti-agent-finops provides per-agent daily warehouse cost caps and attribution. It prevents runaway AI agents from burning through cloud compute budgets by enforcing configurable spending limits.
On the Pramiti platform the USD figure is Snowflake, reconciled from QUERY_HISTORY; other warehouses unpriced. BigQuery still attributes spend from bytes scanned (a different path). The cap on POST /api/v1/query and on authenticated MCP SSE ask_question (per resolved API key) reads query_log.warehouse_cost_usd. The stdio MCP transport is uncapped.
Install
pip install pramiti-agent-finopsQuick Start
from pramiti_agent_finops import CapChecker, CapExceededError
from pramiti_agent_finops.backends import InMemoryBackend
# Set up a backend and configure caps
backend = InMemoryBackend()
backend.set_cap("ws-1", "my-agent", max_usd=10.0, action="block")
backend.add_cost("ws-1", "my-agent", 11.0)
# Check if the agent has exceeded its cap
checker = CapChecker(backend)
try:
checker.check("ws-1", "my-agent")
except CapExceededError as e:
print(f"Blocked: {e}") # Agent exceeded $10.00 daily capAPI Reference
CapChecker
The core enforcement engine. Zero external dependencies — inject any ICostBackend-compatible storage adapter.
class CapChecker:
def __init__(self, backend: ICostBackend): ...
def check(self, workspace_id: str, agent_id: str) -> None: ...check()raisesCapExceededErrorif the agent has exceeded its daily cap with action="block"check()issues aCapWarningif the agent has exceeded its daily cap with action="warn"check()is a no-op if no cap is configured for the agent
ICostBackend (Interface)
Storage adapter interface. Implement this for custom storage:
class ICostBackend(ABC):
def get_cap(self, workspace_id: str, agent_id: str) -> Optional[dict]: ...
def get_current_cost(self, workspace_id: str, agent_id: str) -> float: ...
def add_cost(self, workspace_id: str, agent_id: str, amount_usd: float) -> None: ...
def set_cap(self, workspace_id: str, agent_id: str, max_usd: float, action: str) -> None: ...InMemoryBackend
Built-in in-memory backend for testing and evaluation:
backend = InMemoryBackend()
backend.set_cap("ws-1", "agent-1", max_usd=5.0, action="block")
backend.add_cost("ws-1", "agent-1", 3.50)Exceptions
CapExceededError— Raised when an agent exceeds its cap and action is "block"CapWarning— Warning issued when an agent exceeds its cap and action is "warn"
Platform Integration
When used inside the Pramiti platform, use the PostgreSQL backend:
from pramiti_agent_finops import CapChecker
from pramiti.contexts.epistom.agent.application.finops import PostgreSQLCostBackend
backend = PostgreSQLCostBackend(session)
checker = CapChecker(backend)
checker.check(str(workspace_id), agent_id)