From 4177e794c402a8e83a1ceaf01eeedf9710239929 Mon Sep 17 00:00:00 2001 From: zhangtao Date: Mon, 6 Jan 2025 15:08:48 +0800 Subject: [PATCH] =?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 --- .../backend/config/LLMBackendProperties.java | 4 ++ .../async/AsyncFineTuningTaskService.java | 11 ++- .../llm/service/http/TrainHttpService.java | 47 ++++++++++++- ...VO.java => AigcFineTuningCreateReqVO.java} | 6 +- .../http/vo/AigcFineTuningCreateRespVO.java | 69 +++++++++++++++++++ .../http/vo/AigcFineTuningDetailReqVO.java | 12 ++++ .../http/vo/AigcFineTuningDetailRespVO.java | 4 ++ ...java => AigcFineTuningFileListRespVO.java} | 2 +- .../src/main/resources/application-dev.yaml | 2 + .../src/main/resources/application-local.yaml | 2 + 10 files changed, 148 insertions(+), 11 deletions(-) rename yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/{FineTuningCreateVO.java => AigcFineTuningCreateReqVO.java} (85%) create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningCreateRespVO.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailReqVO.java create mode 100644 yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java rename yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/{FineTuningFileListRespVO.java => AigcFineTuningFileListRespVO.java} (95%) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java index f70175b48..0f2416b92 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/framework/backend/config/LLMBackendProperties.java @@ -70,4 +70,8 @@ public class LLMBackendProperties { @NotNull(message = "创建微调任务 POST") private String finetuningCreate; + + private String finetuningDetail; + + private String finetuningFileList; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncFineTuningTaskService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncFineTuningTaskService.java index 1d07bf34c..aa4041ffb 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncFineTuningTaskService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/async/AsyncFineTuningTaskService.java @@ -3,6 +3,9 @@ package cn.iocoder.yudao.module.llm.service.async; 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.service.http.TrainHttpService; +import cn.iocoder.yudao.module.llm.service.http.vo.AigcFineTuningCreateReqVO; +import cn.iocoder.yudao.module.llm.service.http.vo.AigcFineTuningCreateRespVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @@ -10,6 +13,7 @@ import javax.annotation.Resource; import java.util.HashMap; @Service +@Slf4j public class AsyncFineTuningTaskService { @Resource @@ -22,9 +26,10 @@ public class AsyncFineTuningTaskService { @Async public void createTuning(FineTuningTaskDO fineTuningTask) { try { - trainHttpService.finetuningCreate(new HashMap<>(),new String()); - }catch(Exception e){ - + AigcFineTuningCreateReqVO req = new AigcFineTuningCreateReqVO(); + AigcFineTuningCreateRespVO resp = trainHttpService.finetuningCreate(new HashMap<>(), req); + } catch (Exception e){ + e.printStackTrace(); }; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java index 5528cda84..1eb398302 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/TrainHttpService.java @@ -6,7 +6,6 @@ import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import cn.iocoder.yudao.module.llm.framework.backend.config.LLMBackendProperties; import cn.iocoder.yudao.module.llm.service.http.vo.*; import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.toolkit.BeanUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -137,9 +136,51 @@ public class TrainHttpService { /** * 创建微调任务 POST */ - public String finetuningCreate(Map headers, String body){ + public AigcFineTuningCreateRespVO finetuningCreate(Map headers, AigcFineTuningCreateReqVO req){ + login(headers); String finetuningCreate = llmBackendProperties.getFinetuningCreate(); - String res = HttpUtils.post(finetuningCreate, headers, body); + // TODO: 暂时先固定一个微调文件ID + String fileId = "5c4e33fb-7ae2-4a48-9a78-fb74e4634d16"; + req.setFileId(fileId); + String res = HttpUtils.post(finetuningCreate, headers, JSON.toJSONString(req)); + log.info(" finetuningCreate:{}", res); + AigcRespVO aigcRespVO = JSON.parseObject(res, AigcRespVO.class); + if (aigcRespVO.isSuccess() && aigcRespVO.getData() != null){ + AigcFineTuningCreateRespVO aigcFineTuningCreateRespVO = JSON.parseObject(aigcRespVO.getData().toString(), AigcFineTuningCreateRespVO.class); + log.info(" finetuningCreate:{}", aigcFineTuningCreateRespVO); + return aigcFineTuningCreateRespVO; + } + return null; + } + + public AigcFineTuningDetailRespVO finetuningDetail(Map headers, String jobId){ + login(headers); + String finetuningDetail = llmBackendProperties.getFinetuningDetail(); + String res = HttpUtils.get(finetuningDetail + "/" + jobId, headers); + log.info(" finetuningDetail:{}", res); + AigcRespVO aigcRespVO = JSON.parseObject(res, AigcRespVO.class); + if (aigcRespVO.isSuccess() && aigcRespVO.getData() != null){ + AigcFineTuningDetailRespVO aigcFineTuningDetailRespVO = JSON.parseObject(aigcRespVO.getData().toString(), AigcFineTuningDetailRespVO.class); + log.info(" finetuningDetail:{}", aigcFineTuningDetailRespVO); + return aigcFineTuningDetailRespVO; + } + return null; + } + + public AigcRespVO finetuningDelete(Map headers, String jobId) { + login(headers); + String finetuningDetail = llmBackendProperties.getFinetuningDetail(); + String res = HttpUtils.del(finetuningDetail + "/" + jobId, headers); + log.info(" finetuningDelete:{}", res); + AigcRespVO aigcRespVO = JSON.parseObject(res, AigcRespVO.class); + log.info(" finetuningDelete:{}", aigcRespVO); + return aigcRespVO; + } + + public String finetuningFileList(Map headers) { + String finetuningFileList = llmBackendProperties.getFinetuningFileList(); + String res = HttpUtils.get(finetuningFileList, headers); + log.info(" finetuningFileList:{}", res); return res; } diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/FineTuningCreateVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningCreateReqVO.java similarity index 85% rename from yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/FineTuningCreateVO.java rename to yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningCreateReqVO.java index 70fe0ea5c..52499ff75 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/FineTuningCreateVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningCreateReqVO.java @@ -3,15 +3,13 @@ package cn.iocoder.yudao.module.llm.service.http.vo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.ToString; @Data -@ToString @AllArgsConstructor @NoArgsConstructor -public class FineTuningCreateVO { +public class AigcFineTuningCreateReqVO { - private String scenario = "faq"; + private String scenario = "general"; private String fileId = "48fac97c-5a69-4fde-9f77-86f4de2e91eb"; private String baseModel; private int trainEpoch; diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningCreateRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningCreateRespVO.java new file mode 100644 index 000000000..083c3aba9 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningCreateRespVO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.ZonedDateTime; +import java.util.List; +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AigcFineTuningCreateRespVO { + 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 ZonedDateTime 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; // Note: This is a string to preserve precision or format + private String fileUrl; + private String fileId; + private String startTrainTime; + private int procPerNode; + private int evalBatchSize; + private int accumulationSteps; + private String scenario; + private Map diagnosis; + + + public static class TrainAnalysis { + private EpochAnalysis epoch; + private LossAnalysis loss; + private LearningRateAnalysis learningRate; + } + + // Nested class for EpochAnalysis + public static class EpochAnalysis { + private List list; + } + + // Nested class for LossAnalysis + public static class LossAnalysis { + private List list; + + } + + // Nested class for LearningRateAnalysis + public static class LearningRateAnalysis { + + private List list; // Or String list if learning rates are represented as strings + } + +} + diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailReqVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailReqVO.java new file mode 100644 index 000000000..feb7376be --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailReqVO.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AigcFineTuningDetailReqVO { + private String jobId; +} 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 new file mode 100644 index 000000000..25e9bb180 --- /dev/null +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningDetailRespVO.java @@ -0,0 +1,4 @@ +package cn.iocoder.yudao.module.llm.service.http.vo; + +public class AigcFineTuningDetailRespVO { +} diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/FineTuningFileListRespVO.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningFileListRespVO.java similarity index 95% rename from yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/FineTuningFileListRespVO.java rename to yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningFileListRespVO.java index 940f26cc4..c55c12794 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/FineTuningFileListRespVO.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/vo/AigcFineTuningFileListRespVO.java @@ -9,7 +9,7 @@ import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor -public class FineTuningFileListRespVO { +public class AigcFineTuningFileListRespVO { private boolean success; private int code; private ListData data; diff --git a/yudao-server/src/main/resources/application-dev.yaml b/yudao-server/src/main/resources/application-dev.yaml index e75bc4b81..1725cc099 100644 --- a/yudao-server/src/main/resources/application-dev.yaml +++ b/yudao-server/src/main/resources/application-dev.yaml @@ -241,6 +241,8 @@ llm: login_password: admin # 创建微调任务 POST finetuning_create: http://aigc.xhllm.xinnuojinzhi.com/api/finetuning + # 微调任务详情 GET + finetuning_detail: http://aigc.xhllm.xinnuojinzhi.com/api/finetuning/ # 微调文件列表 GET finetuning_file_list: http://aigc.xhllm.xinnuojinzhi.com/api/files?purpose=fine-tune diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 730f1668e..5909bb8c8 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -284,6 +284,8 @@ llm: login_password: admin # 创建微调任务 POST finetuning_create: http://aigc.xhllm.xinnuojinzhi.com/api/finetuning + # 微调任务详情 GET + finetuning_detail: http://aigc.xhllm.xinnuojinzhi.com/api/finetuning/ # 微调文件列表 GET finetuning_file_list: http://aigc.xhllm.xinnuojinzhi.com/api/files?purpose=fine-tune