mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-25 08:33:53 +08:00
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:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
+23
-24
@@ -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: '',
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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': '模型编码',
|
||||||
|
|||||||
@@ -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': '模型編碼',
|
||||||
|
|||||||
Reference in New Issue
Block a user