feat: update UUID generation to use uuid7 for improved uniqueness across models

This commit is contained in:
CaptainB 2025-06-23 11:19:20 +08:00
parent 1a60d8c972
commit 3e9c3c0602
20 changed files with 45 additions and 45 deletions

View File

@ -9,7 +9,7 @@
import logging
import time
import traceback
import uuid
import uuid_utils.compat as uuid
from typing import List
from django.db.models import QuerySet
@ -238,7 +238,7 @@ class BaseChatStep(IChatStep):
model_setting=None):
chat_result, is_ai_chat = self.get_stream_result(message_list, chat_model, paragraph_list,
no_references_setting, problem_text)
chat_record_id = uuid.uuid1()
chat_record_id = uuid.uuid7()
r = StreamingHttpResponse(
streaming_content=event_content(chat_result, chat_id, chat_record_id, paragraph_list,
post_response_handler, manage, self, chat_model, message_list, problem_text,
@ -286,7 +286,7 @@ class BaseChatStep(IChatStep):
reasoning_content_end = model_setting.get('reasoning_content_end', '</think>')
reasoning = Reasoning(reasoning_content_start,
reasoning_content_end)
chat_record_id = uuid.uuid1()
chat_record_id = uuid.uuid7()
# 调用模型
try:
chat_result, is_ai_chat = self.get_block_result(message_list, chat_model, paragraph_list,

View File

@ -90,7 +90,7 @@ class Migration(migrations.Migration):
fields=[
('create_time', models.DateTimeField(auto_now_add=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_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
('secret_key', models.CharField(max_length=1024, unique=True, verbose_name='秘钥')),
('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')),
('is_active', models.BooleanField(default=True, verbose_name='是否开启')),
@ -162,7 +162,7 @@ class Migration(migrations.Migration):
fields=[
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
('id', models.UUIDField(default=uuid_utils.compat.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
('vote_status', models.CharField(choices=[('-1', '未投票'), ('0', '赞同'), ('1', '反对')], default='-1', max_length=10, verbose_name='投票')),
('problem_text', models.CharField(max_length=10240, verbose_name='问题')),
('answer_text', models.CharField(max_length=40960, verbose_name='答案')),
@ -185,7 +185,7 @@ class Migration(migrations.Migration):
fields=[
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
('id', models.UUIDField(default=uuid_utils.compat.uuid1, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')),
('name', models.CharField(default='', max_length=128, verbose_name='版本名称')),
('publish_user_id', models.UUIDField(default=None, null=True, verbose_name='发布者id')),

View File

@ -120,7 +120,7 @@ class ApplicationKnowledgeMapping(AppModelMixin):
class WorkFlowVersion(AppModelMixin):
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id")
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
application = models.ForeignKey(Application, on_delete=models.CASCADE)
workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True)
name = models.CharField(verbose_name="版本名称", max_length=128, default="")

View File

@ -1,4 +1,4 @@
import uuid
import uuid_utils.compat as uuid
from django.contrib.postgres.fields import ArrayField
from django.db import models
@ -9,7 +9,7 @@ from users.models import User
class ApplicationApiKey(AppModelMixin):
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id")
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
secret_key = models.CharField(max_length=1024, verbose_name="秘钥", unique=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户id")
workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True)

View File

@ -48,7 +48,7 @@ class ChatRecord(AppModelMixin):
"""
对话日志 详情
"""
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id")
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
chat = models.ForeignKey(Chat, on_delete=models.CASCADE)
vote_status = models.CharField(verbose_name='投票', max_length=10, choices=VoteChoices.choices,
default=VoteChoices.UN_VOTE)

View File

@ -246,7 +246,7 @@ class ApplicationCreateSerializer(serializers.Serializer):
@staticmethod
def to_application_model(user_id: str, application: Dict):
return Application(id=uuid.uuid1(), name=application.get('name'), desc=application.get('desc'),
return Application(id=uuid.uuid7(), name=application.get('name'), desc=application.get('desc'),
prologue=application.get('prologue'),
dialogue_number=application.get('dialogue_number', 0),
user_id=user_id, model_id=application.get('model_id'),
@ -429,12 +429,12 @@ class ApplicationSerializer(serializers.Serializer):
application_model.save()
# 插入认证信息
ApplicationAccessToken(application_id=application_model.id,
access_token=hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()[8:24]).save()
access_token=hashlib.md5(str(uuid.uuid7()).encode()).hexdigest()[8:24]).save()
return ApplicationCreateSerializer.ApplicationResponse(application_model).data
@staticmethod
def to_application_knowledge_mapping(application_id: str, dataset_id: str):
return ApplicationKnowledgeMapping(id=uuid.uuid1(), application_id=application_id, dataset_id=dataset_id)
return ApplicationKnowledgeMapping(id=uuid.uuid7(), application_id=application_id, dataset_id=dataset_id)
def insert_simple(self, instance: Dict):
self.is_valid(raise_exception=True)
@ -449,7 +449,7 @@ class ApplicationSerializer(serializers.Serializer):
application_model.save()
# 插入认证信息
ApplicationAccessToken(application_id=application_model.id,
access_token=hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()[8:24]).save()
access_token=hashlib.md5(str(uuid.uuid7()).encode()).hexdigest()[8:24]).save()
# 插入关联数据
QuerySet(ApplicationKnowledgeMapping).bulk_create(application_knowledge_mapping_model_list)
return ApplicationCreateSerializer.ApplicationResponse(application_model).data
@ -484,7 +484,7 @@ class ApplicationSerializer(serializers.Serializer):
application_model.save()
# 插入认证信息
ApplicationAccessToken(application_id=application_model.id,
access_token=hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()[8:24]).save()
access_token=hashlib.md5(str(uuid.uuid7()).encode()).hexdigest()[8:24]).save()
QuerySet(Tool).bulk_create(tool_model_list) if len(tool_model_list) > 0 else None
return True
@ -511,7 +511,7 @@ class ApplicationSerializer(serializers.Serializer):
for node in work_flow.get('nodes', []):
if node.get('type') == 'search-dataset-node':
node.get('properties', {}).get('node_data', {})['dataset_id_list'] = []
return Application(id=uuid.uuid1(),
return Application(id=uuid.uuid7(),
user_id=user_id,
name=application.get('name'),
workspace_id=workspace_id,

View File

@ -7,7 +7,7 @@
@desc:
"""
import hashlib
import uuid
import uuid_utils.compat as uuid
from django.core.cache import cache
from django.db.models import QuerySet
@ -53,7 +53,7 @@ class AccessTokenSerializer(serializers.Serializer):
if 'is_active' in instance:
application_access_token.is_active = instance.get("is_active")
if 'access_token_reset' in instance and instance.get('access_token_reset'):
application_access_token.access_token = hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()[8:24]
application_access_token.access_token = hashlib.md5(str(uuid.uuid7()).encode()).hexdigest()[8:24]
if 'access_num' in instance and instance.get('access_num') is not None:
application_access_token.access_num = instance.get("access_num")
if 'white_active' in instance and instance.get('white_active') is not None:
@ -91,7 +91,7 @@ class AccessTokenSerializer(serializers.Serializer):
if application_access_token is None:
application_access_token = ApplicationAccessToken(application_id=application_id,
access_token=hashlib.md5(
str(uuid.uuid1()).encode()).hexdigest()[
str(uuid.uuid7()).encode()).hexdigest()[
8:24], is_active=True)
application_access_token.save()
application_setting_model = DatabaseModelManage.get_model('application_setting')

View File

@ -45,8 +45,8 @@ class ApplicationKeySerializer(serializers.Serializer):
self.is_valid(raise_exception=True)
application_id = self.data.get("application_id")
application = QuerySet(Application).filter(id=application_id).first()
secret_key = 'application-' + hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()
application_api_key = ApplicationApiKey(id=uuid.uuid1(),
secret_key = 'application-' + hashlib.md5(str(uuid.uuid7()).encode()).hexdigest()
application_api_key = ApplicationApiKey(id=uuid.uuid7(),
secret_key=secret_key,
user_id=application.user_id,
application_id=application_id)

View File

@ -6,7 +6,7 @@
@date2025/6/10 15:10
@desc:
"""
import uuid
import uuid_utils.compat as uuid
from functools import reduce
from typing import Dict
@ -208,7 +208,7 @@ class ApplicationChatRecordAddKnowledgeSerializer(serializers.Serializer):
problem_paragraph_mappings = []
for chat_record in chat_record_list:
paragraph = Paragraph(
id=uuid.uuid1(),
id=uuid.uuid7(),
document_id=document_id,
content=chat_record.answer_text,
knowledge_id=knowledge_id,
@ -216,7 +216,7 @@ class ApplicationChatRecordAddKnowledgeSerializer(serializers.Serializer):
)
problem, _ = Problem.objects.get_or_create(content=chat_record.problem_text, knowledge_id=knowledge_id)
problem_paragraph_mapping = ProblemParagraphMapping(
id=uuid.uuid1(),
id=uuid.uuid7(),
knowledge_id=knowledge_id,
document_id=document_id,
problem_id=problem.id,
@ -284,7 +284,7 @@ class ApplicationChatRecordImproveSerializer(serializers.Serializer):
max_position=Max('position')
)['max_position'] or 0
paragraph = Paragraph(
id=uuid.uuid1(),
id=uuid.uuid7(),
document_id=document_id,
content=instance.get("content"),
knowledge_id=knowledge_id,
@ -294,7 +294,7 @@ class ApplicationChatRecordImproveSerializer(serializers.Serializer):
problem_text = instance.get('problem_text') if instance.get(
'problem_text') is not None else chat_record.problem_text
problem, _ = QuerySet(Problem).get_or_create(content=problem_text, knowledge_id=knowledge_id)
problem_paragraph_mapping = ProblemParagraphMapping(id=uuid.uuid1(), knowledge_id=knowledge_id,
problem_paragraph_mapping = ProblemParagraphMapping(id=uuid.uuid7(), knowledge_id=knowledge_id,
document_id=document_id,
problem_id=problem.id,
paragraph_id=paragraph.id)

View File

@ -6,7 +6,7 @@
@date2025/6/10 11:00
@desc:
"""
import uuid
import uuid_utils.compat as uuid
from django.utils.translation import gettext_lazy as _
from drf_spectacular.utils import extend_schema
@ -114,7 +114,7 @@ class OpenView(APIView):
def get(self, request: Request, workspace_id: str, application_id: str):
return result.success(OpenChatSerializers(
data={'workspace_id': workspace_id, 'application_id': application_id,
'chat_user_id': str(uuid.uuid1()), 'chat_user_type': ChatUserType.ANONYMOUS_USER,
'chat_user_id': str(uuid.uuid7()), 'chat_user_type': ChatUserType.ANONYMOUS_USER,
'debug': True}).open())

View File

@ -232,7 +232,7 @@ class ChatSerializers(serializers.Serializer):
work_flow_manage = WorkflowManage(Workflow.new_instance(work_flow),
{'history_chat_record': history_chat_record, 'question': message,
'chat_id': chat_info.chat_id, 'chat_record_id': str(
uuid.uuid1()) if chat_record is None else chat_record.id,
uuid.uuid7()) if chat_record is None else chat_record.id,
'stream': stream,
're_chat': re_chat,
'chat_user_id': chat_user_id,

View File

@ -6,7 +6,7 @@
@date2025/6/6 13:48
@desc:
"""
import uuid
import uuid_utils.compat as uuid
from django.core import signing
from django.core.cache import cache
@ -41,7 +41,7 @@ class AnonymousAuthenticationSerializer(serializers.Serializer):
access_token = self.data.get("access_token")
application_access_token = QuerySet(ApplicationAccessToken).filter(access_token=access_token).first()
if application_access_token is not None and application_access_token.is_active:
chat_user_id = token_details.get('chat_user_id') or str(uuid.uuid1())
chat_user_id = token_details.get('chat_user_id') or str(uuid.uuid7())
_type = AuthenticationType.CHAT_ANONYMOUS_USER
return ChatUserToken(application_access_token.application_id, None, access_token, _type,
ChatUserType.ANONYMOUS_USER,

View File

@ -7,7 +7,7 @@
@desc:
"""
import os
import uuid
import uuid_utils.compat as uuid
from django.db.models import QuerySet
from django.http import HttpResponse
@ -78,7 +78,7 @@ class ChatEmbedSerializer(serializers.Serializer):
'x_value': float_location.get('x', {}).get('value', 0),
'y_type': float_location.get('y', {}).get('type', 'bottom'),
'y_value': float_location.get('y', {}).get('value', 30),
'max_kb_id': str(uuid.uuid1()).replace('-', ''),
'max_kb_id': str(uuid.uuid7()).replace('-', ''),
'header_font_color': header_font_color}))
response = HttpResponse(s, status=200, headers={'Content-Type': 'text/javascript'})
return response

View File

@ -10,7 +10,7 @@ import os
import pickle
import subprocess
import sys
import uuid
import uuid_utils.compat as uuid
from textwrap import dedent
from maxkb.const import BASE_DIR
@ -42,7 +42,7 @@ class FunctionExecutor:
os.umask(old_mask)
def exec_code(self, code_str, keywords):
_id = str(uuid.uuid1())
_id = str(uuid.uuid7())
success = '{"code":200,"msg":"成功","data":exec_result}'
err = '{"code":500,"msg":str(e),"data":None}'
result_path = f'{self.sandbox_path}/result/{_id}.result'

View File

@ -336,7 +336,7 @@ class DocumentSerializers(serializers.Serializer):
problem_paragraph_mapping.problem_id = problem.id
return problem, False
else:
problem = Problem(id=uuid.uuid1(), knowledge_id=target_knowledge_id, content=problem_content)
problem = Problem(id=uuid.uuid7(), knowledge_id=target_knowledge_id, content=problem_content)
target_problem_list.append(problem)
problem_paragraph_mapping.problem_id = problem.id
return problem, True

View File

@ -548,7 +548,7 @@ class ParagraphSerializers(serializers.Serializer):
problem_paragraph_mapping.problem_id = problem.id
return problem, False
else:
problem = Problem(id=uuid.uuid1(), knowledge_id=target_knowledge_id, content=problem_content)
problem = Problem(id=uuid.uuid7(), knowledge_id=target_knowledge_id, content=problem_content)
target_problem_list.append(problem)
problem_paragraph_mapping.problem_id = problem.id
return problem, True

View File

@ -13,7 +13,7 @@ import hmac
import json
import os
import ssl
import uuid
import uuid_utils.compat as uuid
import wave
from hashlib import sha256
from io import BytesIO
@ -285,7 +285,7 @@ class VolcanicEngineSpeechToText(MaxKBBaseModel, BaseSpeechToText):
return header_dicts
async def segment_data_processor(self, wav_data: bytes, segment_size: int):
reqid = str(uuid.uuid4())
reqid = str(uuid.uuid7())
# 构建 full client request并序列化压缩
request_params = self.construct_request(reqid)
payload_bytes = str.encode(json.dumps(request_params))

View File

@ -14,7 +14,7 @@ import gzip
import json
import re
import ssl
import uuid
import uuid_utils.compat as uuid
from typing import Dict
import websockets
@ -92,7 +92,7 @@ class VolcanicEngineTextToSpeech(MaxKBBaseModel, BaseTextToSpeech):
"pitch_ratio": 1.0,
} | self.params,
"request": {
"reqid": str(uuid.uuid4()),
"reqid": str(uuid.uuid7()),
"text": '',
"text_type": "plain",
"operation": "xxx"
@ -119,7 +119,7 @@ class VolcanicEngineTextToSpeech(MaxKBBaseModel, BaseTextToSpeech):
for line in lines:
if self.is_table_format_chars_only(line):
continue
submit_request_json["request"]["reqid"] = str(uuid.uuid4())
submit_request_json["request"]["reqid"] = str(uuid.uuid7())
submit_request_json["request"]["text"] = line
payload_bytes = str.encode(json.dumps(submit_request_json))
payload_bytes = gzip.compress(payload_bytes) # if no compression, comment this line

View File

@ -22,7 +22,7 @@ class Migration(migrations.Migration):
fields=[
('create_time', models.DateTimeField(auto_now_add=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_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
('menu', models.CharField(max_length=128, verbose_name='操作菜单')),
('operate', models.CharField(max_length=128, verbose_name='操作')),
('operation_object', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder, verbose_name='操作对象')),

View File

@ -6,7 +6,7 @@
@date2025/6/4 14:15
@desc:
"""
import uuid
import uuid_utils.compat as uuid
from django.db import models
@ -18,7 +18,7 @@ class Log(AppModelMixin):
"""
审计日志
"""
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid1, editable=False, verbose_name="主键id")
id = models.UUIDField(primary_key=True, max_length=128, default=uuid.uuid7, editable=False, verbose_name="主键id")
menu = models.CharField(max_length=128, verbose_name="操作菜单")