From 04dd579d8b8ad88fb410615f4cb6917d1563e14b Mon Sep 17 00:00:00 2001 From: sunxiqing <2240398334@qq.com> Date: Fri, 14 Mar 2025 18:12:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(llm):=20=E4=BF=AE=E5=A4=8D=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=8A=B6=E6=80=81=E5=88=B7=E6=96=B0=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E9=A2=91=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复模型状态刷新逻辑,增加对 "stop" 状态的处理 - 将定时任务执行频率从每 5 分钟调整为每分钟 - 优化代码格式,去除多余的空格和换行 --- .../basemodel/BaseModelServiceImpl.java | 2 +- .../basemodel/BaseModelTaskService.java | 113 ++++++++++-------- 2 files changed, 61 insertions(+), 54 deletions(-) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java index 1d6997549..da1a4b628 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelServiceImpl.java @@ -218,7 +218,7 @@ public class BaseModelServiceImpl implements BaseModelService { @Override public void deleteTheModel(BaseModelPageReqVO pageReqVO) { try { - String resStr = HttpUtils.post(llmBackendProperties.getDeleteTheModel()+"?model_name ="+pageReqVO.getModelName(), null, ""); + String resStr = HttpUtils.post(llmBackendProperties.getDeleteTheModel()+"?model_name="+pageReqVO.getModelName(), null, ""); log.info(" unActive:{}", resStr); }catch (Exception e){ log.error("禁用基础模型状态时发生异常: {}", e.getMessage(), e); diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java index 0af1f2f5a..78c9e9897 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/basemodel/BaseModelTaskService.java @@ -15,7 +15,9 @@ import cn.iocoder.yudao.module.llm.service.basemodel.vo.ModelListRes; import cn.iocoder.yudao.module.llm.service.basemodel.vo.PedestalModelVO; import cn.iocoder.yudao.module.llm.service.http.FineTuningTaskHttpService; import cn.iocoder.yudao.module.llm.service.http.TrainHttpService; +import cn.iocoder.yudao.module.llm.service.http.vo.AigcModelDeploySaveReq; import cn.iocoder.yudao.module.llm.service.http.vo.AigcModelDeployVO; +import cn.iocoder.yudao.module.llm.service.http.vo.ModelDeployRespVO; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -109,33 +111,33 @@ public class BaseModelTaskService { String status = latestRecord.getStatus(); log.info("最新模型部署记录状态: {}", status); - // // 如果模型状态为 "stop",则重新部署 - // if ("stop".equals(status)) { - // log.info("模型状态为 'stop',正在重新部署模型..."); - // - // // 构建模型部署请求 - // AigcModelDeploySaveReq aigcModelDeploySaveReq = new AigcModelDeploySaveReq( - // baseModelDO.getAigcModelName(), "gpu"); - // log.info("模型部署请求参数: {}", JSON.toJSONString(aigcModelDeploySaveReq)); - // - // // 发起模型部署请求 - // ModelDeployRespVO modelDeployRespVO = trainHttpService.modelDeploy( - // new HashMap<>(), serverName.getHost(), aigcModelDeploySaveReq); - // log.info("模型部署请求完成。响应内容: {}", JSON.toJSONString(modelDeployRespVO)); - // - // // 更新基础模型信息 - // if (!"error".equals(modelDeployRespVO.getMessage())) { - // log.info("模型部署成功。正在更新基础模型信息..."); - // BaseModelSaveReqVO baseModelSaveReqVO = new BaseModelSaveReqVO(); - // baseModelSaveReqVO.setId(baseModelDO.getId()); - // baseModelSaveReqVO.setModelId(modelDeployRespVO.getId()); - // baseModelSaveReqVO.setChatUrl(modelDeployRespVO.getPort() + DEFAULT_MODEL_URL_SUFFIX); - // baseModelService.updateBaseModel(baseModelSaveReqVO); - // log.info("基础模型信息更新完成。模型ID: {}", baseModelDO.getId()); - // } else { - // log.error("模型部署失败。模型ID: {}", baseModelDO.getId()); - // } - // } +// // 如果模型状态为 "stop",则重新部署 +// if ("stop".equals(status)) { +// log.info("模型状态为 'stop',正在重新部署模型..."); +// +// // 构建模型部署请求 +// AigcModelDeploySaveReq aigcModelDeploySaveReq = new AigcModelDeploySaveReq( +// baseModelDO.getAigcModelName(), "gpu"); +// log.info("模型部署请求参数: {}", JSON.toJSONString(aigcModelDeploySaveReq)); +// +// // 发起模型部署请求 +// ModelDeployRespVO modelDeployRespVO = trainHttpService.modelDeploy( +// new HashMap<>(), serverName.getHost(), aigcModelDeploySaveReq); +// log.info("模型部署请求完成。响应内容: {}", JSON.toJSONString(modelDeployRespVO)); +// +// // 更新基础模型信息 +// if (!"error".equals(modelDeployRespVO.getMessage())) { +// log.info("模型部署成功。正在更新基础模型信息..."); +// BaseModelSaveReqVO baseModelSaveReqVO = new BaseModelSaveReqVO(); +// baseModelSaveReqVO.setId(baseModelDO.getId()); +// baseModelSaveReqVO.setModelId(modelDeployRespVO.getId()); +// baseModelSaveReqVO.setChatUrl(modelDeployRespVO.getPort() + DEFAULT_MODEL_URL_SUFFIX); +// baseModelService.updateBaseModel(baseModelSaveReqVO); +// log.info("基础模型信息更新完成。模型ID: {}", baseModelDO.getId()); +// } else { +// log.error("模型部署失败。模型ID: {}", baseModelDO.getId()); +// } +// } } else { log.warn("未找到模型部署记录。模型ID: {}", modelId); } @@ -150,7 +152,7 @@ public class BaseModelTaskService { // @Scheduled(cron ="0 0/1 * * * ?") - public void updateBaseModel () { + public void updateBaseModel() { Log.info("定时任务启动"); String resStr = trainHttpService.modelsList(""); Log.info("获取aicg模型列表返回数据内容{}", resStr); @@ -252,7 +254,7 @@ public class BaseModelTaskService { } - // @Scheduled(cron = "0 0/1 * * * ?") + @Scheduled(cron = "0 0/1 * * * ?") public void refreshTheModelService () { try { // 获取所有基础模型列表 @@ -273,7 +275,7 @@ public class BaseModelTaskService { .collect(Collectors.toList()); //如果状态启动中没起来将状态变为停止 List differentModels = modelServiceDOS.stream() - .filter(baseModel -> !remoteModelNames.contains(baseModel.getBaseModelName()) && (baseModel.getStatus() == 4 || baseModel.getStatus() == 2)) + .filter(baseModel -> !remoteModelNames.contains(baseModel.getBaseModelName()) && (baseModel.getStatus() == 2 || baseModel.getStatus() == 1)) .collect(Collectors.toList()); for (ModelServiceDO baseModel : differentModels) { baseModel.setStatus(3); @@ -286,9 +288,8 @@ public class BaseModelTaskService { // String string = JSON.toJSONString(jsonObject); // PedestalModelVO pedestalModelVo = JSON.parseObject(string, PedestalModelVO.class); List collect = modelListRes.stream() - .filter(pedestalModelVO -> pedestalModelVO.getDeploymentName() - .equals(name) && "running" - .equals(pedestalModelVO.getStatus())) + .filter(pedestalModelVO -> pedestalModelVO.getDeploymentName().equals(name) + && "running".equals(pedestalModelVO.getStatus())) .collect(Collectors.toList()); if (collect.size() > 0) { PedestalModelVO pedestalModelVo = collect.get(0); @@ -307,34 +308,40 @@ public class BaseModelTaskService { modelServiceMapper.updateById(localModel); } else { String string1 = pedestalModelVo.getHost() + "/v1/chat/completions"; - localModel.setStatus(4); + localModel.setStatus(2); localModel.setModelUrl(string1); - // localModel.setApiUrl(string1); +// localModel.setApiUrl(string1); localModel.setJobId((long) pedestalModelVo.getId()); modelServiceMapper.updateById(localModel); log.info("模型 {} 状态为 running,无需更新", pedestalModelVo.getDeploymentName()); } } - // else { - // //新增基座模型 - // if ("running".equals(pedestalModelVo.getStatus())){ - // BaseModelSaveReqVO baseModelSaveReqVO = new BaseModelSaveReqVO(); - // baseModelSaveReqVO.setModelName(pedestalModelVo.getDeploymentName()); - // baseModelSaveReqVO.setIsActive(1); - // baseModelSaveReqVO.setAigcModelName(pedestalModelVo.getDeploymentName()); - // baseModelSaveReqVO.setChatUrl(pedestalModelVo.getHost() + "/v1/chat/completions"); - // baseModelService.createBaseModel(baseModelSaveReqVO); - // } - // } +// else { +// //新增基座模型 +// if ("running".equals(pedestalModelVo.getStatus())){ +// BaseModelSaveReqVO baseModelSaveReqVO = new BaseModelSaveReqVO(); +// baseModelSaveReqVO.setModelName(pedestalModelVo.getDeploymentName()); +// baseModelSaveReqVO.setIsActive(1); +// baseModelSaveReqVO.setAigcModelName(pedestalModelVo.getDeploymentName()); +// baseModelSaveReqVO.setChatUrl(pedestalModelVo.getHost() + "/v1/chat/completions"); +// baseModelService.createBaseModel(baseModelSaveReqVO); +// } +// } } else { - List localModels = modelServiceDOS.stream() - .filter(baseModel -> name.equals(baseModel.getBaseModelName())) + List collect1 = modelListRes.stream() + .filter(pedestalModelVO -> pedestalModelVO.getDeploymentName().equals(name) + && "stop".equals(pedestalModelVO.getStatus())) .collect(Collectors.toList()); - if (localModels != null && localModels.size() > 0) { - ModelServiceDO localModel = localModels.get(0); - // 如果状态不是 "running",更新本地状态 - localModel.setStatus(3); - modelServiceMapper.updateById(localModel); + if (collect1.size() > 0){ + List localModels = modelServiceDOS.stream() + .filter(baseModel -> name.equals(baseModel.getBaseModelName())) + .collect(Collectors.toList()); + if (localModels != null && localModels.size() > 0) { + ModelServiceDO localModel = localModels.get(0); + // 如果状态不是 "running",更新本地状态 + localModel.setStatus(3); + modelServiceMapper.updateById(localModel); + } } } }