From e9156f71384afc7ab09fcdffff44bf68eae1b8ac Mon Sep 17 00:00:00 2001 From: CaptainB Date: Wed, 24 Sep 2025 15:43:21 +0800 Subject: [PATCH] feat: add new fields to Application model and update serializer mappings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --bug=1062164 --user=刘瑞斌 【应用】-简单应用中添加MCP、工具后,复制应用生成的应用中没有引用 MCP、工具 https://www.tapd.cn/62980211/s/1778474 --- apps/application/serializers/application.py | 70 ++++++++++++--------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/apps/application/serializers/application.py b/apps/application/serializers/application.py index b3db3e0a2..9fb16f722 100644 --- a/apps/application/serializers/application.py +++ b/apps/application/serializers/application.py @@ -7,7 +7,6 @@ @desc: """ import asyncio -import datetime import hashlib import json import os @@ -21,8 +20,8 @@ from django.core import validators from django.db import models, transaction from django.db.models import QuerySet, Q from django.http import HttpResponse -from django.utils.translation import gettext_lazy as _ from django.utils import timezone +from django.utils.translation import gettext_lazy as _ from langchain_mcp_adapters.client import MultiServerMCPClient from rest_framework import serializers, status from rest_framework.utils.formatting import lazy_format @@ -256,29 +255,39 @@ class ApplicationCreateSerializer(serializers.Serializer): @staticmethod 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'), - workspace_id=workspace_id, - prologue=application.get('prologue'), - dialogue_number=application.get('dialogue_number', 0), - user_id=user_id, model_id=application.get('model_id'), - folder_id=application.get('folder_id', application.get('workspace_id')), - knowledge_setting=application.get('knowledge_setting'), - model_setting=application.get('model_setting'), - problem_optimization=application.get('problem_optimization'), - type=ApplicationTypeChoices.SIMPLE, - model_params_setting=application.get('model_params_setting', {}), - problem_optimization_prompt=application.get('problem_optimization_prompt', None), - stt_model_enable=application.get('stt_model_enable', False), - stt_model_id=application.get('stt_model', None), - stt_autosend=application.get('stt_autosend', False), - tts_model_id=application.get('tts_model', None), - tts_model_enable=application.get('tts_model_enable', False), - tts_model_params_setting=application.get('tts_model_params_setting', {}), - tts_type=application.get('tts_type', 'BROWSER'), - file_upload_enable=application.get('file_upload_enable', False), - file_upload_setting=application.get('file_upload_setting', {}), - work_flow={} - ) + return Application( + id=uuid.uuid7(), + name=application.get('name'), + desc=application.get('desc'), + workspace_id=workspace_id, + prologue=application.get('prologue'), + dialogue_number=application.get('dialogue_number', 0), + user_id=user_id, model_id=application.get('model_id'), + folder_id=application.get('folder_id', application.get('workspace_id')), + knowledge_setting=application.get('knowledge_setting'), + model_setting=application.get('model_setting'), + problem_optimization=application.get('problem_optimization'), + type=ApplicationTypeChoices.SIMPLE, + model_params_setting=application.get('model_params_setting', {}), + problem_optimization_prompt=application.get('problem_optimization_prompt', None), + stt_model_enable=application.get('stt_model_enable', False), + stt_model_id=application.get('stt_model', None), + stt_autosend=application.get('stt_autosend', False), + tts_model_id=application.get('tts_model', None), + tts_model_enable=application.get('tts_model_enable', False), + tts_model_params_setting=application.get('tts_model_params_setting', {}), + tts_type=application.get('tts_type', 'BROWSER'), + file_upload_enable=application.get('file_upload_enable', False), + file_upload_setting=application.get('file_upload_setting', {}), + 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), + ) class ApplicationQueryRequest(serializers.Serializer): @@ -708,7 +717,8 @@ class ApplicationOperateSerializer(serializers.Serializer): 'tts_autoplay': 'tts_autoplay', 'stt_autosend': 'stt_autosend', 'file_upload_enable': 'file_upload_enable', 'file_upload_setting': 'file_upload_setting', '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' } @@ -750,7 +760,7 @@ class ApplicationOperateSerializer(serializers.Serializer): work_flow_version.save() access_token = hashlib.md5( str(uuid.uuid7()).encode()).hexdigest()[ - 8:24] + 8:24] application_access_token = QuerySet(ApplicationAccessToken).filter( application_id=application.id).first() if application_access_token is None: @@ -833,8 +843,10 @@ class ApplicationOperateSerializer(serializers.Serializer): 'knowledge_setting', 'model_setting', 'problem_optimization', 'dialogue_number', 'stt_model_id', 'tts_model_id', 'tts_model_enable', 'stt_model_enable', 'tts_type', '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', - 'mcp_enable', 'mcp_tool_ids', 'mcp_servers', 'mcp_source', 'tool_enable', 'tool_ids', 'mcp_output_enable', + 'api_key_is_active', 'icon', 'work_flow', 'model_params_setting', 'tts_model_params_setting', + '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'] for update_key in update_keys: if update_key in instance and instance.get(update_key) is not None: