feat: add new fields to Application model and update serializer mappings

--bug=1062164 --user=刘瑞斌 【应用】-简单应用中添加MCP、工具后,复制应用生成的应用中没有引用 MCP、工具 https://www.tapd.cn/62980211/s/1778474
v3.2
CaptainB 2025-09-24 15:43:21 +08:00
parent 10ded1b7d1
commit e9156f7138
1 changed files with 41 additions and 29 deletions

View File

@ -7,7 +7,6 @@
@desc: @desc:
""" """
import asyncio import asyncio
import datetime
import hashlib import hashlib
import json import json
import os import os
@ -21,8 +20,8 @@ from django.core import validators
from django.db import models, transaction from django.db import models, transaction
from django.db.models import QuerySet, Q from django.db.models import QuerySet, Q
from django.http import HttpResponse from django.http import HttpResponse
from django.utils.translation import gettext_lazy as _
from django.utils import timezone from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from langchain_mcp_adapters.client import MultiServerMCPClient from langchain_mcp_adapters.client import MultiServerMCPClient
from rest_framework import serializers, status from rest_framework import serializers, status
from rest_framework.utils.formatting import lazy_format from rest_framework.utils.formatting import lazy_format
@ -256,7 +255,10 @@ class ApplicationCreateSerializer(serializers.Serializer):
@staticmethod @staticmethod
def to_application_model(user_id: str, workspace_id: str, application: Dict): def to_application_model(user_id: str, workspace_id: str, application: Dict):
return Application(id=uuid.uuid7(), name=application.get('name'), desc=application.get('desc'), return Application(
id=uuid.uuid7(),
name=application.get('name'),
desc=application.get('desc'),
workspace_id=workspace_id, workspace_id=workspace_id,
prologue=application.get('prologue'), prologue=application.get('prologue'),
dialogue_number=application.get('dialogue_number', 0), dialogue_number=application.get('dialogue_number', 0),
@ -277,7 +279,14 @@ class ApplicationCreateSerializer(serializers.Serializer):
tts_type=application.get('tts_type', 'BROWSER'), tts_type=application.get('tts_type', 'BROWSER'),
file_upload_enable=application.get('file_upload_enable', False), file_upload_enable=application.get('file_upload_enable', False),
file_upload_setting=application.get('file_upload_setting', {}), file_upload_setting=application.get('file_upload_setting', {}),
work_flow={} work_flow={},
mcp_enable=application.get('mcp_enable', False),
mcp_tool_ids=application.get('mcp_tool_ids', []),
mcp_servers=application.get('mcp_servers'),
mcp_source=application.get('mcp_source', 'referencing'),
tool_enable=application.get('tool_enable', False),
tool_ids=application.get('tool_ids', []),
mcp_output_enable=application.get('mcp_output_enable', False),
) )
@ -708,7 +717,8 @@ class ApplicationOperateSerializer(serializers.Serializer):
'tts_autoplay': 'tts_autoplay', 'stt_autosend': 'stt_autosend', 'file_upload_enable': 'file_upload_enable', 'tts_autoplay': 'tts_autoplay', 'stt_autosend': 'stt_autosend', 'file_upload_enable': 'file_upload_enable',
'file_upload_setting': 'file_upload_setting', 'file_upload_setting': 'file_upload_setting',
'mcp_enable': 'mcp_enable', 'mcp_tool_ids': 'mcp_tool_ids', 'mcp_servers': 'mcp_servers', 'mcp_enable': 'mcp_enable', 'mcp_tool_ids': 'mcp_tool_ids', 'mcp_servers': 'mcp_servers',
'mcp_source': 'mcp_source', 'tool_enable': 'tool_enable', 'tool_ids': 'tool_ids', 'mcp_output_enable': 'mcp_output_enable', 'mcp_source': 'mcp_source', 'tool_enable': 'tool_enable', 'tool_ids': 'tool_ids',
'mcp_output_enable': 'mcp_output_enable',
'type': 'type' 'type': 'type'
} }
@ -833,8 +843,10 @@ class ApplicationOperateSerializer(serializers.Serializer):
'knowledge_setting', 'model_setting', 'problem_optimization', 'dialogue_number', 'knowledge_setting', 'model_setting', 'problem_optimization', 'dialogue_number',
'stt_model_id', 'tts_model_id', 'tts_model_enable', 'stt_model_enable', 'tts_type', 'stt_model_id', 'tts_model_id', 'tts_model_enable', 'stt_model_enable', 'tts_type',
'tts_autoplay', 'stt_autosend', 'file_upload_enable', 'file_upload_setting', 'tts_autoplay', 'stt_autosend', 'file_upload_enable', 'file_upload_setting',
'api_key_is_active', 'icon', 'work_flow', 'model_params_setting', 'tts_model_params_setting', 'stt_model_params_setting', 'api_key_is_active', 'icon', 'work_flow', 'model_params_setting', 'tts_model_params_setting',
'mcp_enable', 'mcp_tool_ids', 'mcp_servers', 'mcp_source', 'tool_enable', 'tool_ids', 'mcp_output_enable', 'stt_model_params_setting',
'mcp_enable', 'mcp_tool_ids', 'mcp_servers', 'mcp_source', 'tool_enable', 'tool_ids',
'mcp_output_enable',
'problem_optimization_prompt', 'clean_time', 'folder_id'] 'problem_optimization_prompt', 'clean_time', 'folder_id']
for update_key in update_keys: for update_key in update_keys:
if update_key in instance and instance.get(update_key) is not None: if update_key in instance and instance.get(update_key) is not None: