From ec5ccfd0699467f5d286a3bb652496c56c15a314 Mon Sep 17 00:00:00 2001 From: zhangtao Date: Mon, 6 Jan 2025 18:05:51 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=BE=AE=E8=B0=83=E4=BB=BB=E5=8A=A1API?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/FineTuningTaskStatusConstants.java | 21 +++++ .../FineTuningTaskSyncService.java | 45 +++++++++++ .../http/vo/AigcFineTuningDetailRespVO.java | 79 +++++++++++++++++++ 3 files changed, 145 insertions(+) create mode 100644 yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/FineTuningTaskStatusConstants.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskSyncService.java diff --git a/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/FineTuningTaskStatusConstants.java b/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/FineTuningTaskStatusConstants.java new file mode 100644 index 000000000..cbcf6a8b5 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-api/src/main/java/cn/iocoder/yudao/module/llm/enums/FineTuningTaskStatusConstants.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.llm.enums; + +import java.util.HashMap; +import java.util.Map; + +public class FineTuningTaskStatusConstants { + + public final static Map STATUS_MAP = new HashMap<>(); + + static { + STATUS_MAP.put("waiting", 3); + STATUS_MAP.put("failed", 4); + STATUS_MAP.put("success", 2); + STATUS_MAP.put("running", 1); + STATUS_MAP.put("cancel", 0); + } + + public final static Integer getStatus(String status) { + return STATUS_MAP.get(status); + } +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskSyncService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskSyncService.java new file mode 100644 index 000000000..7db903b1a --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/finetuningtask/FineTuningTaskSyncService.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.llm.service.finetuningtask; + +import cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask.FineTuningTaskDO; +import cn.iocoder.yudao.module.llm.dal.mysql.finetuningtask.FineTuningTaskMapper; +import cn.iocoder.yudao.module.llm.enums.FineTuningTaskStatusConstants; +import cn.iocoder.yudao.module.llm.enums.FinetuningTaskStatusEnum; +import cn.iocoder.yudao.module.llm.service.http.TrainHttpService; +import cn.iocoder.yudao.module.llm.service.http.vo.AigcFineTuningDetailRespVO; +import com.esotericsoftware.minlog.Log; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; + +@Component +public class FineTuningTaskSyncService { + + @Resource + TrainHttpService trainHttpService; + + @Resource + FineTuningTaskMapper fineTuningTaskMapper; + + @Scheduled(cron ="30 * * * * ?") + public void updateFineTuningTaskStatus() { + Log.info("FineTuningTaskSync 定时任务启动"); + List fineTuningTaskDOList = fineTuningTaskMapper.selectList(); + for (FineTuningTaskDO fineTuningTaskDO : fineTuningTaskDOList) { + if(Objects.equals(fineTuningTaskDO.getStatus(), FinetuningTaskStatusEnum.TRAINING.getStatus()) + || Objects.equals(fineTuningTaskDO.getStatus(), FinetuningTaskStatusEnum.WAITING.getStatus())){ + AigcFineTuningDetailRespVO resp = trainHttpService.finetuningDetail(new HashMap<>(), fineTuningTaskDO.getJobId()); + Integer status = FineTuningTaskStatusConstants.getStatus(resp.getTrainStatus()); + if(status != null){ + FineTuningTaskDO updateObj = new FineTuningTaskDO(); + updateObj.setId(fineTuningTaskDO.getId()); + updateObj.setStatus(status); + fineTuningTaskMapper.updateById(updateObj); + } + } + } + } +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java index 25e9bb180..b43b59328 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java @@ -1,4 +1,83 @@ package cn.iocoder.yudao.module.llm.service.http.vo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor public class AigcFineTuningDetailRespVO { + + private int id; + private String jobId; + private String baseModel; + private int trainEpoch; + private String trainStatus; + private String trainDuration; + private int process; + private String fineTunedModel; + private String remark; + private String finishedAt; + private Date createdAt; + private String trainPublisher; + private String trainLog; + private String errorMessage; + private boolean lora; + private TrainAnalysis trainAnalysis; + private String suffix; + private int modelMaxLength; + private int trainBatchSize; + private String learningRate; + private String fileUrl; + private String fileId; + private String startTrainTime; + private int procPerNode; + private int evalBatchSize; + private int accumulationSteps; + private String scenario; + private Diagnosis diagnosis; + + + // Nested classes for TrainAnalysis and Diagnosis + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class TrainAnalysis { + private Epoch epoch; + private Loss loss; + private LearningRate learningRate; + + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Epoch { + private List list; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Loss { + private List list; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class LearningRate { + private List list; + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + public static class Diagnosis { + // Add fields, getters, and setters as needed + } } From f6bc0fb3492582eabe73598b76ea927374d336e0 Mon Sep 17 00:00:00 2001 From: zhangtao Date: Mon, 6 Jan 2025 18:11:29 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=BE=AE=E8=B0=83=E4=BB=BB=E5=8A=A1API?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/llm/service/http/vo/AigcFineTuningDetailRespVO.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java index b43b59328..5fe34ec99 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java @@ -74,9 +74,6 @@ public class AigcFineTuningDetailRespVO { private List list; } - @Data - @AllArgsConstructor - @NoArgsConstructor public static class Diagnosis { // Add fields, getters, and setters as needed } From f696fea69bdb435af46e169afc6c666a1d79218b Mon Sep 17 00:00:00 2001 From: limin Date: Mon, 6 Jan 2025 18:26:14 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iocoder/yudao/module/infra/enums/DictTypeConstants.java | 1 + .../module/llm/controller/admin/label/vo/LabelRespVO.java | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java index 36ad63d56..b8d5c423f 100644 --- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/enums/DictTypeConstants.java @@ -16,5 +16,6 @@ public interface DictTypeConstants { String BOOLEAN_STRING = "infra_boolean_string"; // Boolean 是否类型 String OPERATE_TYPE = "infra_operate_type"; // 操作类型 + String LABEL_STATUS = "llm_label_status"; // 标签状态 } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/label/vo/LabelRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/label/vo/LabelRespVO.java index 8429ef63f..ffeaaa9de 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/label/vo/LabelRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/controller/admin/label/vo/LabelRespVO.java @@ -1,5 +1,8 @@ package cn.iocoder.yudao.module.llm.controller.admin.label.vo; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import cn.iocoder.yudao.module.infra.enums.DictTypeConstants; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -27,7 +30,8 @@ public class LabelRespVO { private LocalDateTime createTime; @Schema(description = "使用状态(0启用 1停用),使用字典(llm_label_status)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("使用状态(0启用 1停用),使用字典(llm_label_status)") + @ExcelProperty(value = "使用状态",converter = DictConvert.class) + @DictFormat(DictTypeConstants.LABEL_STATUS) private Integer status; @Schema(description = "标签排序") From 522df3e508db4a91eb7a79d766e87a315bdd474a Mon Sep 17 00:00:00 2001 From: zhangtao Date: Mon, 6 Jan 2025 18:27:29 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E5=BE=AE=E8=B0=83=E4=BB=BB=E5=8A=A1API?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/llm/service/http/vo/AigcFineTuningDetailRespVO.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java index 5fe34ec99..8d7d480aa 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.time.ZonedDateTime; import java.util.Date; import java.util.List; @@ -22,7 +23,7 @@ public class AigcFineTuningDetailRespVO { private String fineTunedModel; private String remark; private String finishedAt; - private Date createdAt; + private ZonedDateTime createdAt; private String trainPublisher; private String trainLog; private String errorMessage; From 3e075270948882d82d4ee8b1dca918ca16ab8ef8 Mon Sep 17 00:00:00 2001 From: zhangtao Date: Mon, 6 Jan 2025 18:34:55 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=BE=AE=E8=B0=83=E4=BB=BB=E5=8A=A1API?= =?UTF-8?q?=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../finetuningtask/FineTuningTaskServiceImpl.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) 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 275383d8f..eceb561e6 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 @@ -11,6 +11,7 @@ import cn.iocoder.yudao.module.llm.dal.dataobject.finetuningtask.FineTuningTaskD import cn.iocoder.yudao.module.llm.dal.mysql.basemodel.BaseModelMapper; import cn.iocoder.yudao.module.llm.dal.mysql.dataset.DatasetMapper; import cn.iocoder.yudao.module.llm.dal.mysql.finetuningtask.FineTuningTaskMapper; +import cn.iocoder.yudao.module.llm.enums.FinetuningTaskStatusEnum; import cn.iocoder.yudao.module.llm.service.async.AsyncFineTuningTaskService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -152,12 +153,9 @@ public class FineTuningTaskServiceImpl implements FineTuningTaskService { @Override public void startFineTuningTask(Long id) { FineTuningTaskDO fineTuningTaskDO = validateFineTuningTaskExists(id); - fineTuningTaskMapper.stopStartTask(id,1); - //todo 调用模型服务,开启调优任务 + fineTuningTaskMapper.stopStartTask(id, FinetuningTaskStatusEnum.WAITING.getStatus()); + //调用模型服务,开启调优任务 asyncFineTuningTaskService.startFineTuningTask(fineTuningTaskDO); - - fineTuningTaskMapper.stopStartTask(id,2); - } @Override @@ -169,12 +167,10 @@ public class FineTuningTaskServiceImpl implements FineTuningTaskService { @Override public void stopFineTuningTask(Long id) { FineTuningTaskDO fineTuningTaskDO = validateFineTuningTaskExists(id); - fineTuningTaskMapper.stopStartTask(id,1); + fineTuningTaskMapper.stopStartTask(id, FinetuningTaskStatusEnum.WAITING.getStatus()); //todo 调用模型服务,停止调优任务 asyncFineTuningTaskService.stopFineTuningTask(fineTuningTaskDO); - fineTuningTaskMapper.stopStartTask(id,0); - }