Skip to content

Commit 3ea41c3

Browse files
authored
fix: Application access restrictions are not separately counted for each application (#1937)
1 parent ef64c9d commit 3ea41c3

File tree

5 files changed

+58
-13
lines changed

5 files changed

+58
-13
lines changed

apps/application/chat_pipeline/step/chat_step/impl/base_chat_step.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@
2828
from setting.models_provider.tools import get_model_instance_by_model_user_id
2929

3030

31-
def add_access_num(client_id=None, client_type=None):
32-
if client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
33-
application_public_access_client = QuerySet(ApplicationPublicAccessClient).filter(id=client_id).first()
31+
def add_access_num(client_id=None, client_type=None, application_id=None):
32+
if client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value and application_id is not None:
33+
application_public_access_client = (QuerySet(ApplicationPublicAccessClient).filter(client_id=client_id,
34+
application_id=application_id)
35+
.first())
3436
if application_public_access_client is not None:
3537
application_public_access_client.access_num = application_public_access_client.access_num + 1
3638
application_public_access_client.intraday_access_num = application_public_access_client.intraday_access_num + 1
@@ -90,14 +92,14 @@ def event_content(response,
9092
request_token, response_token,
9193
{'node_is_end': True, 'view_type': 'many_view',
9294
'node_type': 'ai-chat-node'})
93-
add_access_num(client_id, client_type)
95+
add_access_num(client_id, client_type, manage.context.get('application_id'))
9496
except Exception as e:
9597
logging.getLogger("max_kb_error").error(f'{str(e)}:{traceback.format_exc()}')
9698
all_text = '异常' + str(e)
9799
write_context(step, manage, 0, 0, all_text)
98100
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
99101
all_text, manage, step, padding_problem_text, client_id)
100-
add_access_num(client_id, client_type)
102+
add_access_num(client_id, client_type, manage.context.get('application_id'))
101103
yield manage.get_base_to_response().to_stream_chunk_response(chat_id, str(chat_record_id), all_text,
102104
'ai-chat-node',
103105
[], True, 0, 0,
@@ -241,7 +243,7 @@ def execute_block(self, message_list: List[BaseMessage],
241243
write_context(self, manage, request_token, response_token, chat_result.content)
242244
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
243245
chat_result.content, manage, self, padding_problem_text, client_id)
244-
add_access_num(client_id, client_type)
246+
add_access_num(client_id, client_type, manage.context.get('application_id'))
245247
return manage.get_base_to_response().to_block_response(str(chat_id), str(chat_record_id),
246248
chat_result.content, True,
247249
request_token, response_token)
@@ -250,6 +252,6 @@ def execute_block(self, message_list: List[BaseMessage],
250252
write_context(self, manage, 0, 0, all_text)
251253
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
252254
all_text, manage, self, padding_problem_text, client_id)
253-
add_access_num(client_id, client_type)
255+
add_access_num(client_id, client_type, manage.context.get('application_id'))
254256
return manage.get_base_to_response().to_block_response(str(chat_id), str(chat_record_id), all_text, True, 0,
255257
0, _status=status.HTTP_500_INTERNAL_SERVER_ERROR)

apps/application/flow/i_step_node.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,9 @@ def handler(self, chat_id,
8787
chat_cache.set(chat_id,
8888
self.chat_info, timeout=60 * 30)
8989
if self.client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
90-
application_public_access_client = QuerySet(ApplicationPublicAccessClient).filter(id=self.client_id).first()
90+
application_public_access_client = (QuerySet(ApplicationPublicAccessClient)
91+
.filter(client_id=self.client_id,
92+
application_id=self.chat_info.application.id).first())
9193
if application_public_access_client is not None:
9294
application_public_access_client.access_num = application_public_access_client.access_num + 1
9395
application_public_access_client.intraday_access_num = application_public_access_client.intraday_access_num + 1
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Generated by Django 4.2.15 on 2024-12-27 18:42
2+
3+
from django.db import migrations, models
4+
import uuid
5+
6+
run_sql = """
7+
UPDATE application_public_access_client
8+
SET client_id="id"
9+
"""
10+
11+
12+
class Migration(migrations.Migration):
13+
dependencies = [
14+
('application', '0020_application_record_update_time'),
15+
]
16+
17+
operations = [
18+
migrations.AddField(
19+
model_name='applicationpublicaccessclient',
20+
name='client_id',
21+
field=models.UUIDField(default=uuid.uuid1, verbose_name='公共访问链接客户端id'),
22+
),
23+
migrations.AlterField(
24+
model_name='applicationpublicaccessclient',
25+
name='id',
26+
field=models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False,
27+
verbose_name='主键id'),
28+
),
29+
migrations.AddIndex(
30+
model_name='applicationpublicaccessclient',
31+
index=models.Index(fields=['client_id'], name='application_client__4de9af_idx'),
32+
),
33+
migrations.RunSQL(run_sql)
34+
]

apps/application/models/api_key_model.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,14 @@ class Meta:
5050

5151

5252
class ApplicationPublicAccessClient(AppModelMixin):
53-
id = models.UUIDField(max_length=128, primary_key=True, verbose_name="公共访问链接客户端id")
53+
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id")
54+
client_id = models.UUIDField(max_length=128, default=uuid.uuid1, verbose_name="公共访问链接客户端id")
5455
application = models.ForeignKey(Application, on_delete=models.CASCADE, verbose_name="应用id")
5556
access_num = models.IntegerField(default=0, verbose_name="访问总次数次数")
5657
intraday_access_num = models.IntegerField(default=0, verbose_name="当日访问次数")
5758

5859
class Meta:
5960
db_table = "application_public_access_client"
61+
indexes = [
62+
models.Index(fields=['client_id']),
63+
]

apps/application/serializers/chat_message_serializers.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
@date:2023/11/14 13:51
77
@desc:
88
"""
9-
from datetime import datetime
109
import uuid
10+
from datetime import datetime
1111
from typing import List, Dict
1212
from uuid import UUID
1313

@@ -107,7 +107,8 @@ def to_base_pipeline_manage_params(self):
107107
'search_mode': self.application.dataset_setting.get(
108108
'search_mode') if 'search_mode' in self.application.dataset_setting else 'embedding',
109109
'no_references_setting': self.get_no_references_setting(self.application.dataset_setting, model_setting),
110-
'user_id': self.application.user_id
110+
'user_id': self.application.user_id,
111+
'application_id': self.application.id
111112
}
112113

113114
def to_pipeline_manage_params(self, problem_text: str, post_response_handler: PostResponseHandler,
@@ -258,9 +259,11 @@ def is_valid_chat_id(self, chat_info: ChatInfo):
258259

259260
def is_valid_intraday_access_num(self):
260261
if self.data.get('client_type') == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
261-
access_client = QuerySet(ApplicationPublicAccessClient).filter(id=self.data.get('client_id')).first()
262+
access_client = QuerySet(ApplicationPublicAccessClient).filter(client_id=self.data.get('client_id'),
263+
application_id=self.data.get(
264+
'application_id')).first()
262265
if access_client is None:
263-
access_client = ApplicationPublicAccessClient(id=self.data.get('client_id'),
266+
access_client = ApplicationPublicAccessClient(client_id=self.data.get('client_id'),
264267
application_id=self.data.get('application_id'),
265268
access_num=0,
266269
intraday_access_num=0)

0 commit comments

Comments
 (0)