Skip to content

Commit d1a2f12

Browse files
committed
fix: Log annotation acquisition details file type data cannot be serialized
1 parent 9620817 commit d1a2f12

File tree

5 files changed

+43
-24
lines changed

5 files changed

+43
-24
lines changed
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# Generated by Django 4.2.13 on 2024-07-15 15:52
22

3-
import application.models.application
43
from django.db import migrations, models
54

5+
import common.encoder.encoder
66

7-
class Migration(migrations.Migration):
87

8+
class Migration(migrations.Migration):
99
dependencies = [
1010
('application', '0009_application_type_application_work_flow_and_more'),
1111
]
@@ -14,6 +14,6 @@ class Migration(migrations.Migration):
1414
migrations.AlterField(
1515
model_name='chatrecord',
1616
name='details',
17-
field=models.JSONField(default=dict, encoder=application.models.application.DateEncoder, verbose_name='对话详情'),
17+
field=models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='对话详情'),
1818
),
1919
]

apps/application/models/application.py

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@
66
@date:2023/9/25 14:24
77
@desc:
88
"""
9-
import datetime
10-
import decimal
11-
import json
129
import uuid
1310

1411
from django.contrib.postgres.fields import ArrayField
1512
from django.db import models
1613
from langchain.schema import HumanMessage, AIMessage
1714

15+
from common.encoder.encoder import SystemEncoder
1816
from common.mixins.app_model_mixin import AppModelMixin
1917
from dataset.models.data_set import DataSet
2018
from setting.models.model_management import Model
@@ -135,18 +133,6 @@ class VoteChoices(models.TextChoices):
135133
TRAMPLE = 1, '反对'
136134

137135

138-
class DateEncoder(json.JSONEncoder):
139-
def default(self, obj):
140-
if isinstance(obj, uuid.UUID):
141-
return str(obj)
142-
if isinstance(obj, datetime.datetime):
143-
return obj.strftime("%Y-%m-%d %H:%M:%S")
144-
if isinstance(obj, decimal.Decimal):
145-
return float(obj)
146-
else:
147-
return json.JSONEncoder.default(self, obj)
148-
149-
150136
class ChatRecord(AppModelMixin):
151137
"""
152138
对话日志 详情
@@ -163,7 +149,7 @@ class ChatRecord(AppModelMixin):
163149
message_tokens = models.IntegerField(verbose_name="请求token数量", default=0)
164150
answer_tokens = models.IntegerField(verbose_name="响应token数量", default=0)
165151
const = models.IntegerField(verbose_name="总费用", default=0)
166-
details = models.JSONField(verbose_name="对话详情", default=dict, encoder=DateEncoder)
152+
details = models.JSONField(verbose_name="对话详情", default=dict, encoder=SystemEncoder)
167153
improve_paragraph_id_list = ArrayField(verbose_name="改进标注列表",
168154
base_field=models.UUIDField(max_length=128, blank=True)
169155
, default=list)

apps/common/encoder/encoder.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# coding=utf-8
2+
"""
3+
@project: MaxKB
4+
@Author:虎
5+
@file: SystemEncoder.py
6+
@date:2025/3/17 16:38
7+
@desc:
8+
"""
9+
import datetime
10+
import decimal
11+
import json
12+
import uuid
13+
14+
from django.core.files.uploadedfile import InMemoryUploadedFile
15+
16+
17+
class SystemEncoder(json.JSONEncoder):
18+
def default(self, obj):
19+
if isinstance(obj, uuid.UUID):
20+
return str(obj)
21+
if isinstance(obj, datetime.datetime):
22+
return obj.strftime("%Y-%m-%d %H:%M:%S")
23+
if isinstance(obj, decimal.Decimal):
24+
return float(obj)
25+
if isinstance(obj, InMemoryUploadedFile):
26+
return {'name': obj.name, 'size': obj.size}
27+
else:
28+
return json.JSONEncoder.default(self, obj)

apps/setting/migrations/0010_log.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
# Generated by Django 4.2.18 on 2025-03-17 02:50
22

3-
from django.db import migrations, models
43
import uuid
54

5+
from django.db import migrations, models
66

7-
class Migration(migrations.Migration):
7+
import common.encoder.encoder
88

9+
10+
class Migration(migrations.Migration):
911
dependencies = [
1012
('setting', '0009_set_default_model_params_form'),
1113
]
@@ -16,13 +18,15 @@ class Migration(migrations.Migration):
1618
fields=[
1719
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
1820
('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
19-
('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
21+
('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False,
22+
verbose_name='主键id')),
2023
('menu', models.CharField(max_length=128, verbose_name='操作菜单')),
2124
('operate', models.CharField(max_length=128, verbose_name='操作')),
2225
('user', models.JSONField(default=dict, verbose_name='用户信息')),
2326
('status', models.IntegerField(max_length=20, verbose_name='状态')),
2427
('ip_address', models.CharField(max_length=128, verbose_name='ip地址')),
25-
('details', models.JSONField(default=dict, verbose_name='详情')),
28+
('details',
29+
models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='详情')),
2630
],
2731
options={
2832
'db_table': 'log',

apps/setting/models/log_management.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from django.db import models
1212

13+
from common.encoder.encoder import SystemEncoder
1314
from common.mixins.app_model_mixin import AppModelMixin
1415

1516

@@ -29,7 +30,7 @@ class Log(AppModelMixin):
2930

3031
ip_address = models.CharField(max_length=128, verbose_name="ip地址")
3132

32-
details = models.JSONField(verbose_name="详情", default=dict)
33+
details = models.JSONField(verbose_name="详情", default=dict, encoder=SystemEncoder)
3334

3435
class Meta:
3536
db_table = "log"

0 commit comments

Comments
 (0)