A backend-neutral quota, rate limiting, and fairness scheduling toolkit for MoonBit.
let report = engine.check_atomic_token_buckets([
@moonquotakit.QuotaCharge::new(user, "user-requests", 1),
@moonquotakit.QuotaCharge::new(tenant, "tenant-tokens", 800),
@moonquotakit.QuotaCharge::new(model, "model-tokens", 800),
], now_ms)
if report.committed {
// Dispatch work.
}let engine = @moonquotakit.QuotaEngine::new()
ignore(engine.add_limit(@moonquotakit.LimitSpec::new("tokens", 4, 2, 1000L, 2)))
let alice = @moonquotakit.QuotaKey::new("tenant-a", "alice", "llm")
let decision = engine.check_token_bucket(alice, "tokens", 0L, 1)
if decision.allowed {
println("allowed")
} else {
println("retry after \{decision.retry_after_ms}ms")
}moon run cmd/mainmoon fmt --check
moon check --deny-warn --target all
moon info && git diff --exit-code -- '*.mbti'
moon test --deny-warn --target allmoon run cmd/benchpub(all) struct QuotaEngine {
limits : Array[LimitSpec]
buckets : Array[TrackedBucket]
windows : Array[TrackedWindow]
gcra_flows : Array[TrackedGcra]
links : Array[QuotaLink]
subjects : Array[SubjectBudget]
} derive(Debug)fn QuotaEngine::check_atomic_token_buckets(self : QuotaEngine, charges : Array[QuotaCharge], now_ms : Int64) -> AtomicQuotaReportfn QuotaEngine::check_gcra(self : QuotaEngine, key : QuotaKey, limit_name : String, now_ms : Int64, cost : Int) -> Decisionfn QuotaEngine::check_hierarchy(self : QuotaEngine, key : QuotaKey, limit_name : String, now_ms : Int64, cost : Int) -> Decisionfn QuotaEngine::check_many_token_bucket(self : QuotaEngine, limit_name : String, requests : Array[EvaluationInput]) -> BatchReportfn QuotaEngine::check_token_bucket(self : QuotaEngine, key : QuotaKey, limit_name : String, now_ms : Int64, cost : Int) -> Decisionfn QuotaEngine::check_window(self : QuotaEngine, key : QuotaKey, limit_name : String, now_ms : Int64, cost : Int) -> Decisionpub(all) struct QuotaSnapshot {
limits : Array[LimitSpec]
buckets : Array[TrackedBucket]
windows : Array[TrackedWindow]
gcra_flows : Array[TrackedGcra]
links : Array[QuotaLink]
subjects : Array[SubjectBudget]
} derive(Debug)pub(all) struct TrackedBucket {
key : QuotaKey
limit_name : String
state : BucketState
} derive(Eq, Debug)pub(all) struct TrackedWindow {
key : QuotaKey
limit_name : String
state : WindowCounter
} derive(Eq, Debug)A backend-neutral quota, rate limiting, and fairness scheduling toolkit for MoonBit.