fix: Log annotation acquisition details file type data cannot be serialized (#2579)

This commit is contained in:
shaohuzhang1 2025-03-17 16:45:06 +08:00 committed by GitHub
parent 460de60019
commit be31989ab9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 43 additions and 24 deletions

View File

@ -1,11 +1,11 @@
# Generated by Django 4.2.13 on 2024-07-15 15:52 # Generated by Django 4.2.13 on 2024-07-15 15:52
import application.models.application
from django.db import migrations, models from django.db import migrations, models
import common.encoder.encoder
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('application', '0009_application_type_application_work_flow_and_more'), ('application', '0009_application_type_application_work_flow_and_more'),
] ]
@ -14,6 +14,6 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='chatrecord', model_name='chatrecord',
name='details', name='details',
field=models.JSONField(default=dict, encoder=application.models.application.DateEncoder, verbose_name='对话详情'), field=models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='对话详情'),
), ),
] ]

View File

@ -6,15 +6,13 @@
@date2023/9/25 14:24 @date2023/9/25 14:24
@desc: @desc:
""" """
import datetime
import decimal
import json
import uuid import uuid
from django.contrib.postgres.fields import ArrayField from django.contrib.postgres.fields import ArrayField
from django.db import models from django.db import models
from langchain.schema import HumanMessage, AIMessage from langchain.schema import HumanMessage, AIMessage
from common.encoder.encoder import SystemEncoder
from common.mixins.app_model_mixin import AppModelMixin from common.mixins.app_model_mixin import AppModelMixin
from dataset.models.data_set import DataSet from dataset.models.data_set import DataSet
from setting.models.model_management import Model from setting.models.model_management import Model
@ -135,18 +133,6 @@ class VoteChoices(models.TextChoices):
TRAMPLE = 1, '反对' TRAMPLE = 1, '反对'
class DateEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, uuid.UUID):
return str(obj)
if isinstance(obj, datetime.datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S")
if isinstance(obj, decimal.Decimal):
return float(obj)
else:
return json.JSONEncoder.default(self, obj)
class ChatRecord(AppModelMixin): class ChatRecord(AppModelMixin):
""" """
对话日志 详情 对话日志 详情
@ -163,7 +149,7 @@ class ChatRecord(AppModelMixin):
message_tokens = models.IntegerField(verbose_name="请求token数量", default=0) message_tokens = models.IntegerField(verbose_name="请求token数量", default=0)
answer_tokens = models.IntegerField(verbose_name="响应token数量", default=0) answer_tokens = models.IntegerField(verbose_name="响应token数量", default=0)
const = models.IntegerField(verbose_name="总费用", default=0) const = models.IntegerField(verbose_name="总费用", default=0)
details = models.JSONField(verbose_name="对话详情", default=dict, encoder=DateEncoder) details = models.JSONField(verbose_name="对话详情", default=dict, encoder=SystemEncoder)
improve_paragraph_id_list = ArrayField(verbose_name="改进标注列表", improve_paragraph_id_list = ArrayField(verbose_name="改进标注列表",
base_field=models.UUIDField(max_length=128, blank=True) base_field=models.UUIDField(max_length=128, blank=True)
, default=list) , default=list)

View File

@ -0,0 +1,28 @@
# coding=utf-8
"""
@project: MaxKB
@Author
@file SystemEncoder.py
@date2025/3/17 16:38
@desc:
"""
import datetime
import decimal
import json
import uuid
from django.core.files.uploadedfile import InMemoryUploadedFile
class SystemEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, uuid.UUID):
return str(obj)
if isinstance(obj, datetime.datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S")
if isinstance(obj, decimal.Decimal):
return float(obj)
if isinstance(obj, InMemoryUploadedFile):
return {'name': obj.name, 'size': obj.size}
else:
return json.JSONEncoder.default(self, obj)

View File

@ -1,11 +1,13 @@
# Generated by Django 4.2.18 on 2025-03-17 02:50 # Generated by Django 4.2.18 on 2025-03-17 02:50
from django.db import migrations, models
import uuid import uuid
from django.db import migrations, models
import common.encoder.encoder
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('setting', '0009_set_default_model_params_form'), ('setting', '0009_set_default_model_params_form'),
] ]
@ -16,13 +18,15 @@ class Migration(migrations.Migration):
fields=[ fields=[
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')), ('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')), ('id', models.UUIDField(default=uuid.uuid1, editable=False, primary_key=True, serialize=False,
verbose_name='主键id')),
('menu', models.CharField(max_length=128, verbose_name='操作菜单')), ('menu', models.CharField(max_length=128, verbose_name='操作菜单')),
('operate', models.CharField(max_length=128, verbose_name='操作')), ('operate', models.CharField(max_length=128, verbose_name='操作')),
('user', models.JSONField(default=dict, verbose_name='用户信息')), ('user', models.JSONField(default=dict, verbose_name='用户信息')),
('status', models.IntegerField(max_length=20, verbose_name='状态')), ('status', models.IntegerField(max_length=20, verbose_name='状态')),
('ip_address', models.CharField(max_length=128, verbose_name='ip地址')), ('ip_address', models.CharField(max_length=128, verbose_name='ip地址')),
('details', models.JSONField(default=dict, verbose_name='详情')), ('details',
models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='详情')),
], ],
options={ options={
'db_table': 'log', 'db_table': 'log',

View File

@ -10,6 +10,7 @@ import uuid
from django.db import models from django.db import models
from common.encoder.encoder import SystemEncoder
from common.mixins.app_model_mixin import AppModelMixin from common.mixins.app_model_mixin import AppModelMixin
@ -29,7 +30,7 @@ class Log(AppModelMixin):
ip_address = models.CharField(max_length=128, verbose_name="ip地址") ip_address = models.CharField(max_length=128, verbose_name="ip地址")
details = models.JSONField(verbose_name="详情", default=dict) details = models.JSONField(verbose_name="详情", default=dict, encoder=SystemEncoder)
class Meta: class Meta:
db_table = "log" db_table = "log"