Skip to content

Commit 0865eba

Browse files
authored
Revert "Feat/new saas billing (#12591)"
This reverts commit d8f57bf.
1 parent 54b5b80 commit 0865eba

File tree

9 files changed

+3
-144
lines changed

9 files changed

+3
-144
lines changed

api/controllers/console/datasets/datasets.py

+1-9
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,7 @@
1010
from controllers.console.apikey import api_key_fields, api_key_list
1111
from controllers.console.app.error import ProviderNotInitializeError
1212
from controllers.console.datasets.error import DatasetInUseError, DatasetNameDuplicateError, IndexingEstimateError
13-
from controllers.console.wraps import (
14-
account_initialization_required,
15-
cloud_edition_billing_rate_limit_check,
16-
enterprise_license_required,
17-
setup_required,
18-
)
13+
from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
1914
from core.errors.error import LLMBadRequestError, ProviderTokenNotInitError
2015
from core.indexing_runner import IndexingRunner
2116
from core.model_runtime.entities.model_entities import ModelType
@@ -98,7 +93,6 @@ def get(self):
9893
@setup_required
9994
@login_required
10095
@account_initialization_required
101-
@cloud_edition_billing_rate_limit_check("knowledge")
10296
def post(self):
10397
parser = reqparse.RequestParser()
10498
parser.add_argument(
@@ -213,7 +207,6 @@ def get(self, dataset_id):
213207
@setup_required
214208
@login_required
215209
@account_initialization_required
216-
@cloud_edition_billing_rate_limit_check("knowledge")
217210
def patch(self, dataset_id):
218211
dataset_id_str = str(dataset_id)
219212
dataset = DatasetService.get_dataset(dataset_id_str)
@@ -317,7 +310,6 @@ def patch(self, dataset_id):
317310
@setup_required
318311
@login_required
319312
@account_initialization_required
320-
@cloud_edition_billing_rate_limit_check("knowledge")
321313
def delete(self, dataset_id):
322314
dataset_id_str = str(dataset_id)
323315

api/controllers/console/datasets/datasets_document.py

-10
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
)
2828
from controllers.console.wraps import (
2929
account_initialization_required,
30-
cloud_edition_billing_rate_limit_check,
3130
cloud_edition_billing_resource_check,
3231
setup_required,
3332
)
@@ -231,7 +230,6 @@ def get(self, dataset_id):
231230
@account_initialization_required
232231
@marshal_with(documents_and_batch_fields)
233232
@cloud_edition_billing_resource_check("vector_space")
234-
@cloud_edition_billing_rate_limit_check("knowledge")
235233
def post(self, dataset_id):
236234
dataset_id = str(dataset_id)
237235

@@ -287,7 +285,6 @@ def post(self, dataset_id):
287285
@setup_required
288286
@login_required
289287
@account_initialization_required
290-
@cloud_edition_billing_rate_limit_check("knowledge")
291288
def delete(self, dataset_id):
292289
dataset_id = str(dataset_id)
293290
dataset = DatasetService.get_dataset(dataset_id)
@@ -311,7 +308,6 @@ class DatasetInitApi(Resource):
311308
@account_initialization_required
312309
@marshal_with(dataset_and_document_fields)
313310
@cloud_edition_billing_resource_check("vector_space")
314-
@cloud_edition_billing_rate_limit_check("knowledge")
315311
def post(self):
316312
# The role of the current user in the ta table must be admin, owner, or editor
317313
if not current_user.is_editor:
@@ -684,7 +680,6 @@ class DocumentProcessingApi(DocumentResource):
684680
@setup_required
685681
@login_required
686682
@account_initialization_required
687-
@cloud_edition_billing_rate_limit_check("knowledge")
688683
def patch(self, dataset_id, document_id, action):
689684
dataset_id = str(dataset_id)
690685
document_id = str(document_id)
@@ -721,7 +716,6 @@ class DocumentDeleteApi(DocumentResource):
721716
@setup_required
722717
@login_required
723718
@account_initialization_required
724-
@cloud_edition_billing_rate_limit_check("knowledge")
725719
def delete(self, dataset_id, document_id):
726720
dataset_id = str(dataset_id)
727721
document_id = str(document_id)
@@ -790,7 +784,6 @@ class DocumentStatusApi(DocumentResource):
790784
@login_required
791785
@account_initialization_required
792786
@cloud_edition_billing_resource_check("vector_space")
793-
@cloud_edition_billing_rate_limit_check("knowledge")
794787
def patch(self, dataset_id, action):
795788
dataset_id = str(dataset_id)
796789
dataset = DatasetService.get_dataset(dataset_id)
@@ -886,7 +879,6 @@ class DocumentPauseApi(DocumentResource):
886879
@setup_required
887880
@login_required
888881
@account_initialization_required
889-
@cloud_edition_billing_rate_limit_check("knowledge")
890882
def patch(self, dataset_id, document_id):
891883
"""pause document."""
892884
dataset_id = str(dataset_id)
@@ -919,7 +911,6 @@ class DocumentRecoverApi(DocumentResource):
919911
@setup_required
920912
@login_required
921913
@account_initialization_required
922-
@cloud_edition_billing_rate_limit_check("knowledge")
923914
def patch(self, dataset_id, document_id):
924915
"""recover document."""
925916
dataset_id = str(dataset_id)
@@ -949,7 +940,6 @@ class DocumentRetryApi(DocumentResource):
949940
@setup_required
950941
@login_required
951942
@account_initialization_required
952-
@cloud_edition_billing_rate_limit_check("knowledge")
953943
def post(self, dataset_id):
954944
"""retry document."""
955945

api/controllers/console/datasets/datasets_segments.py

-11
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from controllers.console.wraps import (
2020
account_initialization_required,
2121
cloud_edition_billing_knowledge_limit_check,
22-
cloud_edition_billing_rate_limit_check,
2322
cloud_edition_billing_resource_check,
2423
setup_required,
2524
)
@@ -107,7 +106,6 @@ def get(self, dataset_id, document_id):
107106
@setup_required
108107
@login_required
109108
@account_initialization_required
110-
@cloud_edition_billing_rate_limit_check("knowledge")
111109
def delete(self, dataset_id, document_id):
112110
# check dataset
113111
dataset_id = str(dataset_id)
@@ -139,7 +137,6 @@ class DatasetDocumentSegmentApi(Resource):
139137
@login_required
140138
@account_initialization_required
141139
@cloud_edition_billing_resource_check("vector_space")
142-
@cloud_edition_billing_rate_limit_check("knowledge")
143140
def patch(self, dataset_id, document_id, action):
144141
dataset_id = str(dataset_id)
145142
dataset = DatasetService.get_dataset(dataset_id)
@@ -195,7 +192,6 @@ class DatasetDocumentSegmentAddApi(Resource):
195192
@account_initialization_required
196193
@cloud_edition_billing_resource_check("vector_space")
197194
@cloud_edition_billing_knowledge_limit_check("add_segment")
198-
@cloud_edition_billing_rate_limit_check("knowledge")
199195
def post(self, dataset_id, document_id):
200196
# check dataset
201197
dataset_id = str(dataset_id)
@@ -246,7 +242,6 @@ class DatasetDocumentSegmentUpdateApi(Resource):
246242
@login_required
247243
@account_initialization_required
248244
@cloud_edition_billing_resource_check("vector_space")
249-
@cloud_edition_billing_rate_limit_check("knowledge")
250245
def patch(self, dataset_id, document_id, segment_id):
251246
# check dataset
252247
dataset_id = str(dataset_id)
@@ -307,7 +302,6 @@ def patch(self, dataset_id, document_id, segment_id):
307302
@setup_required
308303
@login_required
309304
@account_initialization_required
310-
@cloud_edition_billing_rate_limit_check("knowledge")
311305
def delete(self, dataset_id, document_id, segment_id):
312306
# check dataset
313307
dataset_id = str(dataset_id)
@@ -345,7 +339,6 @@ class DatasetDocumentSegmentBatchImportApi(Resource):
345339
@account_initialization_required
346340
@cloud_edition_billing_resource_check("vector_space")
347341
@cloud_edition_billing_knowledge_limit_check("add_segment")
348-
@cloud_edition_billing_rate_limit_check("knowledge")
349342
def post(self, dataset_id, document_id):
350343
# check dataset
351344
dataset_id = str(dataset_id)
@@ -412,7 +405,6 @@ class ChildChunkAddApi(Resource):
412405
@account_initialization_required
413406
@cloud_edition_billing_resource_check("vector_space")
414407
@cloud_edition_billing_knowledge_limit_check("add_segment")
415-
@cloud_edition_billing_rate_limit_check("knowledge")
416408
def post(self, dataset_id, document_id, segment_id):
417409
# check dataset
418410
dataset_id = str(dataset_id)
@@ -511,7 +503,6 @@ def get(self, dataset_id, document_id, segment_id):
511503
@login_required
512504
@account_initialization_required
513505
@cloud_edition_billing_resource_check("vector_space")
514-
@cloud_edition_billing_rate_limit_check("knowledge")
515506
def patch(self, dataset_id, document_id, segment_id):
516507
# check dataset
517508
dataset_id = str(dataset_id)
@@ -555,7 +546,6 @@ class ChildChunkUpdateApi(Resource):
555546
@setup_required
556547
@login_required
557548
@account_initialization_required
558-
@cloud_edition_billing_rate_limit_check("knowledge")
559549
def delete(self, dataset_id, document_id, segment_id, child_chunk_id):
560550
# check dataset
561551
dataset_id = str(dataset_id)
@@ -600,7 +590,6 @@ def delete(self, dataset_id, document_id, segment_id, child_chunk_id):
600590
@login_required
601591
@account_initialization_required
602592
@cloud_edition_billing_resource_check("vector_space")
603-
@cloud_edition_billing_rate_limit_check("knowledge")
604593
def patch(self, dataset_id, document_id, segment_id, child_chunk_id):
605594
# check dataset
606595
dataset_id = str(dataset_id)

api/controllers/console/datasets/hit_testing.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,14 @@
22

33
from controllers.console import api
44
from controllers.console.datasets.hit_testing_base import DatasetsHitTestingBase
5-
from controllers.console.wraps import (
6-
account_initialization_required,
7-
cloud_edition_billing_rate_limit_check,
8-
setup_required,
9-
)
5+
from controllers.console.wraps import account_initialization_required, setup_required
106
from libs.login import login_required
117

128

139
class HitTestingApi(Resource, DatasetsHitTestingBase):
1410
@setup_required
1511
@login_required
1612
@account_initialization_required
17-
@cloud_edition_billing_rate_limit_check("knowledge")
1813
def post(self, dataset_id):
1914
dataset_id_str = str(dataset_id)
2015

api/controllers/console/wraps.py

+1-32
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
import json
22
import os
3-
import time
43
from functools import wraps
54

65
from flask import abort, request
76
from flask_login import current_user # type: ignore
87

98
from configs import dify_config
109
from controllers.console.workspace.error import AccountNotInitializedError
11-
from extensions.ext_redis import redis_client
1210
from models.model import DifySetup
1311
from services.feature_service import FeatureService, LicenseStatus
1412
from services.operation_service import OperationService
@@ -68,9 +66,7 @@ def decorated(*args, **kwargs):
6866
elif resource == "apps" and 0 < apps.limit <= apps.size:
6967
abort(403, "The number of apps has reached the limit of your subscription.")
7068
elif resource == "vector_space" and 0 < vector_space.limit <= vector_space.size:
71-
abort(
72-
403, "The capacity of the knowledge storage space has reached the limit of your subscription."
73-
)
69+
abort(403, "The capacity of the vector space has reached the limit of your subscription.")
7470
elif resource == "documents" and 0 < documents_upload_quota.limit <= documents_upload_quota.size:
7571
# The api of file upload is used in the multiple places,
7672
# so we need to check the source of the request from datasets
@@ -115,33 +111,6 @@ def decorated(*args, **kwargs):
115111
return interceptor
116112

117113

118-
def cloud_edition_billing_rate_limit_check(resource: str):
119-
def interceptor(view):
120-
@wraps(view)
121-
def decorated(*args, **kwargs):
122-
if resource == "knowledge":
123-
knowledge_rate_limit = FeatureService.get_knowledge_rate_limit(current_user.current_tenant_id)
124-
if knowledge_rate_limit.enabled:
125-
current_time = int(time.time() * 1000)
126-
key = f"rate_limit_{current_user.current_tenant_id}"
127-
128-
redis_client.zadd(key, {current_time: current_time})
129-
130-
redis_client.zremrangebyscore(key, 0, current_time - 60000)
131-
132-
request_count = redis_client.zcard(key)
133-
134-
if request_count > knowledge_rate_limit.limit:
135-
abort(
136-
403, "Sorry, you have reached the knowledge base request rate limit of your subscription."
137-
)
138-
return view(*args, **kwargs)
139-
140-
return decorated
141-
142-
return interceptor
143-
144-
145114
def cloud_utm_record(view):
146115
@wraps(view)
147116
def decorated(*args, **kwargs):

api/controllers/service_api/wraps.py

-31
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import time
21
from collections.abc import Callable
32
from datetime import UTC, datetime, timedelta
43
from enum import Enum
@@ -14,7 +13,6 @@
1413
from werkzeug.exceptions import Forbidden, Unauthorized
1514

1615
from extensions.ext_database import db
17-
from extensions.ext_redis import redis_client
1816
from libs.login import _get_user
1917
from models.account import Account, Tenant, TenantAccountJoin, TenantStatus
2018
from models.model import ApiToken, App, EndUser
@@ -141,35 +139,6 @@ def decorated(*args, **kwargs):
141139
return interceptor
142140

143141

144-
def cloud_edition_billing_rate_limit_check(resource: str, api_token_type: str):
145-
def interceptor(view):
146-
@wraps(view)
147-
def decorated(*args, **kwargs):
148-
api_token = validate_and_get_api_token(api_token_type)
149-
150-
if resource == "knowledge":
151-
knowledge_rate_limit = FeatureService.get_knowledge_rate_limit(api_token.tenant_id)
152-
if knowledge_rate_limit.enabled:
153-
current_time = int(time.time() * 1000)
154-
key = f"rate_limit_{api_token.tenant_id}"
155-
156-
redis_client.zadd(key, {current_time: current_time})
157-
158-
redis_client.zremrangebyscore(key, 0, current_time - 60000)
159-
160-
request_count = redis_client.zcard(key)
161-
162-
if request_count > knowledge_rate_limit.limit:
163-
raise Forbidden(
164-
"Sorry, you have reached the knowledge base request rate limit of your subscription."
165-
)
166-
return view(*args, **kwargs)
167-
168-
return decorated
169-
170-
return interceptor
171-
172-
173142
def validate_dataset_token(view=None):
174143
def decorator(view):
175144
@wraps(view)

api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py

-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import logging
2-
import time
32
from collections.abc import Mapping, Sequence
43
from typing import Any, cast
54

@@ -20,10 +19,8 @@
2019
from core.workflow.nodes.base import BaseNode
2120
from core.workflow.nodes.enums import NodeType
2221
from extensions.ext_database import db
23-
from extensions.ext_redis import redis_client
2422
from models.dataset import Dataset, Document
2523
from models.workflow import WorkflowNodeExecutionStatus
26-
from services.feature_service import FeatureService
2724

2825
from .entities import KnowledgeRetrievalNodeData
2926
from .exc import (
@@ -64,23 +61,6 @@ def _run(self) -> NodeRunResult:
6461
return NodeRunResult(
6562
status=WorkflowNodeExecutionStatus.FAILED, inputs=variables, error="Query is required."
6663
)
67-
# check rate limit
68-
if self.tenant_id:
69-
knowledge_rate_limit = FeatureService.get_knowledge_rate_limit(self.tenant_id)
70-
if knowledge_rate_limit.enabled:
71-
current_time = int(time.time() * 1000)
72-
key = f"rate_limit_{self.tenant_id}"
73-
redis_client.zadd(key, {current_time: current_time})
74-
redis_client.zremrangebyscore(key, 0, current_time - 60000)
75-
request_count = redis_client.zcard(key)
76-
if request_count > knowledge_rate_limit.limit:
77-
return NodeRunResult(
78-
status=WorkflowNodeExecutionStatus.FAILED,
79-
inputs=variables,
80-
error="Sorry, you have reached the knowledge base request rate limit of your subscription.",
81-
error_type="RateLimitExceeded",
82-
)
83-
8464
# retrieve knowledge
8565
try:
8666
results = self._fetch_dataset_retriever(node_data=self.node_data, query=query)

api/services/billing_service.py

-8
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,6 @@ def get_info(cls, tenant_id: str):
1919
billing_info = cls._send_request("GET", "/subscription/info", params=params)
2020
return billing_info
2121

22-
@classmethod
23-
def get_knowledge_rate_limit(cls, tenant_id: str):
24-
params = {"tenant_id": tenant_id}
25-
26-
knowledge_rate_limit = cls._send_request("GET", "/subscription/knowledge-rate-limit", params=params)
27-
28-
return knowledge_rate_limit.get("limit", 10)
29-
3022
@classmethod
3123
def get_subscription(cls, plan: str, interval: str, prefilled_email: str = "", tenant_id: str = ""):
3224
params = {"plan": plan, "interval": interval, "prefilled_email": prefilled_email, "tenant_id": tenant_id}

0 commit comments

Comments
 (0)