From 6b6b9f8b9d0a180794d66b6897a520d25ed8dbe6 Mon Sep 17 00:00:00 2001 From: Liuyang <2746366019@qq.com> Date: Tue, 18 Feb 2025 11:34:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor(yudao-module-llm):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E6=A8=A1=E5=9E=8B=E4=B8=8B=E8=BD=BD=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加参数校验,提高代码健壮性 - 优化日志记录,增加请求和响应的详细日志 - 改进异常处理,确保在请求失败时返回空列表 - 重构方法结构,提高代码可读性和维护性 --- .../module/llm/service/http/ModelService.java | 65 +++++++++++++++---- 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/ModelService.java b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/ModelService.java index 51d67a396..83c4ff7c8 100644 --- a/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/ModelService.java +++ b/yudao-module-llm/yudao-module-llm-biz/src/main/java/cn/iocoder/yudao/module/llm/service/http/ModelService.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.llm.service.http; import cn.iocoder.yudao.framework.common.util.http.HttpUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.llm.dal.dataobject.servername.ServerNameDO; import cn.iocoder.yudao.module.llm.framework.backend.config.LLMBackendProperties; import cn.iocoder.yudao.module.llm.service.http.vo.*; import cn.iocoder.yudao.module.llm.service.servername.ServerNameService; @@ -16,9 +17,7 @@ import javax.annotation.Resource; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Slf4j @Service @@ -108,21 +107,63 @@ public class ModelService { return serverNameService.getServerName(gpuType).getHost(); } + /** + * 通过 GPU 类型获取对应的主机 + *

ModelService GpuType 是 ServerName 表ID + * + * @param gpuType gpuType + * @return host + */ + public ServerNameDO getServerByType (Long gpuType) { + return serverNameService.getServerName(gpuType); + } + /** * 获取模型下载列表 + * + * @param gpuType GPU 类型,用于确定下载地址的主机 + * @param fileName 模型名称,用于拼接下载地址 + * @return 模型下载文件列表,如果获取失败则返回空列表 */ public List getFileList (Long gpuType, String fileName) { - String baseUrl = getHostByType(gpuType); - String url = baseUrl + llmBackendProperties.getModelFileList() + fileName; - String res = HttpUtils.get(url, null); - log.info(" getFileList:{}", res); - try { - return JSONArray.parseArray(res, String.class); - } catch (Exception e) { - log.info("error getFileList:{}", e.getMessage()); + // 1. 参数是否为空 + if (gpuType == null || fileName == null || fileName.trim().isEmpty()) { + log.warn("参数: gpuType={}, fileName={}", gpuType, fileName); + return Collections.emptyList(); + } + + // 2. 根据 GPU 类型获取主机地址 + ServerNameDO server = getServerByType(gpuType); + String baseUrl = server.getHost(); + if (baseUrl == null || baseUrl.trim().isEmpty()) { + log.warn("GPU: Type: {} , Name: {} , Host: {}", gpuType, server.getCardServerName(), baseUrl); + return Collections.emptyList(); + } + + // 3. 拼接完整的请求 URL + String url = baseUrl + llmBackendProperties.getModelFileList() + fileName; + log.info("Request URL: {}", url); + + // 4. 发起 HTTP GET 请求 + String response = null; + try { + response = HttpUtils.get(url, null); + log.info("Response from server: {}", response); + } catch (Exception e) { + log.error("Failed to send HTTP request to URL: {}, error: {}", url, e.getMessage()); + return Collections.emptyList(); + } + + // 5. 解析响应数据 + try { + return Optional.ofNullable(response) + .map(res -> JSONArray.parseArray(res, String.class)) + .orElse(Collections.emptyList()); + } catch (Exception e) { + log.error("Failed to parse response JSON: {}, error: {}", response, e.getMessage()); + return Collections.emptyList(); } - return null; } public ModelCompletionsRespVO modelPrivateCompletions (Map headers, ModelCompletionsReqVO req) {