Skip to main content

Rate limiting library backed by DynamoDB with token bucket algorithm

Project description

zae-limiter

PyPI version Conda version Python versions License Lint Tests codecov Docs

A rate limiting library backed by DynamoDB using the token bucket algorithm.

Installation

pip install zae-limiter
# or
conda install -c conda-forge zae-limiter

Usage

from zae_limiter import Repository, RateLimiter, SyncRepository, SyncRateLimiter, Limit

# Auto-provisions infrastructure if needed
repo = await Repository.open()
limiter = RateLimiter(repository=repo)

# Sync
sync_repo = SyncRepository.open()
sync_limiter = SyncRateLimiter(repository=sync_repo)

# Define default limits (can be overridden per-entity)
default_limits = [
    Limit.per_minute("rpm", 100),
    Limit.per_minute("tpm", 10_000),
]

async with limiter.acquire(
    entity_id="api-key-123",
    resource="gpt-4",
    limits=default_limits,  # Multiple limits in a single atomic transaction
    consume={"rpm": 1, "tpm": 500},  # Estimate tokens upfront
) as lease:
    response = await call_llm()
    # Reconcile actual usage (can go negative for post-hoc adjustment)
    await lease.adjust(tpm=response.usage.total_tokens - 500)
    # Tokens written to DynamoDB on enter | Rolled back on exception

# Hierarchical entities: create project with stored limits, then API key under it
await limiter.create_entity(entity_id="proj-1", name="Production")
await limiter.set_limits("proj-1", [Limit.per_minute("tpm", 100_000)])  # Project-level
await limiter.create_entity(entity_id="api-key-456", parent_id="proj-1", cascade=True)

# cascade is an entity property — acquire() auto-cascades to parent
with sync_limiter.acquire(
    entity_id="api-key-456",
    resource="gpt-4",
    limits=default_limits,
    consume={"rpm": 1, "tpm": 500},
):
    call_api()

# Multi-tenant: each tenant gets an isolated namespace
tenant_repo = await Repository.open("tenant-alpha")
tenant_limiter = RateLimiter(repository=tenant_repo)

# Cleanup (removes all data)
await repo.delete_stack()

Documentation

Full Documentation

Guide Description
Getting Started Installation, first deployment
Basic Usage Rate limiting patterns, error handling
Hierarchical Limits Parent/child entities, cascade mode
LLM Integration Token estimation and reconciliation
CLI Reference Deploy, status, delete commands
Multi-Tenant Guide Namespace isolation, per-tenant IAM
Production Guide Security, monitoring, cost

Production Deployment

The default deployment includes CloudWatch alarms and usage aggregation. For production, add data recovery and alert routing:

zae-limiter deploy --name my-app --region us-east-1 \
    --pitr-recovery-days 7 \
    --alarm-sns-topic arn:aws:sns:us-east-1:123456789012:alerts

For security best practices, multi-region considerations, and cost estimation, see the Production Guide.

Contributing

git clone https://github.com/zeroae/zae-limiter.git && cd zae-limiter
uv sync --all-extras
pytest

See the Contributing Guide for development setup, testing, and architecture details.

License

MIT

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

zae_limiter-0.10.1.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

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

zae_limiter-0.10.1-py3-none-any.whl (279.7 kB view details)

Uploaded Python 3

File details

Details for the file zae_limiter-0.10.1.tar.gz.

File metadata

  • Download URL: zae_limiter-0.10.1.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zae_limiter-0.10.1.tar.gz
Algorithm Hash digest
SHA256 df2407e968761ea89870bcf8bc1d1c01366f607b287fa8e096dd6628cf42329f
MD5 60157f1f733671c2d8a593847dd6c634
BLAKE2b-256 f26aa49cafec6b8f7de9596bd921edcac1a1ddf67c045b312d690b7c0a3f77c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for zae_limiter-0.10.1.tar.gz:

Publisher: release.yml on zeroae/zae-limiter

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

File details

Details for the file zae_limiter-0.10.1-py3-none-any.whl.

File metadata

  • Download URL: zae_limiter-0.10.1-py3-none-any.whl
  • Upload date:
  • Size: 279.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for zae_limiter-0.10.1-py3-none-any.whl
Algorithm Hash digest
SHA256 87a837c872caf16ae691d8ebf39367230124799c17dee030750e6bd5df06f3d4
MD5 d0f166e40b27e1706ce5ebd48bd0c9f6
BLAKE2b-256 af67e22d23c2cd58d41541be647a6c716e37b1ad90440a032b17ecbe293b6b18

See more details on using hashes here.

Provenance

The following attestation bundles were made for zae_limiter-0.10.1-py3-none-any.whl:

Publisher: release.yml on zeroae/zae-limiter

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