Merge pull request #2445 from KurobaKaitou/main

feat[Improvement]: add support for customizing model id when adding model provider configurations.
This commit is contained in:
hrz
2025-11-02 15:52:04 +08:00
committed by GitHub
8 changed files with 40 additions and 25 deletions
@@ -16,6 +16,9 @@ public class ModelConfigBodyDTO {
// @Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)") // @Schema(description = "模型类型(Memory/ASR/VAD/LLM/TTS)")
// private String modelType; // private String modelType;
// //
@Schema(description = "模型ID,未填写将自动生成")
private String id;
@Schema(description = "模型编码(如AliLLM、DoubaoTTS)") @Schema(description = "模型编码(如AliLLM、DoubaoTTS)")
private String modelCode; private String modelCode;
@@ -18,7 +18,6 @@ import lombok.Data;
@Schema(description = "模型配置表") @Schema(description = "模型配置表")
public class ModelConfigEntity { public class ModelConfigEntity {
@TableId(type = IdType.ASSIGN_UUID)
@Schema(description = "主键") @Schema(description = "主键")
private String id; private String id;
@@ -1,23 +1,16 @@
package xiaozhi.modules.model.service.impl; package xiaozhi.modules.model.service.impl;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import xiaozhi.common.constant.Constant; import xiaozhi.common.constant.Constant;
import xiaozhi.common.exception.ErrorCode; import xiaozhi.common.exception.ErrorCode;
import xiaozhi.common.exception.RenException; import xiaozhi.common.exception.RenException;
@@ -30,15 +23,17 @@ import xiaozhi.common.utils.SensitiveDataUtils;
import xiaozhi.modules.agent.dao.AgentDao; import xiaozhi.modules.agent.dao.AgentDao;
import xiaozhi.modules.agent.entity.AgentEntity; import xiaozhi.modules.agent.entity.AgentEntity;
import xiaozhi.modules.model.dao.ModelConfigDao; import xiaozhi.modules.model.dao.ModelConfigDao;
import xiaozhi.modules.model.dto.LlmModelBasicInfoDTO; import xiaozhi.modules.model.dto.*;
import xiaozhi.modules.model.dto.ModelBasicInfoDTO;
import xiaozhi.modules.model.dto.ModelConfigBodyDTO;
import xiaozhi.modules.model.dto.ModelConfigDTO;
import xiaozhi.modules.model.dto.ModelProviderDTO;
import xiaozhi.modules.model.entity.ModelConfigEntity; import xiaozhi.modules.model.entity.ModelConfigEntity;
import xiaozhi.modules.model.service.ModelConfigService; import xiaozhi.modules.model.service.ModelConfigService;
import xiaozhi.modules.model.service.ModelProviderService; import xiaozhi.modules.model.service.ModelProviderService;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, ModelConfigEntity> public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, ModelConfigEntity>
@@ -230,7 +225,7 @@ public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, Mode
* 验证编辑参数 * 验证编辑参数
*/ */
private void validateEditParameters(String modelType, String provideCode, String id, private void validateEditParameters(String modelType, String provideCode, String id,
ModelConfigBodyDTO modelConfigBodyDTO) { ModelConfigBodyDTO modelConfigBodyDTO) {
if (StringUtils.isBlank(modelType) || StringUtils.isBlank(provideCode)) { if (StringUtils.isBlank(modelType) || StringUtils.isBlank(provideCode)) {
throw new RenException(ErrorCode.MODEL_TYPE_PROVIDE_CODE_NOT_NULL); throw new RenException(ErrorCode.MODEL_TYPE_PROVIDE_CODE_NOT_NULL);
} }
@@ -252,6 +247,10 @@ public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, Mode
if (modelConfigBodyDTO == null) { if (modelConfigBodyDTO == null) {
throw new RenException(ErrorCode.PARAMS_GET_ERROR); throw new RenException(ErrorCode.PARAMS_GET_ERROR);
} }
if (StringUtils.isBlank(modelConfigBodyDTO.getId())) {
// 参照 MP @TableId AutoUUID 策略使用 com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator(UUID.replace("-","")) 进行分配默认模型ID
modelConfigBodyDTO.setId(DefaultIdentifierGenerator.getInstance().nextUUID(ModelConfigEntity.class));
}
} }
/** /**
@@ -327,9 +326,9 @@ public class ModelConfigServiceImpl extends BaseServiceImpl<ModelConfigDao, Mode
* 准备更新实体,处理敏感数据 * 准备更新实体,处理敏感数据
*/ */
private ModelConfigEntity prepareUpdateEntity(ModelConfigBodyDTO modelConfigBodyDTO, private ModelConfigEntity prepareUpdateEntity(ModelConfigBodyDTO modelConfigBodyDTO,
ModelConfigEntity originalEntity, ModelConfigEntity originalEntity,
String modelType, String modelType,
String id) { String id) {
// 1. 复制原始实体,保留所有原始数据(包括敏感信息) // 1. 复制原始实体,保留所有原始数据(包括敏感信息)
ModelConfigEntity modelConfigEntity = ConvertUtils.sourceToTarget(originalEntity, ModelConfigEntity.class); ModelConfigEntity modelConfigEntity = ConvertUtils.sourceToTarget(originalEntity, ModelConfigEntity.class);
modelConfigEntity.setId(id); modelConfigEntity.setId(id);
@@ -47,6 +47,7 @@ export default {
addModel(params, callback) { addModel(params, callback) {
const { modelType, provideCode, formData } = params; const { modelType, provideCode, formData } = params;
const postData = { const postData = {
id: formData.id,
modelCode: formData.modelCode, modelCode: formData.modelCode,
modelName: formData.modelName, modelName: formData.modelName,
isDefault: formData.isDefault ? 1 : 0, isDefault: formData.isDefault ? 1 : 0,
@@ -28,6 +28,10 @@
<div style="height: 2px; background: #e9e9e9; margin-bottom: 22px;"></div> <div style="height: 2px; background: #e9e9e9; margin-bottom: 22px;"></div>
<el-form :model="formData" label-width="100px" label-position="left" class="custom-form"> <el-form :model="formData" label-width="100px" label-position="left" class="custom-form">
<div style="display: flex; gap: 20px; margin-bottom: 0;"> <div style="display: flex; gap: 20px; margin-bottom: 0;">
<el-form-item :label="$t('modelConfigDialog.modelId')" prop="id" style="flex: 1;">
<el-input v-model="formData.id" :placeholder="$t('modelConfigDialog.enterModelId')"
class="custom-input-bg"></el-input>
</el-form-item>
<el-form-item :label="$t('modelConfigDialog.modelName')" prop="modelName" style="flex: 1;"> <el-form-item :label="$t('modelConfigDialog.modelName')" prop="modelName" style="flex: 1;">
<el-input v-model="formData.modelName" :placeholder="$t('modelConfigDialog.enterModelName')" <el-input v-model="formData.modelName" :placeholder="$t('modelConfigDialog.enterModelName')"
class="custom-input-bg"></el-input> class="custom-input-bg"></el-input>
@@ -107,6 +111,7 @@ export default {
providerFields: [], providerFields: [],
currentProvider: null, currentProvider: null,
formData: { formData: {
id: '',
modelName: '', modelName: '',
modelCode: '', modelCode: '',
supplier: '', supplier: '',
@@ -202,6 +207,7 @@ export default {
} }
const submitData = { const submitData = {
id: this.formData.id || '',
modelName: this.formData.modelName || '', modelName: this.formData.modelName || '',
modelCode: this.formData.modelCode || '', modelCode: this.formData.modelCode || '',
supplier: this.formData.supplier, supplier: this.formData.supplier,
@@ -230,6 +236,7 @@ export default {
resetForm() { resetForm() {
this.saving = false; this.saving = false;
this.formData = { this.formData = {
id: '',
modelName: '', modelName: '',
modelCode: '', modelCode: '',
supplier: '', supplier: '',
+2
View File
@@ -841,6 +841,8 @@ export default {
'modelConfigDialog.modelInfo': 'Model Information', 'modelConfigDialog.modelInfo': 'Model Information',
'modelConfigDialog.enable': 'Enable', 'modelConfigDialog.enable': 'Enable',
'modelConfigDialog.setDefault': 'Set as Default', 'modelConfigDialog.setDefault': 'Set as Default',
'modelConfigDialog.modelId': 'Model ID',
'modelConfigDialog.enterModelId': 'If not filled in, it will be generated automatically',
'modelConfigDialog.modelName': 'Model Name', 'modelConfigDialog.modelName': 'Model Name',
'modelConfigDialog.enterModelName': 'Please enter model name', 'modelConfigDialog.enterModelName': 'Please enter model name',
'modelConfigDialog.modelCode': 'Model Code', 'modelConfigDialog.modelCode': 'Model Code',
+2
View File
@@ -841,6 +841,8 @@ export default {
'modelConfigDialog.modelInfo': '模型信息', 'modelConfigDialog.modelInfo': '模型信息',
'modelConfigDialog.enable': '是否启用', 'modelConfigDialog.enable': '是否启用',
'modelConfigDialog.setDefault': '设为默认', 'modelConfigDialog.setDefault': '设为默认',
'modelConfigDialog.modelId': '模型ID',
'modelConfigDialog.enterModelId': '未填写将自动生成模型ID',
'modelConfigDialog.modelName': '模型名称', 'modelConfigDialog.modelName': '模型名称',
'modelConfigDialog.enterModelName': '请输入模型名称', 'modelConfigDialog.enterModelName': '请输入模型名称',
'modelConfigDialog.modelCode': '模型编码', 'modelConfigDialog.modelCode': '模型编码',
+2
View File
@@ -841,6 +841,8 @@ export default {
'modelConfigDialog.modelInfo': '模型信息', 'modelConfigDialog.modelInfo': '模型信息',
'modelConfigDialog.enable': '是否啟用', 'modelConfigDialog.enable': '是否啟用',
'modelConfigDialog.setDefault': '設為默認', 'modelConfigDialog.setDefault': '設為默認',
'modelConfigDialog.modelId': '模型ID',
'modelConfigDialog.enterModelId': '未填冩將自動生成模型ID',
'modelConfigDialog.modelName': '模型名稱', 'modelConfigDialog.modelName': '模型名稱',
'modelConfigDialog.enterModelName': '請輸入模型名稱', 'modelConfigDialog.enterModelName': '請輸入模型名稱',
'modelConfigDialog.modelCode': '模型編碼', 'modelConfigDialog.modelCode': '模型編碼',