Commit bdb27de3 by 王一诺

调整模型匹配策略

parent eb4dca4f
<component name="InspectionProjectProfileManager"> <component name="InspectionProjectProfileManager">
<profile version="1.0"> <profile version="1.0">
<option name="myName" value="Project Default" /> <option name="myName" value="Project Default" />
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliDeprecation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliEqualsAvoidNull" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AliWrapperTypeEquality" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAbstractClassShouldStartWithAbstractNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="true" level="WARNING" enabled_by_default="true" /> <inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidCallStaticSimpleDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidCommentBehindStatement" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidComplexCondition" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidConcurrentCompetitionRandom" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidDoubleOrFloatEqualCompare" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidManuallyCreateThread" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidMissUseOfMathRandom" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidNegationOperator" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidNewDateGetTime" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidPatternCompileInMethod" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidReturnInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidStartWithDollarAndUnderLineNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaAvoidUseTimer" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaBigDecimalAvoidDoubleConstructor" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaBooleanPropertyShouldNotStartWithIs" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassCastExceptionWithSubListToArrayList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassCastExceptionWithToArray" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassMustHaveAuthor" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaClassNamingShouldBeCamel" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCollectionInitShouldAssignCapacity" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCommentsMustBeJavadocFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaConcurrentExceptionWithModifyOriginSubList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaConstantFieldShouldBeUpperCase" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaCountDownShouldInFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaDontModifyInForeachCircle" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaEnumConstantsMustHaveComment" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaExceptionClassShouldEndWithException" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaIbatisMethodQueryForList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaLockShouldWithTryFinally" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaLowerCamelCaseVariableNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaMethodReturnWrapperType" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaMethodTooLong" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPackageNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoMustOverrideToString" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoMustUsePrimitiveField" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaPojoNoDefaultValue" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaRemoveCommentedCode" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaServiceOrDaoClassShouldEndWithImpl" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaSneakyThrowsWithoutExceptionType" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaStringConcat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaSwitchExpression" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaSwitchStatement" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaTestClassShouldEndWithTestNaming" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadLocalShouldRemove" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadPoolCreation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaThreadShouldSetName" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaTransactionMustHaveRollback" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUndefineMagicConstant" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUnsupportedExceptionWithModifyAsList" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUseQuietReferenceNotation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="AlibabaUseRightCaseForDateFormat" enabled="true" level="WARNING" enabled_by_default="true" /> <inspection_tool class="AlibabaUseRightCaseForDateFormat" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="true" level="WARNING" enabled_by_default="true" />
</profile> </profile>
</component> </component>
\ No newline at end of file
...@@ -5,33 +5,17 @@ ...@@ -5,33 +5,17 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="6879e488-b2d7-4692-a578-ccef01aca622" name="Changes" comment=""> <list default="true" id="6879e488-b2d7-4692-a578-ccef01aca622" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/UrlController.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/controller/ModelApiController.java" beforeDir="false" afterPath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/controller/ModelApiController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/UrlService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/LLMApiApplication.java" beforeDir="false" afterPath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/LLMApiApplication.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/remote/ServiceLLMClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/remote/ServiceLLMClient.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/service/impl/AiServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/api-llm/src/main/java/com/coolook/llm/api/service/impl/AiServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/common-llm/src/main/java/com/coolook/common/llm/constant/ModelConstant.java" beforeDir="false" afterPath="$PROJECT_DIR$/common-llm/src/main/java/com/coolook/common/llm/constant/ModelConstant.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/common-llm/src/main/java/com/coolook/common/llm/request/text/TextRequest.java" beforeDir="false" afterPath="$PROJECT_DIR$/common-llm/src/main/java/com/coolook/common/llm/request/text/TextRequest.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/logs/error.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/error.log" afterDir="false" /> <change beforePath="$PROJECT_DIR$/logs/error.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/error.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/logs/info.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/info.log" afterDir="false" /> <change beforePath="$PROJECT_DIR$/logs/error/log-error-2025-03-17.0.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/error/log-error-2025-03-17.0.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/logs/warn.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/warn.log" afterDir="false" /> <change beforePath="$PROJECT_DIR$/logs/warn.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/warn.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/config/AddContentLengthFilter.java" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/logs/warn/log-warn-2025-03-14.0.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/warn/log-warn-2025-03-14.0.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/config/FilterConfig.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/config/LocalDateTimeDeserializer.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/config/LocalDateTimeSerializer.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/config/RemoveKeepAliveHeaderFilter.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/config/WebConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/config/WebConfig.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ConfigController.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ConfigController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ModelController.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ModelController.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ModelController.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ModelController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ModelManagerController.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ModelManagerController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/remote/LLMClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/remote/LLMClient.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/remote/LLMClient.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/remote/LLMClient.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ConfigService.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ConfigService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/IImageModelService.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/IImageModelService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ITextModelService.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ITextModelService.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ITextModelService.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ITextModelService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/InitTaskService.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ModelDataService.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/ModelDataService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/ImageModelServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/ImageModelServiceImpl.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/ImageModelServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/ImageModelServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/TextModelServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/TextModelServiceImpl.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/TextModelServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/service/impl/TextModelServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/service-llm/src/main/resources/application.yml" beforeDir="false" afterPath="$PROJECT_DIR$/service-llm/src/main/resources/application.yml" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -239,7 +223,15 @@ ...@@ -239,7 +223,15 @@
<workItem from="1742453169704" duration="2790000" /> <workItem from="1742453169704" duration="2790000" />
<workItem from="1742457215395" duration="1068000" /> <workItem from="1742457215395" duration="1068000" />
<workItem from="1742459815397" duration="4870000" /> <workItem from="1742459815397" duration="4870000" />
<workItem from="1742524455414" duration="4556000" /> <workItem from="1742524455414" duration="4931000" />
<workItem from="1742529452777" duration="1827000" />
<workItem from="1742803925924" duration="5930000" />
<workItem from="1742869272123" duration="5929000" />
<workItem from="1742882392172" duration="786000" />
<workItem from="1742883994723" duration="1699000" />
<workItem from="1743046863346" duration="10000" />
<workItem from="1743072182828" duration="1262000" />
<workItem from="1743144063118" duration="4714000" />
</task> </task>
<servers /> <servers />
</component> </component>
...@@ -269,6 +261,15 @@ ...@@ -269,6 +261,15 @@
<line>67</line> <line>67</line>
<option name="timeStamp" value="7" /> <option name="timeStamp" value="7" />
</line-breakpoint> </line-breakpoint>
<line-breakpoint enabled="true" type="java-method">
<url>file://$PROJECT_DIR$/service-llm/src/main/java/com/coolook/service/llm/controller/ModelController.java</url>
<line>81</line>
<properties class="com.coolook.service.llm.controller.ModelController" method="chat">
<option name="EMULATED" value="true" />
<option name="WATCH_EXIT" value="false" />
</properties>
<option name="timeStamp" value="8" />
</line-breakpoint>
</breakpoints> </breakpoints>
</breakpoint-manager> </breakpoint-manager>
<watches-manager> <watches-manager>
......
...@@ -20,22 +20,20 @@ public class ModelApiController { ...@@ -20,22 +20,20 @@ public class ModelApiController {
private IAiService aiService; private IAiService aiService;
@PostMapping("/ask") @PostMapping("/ask")
public ResponseResult<Message> ask(@RequestBody Message msg) throws Exception{ public ResponseResult<Message> ask(@RequestBody Message msg) throws Exception {
if (StringUtils.isEmpty(msg.getAiQuestion())){ if (StringUtils.isEmpty(msg.getAiQuestion())) {
msg.setStatus(AiStatus.ERROR); msg.setStatus(AiStatus.ERROR);
return ResponseResult.fail(msg); return ResponseResult.fail(msg);
} }
return aiService.ask(msg); return aiService.ask(msg);
} }
@PostMapping("/webAsk") @PostMapping("/webAsk")
public ResponseResult<Message> webAsk(@RequestBody Message msg) throws Exception{ public ResponseResult<Message> webAsk(@RequestBody Message msg) throws Exception {
if (StringUtils.isEmpty(msg.getAiQuestion())){ if (StringUtils.isEmpty(msg.getAiQuestion())) {
msg.setStatus(AiStatus.ERROR); msg.setStatus(AiStatus.ERROR);
return ResponseResult.fail(msg); return ResponseResult.fail(msg);
} }
return aiService.webAsk(msg); return aiService.webAsk(msg);
} }
} }
\ No newline at end of file
This diff could not be displayed because it is too large.
package com.coolook.service.llm.controller; package com.coolook.service.llm.controller;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.coolook.common.llm.dto.ModelsDto; import com.coolook.common.llm.dto.ModelsDto;
import com.coolook.common.llm.request.base.BaseMessage; import com.coolook.common.llm.request.base.BaseMessage;
...@@ -128,11 +129,14 @@ public class ModelController { ...@@ -128,11 +129,14 @@ public class ModelController {
private SseEmitter chatStream(TextRequest content) { private SseEmitter chatStream(TextRequest content) {
JSONObject chat = textModelService.chatAndReturnStream(content); JSONObject chat = textModelService.chatAndReturnStream(content);
JSONObject end = getEndedJson(chat);
SseEmitter emitter = new SseEmitter(0L); SseEmitter emitter = new SseEmitter(0L);
executorService.submit(() -> { executorService.submit(() -> {
try { try {
log.info("data: {}", chat); log.info("data: {}", chat);
emitter.send(chat.toString()); emitter.send(chat.toString());
emitter.send(end.toString());
emitter.send("[DONE]\n\n"); emitter.send("[DONE]\n\n");
emitter.complete(); emitter.complete();
} catch (Exception e) { } catch (Exception e) {
...@@ -142,13 +146,33 @@ public class ModelController { ...@@ -142,13 +146,33 @@ public class ModelController {
return emitter; return emitter;
} }
private JSONObject getEndedJson(JSONObject jsonObject) {
JSONObject end = JSONObject.parseObject((jsonObject.toString()));
if (end != null && end.containsKey("error")) {
return end;
}
// end.remove("usage");
end.put("finish_reason", "stop");
JSONArray choicesArray = end.getJSONArray("choices");
for (int i = 0; i < choicesArray.size(); i++) {
JSONObject choiceObj = choicesArray.getJSONObject(i);
JSONObject deltaObj = choiceObj.getJSONObject("delta");
deltaObj.put("content", "");
}
return end;
}
private SseEmitter picStream(ImageRequest content) { private SseEmitter picStream(ImageRequest content) {
JSONObject pic = imageModelService.pictureAndReturnStream(content); JSONObject pic = imageModelService.pictureAndReturnStream(content);
JSONObject end = getEndedJson(pic);
SseEmitter emitter = new SseEmitter(0L); SseEmitter emitter = new SseEmitter(0L);
executorService.submit(() -> { executorService.submit(() -> {
try { try {
log.info("data: {}", pic); log.info("data: {}", pic);
emitter.send(pic.toString()); emitter.send(pic.toString());
emitter.send(end.toString());
emitter.send("[DONE]\n\n"); emitter.send("[DONE]\n\n");
emitter.complete(); emitter.complete();
} catch (Exception e) { } catch (Exception e) {
......
...@@ -158,7 +158,7 @@ public class LLMClient { ...@@ -158,7 +158,7 @@ public class LLMClient {
// 使用 Jackson 序列化 // 使用 Jackson 序列化
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
String jsonBody = objectMapper.writeValueAsString(content); String jsonBody = objectMapper.writeValueAsString(content);
log.info("body:{}", jsonBody); //log.info("body:{}", jsonBody);
// 创建 HttpEntity // 创建 HttpEntity
HttpEntity<String> requestEntity = new HttpEntity<>(jsonBody, headers); HttpEntity<String> requestEntity = new HttpEntity<>(jsonBody, headers);
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
......
...@@ -3,7 +3,6 @@ package com.coolook.service.llm.service; ...@@ -3,7 +3,6 @@ package com.coolook.service.llm.service;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.coolook.common.llm.dto.ModelsDto; import com.coolook.common.llm.dto.ModelsDto;
import com.coolook.common.llm.request.text.TextRequest; import com.coolook.common.llm.request.text.TextRequest;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import java.util.List; import java.util.List;
......
...@@ -82,20 +82,20 @@ public class ImageModelServiceImpl implements IImageModelService { ...@@ -82,20 +82,20 @@ public class ImageModelServiceImpl implements IImageModelService {
for (Models model : modelList) { for (Models model : modelList) {
String modelName = model.getModel(); String modelName = model.getModel();
String[] modelInfo = modelName.split(":"); // String[] modelInfo = modelName.split(":");
String modelType = null; // String modelType = null;
String modelVersion = null; // String modelVersion = null;
if (modelInfo.length > 1) { // if (modelInfo.length > 1) {
modelType = modelInfo[0]; // modelType = modelInfo[0];
modelVersion = modelInfo[1]; // modelVersion = modelInfo[1];
} else { // } else {
modelType = modelName; // modelType = modelName;
} // }
//
if (modelVersion == null || modelVersion.contains("-") || modelVersion.contains("_")) { // if (modelVersion == null || modelVersion.contains("-") || modelVersion.contains("_")) {
modelVersion = ""; // modelVersion = "";
} // }
modelName = modelType + ":" + modelVersion; // modelName = modelType + ":" + modelVersion;
ModelsDto modelDto = new ModelsDto(); ModelsDto modelDto = new ModelsDto();
modelDto.setId(modelName); modelDto.setId(modelName);
modelDto.setCreated(model.getCreateAt().atZone(ZoneId.of("UTC")).toInstant().toEpochMilli()); modelDto.setCreated(model.getCreateAt().atZone(ZoneId.of("UTC")).toInstant().toEpochMilli());
...@@ -112,6 +112,8 @@ public class ImageModelServiceImpl implements IImageModelService { ...@@ -112,6 +112,8 @@ public class ImageModelServiceImpl implements IImageModelService {
public JSONObject pictureAndReturnStream(ImageRequest content) { public JSONObject pictureAndReturnStream(ImageRequest content) {
JSONObject picture = picture(content); JSONObject picture = picture(content);
if (picture != null && !picture.containsKey("error")) { if (picture != null && !picture.containsKey("error")) {
picture.remove("usage");
picture.put("finish_reason", "null");
JSONArray choicesArray = picture.getJSONArray("choices"); JSONArray choicesArray = picture.getJSONArray("choices");
for (int i = 0; i < choicesArray.size(); i++) { for (int i = 0; i < choicesArray.size(); i++) {
...@@ -138,7 +140,6 @@ public class ImageModelServiceImpl implements IImageModelService { ...@@ -138,7 +140,6 @@ public class ImageModelServiceImpl implements IImageModelService {
public JSONObject picture(ImageRequest content) { public JSONObject picture(ImageRequest content) {
String redisKey = RedisUtil.getRedisKey(ModelConstant.MODEL_TYPE_IMAGE); String redisKey = RedisUtil.getRedisKey(ModelConstant.MODEL_TYPE_IMAGE);
String modelFullName = content.getModel(); String modelFullName = content.getModel();
String modelName = modelFullName.split(":")[0];
Object obj = redisTemplate.opsForValue().get(redisKey); Object obj = redisTemplate.opsForValue().get(redisKey);
...@@ -148,14 +149,23 @@ public class ImageModelServiceImpl implements IImageModelService { ...@@ -148,14 +149,23 @@ public class ImageModelServiceImpl implements IImageModelService {
.map(item -> objectMapper.convertValue(item, Models.class)) .map(item -> objectMapper.convertValue(item, Models.class))
.collect(Collectors.toList()); .collect(Collectors.toList());
Models availableModel = null;
// 遍历 modelList 寻找第一个可用的模型
for (Models model : modelList) { for (Models model : modelList) {
boolean flag = false;
String name = model.getModel().trim(); String name = model.getModel().trim();
Boolean flag = false;
// 根据名字寻找合适的模型 // 根据名字寻找合适的模型
if (name.equals(modelName)) { if (name.equals(modelFullName)) {
flag = true; flag = true;
} else if (searchConfig.getValue()) { } else if (searchConfig.getValue()) {
if (name.contains(modelName)) { // deepseek-r1:99b
if (name.contains(":")) {
String[] modelInfo = name.split(":");
name = modelInfo[0];
}
if (modelFullName.contains(name)) {
flag = true; flag = true;
} }
} else { } else {
...@@ -163,20 +173,122 @@ public class ImageModelServiceImpl implements IImageModelService { ...@@ -163,20 +173,122 @@ public class ImageModelServiceImpl implements IImageModelService {
} }
if (flag) { if (flag) {
if (unavailableModel.putIfAbsent(model.getUrl() + model.getModel(), true) == null) { // 检查模型是否已被占用
String key = model.getUrl() + model.getModel();
if (unavailableModel.putIfAbsent(key, true) == null) {
// 模型可用,找到第一个可用模型
availableModel = model;
break;
}
}
}
// 如果找到了可用的模型,则执行处理
if (availableModel != null) {
log.info("Found available model, updating and sending request: {}", availableModel.getModel());
return updateAndSendRequestPic(availableModel, content);
}
// 如果没有找到可用模型,进入等待状态,直到模型可用
log.info("No available model found, waiting for model to become available...");
// 持续等待直到有可用模型
while (true) {
for (Models model : modelList) {
boolean flag = false;
String name = model.getModel().trim();
if (name.equals(modelFullName)) {
flag = true;
} else if (searchConfig.getValue()) {
if (name.contains(":")) {
String[] modelInfo = name.split(":");
name = modelInfo[0];
}
if (modelFullName.contains(name)) {
flag = true;
}
} else {
flag = true;
}
if (flag) {
String key = model.getUrl() + model.getModel();
// 如果模型可用,则返回
if (unavailableModel.putIfAbsent(key, true) == null) {
availableModel = model;
log.info("Model is now available: {}", model.getModel());
return updateAndSendRequestPic(model, content); return updateAndSendRequestPic(model, content);
} }
} }
} }
// 如果都没有找到可用的模型,休眠100ms再尝试
try {
log.info("All models are still unavailable, waiting...");
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 保持线程中断状态
}
}
} }
// 如果没有找到可用模型
JSONObject errorJson = new JSONObject(); JSONObject errorJson = new JSONObject();
errorJson.put("error", "error"); errorJson.put("error", "error");
errorJson.put("message", "model not found"); errorJson.put("message", "Model not found");
errorJson.put("code", "500"); errorJson.put("code", "500");
errorJson.put("model", content.getModel()); errorJson.put("model", content.getModel());
return errorJson; return errorJson;
} }
// public JSONObject picture2(ImageRequest content) {
// String redisKey = RedisUtil.getRedisKey(ModelConstant.MODEL_TYPE_IMAGE);
// String modelFullName = content.getModel();
//
// Object obj = redisTemplate.opsForValue().get(redisKey);
//
// if (obj instanceof List<?>) {
// List<?> rawList = (List<?>) obj;
// List<Models> modelList = rawList.stream()
// .map(item -> objectMapper.convertValue(item, Models.class))
// .collect(Collectors.toList());
//
// for (Models model : modelList) {
// boolean flag = false;
// String name = model.getModel().trim();
// // 根据名字寻找合适的模型
// if (name.equals(modelFullName)) {
// flag = true;
// } else if (searchConfig.getValue()) {
// // deepseek-r1:99b
// if (name.contains(":")) {
// String[] modelInfo = name.split(":");
// name = modelInfo[0];
// }
//
// if (modelFullName.contains(name)) {
// flag = true;
// }
// } else {
// flag = true;
// }
// if (flag) {
// log.info("updateAndSendRequestPic, modelName;{}", model.getModel());
// if (unavailableModel.putIfAbsent(model.getUrl() + model.getModel(), true) == null) {
// return updateAndSendRequestPic(model, content);
// }
// }
// }
// }
// JSONObject errorJson = new JSONObject();
// errorJson.put("error", "error");
// errorJson.put("message", "model not found");
// errorJson.put("code", "500");
// errorJson.put("model", content.getModel());
// return errorJson;
// }
public JSONObject updateAndSendRequestPic(Models model, ImageRequest content) { public JSONObject updateAndSendRequestPic(Models model, ImageRequest content) {
String key = model.getUrl() + model.getModel(); String key = model.getUrl() + model.getModel();
log.info("updateAndSendRequestPic, modelName;{}", key); log.info("updateAndSendRequestPic, modelName;{}", key);
......
...@@ -8,7 +8,7 @@ spring: ...@@ -8,7 +8,7 @@ spring:
main: main:
allow-bean-definition-overriding: true allow-bean-definition-overriding: true
profiles: profiles:
active: local active: prod
search: search:
config: config:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment