This is an automated email from the ASF dual-hosted git repository.

wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new d9c317f  BIGTOP-4226: Support soft deletion in Chatbot (#71)
d9c317f is described below

commit d9c317f94d4fe42f90996580f31d4deac50a341d
Author: haopeng <[email protected]>
AuthorDate: Sat Sep 21 17:37:59 2024 +0800

    BIGTOP-4226: Support soft deletion in Chatbot (#71)
---
 .../ai/assistant/GeneralAssistantFactory.java      |  6 ++-
 .../assistant/store/PersistentChatMemoryStore.java | 54 ++++++++++++++--------
 .../enums/{MessageSender.java => MessageType.java} | 12 ++---
 .../manager/ai/dashscope/DashScopeAssistant.java   | 20 ++++----
 .../bigtop/manager/dao/po/ChatMessagePO.java       |  3 ++
 .../apache/bigtop/manager/dao/po/ChatThreadPO.java |  3 ++
 .../manager/dao/po/PlatformAuthorizedPO.java       |  3 ++
 .../manager/dao/repository/ChatMessageDao.java     |  2 -
 .../manager/dao/repository/ChatThreadDao.java      |  4 +-
 .../dao/repository/PlatformAuthorizedDao.java      |  4 ++
 .../resources/mapper/mysql/ChatMessageMapper.xml   |  6 +--
 .../resources/mapper/mysql/ChatThreadMapper.xml    | 11 ++++-
 .../mapper/mysql/PlatformAuthorizedMapper.xml      | 12 +++--
 .../mapper/postgresql/ChatMessageMapper.xml        |  6 +--
 .../mapper/postgresql/ChatThreadMapper.xml         | 18 ++++----
 .../mapper/postgresql/PlatformAuthorizedMapper.xml | 11 +++--
 .../server/controller/ChatbotController.java       |  8 ++--
 .../model/converter/ChatMessageConverter.java      |  6 +--
 .../server/model/req/ChatbotMessageReq.java        | 16 +++----
 .../manager/server/model/vo/ChatMessageVO.java     |  6 +--
 .../server/service/impl/ChatbotServiceImpl.java    | 29 ++++++++----
 .../src/main/resources/ddl/MySQL-DDL-CREATE.sql    |  5 +-
 .../main/resources/ddl/PostgreSQL-DDL-CREATE.sql   |  5 +-
 .../server/controller/ChatbotControllerTest.java   |  9 ++--
 24 files changed, 158 insertions(+), 101 deletions(-)

diff --git 
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/GeneralAssistantFactory.java
 
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/GeneralAssistantFactory.java
index 1945ef0..e02b677 100644
--- 
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/GeneralAssistantFactory.java
+++ 
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/GeneralAssistantFactory.java
@@ -19,6 +19,7 @@
 package org.apache.bigtop.manager.ai.assistant;
 
 import org.apache.bigtop.manager.ai.assistant.provider.LocSystemPromptProvider;
+import org.apache.bigtop.manager.ai.assistant.store.PersistentChatMemoryStore;
 import org.apache.bigtop.manager.ai.core.AbstractAIAssistantFactory;
 import org.apache.bigtop.manager.ai.core.enums.PlatformType;
 import org.apache.bigtop.manager.ai.core.enums.SystemPrompt;
@@ -70,7 +71,10 @@ public class GeneralAssistantFactory extends 
AbstractAIAssistantFactory {
                     case QIANFAN -> QianFanAssistant.builder();
                 };
         AIAssistant aiAssistant = builder.id(id)
-                .memoryStore((id == null) ? new InMemoryChatMemoryStore() : 
chatMemoryStore)
+                .memoryStore(
+                        (id == null)
+                                ? new InMemoryChatMemoryStore()
+                                : ((PersistentChatMemoryStore) 
chatMemoryStore).clone())
                 .withConfigProvider(assistantConfig)
                 .build();
 
diff --git 
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/store/PersistentChatMemoryStore.java
 
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/store/PersistentChatMemoryStore.java
index ba4fd95..a112b7b 100644
--- 
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/store/PersistentChatMemoryStore.java
+++ 
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/store/PersistentChatMemoryStore.java
@@ -18,7 +18,7 @@
  */
 package org.apache.bigtop.manager.ai.assistant.store;
 
-import org.apache.bigtop.manager.ai.core.enums.MessageSender;
+import org.apache.bigtop.manager.ai.core.enums.MessageType;
 import org.apache.bigtop.manager.dao.po.ChatMessagePO;
 import org.apache.bigtop.manager.dao.po.ChatThreadPO;
 import org.apache.bigtop.manager.dao.repository.ChatMessageDao;
@@ -33,13 +33,15 @@ import dev.langchain4j.store.memory.chat.ChatMemoryStore;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
+import java.util.Objects;
 
 public class PersistentChatMemoryStore implements ChatMemoryStore {
 
     private final ChatThreadDao chatThreadDao;
     private final ChatMessageDao chatMessageDao;
 
+    private final List<ChatMessage> systemMessages = new ArrayList<>();
+
     public PersistentChatMemoryStore(ChatThreadDao chatThreadDao, 
ChatMessageDao chatMessageDao) {
         this.chatThreadDao = chatThreadDao;
         this.chatMessageDao = chatMessageDao;
@@ -47,12 +49,10 @@ public class PersistentChatMemoryStore implements 
ChatMemoryStore {
 
     private ChatMessage convertToChatMessage(ChatMessagePO chatMessagePO) {
         String sender = chatMessagePO.getSender().toLowerCase();
-        if (sender.equals(MessageSender.AI.getValue())) {
+        if (sender.equals(MessageType.AI.getValue())) {
             return new AiMessage(chatMessagePO.getMessage());
-        } else if (sender.equals(MessageSender.USER.getValue())) {
+        } else if (sender.equals(MessageType.USER.getValue())) {
             return new UserMessage(chatMessagePO.getMessage());
-        } else if (sender.equals(MessageSender.SYSTEM.getValue())) {
-            return new SystemMessage(chatMessagePO.getMessage());
         } else {
             return null;
         }
@@ -61,21 +61,17 @@ public class PersistentChatMemoryStore implements 
ChatMemoryStore {
     private ChatMessagePO convertToChatMessagePO(ChatMessage chatMessage, Long 
chatThreadId) {
         ChatMessagePO chatMessagePO = new ChatMessagePO();
         if (chatMessage.type().equals(ChatMessageType.AI)) {
-            chatMessagePO.setSender(MessageSender.AI.getValue());
+            chatMessagePO.setSender(MessageType.AI.getValue());
             AiMessage aiMessage = (AiMessage) chatMessage;
             chatMessagePO.setMessage(aiMessage.text());
         } else if (chatMessage.type().equals(ChatMessageType.USER)) {
-            chatMessagePO.setSender(MessageSender.USER.getValue());
+            chatMessagePO.setSender(MessageType.USER.getValue());
             UserMessage userMessage = (UserMessage) chatMessage;
             chatMessagePO.setMessage(userMessage.singleText());
-        } else if (chatMessage.type().equals(ChatMessageType.SYSTEM)) {
-            chatMessagePO.setSender(MessageSender.SYSTEM.getValue());
-            SystemMessage systemMessage = (SystemMessage) chatMessage;
-            chatMessagePO.setMessage(systemMessage.text());
         } else {
-            chatMessagePO.setSender(chatMessage.type().toString());
+            return null;
         }
-        ChatThreadPO chatThreadPO = chatThreadDao.findById(chatThreadId);
+        ChatThreadPO chatThreadPO = chatThreadDao.findByThreadId(chatThreadId);
         chatMessagePO.setUserId(chatThreadPO.getUserId());
         chatMessagePO.setThreadId(chatThreadId);
         return chatMessagePO;
@@ -84,21 +80,39 @@ public class PersistentChatMemoryStore implements 
ChatMemoryStore {
     @Override
     public List<ChatMessage> getMessages(Object threadId) {
         List<ChatMessagePO> chatMessages = 
chatMessageDao.findAllByThreadId((Long) threadId);
-        if (chatMessages.isEmpty()) {
-            return new ArrayList<>();
-        } else {
-            return 
chatMessages.stream().map(this::convertToChatMessage).collect(Collectors.toList());
+        List<ChatMessage> allChatMessages = new ArrayList<>(systemMessages);
+        if (!chatMessages.isEmpty()) {
+            allChatMessages.addAll(chatMessages.stream()
+                    .map(this::convertToChatMessage)
+                    .filter(Objects::nonNull)
+                    .toList());
         }
+        return allChatMessages;
     }
 
     @Override
     public void updateMessages(Object threadId, List<ChatMessage> messages) {
-        ChatMessagePO chatMessagePO = 
convertToChatMessagePO(messages.get(messages.size() - 1), (Long) threadId);
+        ChatMessage newMessage = messages.get(messages.size() - 1);
+        if (newMessage.type().equals(ChatMessageType.SYSTEM)) {
+            SystemMessage systemMessage = (SystemMessage) newMessage;
+            systemMessages.add(systemMessage);
+            return;
+        }
+        ChatMessagePO chatMessagePO = convertToChatMessagePO(newMessage, 
(Long) threadId);
+        if (chatMessagePO == null) {
+            return;
+        }
         chatMessageDao.save(chatMessagePO);
     }
 
     @Override
     public void deleteMessages(Object threadId) {
-        chatMessageDao.deleteByThreadId((Long) threadId);
+        List<ChatMessagePO> chatMessagePOS = 
chatMessageDao.findAllByThreadId((Long) threadId);
+        chatMessagePOS.forEach(chatMessage -> chatMessage.setIsDeleted(true));
+        chatMessageDao.partialUpdateByIds(chatMessagePOS);
+    }
+
+    public PersistentChatMemoryStore clone() {
+        return new PersistentChatMemoryStore(chatThreadDao, chatMessageDao);
     }
 }
diff --git 
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/enums/MessageSender.java
 
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/enums/MessageType.java
similarity index 83%
rename from 
bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/enums/MessageSender.java
rename to 
bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/enums/MessageType.java
index 1c93085..9f67b66 100644
--- 
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/enums/MessageSender.java
+++ 
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/enums/MessageType.java
@@ -26,14 +26,14 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Getter
-public enum MessageSender {
+public enum MessageType {
     USER("user"),
     AI("ai"),
     SYSTEM("system");
 
     private final String value;
 
-    MessageSender(String value) {
+    MessageType(String value) {
         this.value = value;
     }
 
@@ -41,13 +41,13 @@ public enum MessageSender {
         return Arrays.stream(values()).map(item -> 
item.value).collect(Collectors.toList());
     }
 
-    public static MessageSender getMessageSender(String value) {
+    public static MessageType getMessageSender(String value) {
         if (Objects.isNull(value) || value.isEmpty()) {
             return null;
         }
-        for (MessageSender messageSender : MessageSender.values()) {
-            if (messageSender.value.equals(value)) {
-                return messageSender;
+        for (MessageType messageType : MessageType.values()) {
+            if (messageType.value.equals(value)) {
+                return messageType;
             }
         }
 
diff --git 
a/bigtop-manager-ai/bigtop-manager-ai-dashscope/src/main/java/org/apache/bigtop/manager/ai/dashscope/DashScopeAssistant.java
 
b/bigtop-manager-ai/bigtop-manager-ai-dashscope/src/main/java/org/apache/bigtop/manager/ai/dashscope/DashScopeAssistant.java
index 441fd38..f178f8f 100644
--- 
a/bigtop-manager-ai/bigtop-manager-ai-dashscope/src/main/java/org/apache/bigtop/manager/ai/dashscope/DashScopeAssistant.java
+++ 
b/bigtop-manager-ai/bigtop-manager-ai-dashscope/src/main/java/org/apache/bigtop/manager/ai/dashscope/DashScopeAssistant.java
@@ -19,7 +19,7 @@
 package org.apache.bigtop.manager.ai.dashscope;
 
 import org.apache.bigtop.manager.ai.core.AbstractAIAssistant;
-import org.apache.bigtop.manager.ai.core.enums.MessageSender;
+import org.apache.bigtop.manager.ai.core.enums.MessageType;
 import org.apache.bigtop.manager.ai.core.enums.PlatformType;
 import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
 
@@ -88,13 +88,13 @@ public class DashScopeAssistant extends AbstractAIAssistant 
{
         return streamMessage.toString();
     }
 
-    private void saveMessage(String message, MessageSender sender) {
+    private void addMessage(String message, MessageType sender) {
         ChatMessage chatMessage;
-        if (sender.equals(MessageSender.AI)) {
+        if (sender.equals(MessageType.AI)) {
             chatMessage = new AiMessage(message);
-        } else if (sender.equals(MessageSender.USER)) {
+        } else if (sender.equals(MessageType.USER)) {
             chatMessage = new UserMessage(message);
-        } else if (sender.equals(MessageSender.SYSTEM)) {
+        } else if (sender.equals(MessageType.SYSTEM)) {
             chatMessage = new SystemMessage(message);
         } else {
             return;
@@ -131,7 +131,7 @@ public class DashScopeAssistant extends AbstractAIAssistant 
{
         } catch (NoApiKeyException | InputRequiredException | 
InvalidateParameter e) {
             throw new RuntimeException(e);
         }
-        saveMessage(systemPrompt, MessageSender.SYSTEM);
+        addMessage(systemPrompt, MessageType.SYSTEM);
     }
 
     public static Builder builder() {
@@ -140,7 +140,7 @@ public class DashScopeAssistant extends AbstractAIAssistant 
{
 
     @Override
     public Flux<String> streamAsk(String userMessage) {
-        saveMessage(userMessage, MessageSender.USER);
+        addMessage(userMessage, MessageType.USER);
         TextMessageParam textMessageParam = TextMessageParam.builder()
                 .apiKey(dashScopeThreadParam.getApiKey())
                 .role(Role.USER.getValue())
@@ -174,13 +174,13 @@ public class DashScopeAssistant extends 
AbstractAIAssistant {
                     return message;
                 })
                 .doOnComplete(() -> {
-                    saveMessage(finalMessage.toString(), MessageSender.AI);
+                    addMessage(finalMessage.toString(), MessageType.AI);
                 });
     }
 
     @Override
     public String ask(String userMessage) {
-        saveMessage(userMessage, MessageSender.USER);
+        addMessage(userMessage, MessageType.USER);
         TextMessageParam textMessageParam = TextMessageParam.builder()
                 .apiKey(dashScopeThreadParam.getApiKey())
                 .role(Role.USER.getValue())
@@ -244,7 +244,7 @@ public class DashScopeAssistant extends AbstractAIAssistant 
{
             ContentText contentText = (ContentText) content;
             finalMessage.append(contentText.getText().getValue());
         }
-        saveMessage(finalMessage.toString(), MessageSender.AI);
+        addMessage(finalMessage.toString(), MessageType.AI);
         return finalMessage.toString();
     }
 
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
index 75cf6f6..e84414b 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatMessagePO.java
@@ -45,4 +45,7 @@ public class ChatMessagePO extends BasePO implements 
Serializable {
 
     @Column(name = "thread_id", nullable = false)
     private Long threadId;
+
+    @Column(name = "is_deleted")
+    private Boolean isDeleted;
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
index cddbb22..08a9e4b 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
@@ -46,4 +46,7 @@ public class ChatThreadPO extends BasePO implements 
Serializable {
 
     @Column(name = "platform_id", nullable = false)
     private Long platformId;
+
+    @Column(name = "is_deleted")
+    private Boolean isDeleted;
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
index 214f3a9..ecd943b 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
@@ -41,4 +41,7 @@ public class PlatformAuthorizedPO extends BasePO implements 
Serializable {
 
     @Column(name = "platform_id", nullable = false)
     private Long platformId;
+
+    @Column(name = "is_deleted")
+    private Boolean isDeleted;
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatMessageDao.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatMessageDao.java
index 59721af..a81e9c6 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatMessageDao.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatMessageDao.java
@@ -26,6 +26,4 @@ import java.util.List;
 
 public interface ChatMessageDao extends BaseDao<ChatMessagePO> {
     List<ChatMessagePO> findAllByThreadId(@Param("threadId") Long threadId);
-
-    void deleteByThreadId(@Param("threadId") Long threadId);
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
index 895cba8..6c1e70b 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
@@ -27,12 +27,12 @@ import java.util.List;
 public interface ChatThreadDao extends BaseDao<ChatThreadPO> {
     List<ChatThreadPO> findAllByUserId(@Param("userId") Long userId);
 
-    ChatThreadPO findById(Long id);
-
     ChatThreadPO findByThreadId(@Param("id") Long id);
 
     List<ChatThreadPO> findAllByPlatformAuthorizedIdAndUserId(
             @Param("platformId") Long platformAuthorizedId, @Param("userId") 
Long userId);
 
     void saveWithThreadInfo(ChatThreadPO chatThreadPO);
+
+    List<ChatThreadPO> findAllByPlatformId(@Param("platformId") Long 
platformId);
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/PlatformAuthorizedDao.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/PlatformAuthorizedDao.java
index fd801d7..46da6ec 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/PlatformAuthorizedDao.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/PlatformAuthorizedDao.java
@@ -22,8 +22,12 @@ import org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO;
 
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface PlatformAuthorizedDao extends BaseDao<PlatformAuthorizedPO> {
     PlatformAuthorizedPO findByPlatformId(@Param("id") Long platformId);
 
     void saveWithCredentials(PlatformAuthorizedPO platformAuthorizedPO);
+
+    List<PlatformAuthorizedPO> findAllPlatform();
 }
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatMessageMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatMessageMapper.xml
index 108410b..1904344 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatMessageMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatMessageMapper.xml
@@ -26,11 +26,7 @@
         SELECT *
         FROM llm_chat_message
         WHERE thread_id = #{threadId}
+        AND is_deleted = 0
     </select>
 
-    <delete id="deleteByThreadId">
-        DELETE FROM llm_chat_message
-        WHERE thread_id = #{threadId}
-    </delete>
-
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml
index 5ecd9a2..adecfc1 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml
@@ -33,16 +33,17 @@
         SELECT *
         FROM llm_chat_thread
         WHERE user_id = #{userId}
+        AND is_deleted = 0
     </select>
 
     <select id="findAllByPlatformAuthorizedIdAndUserId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
         SELECT *
         FROM llm_chat_thread
-        WHERE platform_id = #{platformId} AND user_id = #{userId}
+        WHERE platform_id = #{platformId} AND user_id = #{userId} AND 
is_deleted = 0
     </select>
 
     <select id="findByThreadId" resultMap="ChatThreadResultMap">
-        SELECT * FROM llm_chat_thread WHERE id = #{id}
+        SELECT * FROM llm_chat_thread WHERE id = #{id} AND is_deleted = 0
     </select>
 
     <insert id="saveWithThreadInfo" 
parameterType="org.apache.bigtop.manager.dao.po.ChatThreadPO" 
useGeneratedKeys="true" keyProperty="id">
@@ -55,4 +56,10 @@
             thread_info = VALUES(thread_info)
     </insert>
 
+    <select id="findAllByPlatformId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
+        SELECT *
+        FROM llm_chat_thread
+        WHERE platform_id = #{platformId} AND is_deleted = 0
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/PlatformAuthorizedMapper.xml
 
b/bigtop-manager-dao/src/main/resources/mapper/mysql/PlatformAuthorizedMapper.xml
index f065a4c..e9fa2bf 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/PlatformAuthorizedMapper.xml
+++ 
b/bigtop-manager-dao/src/main/resources/mapper/mysql/PlatformAuthorizedMapper.xml
@@ -31,15 +31,19 @@
     </resultMap>
 
     <select id="findByPlatformId" resultMap="PlatformAuthorizedResultMap">
-        SELECT * FROM llm_platform_authorized WHERE id = #{id}
+        SELECT * FROM llm_platform_authorized WHERE id = #{id} AND is_deleted 
= 0
+    </select>
+
+    <select id="findAllPlatform" resultMap="PlatformAuthorizedResultMap">
+        SELECT * FROM llm_platform_authorized WHERE is_deleted = 0
     </select>
 
     <insert id="saveWithCredentials" 
parameterType="org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO" 
useGeneratedKeys="true" keyProperty="id">
         INSERT INTO llm_platform_authorized (platform_id, credentials)
         VALUES (#{platformId}, #{credentials, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler})
-            ON DUPLICATE KEY UPDATE
-                                 platform_id = VALUES(platform_id),
-                                 credentials = VALUES(credentials)
+        ON DUPLICATE KEY UPDATE
+        platform_id = VALUES(platform_id),
+        credentials = VALUES(credentials)
     </insert>
 
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatMessageMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatMessageMapper.xml
index 108410b..660399e 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatMessageMapper.xml
+++ 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatMessageMapper.xml
@@ -26,11 +26,7 @@
         SELECT *
         FROM llm_chat_message
         WHERE thread_id = #{threadId}
+        AND is_deleted = false
     </select>
 
-    <delete id="deleteByThreadId">
-        DELETE FROM llm_chat_message
-        WHERE thread_id = #{threadId}
-    </delete>
-
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml
index 5ecd9a2..a742bed 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml
+++ 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml
@@ -33,26 +33,28 @@
         SELECT *
         FROM llm_chat_thread
         WHERE user_id = #{userId}
+        AND is_deleted = false
     </select>
 
     <select id="findAllByPlatformAuthorizedIdAndUserId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
         SELECT *
         FROM llm_chat_thread
-        WHERE platform_id = #{platformId} AND user_id = #{userId}
+        WHERE platform_id = #{platformId} AND user_id = #{userId} AND 
is_deleted = false
     </select>
 
     <select id="findByThreadId" resultMap="ChatThreadResultMap">
-        SELECT * FROM llm_chat_thread WHERE id = #{id}
+        SELECT * FROM llm_chat_thread WHERE id = #{id} AND is_deleted = false
     </select>
 
     <insert id="saveWithThreadInfo" 
parameterType="org.apache.bigtop.manager.dao.po.ChatThreadPO" 
useGeneratedKeys="true" keyProperty="id">
         INSERT INTO llm_chat_thread (platform_id, user_id, model, thread_info)
-        VALUES (#{platformId}, #{userId}, #{model}, #{threadInfo, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler})
-            ON DUPLICATE KEY UPDATE
-            platform_id = VALUES(platform_id),
-            user_id = VALUES(user_id),
-            model = VALUES(model),
-            thread_info = VALUES(thread_info)
+        VALUES (#{platformId}, #{userId}, #{model}, #{threadInfo, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler}::json)
     </insert>
 
+    <select id="findAllByPlatformId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
+        SELECT *
+        FROM llm_chat_thread
+        WHERE platform_id = #{platformId} AND is_deleted = false
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/PlatformAuthorizedMapper.xml
 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/PlatformAuthorizedMapper.xml
index f065a4c..518d295 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/PlatformAuthorizedMapper.xml
+++ 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/PlatformAuthorizedMapper.xml
@@ -31,15 +31,16 @@
     </resultMap>
 
     <select id="findByPlatformId" resultMap="PlatformAuthorizedResultMap">
-        SELECT * FROM llm_platform_authorized WHERE id = #{id}
+        SELECT * FROM llm_platform_authorized WHERE id = #{id} AND is_deleted 
= false
+    </select>
+
+    <select id="findAllPlatform" resultMap="PlatformAuthorizedResultMap">
+        SELECT * FROM llm_platform_authorized WHERE is_deleted = false
     </select>
 
     <insert id="saveWithCredentials" 
parameterType="org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO" 
useGeneratedKeys="true" keyProperty="id">
         INSERT INTO llm_platform_authorized (platform_id, credentials)
-        VALUES (#{platformId}, #{credentials, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler})
-            ON DUPLICATE KEY UPDATE
-                                 platform_id = VALUES(platform_id),
-                                 credentials = VALUES(credentials)
+        VALUES (#{platformId}, #{credentials, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler}::json)
     </insert>
 
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
index 7771193..c09680a 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
@@ -20,6 +20,7 @@ package org.apache.bigtop.manager.server.controller;
 
 import org.apache.bigtop.manager.server.model.converter.PlatformConverter;
 import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
+import org.apache.bigtop.manager.server.model.req.ChatbotMessageReq;
 import org.apache.bigtop.manager.server.model.req.PlatformReq;
 import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
 import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
@@ -66,7 +67,7 @@ public class ChatbotController {
         return ResponseEntity.success(chatbotService.authorizedPlatforms());
     }
 
-    @Operation(summary = "platforms", description = "Get authorized platforms")
+    @Operation(summary = "platforms", description = "Get platform auth 
credentials")
     @GetMapping("/platforms/{platformId}/auth/credential")
     public ResponseEntity<List<PlatformAuthCredentialVO>> 
platformsAuthCredential(@PathVariable Long platformId) {
         return 
ResponseEntity.success(chatbotService.platformsAuthCredential(platformId));
@@ -106,8 +107,9 @@ public class ChatbotController {
 
     @Operation(summary = "talk", description = "Talk with Chatbot")
     @PostMapping("platforms/{platformId}/threads/{threadId}/talk")
-    public SseEmitter talk(@PathVariable Long platformId, @PathVariable Long 
threadId, @RequestParam String message) {
-        return chatbotService.talk(platformId, threadId, message);
+    public SseEmitter talk(
+            @PathVariable Long platformId, @PathVariable Long threadId, 
@RequestBody ChatbotMessageReq messageReq) {
+        return chatbotService.talk(platformId, threadId, 
messageReq.getMessage());
     }
 
     @Operation(summary = "history", description = "Get chat records")
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatMessageConverter.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatMessageConverter.java
index b2c1723..714f2d1 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatMessageConverter.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatMessageConverter.java
@@ -18,7 +18,7 @@
  */
 package org.apache.bigtop.manager.server.model.converter;
 
-import org.apache.bigtop.manager.ai.core.enums.MessageSender;
+import org.apache.bigtop.manager.ai.core.enums.MessageType;
 import org.apache.bigtop.manager.dao.po.ChatMessagePO;
 import org.apache.bigtop.manager.server.config.MapStructSharedConfig;
 import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
@@ -32,12 +32,12 @@ public interface ChatMessageConverter {
 
     ChatMessageVO fromPO2VO(ChatMessagePO chatMessagePO);
 
-    default MessageSender mapStringToMessageSender(String sender) {
+    default MessageType mapStringToMessageSender(String sender) {
         if (sender == null) {
             return null;
         }
         try {
-            return MessageSender.valueOf(sender.toUpperCase());
+            return MessageType.valueOf(sender.toUpperCase());
         } catch (IllegalArgumentException e) {
             return null;
         }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatMessageDao.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/ChatbotMessageReq.java
similarity index 68%
copy from 
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatMessageDao.java
copy to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/ChatbotMessageReq.java
index 59721af..3bcbe0c 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatMessageDao.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/ChatbotMessageReq.java
@@ -16,16 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.bigtop.manager.dao.repository;
+package org.apache.bigtop.manager.server.model.req;
 
-import org.apache.bigtop.manager.dao.po.ChatMessagePO;
+import lombok.Data;
 
-import org.apache.ibatis.annotations.Param;
+import jakarta.validation.constraints.NotEmpty;
 
-import java.util.List;
-
-public interface ChatMessageDao extends BaseDao<ChatMessagePO> {
-    List<ChatMessagePO> findAllByThreadId(@Param("threadId") Long threadId);
-
-    void deleteByThreadId(@Param("threadId") Long threadId);
+@Data
+public class ChatbotMessageReq {
+    @NotEmpty
+    private String message;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatMessageVO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatMessageVO.java
index da226da..7ad366a 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatMessageVO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatMessageVO.java
@@ -18,19 +18,19 @@
  */
 package org.apache.bigtop.manager.server.model.vo;
 
-import org.apache.bigtop.manager.ai.core.enums.MessageSender;
+import org.apache.bigtop.manager.ai.core.enums.MessageType;
 
 import lombok.Data;
 
 @Data
 public class ChatMessageVO {
-    private MessageSender sender;
+    private MessageType sender;
 
     private String message;
 
     private String createTime;
 
-    public ChatMessageVO(MessageSender sender, String messageText, String 
createTime) {
+    public ChatMessageVO(MessageType sender, String messageText, String 
createTime) {
         this.sender = sender;
         this.message = messageText;
         this.createTime = createTime;
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
index c338340..7148ee3 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
@@ -21,7 +21,7 @@ package org.apache.bigtop.manager.server.service.impl;
 import org.apache.bigtop.manager.ai.assistant.GeneralAssistantFactory;
 import org.apache.bigtop.manager.ai.assistant.provider.AIAssistantConfig;
 import org.apache.bigtop.manager.ai.assistant.store.PersistentChatMemoryStore;
-import org.apache.bigtop.manager.ai.core.enums.MessageSender;
+import org.apache.bigtop.manager.ai.core.enums.MessageType;
 import org.apache.bigtop.manager.ai.core.enums.PlatformType;
 import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
 import org.apache.bigtop.manager.ai.core.factory.AIAssistantFactory;
@@ -137,7 +137,7 @@ public class ChatbotServiceImpl implements ChatbotService {
     @Override
     public List<PlatformAuthorizedVO> authorizedPlatforms() {
         List<PlatformAuthorizedVO> authorizedPlatforms = new ArrayList<>();
-        List<PlatformAuthorizedPO> authorizedPlatformPOs = 
platformAuthorizedDao.findAll();
+        List<PlatformAuthorizedPO> authorizedPlatformPOs = 
platformAuthorizedDao.findAllPlatform();
         for (PlatformAuthorizedPO authorizedPlatformPO : 
authorizedPlatformPOs) {
             PlatformPO platformPO = 
platformDao.findById(authorizedPlatformPO.getPlatformId());
             
authorizedPlatforms.add(PlatformAuthorizedConverter.INSTANCE.fromPO2VO(authorizedPlatformPO,
 platformPO));
@@ -209,10 +209,19 @@ public class ChatbotServiceImpl implements ChatbotService 
{
 
     @Override
     public boolean deleteAuthorizedPlatform(Long platformId) {
-        List<PlatformAuthorizedPO> authorizedPlatformPOs = 
platformAuthorizedDao.findAll();
+        List<PlatformAuthorizedPO> authorizedPlatformPOs = 
platformAuthorizedDao.findAllPlatform();
         for (PlatformAuthorizedPO authorizedPlatformPO : 
authorizedPlatformPOs) {
             if (authorizedPlatformPO.getId().equals(platformId)) {
-                platformAuthorizedDao.deleteById(authorizedPlatformPO.getId());
+                authorizedPlatformPO.setIsDeleted(true);
+                platformAuthorizedDao.partialUpdateById(authorizedPlatformPO);
+                List<ChatThreadPO> chatThreadPOS = 
chatThreadDao.findAllByPlatformId(authorizedPlatformPO.getId());
+                chatThreadPOS.forEach(chatThread -> 
chatThread.setIsDeleted(true));
+                chatThreadDao.partialUpdateByIds(chatThreadPOS);
+                for (ChatThreadPO chatThreadPO : chatThreadPOS) {
+                    List<ChatMessagePO> chatMessagePOS = 
chatMessageDao.findAllByThreadId(chatThreadPO.getId());
+                    chatMessagePOS.forEach(chatMessage -> 
chatMessage.setIsDeleted(true));
+                    chatMessageDao.partialUpdateByIds(chatMessagePOS);
+                }
                 return true;
             }
         }
@@ -253,7 +262,11 @@ public class ChatbotServiceImpl implements ChatbotService {
         for (ChatThreadPO chatThreadPO : chatThreadPOS) {
             if (chatThreadPO.getId().equals(threadId)
                     && chatThreadPO.getPlatformId().equals(platformId)) {
-                chatThreadDao.deleteById(threadId);
+                chatThreadPO.setIsDeleted(true);
+                chatThreadDao.partialUpdateById(chatThreadPO);
+                List<ChatMessagePO> chatMessagePOS = 
chatMessageDao.findAllByThreadId(threadId);
+                chatMessagePOS.forEach(chatMessage -> 
chatMessage.setIsDeleted(true));
+                chatMessageDao.partialUpdateByIds(chatMessagePOS);
                 return true;
             }
         }
@@ -312,7 +325,7 @@ public class ChatbotServiceImpl implements ChatbotService {
     @Override
     public List<ChatMessageVO> history(Long platformId, Long threadId) {
         List<ChatMessageVO> chatMessages = new ArrayList<>();
-        ChatThreadPO chatThreadPO = chatThreadDao.findById(threadId);
+        ChatThreadPO chatThreadPO = chatThreadDao.findByThreadId(threadId);
         if (chatThreadPO == null) {
             throw new ApiException(ApiExceptionEnum.CHAT_THREAD_NOT_FOUND);
         }
@@ -323,11 +336,11 @@ public class ChatbotServiceImpl implements ChatbotService 
{
         List<ChatMessagePO> chatMessagePOs = 
chatMessageDao.findAllByThreadId(threadId);
         for (ChatMessagePO chatMessagePO : chatMessagePOs) {
             ChatMessageVO chatMessageVO = 
ChatMessageConverter.INSTANCE.fromPO2VO(chatMessagePO);
-            MessageSender sender = chatMessageVO.getSender();
+            MessageType sender = chatMessageVO.getSender();
             if (sender == null) {
                 continue;
             }
-            if (sender.equals(MessageSender.USER) || 
sender.equals(MessageSender.AI)) {
+            if (sender.equals(MessageType.USER) || 
sender.equals(MessageType.AI)) {
                 chatMessages.add(chatMessageVO);
             }
         }
diff --git a/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql 
b/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
index f702df7..dc67ea7 100644
--- a/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
+++ b/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
@@ -328,6 +328,7 @@ CREATE TABLE `llm_platform_authorized`
     `id`          BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
     `platform_id` BIGINT(20) UNSIGNED NOT NULL,
     `credentials` JSON                NOT NULL,
+    `is_deleted`  TINYINT(1)          DEFAULT 0 NULL,
     `create_time` DATETIME            DEFAULT CURRENT_TIMESTAMP,
     `update_time` DATETIME            DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
     `create_by`   BIGINT              DEFAULT NULL,
@@ -342,6 +343,7 @@ CREATE TABLE `llm_chat_thread`
     `platform_id` BIGINT(20) UNSIGNED NOT NULL,
     `user_id`     BIGINT(20) UNSIGNED NOT NULL,
     `model`       VARCHAR(255)        NOT NULL,
+    `is_deleted`  TINYINT(1)          DEFAULT 0 NULL,
     `thread_info` JSON                DEFAULT NULL,
     `create_time` DATETIME            DEFAULT CURRENT_TIMESTAMP,
     `update_time` DATETIME            DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
@@ -359,6 +361,7 @@ CREATE TABLE `llm_chat_message`
     `user_id`     BIGINT(20) UNSIGNED NOT NULL,
     `message`     TEXT                NOT NULL,
     `sender`      VARCHAR(50)         NOT NULL,
+    `is_deleted`  TINYINT(1)          DEFAULT 0 NULL,
     `create_time` DATETIME            DEFAULT CURRENT_TIMESTAMP,
     `update_time` DATETIME            DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP,
     `create_by`   BIGINT              DEFAULT NULL,
@@ -376,5 +379,5 @@ VALUES (1, now(), now(), 'Administrator', 
'21232f297a57a5a743894a0e4a801fc3', tr
 INSERT INTO bigtop_manager.llm_platform (id, credential, name, support_models)
 VALUES
 (1, '{"apiKey": "API Key"}', 'OpenAI', 
'gpt-3.5-turbo,gpt-4,gpt-4o,gpt-3.5-turbo-16k,gpt-4-turbo-preview,gpt-4-32k,gpt-4o-mini'),
-(2, '{"apiKey": "API Key"}', 'DashScope', 'qwen-max,qwen-plus,qwen-turbo'),
+(2, '{"apiKey": "API Key"}', 'DashScope', 
'qwen-1.8b-chat,qwen-max,qwen-plus,qwen-turbo'),
 (3, '{"apiKey": "API Key", "secretKey": "Secret Key"}', 
'QianFan','Yi-34B-Chat,ERNIE-4.0-8K,ERNIE-3.5-128K,ERNIE-Speed-8K,Llama-2-7B-Chat,Fuyu-8B');
diff --git 
a/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql 
b/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
index 3a94b40..8ae2493 100644
--- a/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
+++ b/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
@@ -338,6 +338,7 @@ CREATE TABLE llm_platform_authorized
     id          BIGINT CHECK (id > 0)          NOT NULL GENERATED ALWAYS AS 
IDENTITY,
     platform_id BIGINT CHECK (platform_id > 0) NOT NULL,
     credentials JSON                           NOT NULL,
+    is_deleted  BOOLEAN      DEFAULT FALSE,
     create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
     update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP /* ON UPDATE 
CURRENT_TIMESTAMP */,
     create_by   BIGINT       DEFAULT NULL,
@@ -354,6 +355,7 @@ CREATE TABLE llm_chat_thread
     user_id     BIGINT CHECK (user_id > 0)     NOT NULL,
     model       VARCHAR(255)                   NOT NULL,
     thread_info JSON         DEFAULT NULL,
+    is_deleted  BOOLEAN      DEFAULT FALSE,
     create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
     update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP /* ON UPDATE 
CURRENT_TIMESTAMP */,
     create_by   BIGINT       DEFAULT NULL,
@@ -371,6 +373,7 @@ CREATE TABLE llm_chat_message
     user_id     BIGINT CHECK (user_id > 0)   NOT NULL,
     message     TEXT                         NOT NULL,
     sender      VARCHAR(50)                  NOT NULL,
+    is_deleted  BOOLEAN      DEFAULT FALSE,
     create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
     update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP /* ON UPDATE 
CURRENT_TIMESTAMP */,
     create_by   BIGINT       DEFAULT NULL,
@@ -387,5 +390,5 @@ VALUES (now(), now(), 'Administrator', 
'21232f297a57a5a743894a0e4a801fc3', true,
 INSERT INTO llm_platform (credential, NAME, support_models)
 VALUES
 ('{"apiKey": "API 
Key"}','OpenAI','gpt-3.5-turbo,gpt-4,gpt-4o,gpt-3.5-turbo-16k,gpt-4-turbo-preview,gpt-4-32k,gpt-4o-mini'),
-('{"apiKey": "API Key"}','DashScope','qwen-max,qwen-plus,qwen-turbo'),
+('{"apiKey": "API 
Key"}','DashScope','qwen-1.8b-chat,qwen-max,qwen-plus,qwen-turbo'),
 ('{"apiKey": "API Key", "secretKey": "Secret 
Key"}','QianFan','Yi-34B-Chat,ERNIE-4.0-8K,ERNIE-3.5-128K,ERNIE-Speed-8K,Llama-2-7B-Chat,Fuyu-8B');
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
index d5f12ba..0414891 100644
--- 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
@@ -19,6 +19,7 @@
 package org.apache.bigtop.manager.server.controller;
 
 import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
+import org.apache.bigtop.manager.server.model.req.ChatbotMessageReq;
 import org.apache.bigtop.manager.server.model.req.PlatformReq;
 import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
 import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
@@ -174,12 +175,14 @@ class ChatbotControllerTest {
     void talk() {
         Long platformId = 1L;
         Long threadId = 1L;
-        String message = "Hello";
+        ChatbotMessageReq messageReq = new ChatbotMessageReq();
+        messageReq.setMessage("Hello");
 
         SseEmitter emitter = new SseEmitter();
-        when(chatbotService.talk(eq(platformId), eq(threadId), 
eq(message))).thenReturn(emitter);
+        when(chatbotService.talk(eq(platformId), eq(threadId), 
eq(messageReq.getMessage())))
+                .thenReturn(emitter);
 
-        SseEmitter result = chatbotController.talk(platformId, threadId, 
message);
+        SseEmitter result = chatbotController.talk(platformId, threadId, 
messageReq);
 
         assertEquals(emitter, result);
     }


Reply via email to