Merge branch 'feat/system-tenant-limiter' into deploy/dev
This commit is contained in:
commit
2d7959100b
@ -61,6 +61,10 @@ class AppExecutionConfig(BaseSettings):
|
|||||||
description="Maximum number of concurrent active requests per app (0 for unlimited)",
|
description="Maximum number of concurrent active requests per app (0 for unlimited)",
|
||||||
default=0,
|
default=0,
|
||||||
)
|
)
|
||||||
|
APP_DAILY_RATE_LIMIT: NonNegativeInt = Field(
|
||||||
|
description="Maximum number of requests per app per day",
|
||||||
|
default=5000,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CodeExecutionSandboxConfig(BaseSettings):
|
class CodeExecutionSandboxConfig(BaseSettings):
|
||||||
|
@ -11,6 +11,7 @@ from core.app.apps.completion.app_generator import CompletionAppGenerator
|
|||||||
from core.app.apps.workflow.app_generator import WorkflowAppGenerator
|
from core.app.apps.workflow.app_generator import WorkflowAppGenerator
|
||||||
from core.app.entities.app_invoke_entities import InvokeFrom
|
from core.app.entities.app_invoke_entities import InvokeFrom
|
||||||
from core.app.features.rate_limiting import RateLimit
|
from core.app.features.rate_limiting import RateLimit
|
||||||
|
from libs.helper import RateLimiter
|
||||||
from models.model import Account, App, AppMode, EndUser
|
from models.model import Account, App, AppMode, EndUser
|
||||||
from models.workflow import Workflow
|
from models.workflow import Workflow
|
||||||
from services.errors.llm import InvokeRateLimitError
|
from services.errors.llm import InvokeRateLimitError
|
||||||
@ -18,6 +19,8 @@ from services.workflow_service import WorkflowService
|
|||||||
|
|
||||||
|
|
||||||
class AppGenerateService:
|
class AppGenerateService:
|
||||||
|
system_rate_limiter = RateLimiter("app_daily_rate_limiter", dify_config.APP_DAILY_RATE_LIMIT, 86400)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def generate(
|
def generate(
|
||||||
cls,
|
cls,
|
||||||
@ -36,6 +39,19 @@ class AppGenerateService:
|
|||||||
:param streaming: streaming
|
:param streaming: streaming
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
# system level rate limiter
|
||||||
|
if not dify_config.BILLING_ENABLED:
|
||||||
|
# check if it's free plan
|
||||||
|
limit_info = {"subscription": {"plan": "sandbox"}}
|
||||||
|
# limit_info = BillingService.get_info(app_model.tenant_id)
|
||||||
|
if limit_info["subscription"]["plan"] == "sandbox":
|
||||||
|
if cls.system_rate_limiter.is_rate_limited(app_model.tenant_id):
|
||||||
|
raise InvokeRateLimitError(
|
||||||
|
f"Rate limit exceeded, please upgrade your plan, or your RPD was {dify_config.APP_DAILY_RATE_LIMIT} requests/day"
|
||||||
|
)
|
||||||
|
cls.system_rate_limiter.increment_rate_limit(app_model.tenant_id)
|
||||||
|
|
||||||
|
# app level rate limiter
|
||||||
max_active_request = AppGenerateService._get_max_active_requests(app_model)
|
max_active_request = AppGenerateService._get_max_active_requests(app_model)
|
||||||
rate_limit = RateLimit(app_model.id, max_active_request)
|
rate_limit = RateLimit(app_model.id, max_active_request)
|
||||||
request_id = RateLimit.gen_request_key()
|
request_id = RateLimit.gen_request_key()
|
||||||
|
Loading…
Reference in New Issue
Block a user