diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/DataProcessTaskController.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/DataProcessTaskController.java index 4de0c9594..ba4ca9237 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/DataProcessTaskController.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/DataProcessTaskController.java @@ -75,8 +75,7 @@ public class DataProcessTaskController { @Operation(summary = "获得数据处理任务分页") @PreAuthorize("@ss.hasPermission('llm:data-process-task:query')") public CommonResult> getDataProcessTaskPage(@Valid DataProcessTaskPageReqVO pageReqVO) { - PageResult pageResult = dataProcessTaskService.getDataProcessTaskPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, DataProcessTaskRespVO.class)); + return success(dataProcessTaskService.getDataProcessTaskPage1(pageReqVO)); } @GetMapping("/export-excel") @@ -92,4 +91,19 @@ public class DataProcessTaskController { BeanUtils.toBean(list, DataProcessTaskRespVO.class)); } + @PutMapping("/stop") + @Operation(summary = "停止模型调优 —— 微调任务") + @PreAuthorize("@ss.hasPermission('llm:fine-tuning-task:update')") + public CommonResult stopFineTuningTask(@RequestParam("id") Long id) { + dataProcessTaskService.stopFineTuningTask(id); + return success(true); + } + @PutMapping("/reStart") + @Operation(summary = "开始模型调优 —— 微调任务") + @PreAuthorize("@ss.hasPermission('llm:fine-tuning-task:update')") + public CommonResult startFineTuningTask(@RequestParam("id") Long id) { + dataProcessTaskService.reStartFineTuningTask(id); + return success(true); + } + } \ 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/dataprocesstask/vo/DataProcessTaskPageReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskPageReqVO.java index 9305c496d..9a6aeb937 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskPageReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskPageReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.llm.controller.admin.dataprocesstask.vo; +import cn.hutool.json.JSONObject; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -32,6 +33,6 @@ public class DataProcessTaskPageReqVO extends PageParam { private Long datasetPostId; @Schema(description = "配置信息") - private String options; + private JSONObject options; } \ 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/dataprocesstask/vo/DataProcessTaskRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskRespVO.java index c4ae4f7a4..f4afa80f8 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskRespVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.llm.controller.admin.dataprocesstask.vo; +import cn.hutool.json.JSONObject; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -38,6 +39,12 @@ public class DataProcessTaskRespVO { @Schema(description = "配置信息") @ExcelProperty("配置信息") - private String options; + private JSONObject options; + + @Schema(description ="处理前的数据集名称") + private String datasetName; + + @Schema(description = "处理后的数据集名称") + private String datasetPostName; } \ 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/dataprocesstask/vo/DataProcessTaskSaveReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskSaveReqVO.java index 826bbb050..4f439243d 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskSaveReqVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/dataprocesstask/vo/DataProcessTaskSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.llm.controller.admin.dataprocesstask.vo; +import cn.hutool.json.JSONObject; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -27,6 +28,6 @@ public class DataProcessTaskSaveReqVO { private Long datasetPostId; @Schema(description = "配置信息") - private String options; + private JSONObject options; } \ 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/dataprocesstask/DataProcessTaskMapper.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/dataprocesstask/DataProcessTaskMapper.java index ec0b6afb3..f1fb7de3b 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/dataprocesstask/DataProcessTaskMapper.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/dal/mysql/dataprocesstask/DataProcessTaskMapper.java @@ -8,6 +8,8 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.llm.dal.dataobject.dataprocesstask.DataProcessTaskDO; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.llm.controller.admin.dataprocesstask.vo.*; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; /** * 数据处理任务 Mapper @@ -27,5 +29,6 @@ public interface DataProcessTaskMapper extends BaseMapperX { .eqIfPresent(DataProcessTaskDO::getOptions, reqVO.getOptions()) .orderByDesc(DataProcessTaskDO::getId)); } - + @Update("update llm_data_process_task set status = #{status} where id = #{id}") + void updateStatus(@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/framework/backend/config/AsyncConfig.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/AsyncConfig.java new file mode 100644 index 000000000..71dc8a564 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/AsyncConfig.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.llm.framework.backend.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.EnableAsync; + +import java.util.concurrent.Executor; + +@Configuration +@EnableAsync +public class AsyncConfig implements AsyncConfigurer { + @Override + public Executor getAsyncExecutor() { + return AsyncConfigurer.super.getAsyncExecutor(); + } +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncDataProcessService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncDataProcessService.java new file mode 100644 index 000000000..935be71b3 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncDataProcessService.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.llm.service.async; + +import cn.iocoder.yudao.module.llm.dal.dataobject.dataprocesstask.DataProcessTaskDO; +import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetMapper; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class AsyncDataProcessService { + @Async + public void backups(DataProcessTaskDO dataProcessTask) { + try { + Thread.sleep(100000); + }catch(InterruptedException e){ + + }; + } +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/dataprocesstask/DataProcessTaskService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/dataprocesstask/DataProcessTaskService.java index b501a3087..e91259de2 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/dataprocesstask/DataProcessTaskService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/dataprocesstask/DataProcessTaskService.java @@ -52,4 +52,14 @@ public interface DataProcessTaskService { */ PageResult getDataProcessTaskPage(DataProcessTaskPageReqVO pageReqVO); + void stopFineTuningTask(Long id); + + void reStartFineTuningTask(Long id); + + /** + * 分页查询数据处理任务 + * @param pageReqVO + * @return + */ + PageResult getDataProcessTaskPage1(DataProcessTaskPageReqVO pageReqVO); } \ 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/dataprocesstask/DataProcessTaskServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/dataprocesstask/DataProcessTaskServiceImpl.java index cf438a58e..3721fe043 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/dataprocesstask/DataProcessTaskServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/dataprocesstask/DataProcessTaskServiceImpl.java @@ -1,11 +1,21 @@ package cn.iocoder.yudao.module.llm.service.dataprocesstask; +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; +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.mysql.dataset.DatasetMapper; +import cn.iocoder.yudao.module.llm.service.async.AsyncDataProcessService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.scheduling.annotation.Async; 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 java.util.stream.Stream; + import cn.iocoder.yudao.module.llm.controller.admin.dataprocesstask.vo.*; import cn.iocoder.yudao.module.llm.dal.dataobject.dataprocesstask.DataProcessTaskDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -28,16 +38,23 @@ public class DataProcessTaskServiceImpl implements DataProcessTaskService { @Resource private DataProcessTaskMapper dataProcessTaskMapper; + @Resource + private DatasetMapper datasetMapper; + @Resource + private AsyncDataProcessService dataProcessService; @Override public Long createDataProcessTask(DataProcessTaskSaveReqVO createReqVO) { // 插入 DataProcessTaskDO dataProcessTask = BeanUtils.toBean(createReqVO, DataProcessTaskDO.class); + dataProcessTask.setStatus(1); dataProcessTaskMapper.insert(dataProcessTask); + dataProcessService.backups(dataProcessTask); // 返回 return dataProcessTask.getId(); } + @Override public void updateDataProcessTask(DataProcessTaskSaveReqVO updateReqVO) { // 校验存在 @@ -70,5 +87,48 @@ public class DataProcessTaskServiceImpl implements DataProcessTaskService { public PageResult getDataProcessTaskPage(DataProcessTaskPageReqVO pageReqVO) { return dataProcessTaskMapper.selectPage(pageReqVO); } + @Override + public PageResult getDataProcessTaskPage1(DataProcessTaskPageReqVO pageReqVO) { + PageResult dataProcessTaskDOPageResult = dataProcessTaskMapper.selectPage(pageReqVO); + PageResult result = BeanUtils.toBean(dataProcessTaskDOPageResult, DataProcessTaskRespVO.class); + if (!CollectionUtils.isAnyEmpty(dataProcessTaskDOPageResult.getList())){ + List collect = dataProcessTaskDOPageResult.getList().stream() + .map(DataProcessTaskDO::getDatasetId) + .collect(Collectors.toList()); + List collect1 = dataProcessTaskDOPageResult.getList() + .stream().map(DataProcessTaskDO::getDatasetPostId).collect(Collectors.toList()); + Set datasetIds = Stream.concat(collect.stream(), collect1.stream()).collect(Collectors.toSet()); + if (!CollectionUtils.isAnyEmpty(datasetIds)){ + List mergeDataList = new ArrayList<>(datasetIds); + List datasetDOS = datasetMapper.selectList(new LambdaQueryWrapper().in(DatasetDO::getId, mergeDataList)); + Map longDataDOMap = cn.iocoder.yudao.framework.common.util.collection. + CollectionUtils.convertMap(datasetDOS, DatasetDO::getId); + result.getList().forEach(item->{ + DatasetDO datasetDO = longDataDOMap.get(item.getDatasetId()); + if(datasetDO != null){ + item.setDatasetName(datasetDO.getDatasetName()); + } + if (item.getStatus() == 2){ + DatasetDO datasetDO1 = longDataDOMap.get(item.getDatasetPostId()); + if (datasetDO1 != null){ + item.setDatasetPostName(datasetDO1.getDatasetName()); + } + } + }); + } + } + return result; + } + @Override + public void stopFineTuningTask(Long id) { + dataProcessTaskMapper.updateStatus(id, 3); + } + + @Override + public void reStartFineTuningTask(Long id) { + dataProcessTaskMapper.updateStatus(id, 1); + } + + } \ No newline at end of file diff --git a/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java b/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java index 57db3f942..2b4bf1789 100644 --- a/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java +++ b/yudao-server/src/main/java/cn/iocoder/yudao/server/YudaoServerApplication.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; /** * 项目的启动类