From 942d0e70816ec369e2b7ffb101ed5bd4232b7561 Mon Sep 17 00:00:00 2001 From: Jimmy Domagala-Tang Date: Wed, 25 Mar 2026 21:03:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20moving=20writefull=20endpoint=20configs?= =?UTF-8?q?=20to=20settings=20and=20splitting=20the=E2=80=A6=20(#32065)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: moving writefull endpoint configs to settings and splitting them by quota tier * feat: updating getAllowance to account for WF premium GitOrigin-RevId: a4f8b50065206f4e841e2488a8bc37a4a3e44574 --- .../rate-limiters/AiFeatureUsageRateLimiter.mjs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/services/web/app/src/infrastructure/rate-limiters/AiFeatureUsageRateLimiter.mjs b/services/web/app/src/infrastructure/rate-limiters/AiFeatureUsageRateLimiter.mjs index 0b117a2ea5..b1af6b3ae0 100644 --- a/services/web/app/src/infrastructure/rate-limiters/AiFeatureUsageRateLimiter.mjs +++ b/services/web/app/src/infrastructure/rate-limiters/AiFeatureUsageRateLimiter.mjs @@ -4,6 +4,7 @@ import UserGetter from '../../Features/User/UserGetter.mjs' import FeatureUsageRateLimiter from './FeatureUsageRateLimiter.mjs' import Settings from '@overleaf/settings' import SplitTestHandler from '../../Features/SplitTests/SplitTestHandler.mjs' +import FeaturesHelper from '../../Features/Subscription/FeaturesHelper.mjs' class AiFeatureUsageRateLimiter extends FeatureUsageRateLimiter { constructor() { @@ -27,9 +28,13 @@ class AiFeatureUsageRateLimiter extends FeatureUsageRateLimiter { ) if (inQuotaSplitTest) { - const quotaTier = user?.writefull?.isPremium + const wfQuota = user.writefull?.isPremium ? Settings.writefull.quotaTierGranted - : user.features.aiUsageQuota + : Settings.aiFeatures.freeTrialQuota + const mergedFeatures = FeaturesHelper.mergeFeatures(user.features, { + aiUsageQuota: wfQuota, + }) + const quotaTier = mergedFeatures.aiUsageQuota return _quotaTierToAllowance(quotaTier) } else { const DEFAULT_ALLOWANCE = 1