diff --git a/modules/ai/src/main/java/com/bytedesk/ai/robot/RobotEventListener.java b/modules/ai/src/main/java/com/bytedesk/ai/robot/RobotEventListener.java index 473c042772..f2fa778703 100644 --- a/modules/ai/src/main/java/com/bytedesk/ai/robot/RobotEventListener.java +++ b/modules/ai/src/main/java/com/bytedesk/ai/robot/RobotEventListener.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-06-12 07:17:13 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-06 16:15:07 + * @LastEditTime: 2025-03-11 15:44:11 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -155,23 +155,23 @@ public class RobotEventListener { clonedMessage.setUid(uidUtils.getUid()); clonedMessage.setType(MessageTypeEnum.PROCESSING); messageSendService.sendProtobufMessage(clonedMessage); - // + // if (robotProtobuf.getLlm().getProvider().equals(LlmProviderConsts.OLLAMA)) { - springAIOllamaService.ifPresent(service -> - service.sendWsMessage(query, robotProtobuf.getLlm(), message)); + springAIOllamaService + .ifPresent(service -> service.sendWsMessage(query, robotProtobuf.getLlm(), message)); } else if (robotProtobuf.getLlm().getProvider().equals(LlmProviderConsts.DEEPSEEK)) { - springAIDeepseekService.ifPresent(service -> - service.sendWsMessage(query, robotProtobuf.getLlm(), message)); + springAIDeepseekService + .ifPresent(service -> service.sendWsMessage(query, robotProtobuf.getLlm(), message)); } else if (robotProtobuf.getLlm().getProvider().equals(LlmProviderConsts.DASHSCOPE)) { - springAIDashscopeService.ifPresent(service -> - service.sendWsMessage(query, robotProtobuf.getLlm(), message)); + springAIDashscopeService + .ifPresent(service -> service.sendWsMessage(query, robotProtobuf.getLlm(), message)); } else if (robotProtobuf.getLlm().getProvider().equals(LlmProviderConsts.ZHIPU)) { - springAIZhipuaiService.ifPresent(service -> - service.sendWsMessage(query, robotProtobuf.getLlm(), message)); - } else { + springAIZhipuaiService + .ifPresent(service -> service.sendWsMessage(query, robotProtobuf.getLlm(), message)); + } else { // 默认使用智谱AI - springAIZhipuaiService.ifPresent(service -> - service.sendWsMessage(query, robotProtobuf.getLlm(), message)); + springAIZhipuaiService + .ifPresent(service -> service.sendWsMessage(query, robotProtobuf.getLlm(), message)); } } else { log.error("robot not found"); @@ -209,26 +209,22 @@ public class RobotEventListener { clonedMessage.setUid(uidUtils.getUid()); clonedMessage.setType(MessageTypeEnum.PROCESSING); messageSendService.sendProtobufMessage(clonedMessage); - // + // if (robot.getLlm().getProvider().equals(LlmProviderConsts.OLLAMA)) { - springAIOllamaService.ifPresent(service -> - service.sendWsKbMessage(query, robot, message)); + springAIOllamaService.ifPresent(service -> service.sendWsKbMessage(query, robot, message)); } else if (robot.getLlm().getProvider().equals(LlmProviderConsts.DEEPSEEK)) { - springAIDeepseekService.ifPresent(service -> - service.sendWsKbMessage(query, robot, message)); + springAIDeepseekService.ifPresent(service -> service.sendWsKbMessage(query, robot, message)); } else if (robot.getLlm().getProvider().equals(LlmProviderConsts.DASHSCOPE)) { - springAIDashscopeService.ifPresent(service -> - service.sendWsKbMessage(query, robot, message)); + springAIDashscopeService.ifPresent(service -> service.sendWsKbMessage(query, robot, message)); } else if (robot.getLlm().getProvider().equals(LlmProviderConsts.ZHIPU)) { - springAIZhipuaiService.ifPresent(service -> - service.sendWsKbMessage(query, robot, message)); + springAIZhipuaiService.ifPresent(service -> service.sendWsKbMessage(query, robot, message)); } else { // 默认使用智谱AI - springAIZhipuaiService.ifPresent(service -> - service.sendWsKbMessage(query, robot, message)); + springAIZhipuaiService.ifPresent(service -> service.sendWsKbMessage(query, robot, message)); } } } -} + +} diff --git a/modules/ai/src/main/java/com/bytedesk/ai/robot_message/RobotMessageUtils.java b/modules/ai/src/main/java/com/bytedesk/ai/robot_message/RobotMessageUtils.java new file mode 100644 index 0000000000..2b32064795 --- /dev/null +++ b/modules/ai/src/main/java/com/bytedesk/ai/robot_message/RobotMessageUtils.java @@ -0,0 +1,58 @@ +/* + * @Author: jackning 270580156@qq.com + * @Date: 2025-03-11 15:46:21 + * @LastEditors: jackning 270580156@qq.com + * @LastEditTime: 2025-03-11 15:46:25 + * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk + * Please be aware of the BSL license restrictions before installing Bytedesk IM – + * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. + * Business Source License 1.1: https://github.com/Bytedesk/bytedesk/blob/main/LICENSE + * contact: 270580156@qq.com + * + * Copyright (c) 2025 by bytedesk.com, All Rights Reserved. + */ +package com.bytedesk.ai.robot_message; + +import java.time.LocalDateTime; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.bytedesk.ai.robot.RobotProtobuf; +import com.bytedesk.core.enums.ClientEnum; +import com.bytedesk.core.message.MessageExtra; +import com.bytedesk.core.message.MessageProtobuf; +import com.bytedesk.core.message.MessageStatusEnum; +import com.bytedesk.core.rbac.user.UserProtobuf; +import com.bytedesk.core.rbac.user.UserTypeEnum; +import com.bytedesk.core.thread.ThreadEntity; +import com.bytedesk.core.thread.ThreadProtobuf; +import com.bytedesk.core.uid.UidUtils; + +public class RobotMessageUtils { + + public static MessageProtobuf createRobotMessage(ThreadEntity thread, ThreadProtobuf threadProtobuf, + MessageProtobuf messageProtobuf) { + // ThreadEntity thread = threadOptional.get(); + MessageExtra extraObject = JSONObject.parseObject(messageProtobuf.getExtra(), MessageExtra.class); + String agent = thread.getAgent(); + RobotProtobuf robotProtobuf = JSON.parseObject(agent, RobotProtobuf.class); + UserProtobuf user = UserProtobuf.builder() + .nickname(robotProtobuf.getNickname()) + .avatar(robotProtobuf.getAvatar()) + .type(UserTypeEnum.ROBOT.name()) + .build(); + user.setUid(robotProtobuf.getUid()); + String messageUid = UidUtils.getInstance().getUid(); + MessageProtobuf message = MessageProtobuf.builder() + .uid(messageUid) + .status(MessageStatusEnum.SUCCESS) + .thread(threadProtobuf) + .user(user) + .client(ClientEnum.ROBOT) + .extra(JSONObject.toJSONString(extraObject)) + .createdAt(LocalDateTime.now()) + .build(); + return message; + } + +} diff --git a/modules/core/src/main/java/com/bytedesk/core/message/MessageUtils.java b/modules/core/src/main/java/com/bytedesk/core/message/MessageUtils.java index 066df076a3..60de09aa33 100644 --- a/modules/core/src/main/java/com/bytedesk/core/message/MessageUtils.java +++ b/modules/core/src/main/java/com/bytedesk/core/message/MessageUtils.java @@ -2,7 +2,7 @@ * @Author: jackning 270580156@qq.com * @Date: 2024-08-31 16:23:54 * @LastEditors: jackning 270580156@qq.com - * @LastEditTime: 2025-03-09 22:24:57 + * @LastEditTime: 2025-03-11 15:44:06 * @Description: bytedesk.com https://github.com/Bytedesk/bytedesk * Please be aware of the BSL license restrictions before installing Bytedesk IM – * selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license. @@ -17,9 +17,11 @@ import java.time.LocalDateTime; // import java.util.Date; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.bytedesk.core.config.BytedeskEventPublisher; import com.bytedesk.core.enums.ClientEnum; import com.bytedesk.core.rbac.user.UserProtobuf; +import com.bytedesk.core.rbac.user.UserTypeEnum; import com.bytedesk.core.rbac.user.UserUtils; import com.bytedesk.core.thread.ThreadEntity; import com.bytedesk.core.thread.ThreadProtobuf; @@ -76,6 +78,9 @@ public class MessageUtils { return message; } + + + public static void notifyUser(MessageProtobuf messageProtobuf) { String json = JSON.toJSONString(messageProtobuf); //