From 713b1b2b394c575b48bb27ff2ce33f266683f682 Mon Sep 17 00:00:00 2001 From: limin Date: Tue, 31 Dec 2024 11:49:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E8=B0=83=E4=BC=98=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FineTuningTaskController.java | 20 ++++++- .../vo/FineTuningTaskPageReqVO.java | 3 + .../vo/FineTuningTaskRespVO.java | 8 +++ .../vo/FineTuningTaskSaveReqVO.java | 3 + .../finetuningtask/FineTuningTaskDO.java | 4 ++ .../finetuningtask/FineTuningTaskMapper.java | 6 +- .../finetuningtask/FineTuningTaskService.java | 19 ++++++ .../FineTuningTaskServiceImpl.java | 60 +++++++++++++++++++ 8 files changed, 119 insertions(+), 4 deletions(-) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/FineTuningTaskController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/FineTuningTaskController.java index 2493865d6..e13e6357b 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/FineTuningTaskController.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/FineTuningTaskController.java @@ -71,12 +71,28 @@ public class FineTuningTaskController { return success(BeanUtils.toBean(fineTuningTask, FineTuningTaskRespVO.class)); } + @PutMapping("/stop") + @Operation(summary = "停止模型调优 —— 微调任务") + @PreAuthorize("@ss.hasPermission('llm:fine-tuning-task:update')") + public CommonResult stopFineTuningTask(@RequestParam("id") Long id) { + fineTuningTaskService.stopFineTuningTask(id); + return success(true); + } + + @PutMapping("start") + @Operation(summary = "部署模型调优 —— 微调任务") + @PreAuthorize("@ss.hasPermission('llm:fine-tuning-task:update')") + public CommonResult startFineTuningTask(@RequestParam("id") Long id) { + fineTuningTaskService.startFineTuningTask(id); + return success(true); + } + @GetMapping("/page") @Operation(summary = "获得模型调优 —— 微调任务分页") @PreAuthorize("@ss.hasPermission('llm:fine-tuning-task:query')") public CommonResult> getFineTuningTaskPage(@Valid FineTuningTaskPageReqVO pageReqVO) { - PageResult pageResult = fineTuningTaskService.getFineTuningTaskPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, FineTuningTaskRespVO.class)); + PageResult pageResult = fineTuningTaskService.getFineTuningTaskPage1(pageReqVO); + return success(pageResult); } @GetMapping("/export-excel") diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskPageReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskPageReqVO.java index 3b4825541..5ba229950 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskPageReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskPageReqVO.java @@ -88,4 +88,7 @@ public class FineTuningTaskPageReqVO extends PageParam { @Schema(description = "状态,使用字典(llm_fine_tuning_task_status)", example = "1") private Integer status; + @Schema(description ="基础模型服务Id") + private Long baseModelId; + } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskRespVO.java index 79715a93c..8c1b0a17a 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskRespVO.java @@ -125,5 +125,13 @@ public class FineTuningTaskRespVO { @ExcelProperty(value = "状态,使用字典(llm_fine_tuning_task_status)", converter = DictConvert.class) @DictFormat("llm_fine_tuning_task_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 private Integer status; + @Schema(description ="基础模型服务Id") + private Long baseModelId; + + @Schema(description = "基础模型服务名称") + private String baseModelName; + + @Schema(description = "数据集名称") + private String datasetName; } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskSaveReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskSaveReqVO.java index 5d2351216..b1882c981 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskSaveReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/finetuningtask/vo/FineTuningTaskSaveReqVO.java @@ -83,4 +83,7 @@ public class FineTuningTaskSaveReqVO { @NotNull(message = "状态,使用字典(llm_fine_tuning_task_status)不能为空") private Integer status; + @Schema(description = "基础模型服务Id") + private Long baseModelId; + } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/finetuningtask/FineTuningTaskDO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/finetuningtask/FineTuningTaskDO.java index 285522672..a81012d64 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/finetuningtask/FineTuningTaskDO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/dataobject/finetuningtask/FineTuningTaskDO.java @@ -135,5 +135,9 @@ public class FineTuningTaskDO extends BaseDO { * 枚举 {@link TODO llm_fine_tuning_task_status 对应的类} */ private Integer status; + /** + * 基础服务模型Id + */ + private Long baseModelId; } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/finetuningtask/FineTuningTaskMapper.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/finetuningtask/FineTuningTaskMapper.java index a523745e2..9606cf6f6 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/finetuningtask/FineTuningTaskMapper.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/finetuningtask/FineTuningTaskMapper.java @@ -1,13 +1,13 @@ package cn.iocoder.yudao.module.llm.dal.mysql.finetuningtask; -import java.util.*; - import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask.FineTuningTaskDO; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.llm.controller.admin.finetuningtask.vo.*; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; /** * 模型调优 —— 微调任务 Mapper @@ -47,4 +47,6 @@ public interface FineTuningTaskMapper extends BaseMapperX { .orderByDesc(FineTuningTaskDO::getId)); } + @Update("update llm_fine_tuning_task set status = #{status} where id = #{id}") + void stopStartTask(@Param("id") Long id,@Param("status") int status); } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskService.java index a22778013..d94bb516f 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskService.java @@ -52,4 +52,23 @@ public interface FineTuningTaskService { */ PageResult getFineTuningTaskPage(FineTuningTaskPageReqVO pageReqVO); + /** + * 获得模型调优 —— 微调任务分页 + * + * @param pageReqVO 分页查询 + * @return 模型调优 —— 微调任务分页 + */ + PageResult getFineTuningTaskPage1(FineTuningTaskPageReqVO pageReqVO); + + /** + * 停止微调任务 + * @param id + */ + void stopFineTuningTask(Long id); + + /** + * 部署微调任务 + * @param id + */ + void startFineTuningTask(Long id); } \ No newline at end of file diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskServiceImpl.java index 8a6e09dbd..f19020f76 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskServiceImpl.java @@ -1,12 +1,21 @@ package cn.iocoder.yudao.module.llm.service.finetuningtask; +import cn.iocoder.yudao.module.llm.dal.dataobject.basemodel.BaseModelDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.dataset.DatasetDO; +import cn.iocoder.yudao.module.llm.dal.dataobject.modelservice.ModelServiceDO; +import cn.iocoder.yudao.module.llm.dal.mysql.basemodel.BaseModelMapper; +import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import cn.iocoder.yudao.module.llm.controller.admin.finetuningtask.vo.*; import cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask.FineTuningTaskDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -30,6 +39,10 @@ public class FineTuningTaskServiceImpl implements FineTuningTaskService { @Resource private FineTuningTaskMapper fineTuningTaskMapper; + @Resource + private BaseModelMapper baseModelMapper; + @Resource + private DatasetMapper datasetMapper; @Override public Long createFineTuningTask(FineTuningTaskSaveReqVO createReqVO) { @@ -71,9 +84,56 @@ public class FineTuningTaskServiceImpl implements FineTuningTaskService { public FineTuningTaskDO getFineTuningTask(Long id) { return fineTuningTaskMapper.selectById(id); } + @Override + public PageResult getFineTuningTaskPage1(FineTuningTaskPageReqVO pageReqVO) { + PageResult pageResult = fineTuningTaskMapper.selectPage(pageReqVO); + PageResult result = BeanUtils.toBean(pageResult, FineTuningTaskRespVO.class); + if (CollectionUtils.isNotEmpty(pageResult.getList())){ + List modelIds = pageResult.getList().stream().map(FineTuningTaskDO::getBaseModelId).collect(Collectors.toList()); + List baseModelDOS = baseModelMapper.selectList(new LambdaQueryWrapper() + .in(BaseModelDO::getId, modelIds)); + Map longModelServiceDOMap = cn.iocoder.yudao.framework.common.util.collection. + CollectionUtils.convertMap(baseModelDOS, BaseModelDO::getId); + result.getList().forEach(item->{ + BaseModelDO baseModelDO = longModelServiceDOMap.get(item.getBaseModelId()); + if(baseModelDO != null){ + item.setBaseModelName(baseModelDO.getModelName()); + } + }); + List dataSetlIds = pageResult.getList().stream().map(FineTuningTaskDO::getDataset).collect(Collectors.toList()); + List datasetDOS = datasetMapper.selectList(new LambdaQueryWrapper().in(DatasetDO::getId, dataSetlIds)); + Map datasetDOMap = cn.iocoder.yudao.framework.common.util.collection. + CollectionUtils.convertMap(datasetDOS, DatasetDO::getId); + result.getList().forEach(item->{ + DatasetDO datasetDO = datasetDOMap.get(item.getDataset()); + if(datasetDO != null){ + item.setDatasetName(datasetDO.getDatasetName()); + } + }); + + } + return result; + } + + /** + * 停止服务 + * @param id + */ + @Override + public void stopFineTuningTask(Long id) { + fineTuningTaskMapper.stopStartTask(id,0); + } + + @Override + public void startFineTuningTask(Long id) { + fineTuningTaskMapper.stopStartTask(id,1); + } @Override public PageResult getFineTuningTaskPage(FineTuningTaskPageReqVO pageReqVO) { + PageResult pageResult = fineTuningTaskMapper.selectPage(pageReqVO); + PageResult result = BeanUtils.toBean(pageResult, FineTuningTaskRespVO.class); + return fineTuningTaskMapper.selectPage(pageReqVO); }