From ccdbb209351b6b486cd33e71a9a08bfc96fae9b4 Mon Sep 17 00:00:00 2001 From: likunlong Date: Tue, 19 Aug 2025 18:00:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=8D=E9=80=89=E6=8B=A9=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E8=87=AA=E5=8A=A8=E9=80=89=E6=8B=A9=E6=97=B6=E8=B5=B0?= =?UTF-8?q?=E5=8E=9F=E5=A7=8B=E9=BB=98=E8=AE=A4=E9=80=BB=E8=BE=91=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/chat/impl/SseServiceImpl.java | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java index c6d3fe06..f94d0331 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java @@ -126,26 +126,31 @@ public class SseServiceImpl implements ISseService { // 自动选择模型并获取对应的聊天服务 IChatService chatService = autoSelectModelAndGetService(chatRequest); - // 统一重试与降级:封装启动逻辑,并通过ThreadLocal传递失败回调 - ChatModelVo currentModel = this.chatModelVo; - String currentCategory = currentModel.getCategory(); - ChatRetryHelper.executeWithRetry( - currentModel, - currentCategory, - chatModelService, - sseEmitter, - (modelForTry, onFailure) -> { - // 替换请求中的模型名称 - chatRequest.setModel(modelForTry.getModelName()); - // 以 emitter 实例为唯一键注册失败回调 - RetryNotifier.setFailureCallback(sseEmitter, onFailure); - try { - autoSelectServiceByCategoryAndInvoke(chatRequest, sseEmitter, modelForTry.getCategory()); - } finally { - // 不在此处清理,待下游结束/失败时清理 + // 仅当 autoSelectModel = true 时,才启用重试与降级 + if (Boolean.TRUE.equals(chatRequest.getAutoSelectModel())) { + ChatModelVo currentModel = this.chatModelVo; + String currentCategory = currentModel.getCategory(); + ChatRetryHelper.executeWithRetry( + currentModel, + currentCategory, + chatModelService, + sseEmitter, + (modelForTry, onFailure) -> { + // 替换请求中的模型名称 + chatRequest.setModel(modelForTry.getModelName()); + // 以 emitter 实例为唯一键注册失败回调 + RetryNotifier.setFailureCallback(sseEmitter, onFailure); + try { + autoSelectServiceByCategoryAndInvoke(chatRequest, sseEmitter, modelForTry.getCategory()); + } finally { + // 不在此处清理,待下游结束/失败时清理 + } } - } - ); + ); + } else { + // 不重试不降级,直接调用 + chatService.chat(chatRequest, sseEmitter); + } } catch (Exception e) { log.error(e.getMessage(),e); SSEUtil.sendErrorEvent(sseEmitter,e.getMessage());