Skip to main content

enforces budget

Project description

coreason-budget (The Controller)

Mission: Enforce Financial Operations (FinOps) guardrails for LLM usage.

This package acts as the "Controller," treating Compute (Tokens) as Cash. It enforces daily quotas and rejects requests immediately if limits are exceeded.

Features

  • Atomic Counting: Uses Redis for high-speed, atomic, thread-safe counters.
  • Hierarchical Quotas: Enforces limits at User, Project, and Global scopes.
  • Fail Closed: Security-first design; if the budget cannot be checked, the transaction is blocked.
  • Manual Integration: Designed to be integrated into your middleware with a "Check-then-Charge" lifecycle.
  • Modes of Operation: Can be used as a python library or a standalone microservice.

Installation

pip install coreason-budget

or with Poetry:

poetry add coreason-budget

Note: For Server Mode, you need the extra dependencies: pip install coreason-budget[server] (if available) or simply install fastapi and uvicorn.

Usage

The package can be used in two modes: Library Mode (Direct Python Import) or Server Mode (HTTP Microservice).

1. Server Mode (FinOps Microservice)

Deploy coreason-budget as a centralized service that other agents (Cortex, Sentinel) query via HTTP.

Docker Deployment

The easiest way to run the server is via Docker.

docker build -t coreason-budget .
docker run -p 8000:8000 \
  -e COREASON_BUDGET_REDIS_URL="redis://host.docker.internal:6379" \
  coreason-budget

API Endpoints

POST /check Verify if a user has enough budget.

// Request
{
  "user_id": "user_123",
  "estimated_cost": 0.05
}

// Response (200 OK)
{ "status": "allowed" }

// Response (429 Too Many Requests)
{ "detail": "Budget exceeded for User user_123..." }

POST /spend Record actual usage after an operation.

// Request
{
  "user_id": "user_123",
  "cost": 0.045,
  "project_id": "proj_alpha",
  "model": "gpt-4"
}

// Response (200 OK)
{ "status": "recorded" }

GET /health Check service health and Redis connectivity.

{ "status": "healthy", "redis": "connected" }

2. Library Mode

The package exposes a BudgetManager that you integrate directly into your Python application.

2.1. Configuration

The system is configured via BudgetConfig or environment variables (COREASON_BUDGET_*).

from coreason_budget import BudgetManager, BudgetConfig, BudgetExceededError

# Initialize with Redis URL and Limits
config = BudgetConfig(
    redis_url="redis://localhost:6379",
    daily_user_limit_usd=10.0,
    daily_project_limit_usd=500.0,
    daily_global_limit_usd=5000.0
)
budget = BudgetManager(config)

2.2. The Check-Charge Lifecycle

The middleware operates in two phases: Pre-Flight Check and Post-Flight Charge.

# --- Phase 1: Pre-Flight Check ---
# Before calling the LLM, verify budget availability.
user_id = "user_123"
try:
    # Check if user can spend (optionally pass estimated_cost)
    await budget.check_availability(user_id)
except BudgetExceededError:
    # Block the request immediately
    return Response("Daily Limit Reached", status_code=429)

# --- Execute LLM ---
# Perform the inference call
response = await llm.generate(...)

# --- Phase 2: Post-Flight Charge ---
# Calculate precise cost based on provider metadata
cost = budget.pricing.calculate(
    model="gpt-4",
    input_tokens=response.usage.prompt_tokens,
    output_tokens=response.usage.completion_tokens
)

# Atomically record the spend
await budget.record_spend(
    user_id=user_id,
    cost=cost,
    project_id="project_launch_sim", # Optional
    model="gpt-4"                    # Optional, for logging
)
print(f"Transaction Cost: ${cost}")

Configuration Options

Environment Variable Description Default
COREASON_BUDGET_REDIS_URL Redis Connection URL Required
COREASON_BUDGET_DAILY_USER_LIMIT_USD Daily limit per user ($) 10.0
COREASON_BUDGET_DAILY_PROJECT_LIMIT_USD Daily limit per project ($) 500.0
COREASON_BUDGET_DAILY_GLOBAL_LIMIT_USD Global hard limit ($) 5000.0
COREASON_BUDGET_LOG_PATH Path to log file logs/app.log

Architecture

  • RedisLedger: Manages atomic increments and key expiration (UTC Midnight).
  • BudgetGuard: Enforces limits and raises BudgetExceededError.
  • PricingEngine: Calculates costs using liteLLM or configured overrides.

Development

  1. Install Dependencies:

    poetry install
    
  2. Run Tests:

    poetry run pytest
    
  3. Code Quality:

    poetry run pre-commit run --all-files
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

coreason_budget-0.3.0.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

coreason_budget-0.3.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file coreason_budget-0.3.0.tar.gz.

File metadata

  • Download URL: coreason_budget-0.3.0.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for coreason_budget-0.3.0.tar.gz
Algorithm Hash digest
SHA256 cf505ea71bc4e0c146fb9d97e505587289e006f6cf64d468c6816cb44a2d744b
MD5 6f717cbc8dd1b81b8e40ae06a72fe84b
BLAKE2b-256 25329e163cd5a7fd929f179552f7be49debceb8cf2d2b90e7e9643d56594ee73

See more details on using hashes here.

Provenance

The following attestation bundles were made for coreason_budget-0.3.0.tar.gz:

Publisher: publish.yml on CoReason-AI/coreason-budget

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file coreason_budget-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for coreason_budget-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 85582768d3a38959cb403ab0aa9f11b0d122645755237cbb3b274ce5030f2bfa
MD5 07d6a775c8047f334d135a854647d67a
BLAKE2b-256 899f74a502066d0b6b8183811789f874869c6dab317168fe2fe7cf97a447ca37

See more details on using hashes here.

Provenance

The following attestation bundles were made for coreason_budget-0.3.0-py3-none-any.whl:

Publisher: publish.yml on CoReason-AI/coreason-budget

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page