Skip to content

Commit 4831468

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents ca95032 + 96562b9 commit 4831468

File tree

44 files changed

+1143
-389
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1143
-389
lines changed

apps/application/views/application_version_views.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from common.auth import has_permissions, TokenAuth
1717
from common.constants.permission_constants import PermissionConstants, CompareConstants, ViewPermission, RoleConstants, \
1818
Permission, Group, Operate
19+
from common.log.log import log
1920
from common.response import result
2021
from django.utils.translation import gettext_lazy as _
2122

@@ -30,6 +31,7 @@ class ApplicationVersionView(APIView):
3031
responses=result.get_api_array_response(ApplicationVersionApi.get_response_body_api()),
3132
tags=[_('Application/Version')])
3233
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
34+
@log(menu='Application', operate="Get the application list")
3335
def get(self, request: Request, application_id: str):
3436
return result.success(
3537
ApplicationVersionSerializer.Query(
@@ -47,6 +49,7 @@ class Page(APIView):
4749
responses=result.get_page_api_response(ApplicationVersionApi.get_response_body_api()),
4850
tags=[_('Application/Version')])
4951
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
52+
@log(menu='Application', operate="Get the list of application versions by page")
5053
def get(self, request: Request, application_id: str, current_page: int, page_size: int):
5154
return result.success(
5255
ApplicationVersionSerializer.Query(
@@ -64,6 +67,7 @@ class Operate(APIView):
6467
responses=result.get_api_response(ApplicationVersionApi.get_response_body_api()),
6568
tags=[_('Application/Version')])
6669
@has_permissions(PermissionConstants.APPLICATION_READ, compare=CompareConstants.AND)
70+
@log(menu='Application', operate="Get application version details")
6771
def get(self, request: Request, application_id: str, work_flow_version_id: str):
6872
return result.success(
6973
ApplicationVersionSerializer.Operate(
@@ -82,6 +86,7 @@ def get(self, request: Request, application_id: str, work_flow_version_id: str):
8286
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.MANAGE,
8387
dynamic_tag=keywords.get('application_id'))],
8488
compare=CompareConstants.AND))
89+
@log(menu='Application', operate="Modify application version information")
8590
def put(self, request: Request, application_id: str, work_flow_version_id: str):
8691
return result.success(
8792
ApplicationVersionSerializer.Operate(

apps/application/views/application_views.py

Lines changed: 35 additions & 2 deletions
Large diffs are not rendered by default.

apps/application/views/chat_views.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from common.constants.authentication_type import AuthenticationType
2424
from common.constants.permission_constants import Permission, Group, Operate, \
2525
RoleConstants, ViewPermission, CompareConstants
26+
from common.log.log import log
2627
from common.response import result
2728
from common.util.common import query_params_to_single_dict
2829
from dataset.serializers.file_serializers import FileSerializer
@@ -177,6 +178,7 @@ class Operate(APIView):
177178
dynamic_tag=keywords.get('application_id'))],
178179
compare=CompareConstants.AND),
179180
compare=CompareConstants.AND)
181+
@log(menu='Application/Conversation Log', operate="Delete a conversation")
180182
def delete(self, request: Request, application_id: str, chat_id: str):
181183
return result.success(
182184
ChatSerializers.Operate(
@@ -199,6 +201,7 @@ class ClientChatHistoryPage(APIView):
199201
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
200202
dynamic_tag=keywords.get('application_id'))])
201203
)
204+
@log(menu='Application/Conversation Log', operate="Get client conversation list by paging")
202205
def get(self, request: Request, application_id: str, current_page: int, page_size: int):
203206
return result.success(ChatSerializers.ClientChatHistory(
204207
data={'client_id': request.auth.client_id, 'application_id': application_id}).page(
@@ -218,6 +221,7 @@ class Operate(APIView):
218221
dynamic_tag=keywords.get('application_id'))],
219222
compare=CompareConstants.AND),
220223
compare=CompareConstants.AND)
224+
@log(menu='Application/Conversation Log', operate="Client deletes conversation")
221225
def delete(self, request: Request, application_id: str, chat_id: str):
222226
return result.success(
223227
ChatSerializers.Operate(
@@ -235,6 +239,7 @@ def delete(self, request: Request, application_id: str, chat_id: str):
235239
dynamic_tag=keywords.get('application_id'))],
236240
compare=CompareConstants.AND),
237241
compare=CompareConstants.AND)
242+
@log(menu='Application/Conversation Log', operate="Client modifies dialogue summary")
238243
def put(self, request: Request, application_id: str, chat_id: str):
239244
return result.success(
240245
ChatSerializers.Operate(
@@ -256,6 +261,7 @@ class Page(APIView):
256261
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
257262
dynamic_tag=keywords.get('application_id'))])
258263
)
264+
@log(menu='Application/Conversation Log', operate="Get the conversation list by page")
259265
def get(self, request: Request, application_id: str, current_page: int, page_size: int):
260266
return result.success(ChatSerializers.Query(
261267
data={**query_params_to_single_dict(request.query_params), 'application_id': application_id,
@@ -281,6 +287,7 @@ class Operate(APIView):
281287
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
282288
dynamic_tag=keywords.get('application_id'))])
283289
)
290+
@log(menu='Application/Conversation Log', operate="Get conversation record details")
284291
def get(self, request: Request, application_id: str, chat_id: str, chat_record_id: str):
285292
return result.success(ChatRecordSerializer.Operate(
286293
data={'application_id': application_id,
@@ -299,6 +306,7 @@ def get(self, request: Request, application_id: str, chat_id: str, chat_record_i
299306
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
300307
dynamic_tag=keywords.get('application_id'))])
301308
)
309+
@log(menu='Application/Conversation Log', operate="Get a list of conversation records")
302310
def get(self, request: Request, application_id: str, chat_id: str):
303311
return result.success(ChatRecordSerializer.Query(
304312
data={'application_id': application_id,
@@ -320,6 +328,7 @@ class Page(APIView):
320328
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
321329
dynamic_tag=keywords.get('application_id'))])
322330
)
331+
@log(menu='Application/Conversation Log', operate="Get the conversation history list by page")
323332
def get(self, request: Request, application_id: str, chat_id: str, current_page: int, page_size: int):
324333
return result.success(ChatRecordSerializer.Query(
325334
data={'application_id': application_id,
@@ -343,6 +352,7 @@ class Vote(APIView):
343352
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
344353
dynamic_tag=keywords.get('application_id'))])
345354
)
355+
@log(menu='Application/Conversation Log', operate="Like, Dislike")
346356
def put(self, request: Request, application_id: str, chat_id: str, chat_record_id: str):
347357
return result.success(ChatRecordSerializer.Vote(
348358
data={'vote_status': request.data.get('vote_status'), 'chat_id': chat_id,
@@ -363,6 +373,7 @@ class ChatRecordImprove(APIView):
363373
[lambda r, keywords: Permission(group=Group.APPLICATION, operate=Operate.USE,
364374
dynamic_tag=keywords.get('application_id'))]
365375
))
376+
@log(menu='Application/Conversation Log', operate="Get the list of marked paragraphs")
366377
def get(self, request: Request, application_id: str, chat_id: str, chat_record_id: str):
367378
return result.success(ChatRecordSerializer.ChatRecordImprove(
368379
data={'chat_id': chat_id, 'chat_record_id': chat_record_id}).get())
@@ -390,6 +401,7 @@ class Improve(APIView):
390401
'dataset_id'))],
391402
compare=CompareConstants.AND
392403
), compare=CompareConstants.AND)
404+
@log(menu='Application/Conversation Log', operate="Annotation")
393405
def put(self, request: Request, application_id: str, chat_id: str, chat_record_id: str, dataset_id: str,
394406
document_id: str):
395407
return result.success(ChatRecordSerializer.Improve(
@@ -415,6 +427,7 @@ def put(self, request: Request, application_id: str, chat_id: str, chat_record_i
415427
'dataset_id'))],
416428
compare=CompareConstants.AND
417429
), compare=CompareConstants.AND)
430+
@log(menu='Application/Conversation Log', operate="Add to Knowledge Base")
418431
def post(self, request: Request, application_id: str, dataset_id: str):
419432
return result.success(ChatRecordSerializer.PostImprove().post_improve(request.data))
420433

@@ -440,6 +453,7 @@ class Operate(APIView):
440453
'dataset_id'))],
441454
compare=CompareConstants.AND
442455
), compare=CompareConstants.AND)
456+
@log(menu='Application/Conversation Log', operate="Delete a Annotation")
443457
def delete(self, request: Request, application_id: str, chat_id: str, chat_record_id: str,
444458
dataset_id: str,
445459
document_id: str, paragraph_id: str):

apps/common/handle/impl/doc_split_handle.py

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,24 +110,51 @@ def get_image_id(image_id):
110110
return get_image_id
111111

112112

113+
title_font_list = [
114+
[36, 100],
115+
[26, 36],
116+
[24, 26],
117+
[22, 24],
118+
[18, 22],
119+
[16, 18]
120+
]
121+
122+
123+
def get_title_level(paragraph: Paragraph):
124+
try:
125+
if paragraph.style is not None:
126+
psn = paragraph.style.name
127+
if psn.startswith('Heading') or psn.startswith('TOC 标题') or psn.startswith('标题'):
128+
return int(psn.replace("Heading ", '').replace('TOC 标题', '').replace('标题',
129+
''))
130+
if len(paragraph.runs) == 1:
131+
font_size = paragraph.runs[0].font.size
132+
pt = font_size.pt
133+
if pt >= 16:
134+
for _value, index in zip(title_font_list, range(len(title_font_list))):
135+
if pt >= _value[0] and pt < _value[1]:
136+
return index + 1
137+
except Exception as e:
138+
pass
139+
return None
140+
141+
113142
class DocSplitHandle(BaseSplitHandle):
114143
@staticmethod
115144
def paragraph_to_md(paragraph: Paragraph, doc: Document, images_list, get_image_id):
116145
try:
117-
psn = paragraph.style.name
118-
if psn.startswith('Heading') or psn.startswith('TOC 标题') or psn.startswith('标题'):
119-
title = "".join(["#" for i in range(
120-
int(psn.replace("Heading ", '').replace('TOC 标题', '').replace('标题',
121-
'')))]) + " " + paragraph.text
146+
title_level = get_title_level(paragraph)
147+
if title_level is not None:
148+
title = "".join(["#" for i in range(title_level)]) + " " + paragraph.text
122149
images = reduce(lambda x, y: [*x, *y],
123150
[get_paragraph_element_images(e, doc, images_list, get_image_id) for e in
124151
paragraph._element],
125152
[])
126-
127153
if len(images) > 0:
128154
return title + '\n' + images_to_string(images, doc, images_list, get_image_id) if len(
129155
paragraph.text) > 0 else images_to_string(images, doc, images_list, get_image_id)
130156
return title
157+
131158
except Exception as e:
132159
traceback.print_exc()
133160
return paragraph.text

apps/common/log/log.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
@date:2025/3/14 16:09
77
@desc:
88
"""
9+
from gettext import gettext
910

1011
from setting.models.log_management import Log
1112

@@ -31,6 +32,10 @@ def _get_user(request):
3132
@return:
3233
"""
3334
user = request.user
35+
if user is None:
36+
return {
37+
"user_name": gettext('unknown')
38+
}
3439
return {
3540
"id": str(user.id),
3641
"email": user.email,
@@ -70,6 +75,7 @@ def run(view, request, **kwargs):
7075
return func(view, request, **kwargs)
7176
except Exception as e:
7277
status = 500
78+
raise e
7379
finally:
7480
ip = get_ip_address(request)
7581
user = get_user(request)

apps/common/util/common.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,26 @@
2424
from ..models.db_model_manage import DBModelManage
2525

2626

27+
def encryption(message: str):
28+
"""
29+
加密敏感字段数据 加密方式是 如果密码是 1234567890 那么给前端则是 123******890
30+
:param message:
31+
:return:
32+
"""
33+
max_pre_len = 8
34+
max_post_len = 4
35+
message_len = len(message)
36+
pre_len = int(message_len / 5 * 2)
37+
post_len = int(message_len / 5 * 1)
38+
pre_str = "".join([message[index] for index in
39+
range(0, max_pre_len if pre_len > max_pre_len else 1 if pre_len <= 0 else int(pre_len))])
40+
end_str = "".join(
41+
[message[index] for index in
42+
range(message_len - (int(post_len) if pre_len < max_post_len else max_post_len), message_len)])
43+
content = "***************"
44+
return pre_str + content + end_str
45+
46+
2747
def sub_array(array: List, item_num=10):
2848
result = []
2949
temp = []

apps/common/util/split_model.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,13 +339,14 @@ def parse(self, text: str):
339339
for e in result:
340340
if len(e['content']) > 4096:
341341
pass
342-
return [item for item in [self.post_reset_paragraph(row) for row in result] if
342+
title_list = list(set([row.get('title') for row in result]))
343+
return [item for item in [self.post_reset_paragraph(row, title_list) for row in result] if
343344
'content' in item and len(item.get('content').strip()) > 0]
344345

345-
def post_reset_paragraph(self, paragraph: Dict):
346+
def post_reset_paragraph(self, paragraph: Dict, title_list: List[str]):
346347
result = self.filter_title_special_characters(paragraph)
347348
result = self.sub_title(result)
348-
result = self.content_is_null(result)
349+
result = self.content_is_null(result, title_list)
349350
return result
350351

351352
@staticmethod
@@ -357,11 +358,14 @@ def sub_title(paragraph: Dict):
357358
return paragraph
358359

359360
@staticmethod
360-
def content_is_null(paragraph: Dict):
361+
def content_is_null(paragraph: Dict, title_list: List[str]):
361362
if 'title' in paragraph:
362363
title = paragraph.get('title')
363364
content = paragraph.get('content')
364365
if (content is None or len(content.strip()) == 0) and (title is not None and len(title) > 0):
366+
find = [t for t in title_list if t.__contains__(title) and t != title]
367+
if find:
368+
return {'title': '', 'content': ''}
365369
return {'title': '', 'content': title}
366370
return paragraph
367371

0 commit comments

Comments
 (0)