@callmedayz/ai-prompt-toolkit
Version:
Professional AI prompt engineering toolkit with advanced template features, real-time dashboards, conditional logic, template inheritance, live monitoring, OpenRouter integration, and 310+ model support
190 lines • 3.98 kB
TypeScript
/**
* Rate limiting and quota management for OpenRouter API
*/
/**
* Rate limit configuration
*/
export interface RateLimitConfig {
requestsPerMinute: number;
requestsPerHour: number;
requestsPerDay: number;
tokensPerMinute?: number;
tokensPerHour?: number;
tokensPerDay?: number;
costPerMinute?: number;
costPerHour?: number;
costPerDay?: number;
}
/**
* Usage tracking data
*/
export interface UsageStats {
requests: {
minute: number;
hour: number;
day: number;
};
tokens: {
minute: number;
hour: number;
day: number;
};
cost: {
minute: number;
hour: number;
day: number;
};
lastReset: {
minute: number;
hour: number;
day: number;
};
}
/**
* Rate limit status
*/
export interface RateLimitStatus {
allowed: boolean;
reason?: string;
retryAfter?: number;
remaining: {
requests: {
minute: number;
hour: number;
day: number;
};
tokens?: {
minute: number;
hour: number;
day: number;
};
cost?: {
minute: number;
hour: number;
day: number;
};
};
}
/**
* Default rate limits (conservative defaults)
*/
export declare const DEFAULT_RATE_LIMITS: RateLimitConfig;
/**
* Rate limiter with multiple time windows
*/
export declare class RateLimiter {
private config;
private usage;
private buckets;
constructor(config: RateLimitConfig);
/**
* Check if a request is allowed
*/
checkRequest(tokens?: number, cost?: number): RateLimitStatus;
/**
* Record usage after a successful request
*/
recordUsage(tokens?: number, cost?: number): void;
/**
* Get current usage statistics
*/
getUsage(): UsageStats;
/**
* Get remaining limits
*/
private getRemainingLimits;
/**
* Reset counters when time windows expire
*/
private resetCountersIfNeeded;
/**
* Initialize usage tracking
*/
private initializeUsage;
/**
* Update rate limit configuration
*/
updateConfig(config: Partial<RateLimitConfig>): void;
}
/**
* Quota management for cost control
*/
export interface QuotaConfig {
dailyBudget: number;
monthlyBudget: number;
alertThresholds: number[];
autoStop: boolean;
}
/**
* Quota usage tracking
*/
export interface QuotaUsage {
daily: {
spent: number;
budget: number;
remaining: number;
percentage: number;
};
monthly: {
spent: number;
budget: number;
remaining: number;
percentage: number;
};
lastReset: {
daily: number;
monthly: number;
};
}
/**
* Quota alert
*/
export interface QuotaAlert {
type: 'warning' | 'critical' | 'exceeded';
period: 'daily' | 'monthly';
threshold: number;
current: number;
budget: number;
message: string;
}
/**
* Quota manager for cost control
*/
export declare class QuotaManager {
private config;
private usage;
private alerts;
constructor(config: QuotaConfig);
/**
* Check if a request is within quota
*/
checkQuota(estimatedCost: number): {
allowed: boolean;
alert?: QuotaAlert;
};
/**
* Record actual spending
*/
recordSpending(actualCost: number): void;
/**
* Get current quota usage
*/
getUsage(): QuotaUsage;
/**
* Get recent alerts
*/
getAlerts(): QuotaAlert[];
/**
* Clear alerts
*/
clearAlerts(): void;
/**
* Update quota configuration
*/
updateConfig(config: Partial<QuotaConfig>): void;
private initializeUsage;
private updateUsageCalculations;
private resetQuotasIfNeeded;
private checkThresholds;
}
//# sourceMappingURL=rate-limiting.d.ts.map