Skip to content

Commit cb4185b

Browse files
committed
feat: add 'file_clean_time' field to Application model and update related logic
1 parent 0aad828 commit cb4185b

8 files changed

Lines changed: 127 additions & 56 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 5.2.9 on 2026-01-14 06:51
2+
3+
from django.db import migrations, models
4+
5+
6+
def insert_default_data(apps, schema_editor):
7+
Application = apps.get_model('application', 'Application')
8+
# 批量修改 把所有的file_clean_time的值设置成clean_time的值
9+
Application.objects.all().update(file_clean_time=models.F('clean_time'))
10+
11+
12+
class Migration(migrations.Migration):
13+
dependencies = [
14+
('application', '0005_chatrecord_vote_other_content_chatrecord_vote_reason'),
15+
]
16+
17+
operations = [
18+
migrations.AddField(
19+
model_name='application',
20+
name='file_clean_time',
21+
field=models.IntegerField(default=180, verbose_name='文件清理时间'),
22+
),
23+
migrations.RunPython(insert_default_data)
24+
]

apps/application/models/application.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ class Application(AppModelMixin):
103103
application_enable = models.BooleanField(verbose_name="应用是否启用", default=False)
104104
application_ids = models.JSONField(verbose_name="应用ID列表", default=list)
105105
mcp_output_enable = models.BooleanField(verbose_name="MCP输出是否启用", default=True)
106+
file_clean_time = models.IntegerField(verbose_name="文件清理时间", default=180)
106107

107108
@staticmethod
108109
def get_default_model_prompt():

apps/application/serializers/application.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,7 @@ def to_application(application, workspace_id, user_id, update_tool_map, folder_i
678678
stt_model_enable=application.get('stt_model_enable'),
679679
tts_type=application.get('tts_type'),
680680
clean_time=application.get('clean_time'),
681+
file_clean_time=application.get('file_clean_time'),
681682
file_upload_enable=application.get('file_upload_enable'),
682683
file_upload_setting=application.get('file_upload_setting'),
683684
)
@@ -987,7 +988,7 @@ def edit(self, instance: Dict, with_valid=True):
987988
'stt_model_params_setting',
988989
'mcp_enable', 'mcp_tool_ids', 'mcp_servers', 'mcp_source', 'tool_enable', 'tool_ids',
989990
'mcp_output_enable', 'application_enable', 'application_ids',
990-
'problem_optimization_prompt', 'clean_time', 'folder_id']
991+
'problem_optimization_prompt', 'clean_time', 'file_clean_time','folder_id']
991992
for update_key in update_keys:
992993
if update_key in instance and instance.get(update_key) is not None:
993994
application.__setattr__(update_key, instance.get(update_key))

apps/common/job/clean_chat_job.py

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,29 @@ def clean_chat_log_job_lock():
2323
maxkb_logger.info(_('start clean chat log'))
2424
now = timezone.now()
2525

26-
applications = Application.objects.all().values('id', 'clean_time')
26+
applications = Application.objects.all().values('id', 'clean_time', 'file_clean_time')
2727
cutoff_dates = {
2828
app['id']: now - datetime.timedelta(days=app['clean_time'] or 180)
2929
for app in applications
3030
}
31+
file_cutoff_dates = {
32+
app['id']: now - datetime.timedelta(days=app['file_clean_time'] or app['clean_time'] or 180)
33+
for app in applications
34+
}
35+
file_conditions = Q()
36+
for app_id, cutoff_date in file_cutoff_dates.items():
37+
file_conditions |= Q(chat__application_id=app_id, create_time__lt=cutoff_date)
38+
clean_method(file_conditions, clean_log=False)
3139

3240
query_conditions = Q()
3341
for app_id, cutoff_date in cutoff_dates.items():
3442
query_conditions |= Q(chat__application_id=app_id, create_time__lt=cutoff_date)
43+
clean_method(query_conditions)
44+
45+
maxkb_logger.info(_('end clean chat log'))
46+
47+
48+
def clean_method(query_conditions, clean_log=True):
3549
batch_size = 500
3650
while True:
3751
with transaction.atomic():
@@ -54,20 +68,20 @@ def clean_chat_log_job_lock():
5468
(item['max_create_time'] for item in max_create_times if item['chat_id'] == record.chat_id), None)
5569
if max_create_time:
5670
files_to_delete.extend(
57-
File.objects.filter(meta__chat_id=str(record.chat_id), create_time__lt=max_create_time)
71+
File.objects.filter(source_id=str(record.chat_id), create_time__lt=max_create_time)
5872
)
5973
# 删除 ChatRecord
60-
deleted_count = ChatRecord.objects.filter(id__in=chat_record_ids).delete()[0]
74+
deleted_count = 0
75+
if clean_log:
76+
deleted_count = ChatRecord.objects.filter(id__in=chat_record_ids).delete()[0]
6177

62-
# 删除没有关联 ChatRecord 的 Chat
63-
Chat.objects.filter(chatrecord__isnull=True, id__in=chat_ids).delete()
78+
# 删除没有关联 ChatRecord 的 Chat
79+
Chat.objects.filter(chatrecord__isnull=True, id__in=chat_ids).delete()
6480
File.objects.filter(loid__in=[file.loid for file in files_to_delete]).delete()
6581

6682
if deleted_count < batch_size:
6783
break
6884

69-
maxkb_logger.info(_('end clean chat log'))
70-
7185

7286
def run():
7387
rlock = RedisLock()

ui/src/locales/lang/en-US/views/chat-log.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default {
2323
},
2424
addToKnowledge: 'Add to Knowledge',
2525
daysText: 'Days ago',
26+
fileDaysText: 'The attachment uploaded from the previous conversation',
2627
selectKnowledge: 'Select Knowledge',
2728
selectKnowledgePlaceholder: 'Please select a knowledge',
2829
saveToDocument: 'Save to Document',

ui/src/locales/lang/zh-CN/views/chat-log.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default {
2323
},
2424
addToKnowledge: '添加至知识库',
2525
daysText: '天之前的对话记录',
26+
fileDaysText: '天之前的对话上传的附件',
2627
selectKnowledge: '选择知识库',
2728
selectKnowledgePlaceholder: '请选择知识库',
2829
saveToDocument: '保存至文档',

ui/src/locales/lang/zh-Hant/views/chat-log.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default {
2323
},
2424
addToKnowledge: '添加至知識庫',
2525
daysText: '天之前的對話記錄',
26+
fileDaysText: '天之前的對話上傳的附件',
2627
selectKnowledge: '選擇知識庫',
2728
selectKnowledgePlaceholder: '請選擇知識庫',
2829
saveToDocument: '保存至文件',

0 commit comments

Comments
 (0)