feat(llm): 自动删除未使用的微调模型

- 新增 deleteTheModel 方法,用于删除未使用的微调模型
- 在 refreshTheModelService 方法中增加逻辑,判断模型是否未使用并进行删除
- 优化了模型信息的处理逻辑,提高了代码可读性和维护性
This commit is contained in:
sunxiqing 2025-08-12 11:17:58 +08:00
parent 435bbee4dc
commit 0d9ea7c3c3

View File

@ -31,16 +31,25 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.extern.slf4j.Slf4j;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@ -251,14 +260,19 @@ public class BaseModelTaskService {
BaseModelDO baseModelDO = new BaseModelDO();
baseModelDO.setModelName(remoteModelName);
baseModelDO.setAigcModelName(remoteModelName);
// 模型类型
// 微调状态
boolean b = replaceActiveGroups(remoteModelName, active);
baseModelDO.setIsFinetuned(b);
LambdaQueryWrapper<FineTuningTaskDO> eq = new LambdaQueryWrapper<FineTuningTaskDO>().eq(FineTuningTaskDO::getJobModelName, remoteModelName);
FineTuningTaskDO fineTuningTaskDO = fineTuningTaskService.selectName(eq);
if (fineTuningTaskDO != null) {
baseModelDO.setTheTuningName(fineTuningTaskDO.getTaskName());
} else if (b){
deleteTheModel(remoteModelName);
break;
}
// 模型类型
// 微调状态
baseModelDO.setIsFinetuned(replaceActiveGroups(remoteModelName, active));
baseModelDOList.add(baseModelDO);
}
baseModelMapper.insert(baseModelDOList);
@ -268,8 +282,55 @@ public class BaseModelTaskService {
}
}
private void deleteTheModel(String remoteModelName) {
try {
// 创建 OkHttpClient 实例
log.info("创建 OkHttpClient 实例,设置超时时间为 2 分钟");
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(2, TimeUnit.MINUTES)
.readTimeout(2, TimeUnit.MINUTES)
.writeTimeout(2, TimeUnit.MINUTES)
.build();
// @Scheduled(cron = "0 0/1 * * * ?")
// 1. 获取删除微调任务的URL
String baseUrl =llmBackendProperties.getDeleteTheModelFull();
log.info("获取删除微调任务的URL: {}", baseUrl);
HttpUrl url = Objects.requireNonNull(HttpUrl.parse(baseUrl))
.newBuilder()
.addPathSegment(remoteModelName)
.build();
// 2. 构建请求体空请求体
RequestBody requestBody = RequestBody.create("", MediaType.parse("application/json"));
// 3. 构建请求
Request request = new Request.Builder()
.url(url)
.delete(requestBody)
.addHeader("accept", "application/json")
.build();
// 4. 发送请求
log.info("开始发送HTTP DELETE请求删除微调任务任务模型名称: {}", remoteModelName);
try (Response response = client.newCall(request).execute()) {
if (response.body()!=null) {
String body = response.body().string();
log.info("HTTP删除请求完成响应内容: {}", body);
} else {
log.error("HTTP请求失败: " + "响应为空");
throw new RuntimeException("HTTP请求失败: " + "响应为空");
}
} catch (IOException e) {
log.error("发送HTTP请求删除微调任务时发生异常任务模型名称: {}",remoteModelName, e);
throw new RuntimeException("HTTP请求失败", e);
}
} catch (Exception e) {
log.error("删除模型时发生异常: {}", e.getMessage(), e);
}
}
// @Scheduled(cron = "0 0/1 * * * ?")
@Scheduled(cron = "0/15 * * * * ?")
public void refreshTheModelService () {
try {