feat: per-account quota threshold protection (#212)

feat: per-account quota threshold protection

Resolves #135

- Adds configurable quota protection with three-tier threshold resolution (per-model → per-account → global)
- New global Minimum Quota Level slider in Settings
- Per-account threshold settings via Account Settings modal
- Draggable per-account threshold markers on model quota bars
- Backend: PATCH /api/accounts/:email endpoint, globalQuotaThreshold config
- i18n: quota protection keys for all 5 languages
This commit is contained in:
jgor20
2026-02-01 11:45:46 +00:00
committed by GitHub
parent 33584d31bb
commit a43d2332ca
23 changed files with 806 additions and 31 deletions

View File

@@ -51,15 +51,19 @@ export class QuotaTracker {
* Check if an account has critically low quota for a model
* @param {Object} account - Account object
* @param {string} modelId - Model ID to check
* @param {number} [thresholdOverride] - Optional threshold to use instead of default criticalThreshold
* @returns {boolean} True if quota is at or below critical threshold
*/
isQuotaCritical(account, modelId) {
isQuotaCritical(account, modelId, thresholdOverride) {
const fraction = this.getQuotaFraction(account, modelId);
// Unknown quota = not critical (assume OK)
if (fraction === null) return false;
// Only apply critical check if data is fresh
if (!this.isQuotaFresh(account)) return false;
return fraction <= this.#config.criticalThreshold;
const threshold = (typeof thresholdOverride === 'number' && thresholdOverride > 0)
? thresholdOverride
: this.#config.criticalThreshold;
return fraction <= threshold;
}
/**