fix: Application access restrictions are not separately counted for each application (#1937)
This commit is contained in:
parent
ef64c9dd08
commit
3ea41c3297
@ -28,9 +28,11 @@ from common.constants.authentication_type import AuthenticationType
|
|||||||
from setting.models_provider.tools import get_model_instance_by_model_user_id
|
from setting.models_provider.tools import get_model_instance_by_model_user_id
|
||||||
|
|
||||||
|
|
||||||
def add_access_num(client_id=None, client_type=None):
|
def add_access_num(client_id=None, client_type=None, application_id=None):
|
||||||
if client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
|
if client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value and application_id is not None:
|
||||||
application_public_access_client = QuerySet(ApplicationPublicAccessClient).filter(id=client_id).first()
|
application_public_access_client = (QuerySet(ApplicationPublicAccessClient).filter(client_id=client_id,
|
||||||
|
application_id=application_id)
|
||||||
|
.first())
|
||||||
if application_public_access_client is not None:
|
if application_public_access_client is not None:
|
||||||
application_public_access_client.access_num = application_public_access_client.access_num + 1
|
application_public_access_client.access_num = application_public_access_client.access_num + 1
|
||||||
application_public_access_client.intraday_access_num = application_public_access_client.intraday_access_num + 1
|
application_public_access_client.intraday_access_num = application_public_access_client.intraday_access_num + 1
|
||||||
@ -90,14 +92,14 @@ def event_content(response,
|
|||||||
request_token, response_token,
|
request_token, response_token,
|
||||||
{'node_is_end': True, 'view_type': 'many_view',
|
{'node_is_end': True, 'view_type': 'many_view',
|
||||||
'node_type': 'ai-chat-node'})
|
'node_type': 'ai-chat-node'})
|
||||||
add_access_num(client_id, client_type)
|
add_access_num(client_id, client_type, manage.context.get('application_id'))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.getLogger("max_kb_error").error(f'{str(e)}:{traceback.format_exc()}')
|
logging.getLogger("max_kb_error").error(f'{str(e)}:{traceback.format_exc()}')
|
||||||
all_text = '异常' + str(e)
|
all_text = '异常' + str(e)
|
||||||
write_context(step, manage, 0, 0, all_text)
|
write_context(step, manage, 0, 0, all_text)
|
||||||
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
|
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
|
||||||
all_text, manage, step, padding_problem_text, client_id)
|
all_text, manage, step, padding_problem_text, client_id)
|
||||||
add_access_num(client_id, client_type)
|
add_access_num(client_id, client_type, manage.context.get('application_id'))
|
||||||
yield manage.get_base_to_response().to_stream_chunk_response(chat_id, str(chat_record_id), all_text,
|
yield manage.get_base_to_response().to_stream_chunk_response(chat_id, str(chat_record_id), all_text,
|
||||||
'ai-chat-node',
|
'ai-chat-node',
|
||||||
[], True, 0, 0,
|
[], True, 0, 0,
|
||||||
@ -241,7 +243,7 @@ class BaseChatStep(IChatStep):
|
|||||||
write_context(self, manage, request_token, response_token, chat_result.content)
|
write_context(self, manage, request_token, response_token, chat_result.content)
|
||||||
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
|
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
|
||||||
chat_result.content, manage, self, padding_problem_text, client_id)
|
chat_result.content, manage, self, padding_problem_text, client_id)
|
||||||
add_access_num(client_id, client_type)
|
add_access_num(client_id, client_type, manage.context.get('application_id'))
|
||||||
return manage.get_base_to_response().to_block_response(str(chat_id), str(chat_record_id),
|
return manage.get_base_to_response().to_block_response(str(chat_id), str(chat_record_id),
|
||||||
chat_result.content, True,
|
chat_result.content, True,
|
||||||
request_token, response_token)
|
request_token, response_token)
|
||||||
@ -250,6 +252,6 @@ class BaseChatStep(IChatStep):
|
|||||||
write_context(self, manage, 0, 0, all_text)
|
write_context(self, manage, 0, 0, all_text)
|
||||||
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
|
post_response_handler.handler(chat_id, chat_record_id, paragraph_list, problem_text,
|
||||||
all_text, manage, self, padding_problem_text, client_id)
|
all_text, manage, self, padding_problem_text, client_id)
|
||||||
add_access_num(client_id, client_type)
|
add_access_num(client_id, client_type, manage.context.get('application_id'))
|
||||||
return manage.get_base_to_response().to_block_response(str(chat_id), str(chat_record_id), all_text, True, 0,
|
return manage.get_base_to_response().to_block_response(str(chat_id), str(chat_record_id), all_text, True, 0,
|
||||||
0, _status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
0, _status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
|
|||||||
@ -87,7 +87,9 @@ class WorkFlowPostHandler:
|
|||||||
chat_cache.set(chat_id,
|
chat_cache.set(chat_id,
|
||||||
self.chat_info, timeout=60 * 30)
|
self.chat_info, timeout=60 * 30)
|
||||||
if self.client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
|
if self.client_type == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
|
||||||
application_public_access_client = QuerySet(ApplicationPublicAccessClient).filter(id=self.client_id).first()
|
application_public_access_client = (QuerySet(ApplicationPublicAccessClient)
|
||||||
|
.filter(client_id=self.client_id,
|
||||||
|
application_id=self.chat_info.application.id).first())
|
||||||
if application_public_access_client is not None:
|
if application_public_access_client is not None:
|
||||||
application_public_access_client.access_num = application_public_access_client.access_num + 1
|
application_public_access_client.access_num = application_public_access_client.access_num + 1
|
||||||
application_public_access_client.intraday_access_num = application_public_access_client.intraday_access_num + 1
|
application_public_access_client.intraday_access_num = application_public_access_client.intraday_access_num + 1
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
# Generated by Django 4.2.15 on 2024-12-27 18:42
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
run_sql = """
|
||||||
|
UPDATE application_public_access_client
|
||||||
|
SET client_id="id"
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
dependencies = [
|
||||||
|
('application', '0020_application_record_update_time'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='applicationpublicaccessclient',
|
||||||
|
name='client_id',
|
||||||
|
field=models.UUIDField(default=uuid.uuid1, verbose_name='公共访问链接客户端id'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='applicationpublicaccessclient',
|
||||||
|
name='id',
|
||||||
|
field=models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False,
|
||||||
|
verbose_name='主键id'),
|
||||||
|
),
|
||||||
|
migrations.AddIndex(
|
||||||
|
model_name='applicationpublicaccessclient',
|
||||||
|
index=models.Index(fields=['client_id'], name='application_client__4de9af_idx'),
|
||||||
|
),
|
||||||
|
migrations.RunSQL(run_sql)
|
||||||
|
]
|
||||||
@ -50,10 +50,14 @@ class ApplicationAccessToken(AppModelMixin):
|
|||||||
|
|
||||||
|
|
||||||
class ApplicationPublicAccessClient(AppModelMixin):
|
class ApplicationPublicAccessClient(AppModelMixin):
|
||||||
id = models.UUIDField(max_length=128, primary_key=True, verbose_name="公共访问链接客户端id")
|
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id")
|
||||||
|
client_id = models.UUIDField(max_length=128, default=uuid.uuid1, verbose_name="公共访问链接客户端id")
|
||||||
application = models.ForeignKey(Application, on_delete=models.CASCADE, verbose_name="应用id")
|
application = models.ForeignKey(Application, on_delete=models.CASCADE, verbose_name="应用id")
|
||||||
access_num = models.IntegerField(default=0, verbose_name="访问总次数次数")
|
access_num = models.IntegerField(default=0, verbose_name="访问总次数次数")
|
||||||
intraday_access_num = models.IntegerField(default=0, verbose_name="当日访问次数")
|
intraday_access_num = models.IntegerField(default=0, verbose_name="当日访问次数")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = "application_public_access_client"
|
db_table = "application_public_access_client"
|
||||||
|
indexes = [
|
||||||
|
models.Index(fields=['client_id']),
|
||||||
|
]
|
||||||
|
|||||||
@ -6,8 +6,8 @@
|
|||||||
@date:2023/11/14 13:51
|
@date:2023/11/14 13:51
|
||||||
@desc:
|
@desc:
|
||||||
"""
|
"""
|
||||||
from datetime import datetime
|
|
||||||
import uuid
|
import uuid
|
||||||
|
from datetime import datetime
|
||||||
from typing import List, Dict
|
from typing import List, Dict
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
@ -107,7 +107,8 @@ class ChatInfo:
|
|||||||
'search_mode': self.application.dataset_setting.get(
|
'search_mode': self.application.dataset_setting.get(
|
||||||
'search_mode') if 'search_mode' in self.application.dataset_setting else 'embedding',
|
'search_mode') if 'search_mode' in self.application.dataset_setting else 'embedding',
|
||||||
'no_references_setting': self.get_no_references_setting(self.application.dataset_setting, model_setting),
|
'no_references_setting': self.get_no_references_setting(self.application.dataset_setting, model_setting),
|
||||||
'user_id': self.application.user_id
|
'user_id': self.application.user_id,
|
||||||
|
'application_id': self.application.id
|
||||||
}
|
}
|
||||||
|
|
||||||
def to_pipeline_manage_params(self, problem_text: str, post_response_handler: PostResponseHandler,
|
def to_pipeline_manage_params(self, problem_text: str, post_response_handler: PostResponseHandler,
|
||||||
@ -258,9 +259,11 @@ class ChatMessageSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
def is_valid_intraday_access_num(self):
|
def is_valid_intraday_access_num(self):
|
||||||
if self.data.get('client_type') == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
|
if self.data.get('client_type') == AuthenticationType.APPLICATION_ACCESS_TOKEN.value:
|
||||||
access_client = QuerySet(ApplicationPublicAccessClient).filter(id=self.data.get('client_id')).first()
|
access_client = QuerySet(ApplicationPublicAccessClient).filter(client_id=self.data.get('client_id'),
|
||||||
|
application_id=self.data.get(
|
||||||
|
'application_id')).first()
|
||||||
if access_client is None:
|
if access_client is None:
|
||||||
access_client = ApplicationPublicAccessClient(id=self.data.get('client_id'),
|
access_client = ApplicationPublicAccessClient(client_id=self.data.get('client_id'),
|
||||||
application_id=self.data.get('application_id'),
|
application_id=self.data.get('application_id'),
|
||||||
access_num=0,
|
access_num=0,
|
||||||
intraday_access_num=0)
|
intraday_access_num=0)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user