Documentation IndexFetch the complete documentation index at: /llms.txtUse this file to discover all available pages before exploring further.
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Token-aware rate limiting with per-tenant scoping and graceful degradation
import { Agent, openai } from "@agentium/core"; const agent = new Agent({ name: "rate-limited-agent", model: openai("gpt-4o"), rateLimit: { maxTokensPerMinute: 100_000, maxRequestsPerMinute: 60, maxConcurrent: 5, perTenant: true, onLimitReached: "degrade", degradeStrategy: { useCheaperModel: openai("gpt-4o-mini"), reduceMaxTokens: 1000, }, }, });
import { TokenRateLimiter } from "@agentium/core"; const limiter = new TokenRateLimiter({ maxTokensPerMinute: 100_000, maxTokensPerHour: 1_000_000, maxRequestsPerMinute: 60, perTenant: true, perUser: true, }); // Check without consuming const status = limiter.check({ tenantId: "acme", userId: "u1" }); // { allowed: true, remaining: 95000, resetMs: 45000 } // Acquire tokens (pre-call estimate) const result = limiter.acquire(500, { tenantId: "acme" }); // Reconcile after actual usage limiter.record(actualTokens, estimatedTokens, { tenantId: "acme" });
import { ConcurrencyLimiter } from "@agentium/core"; const limiter = new ConcurrencyLimiter(5, 30_000); // max 5, 30s timeout const release = await limiter.acquire(); try { await callLLM(); } finally { release(); } console.log(limiter.active); // current concurrent calls console.log(limiter.pending); // queued requests console.log(limiter.available); // remaining capacity
"queue"
"reject"
"degrade"
rateLimit.throttled
{ scope, limitType, resetMs }
rateLimit.degraded
{ scope, originalModel, degradedModel }
rateLimit.rejected
{ scope, reason }