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 a87d2e8 BIGTOP-4220: Remove Message Repository and replace it with
ChatMemory (#64)
a87d2e8 is described below
commit a87d2e8275cf9db444b06f2abdc426fac9197c01
Author: haopeng <[email protected]>
AuthorDate: Thu Sep 12 15:41:26 2024 +0800
BIGTOP-4220: Remove Message Repository and replace it with ChatMemory (#64)
---
.../ai/assistant/GeneralAssistantFactory.java | 48 ++++++-------
.../provider/PersistentStoreProvider.java | 61 -----------------
.../store/PersistentMessageRepository.java | 80 ----------------------
.../manager/ai/core/AbstractAIAssistant.java | 33 +++++++++
.../manager/ai/core/factory/AIAssistant.java | 12 ++++
.../ai/core/provider/MessageStoreProvider.java | 29 --------
.../ai/core/repository/MessageRepository.java | 27 --------
.../manager/ai/dashscope/DashScopeAssistant.java | 67 +++++++++---------
.../bigtop/manager/ai/openai/OpenAIAssistant.java | 28 +-------
.../server/service/impl/AIChatServiceImpl.java | 4 +-
10 files changed, 104 insertions(+), 285 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 7ff16bc..beffd28 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,44 +19,41 @@
package org.apache.bigtop.manager.ai.assistant;
import org.apache.bigtop.manager.ai.assistant.provider.LocSystemPromptProvider;
-import org.apache.bigtop.manager.ai.assistant.provider.PersistentStoreProvider;
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;
-import org.apache.bigtop.manager.ai.core.exception.PlatformNotFoundException;
import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
import org.apache.bigtop.manager.ai.core.factory.ToolBox;
import org.apache.bigtop.manager.ai.core.provider.AIAssistantConfigProvider;
-import org.apache.bigtop.manager.ai.core.provider.MessageStoreProvider;
import org.apache.bigtop.manager.ai.core.provider.SystemPromptProvider;
import org.apache.bigtop.manager.ai.dashscope.DashScopeAssistant;
import org.apache.bigtop.manager.ai.openai.OpenAIAssistant;
import org.apache.commons.lang3.NotImplementedException;
-import java.util.Objects;
+import dev.langchain4j.store.memory.chat.ChatMemoryStore;
+import dev.langchain4j.store.memory.chat.InMemoryChatMemoryStore;
public class GeneralAssistantFactory extends AbstractAIAssistantFactory {
private final SystemPromptProvider systemPromptProvider;
- private final MessageStoreProvider messageStoreProvider;
+ private final ChatMemoryStore chatMemoryStore;
public GeneralAssistantFactory() {
- this(new LocSystemPromptProvider(), new PersistentStoreProvider());
+ this(new LocSystemPromptProvider(), new InMemoryChatMemoryStore());
}
public GeneralAssistantFactory(SystemPromptProvider systemPromptProvider) {
- this(systemPromptProvider, new PersistentStoreProvider());
+ this(systemPromptProvider, new InMemoryChatMemoryStore());
}
- public GeneralAssistantFactory(MessageStoreProvider messageStoreProvider) {
- this(new LocSystemPromptProvider(), messageStoreProvider);
+ public GeneralAssistantFactory(ChatMemoryStore chatMemoryStore) {
+ this(new LocSystemPromptProvider(), chatMemoryStore);
}
- public GeneralAssistantFactory(
- SystemPromptProvider systemPromptProvider, MessageStoreProvider
messageStoreProvider) {
+ public GeneralAssistantFactory(SystemPromptProvider systemPromptProvider,
ChatMemoryStore chatMemoryStore) {
this.systemPromptProvider = systemPromptProvider;
- this.messageStoreProvider = messageStoreProvider;
+ this.chatMemoryStore = chatMemoryStore;
}
@Override
@@ -65,22 +62,17 @@ public class GeneralAssistantFactory extends
AbstractAIAssistantFactory {
AIAssistantConfigProvider assistantConfig,
Object id,
SystemPrompt systemPrompts) {
- AIAssistant aiAssistant;
- if (Objects.requireNonNull(platformType) == PlatformType.OPENAI) {
- aiAssistant = OpenAIAssistant.builder()
- .id(id)
- .memoryStore(messageStoreProvider.getChatMemoryStore())
- .withConfigProvider(assistantConfig)
- .build();
- } else if (Objects.requireNonNull(platformType) ==
PlatformType.DASH_SCOPE) {
- aiAssistant = DashScopeAssistant.builder()
- .id(id)
- .withConfigProvider(assistantConfig)
-
.messageRepository(messageStoreProvider.getMessageRepository())
- .build();
- } else {
- throw new PlatformNotFoundException(platformType.getValue());
- }
+ AIAssistant.Builder builder =
+ switch (platformType) {
+ case OPENAI -> OpenAIAssistant.builder();
+ case DASH_SCOPE -> DashScopeAssistant.builder();
+ };
+
+ AIAssistant aiAssistant = builder.id(id)
+ .memoryStore((id == null) ? new InMemoryChatMemoryStore() :
chatMemoryStore)
+ .withConfigProvider(assistantConfig)
+ .build();
+
String systemPrompt =
systemPromptProvider.getSystemMessage(systemPrompts);
aiAssistant.setSystemPrompt(systemPrompt);
String locale = assistantConfig.getLanguage();
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/PersistentStoreProvider.java
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/PersistentStoreProvider.java
deleted file mode 100644
index 3e24ced..0000000
---
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/PersistentStoreProvider.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.bigtop.manager.ai.assistant.provider;
-
-import org.apache.bigtop.manager.ai.assistant.store.PersistentChatMemoryStore;
-import
org.apache.bigtop.manager.ai.assistant.store.PersistentMessageRepository;
-import org.apache.bigtop.manager.ai.core.provider.MessageStoreProvider;
-import org.apache.bigtop.manager.ai.core.repository.MessageRepository;
-import org.apache.bigtop.manager.dao.repository.ChatMessageDao;
-import org.apache.bigtop.manager.dao.repository.ChatThreadDao;
-
-import dev.langchain4j.store.memory.chat.ChatMemoryStore;
-import dev.langchain4j.store.memory.chat.InMemoryChatMemoryStore;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class PersistentStoreProvider implements MessageStoreProvider {
- private final ChatThreadDao chatThreadDao;
- private final ChatMessageDao chatMessageDao;
-
- public PersistentStoreProvider(ChatThreadDao chatThreadDao, ChatMessageDao
chatMessageDao) {
- this.chatThreadDao = chatThreadDao;
- this.chatMessageDao = chatMessageDao;
- }
-
- public PersistentStoreProvider() {
- chatMessageDao = null;
- chatThreadDao = null;
- }
-
- @Override
- public MessageRepository getMessageRepository() {
- return new PersistentMessageRepository(chatThreadDao, chatMessageDao);
- }
-
- @Override
- public ChatMemoryStore getChatMemoryStore() {
- if (chatThreadDao == null) {
- return new InMemoryChatMemoryStore();
- }
- return new PersistentChatMemoryStore(chatThreadDao, chatMessageDao);
- }
-}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/store/PersistentMessageRepository.java
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/store/PersistentMessageRepository.java
deleted file mode 100644
index 7b9c371..0000000
---
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/store/PersistentMessageRepository.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.bigtop.manager.ai.assistant.store;
-
-import org.apache.bigtop.manager.ai.core.enums.MessageSender;
-import org.apache.bigtop.manager.ai.core.repository.MessageRepository;
-import org.apache.bigtop.manager.dao.po.ChatMessagePO;
-import org.apache.bigtop.manager.dao.po.ChatThreadPO;
-import org.apache.bigtop.manager.dao.repository.ChatMessageDao;
-import org.apache.bigtop.manager.dao.repository.ChatThreadDao;
-
-public class PersistentMessageRepository implements MessageRepository {
- private final ChatThreadDao chatThreadDao;
- private final ChatMessageDao chatMessageDao;
-
- private boolean noPersistent() {
- return chatThreadDao == null || chatMessageDao == null;
- }
-
- public PersistentMessageRepository(ChatThreadDao chatThreadDao,
ChatMessageDao chatMessageDao) {
- this.chatThreadDao = chatThreadDao;
- this.chatMessageDao = chatMessageDao;
- }
-
- private ChatMessagePO getChatMessagePO(String message, Long threadId,
MessageSender sender) {
- if (noPersistent()) {
- return null;
- }
- ChatThreadPO chatThreadPO = chatThreadDao.findById(threadId);
- ChatMessagePO chatMessagePO = new ChatMessagePO();
- chatMessagePO.setUserId(chatThreadPO.getUserId());
- chatMessagePO.setThreadId(threadId);
- chatMessagePO.setSender(sender.getValue());
- chatMessagePO.setMessage(message);
- return chatMessagePO;
- }
-
- @Override
- public void saveUserMessage(String message, Long threadId) {
- if (noPersistent()) {
- return;
- }
- ChatMessagePO chatMessagePO = getChatMessagePO(message, threadId,
MessageSender.USER);
- chatMessageDao.save(chatMessagePO);
- }
-
- @Override
- public void saveAiMessage(String message, Long threadId) {
- if (noPersistent()) {
- return;
- }
- ChatMessagePO chatMessagePO = getChatMessagePO(message, threadId,
MessageSender.AI);
- chatMessageDao.save(chatMessagePO);
- }
-
- @Override
- public void saveSystemMessage(String message, Long threadId) {
- if (noPersistent()) {
- return;
- }
- ChatMessagePO chatMessagePO = getChatMessagePO(message, threadId,
MessageSender.SYSTEM);
- chatMessageDao.save(chatMessagePO);
- }
-}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/AbstractAIAssistant.java
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/AbstractAIAssistant.java
index d7b155f..72e0c6c 100644
---
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/AbstractAIAssistant.java
+++
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/AbstractAIAssistant.java
@@ -19,13 +19,46 @@
package org.apache.bigtop.manager.ai.core;
import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
+import org.apache.bigtop.manager.ai.core.provider.AIAssistantConfigProvider;
+
+import dev.langchain4j.memory.ChatMemory;
+import dev.langchain4j.store.memory.chat.ChatMemoryStore;
public abstract class AbstractAIAssistant implements AIAssistant {
protected static final Integer MEMORY_LEN = 10;
+ protected final ChatMemory chatMemory;
+
+ protected AbstractAIAssistant(ChatMemory chatMemory) {
+ this.chatMemory = chatMemory;
+ }
@Override
public boolean test() {
return ask("1+1=") != null;
}
+
+ public abstract static class Builder implements AIAssistant.Builder {
+ protected Object id;
+
+ protected ChatMemoryStore chatMemoryStore;
+ protected AIAssistantConfigProvider configProvider;
+
+ public Builder() {}
+
+ public Builder withConfigProvider(AIAssistantConfigProvider
configProvider) {
+ this.configProvider = configProvider;
+ return this;
+ }
+
+ public Builder id(Object id) {
+ this.id = id;
+ return this;
+ }
+
+ public Builder memoryStore(ChatMemoryStore chatMemoryStore) {
+ this.chatMemoryStore = chatMemoryStore;
+ return this;
+ }
+ }
}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/factory/AIAssistant.java
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/factory/AIAssistant.java
index b79474c..81bc3af 100644
---
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/factory/AIAssistant.java
+++
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/factory/AIAssistant.java
@@ -19,7 +19,9 @@
package org.apache.bigtop.manager.ai.core.factory;
import org.apache.bigtop.manager.ai.core.enums.PlatformType;
+import org.apache.bigtop.manager.ai.core.provider.AIAssistantConfigProvider;
+import dev.langchain4j.store.memory.chat.ChatMemoryStore;
import reactor.core.publisher.Flux;
import java.util.HashMap;
@@ -73,4 +75,14 @@ public interface AIAssistant {
* @return
*/
boolean test();
+
+ interface Builder {
+ Builder id(Object id);
+
+ Builder memoryStore(ChatMemoryStore memoryStore);
+
+ Builder withConfigProvider(AIAssistantConfigProvider configProvider);
+
+ AIAssistant build();
+ }
}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/MessageStoreProvider.java
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/MessageStoreProvider.java
deleted file mode 100644
index 9e7fee1..0000000
---
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/MessageStoreProvider.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.bigtop.manager.ai.core.provider;
-
-import org.apache.bigtop.manager.ai.core.repository.MessageRepository;
-
-import dev.langchain4j.store.memory.chat.ChatMemoryStore;
-
-public interface MessageStoreProvider {
- MessageRepository getMessageRepository();
-
- ChatMemoryStore getChatMemoryStore();
-}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/repository/MessageRepository.java
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/repository/MessageRepository.java
deleted file mode 100644
index 1ad582f..0000000
---
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/repository/MessageRepository.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.bigtop.manager.ai.core.repository;
-
-public interface MessageRepository {
- default void saveUserMessage(String message, Long threadId) {}
-
- default void saveAiMessage(String message, Long threadId) {}
-
- default void saveSystemMessage(String message, Long threadId) {}
-}
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 538a674..0c813e2 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,10 +19,9 @@
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.PlatformType;
import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
-import org.apache.bigtop.manager.ai.core.provider.AIAssistantConfigProvider;
-import org.apache.bigtop.manager.ai.core.repository.MessageRepository;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
@@ -50,7 +49,13 @@ import
com.alibaba.dashscope.threads.runs.AssistantStreamMessage;
import com.alibaba.dashscope.threads.runs.Run;
import com.alibaba.dashscope.threads.runs.RunParam;
import com.alibaba.dashscope.threads.runs.Runs;
+import dev.langchain4j.data.message.AiMessage;
+import dev.langchain4j.data.message.ChatMessage;
+import dev.langchain4j.data.message.SystemMessage;
+import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.internal.ValidationUtils;
+import dev.langchain4j.memory.ChatMemory;
+import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import io.reactivex.Flowable;
import reactor.core.publisher.Flux;
@@ -64,11 +69,10 @@ public class DashScopeAssistant extends AbstractAIAssistant
{
private final Messages messages = new Messages();
private final Threads threads = new Threads();
private final Runs runs = new Runs();
- private final MessageRepository messageRepository;
private final DashScopeThreadParam dashScopeThreadParam;
- public DashScopeAssistant(MessageRepository messageRepository,
DashScopeThreadParam dashScopeThreadParam) {
- this.messageRepository = messageRepository;
+ public DashScopeAssistant(ChatMemory chatMemory, DashScopeThreadParam
dashScopeThreadParam) {
+ super(chatMemory);
this.dashScopeThreadParam = dashScopeThreadParam;
}
@@ -84,6 +88,20 @@ public class DashScopeAssistant extends AbstractAIAssistant {
return streamMessage.toString();
}
+ private void saveMessage(String message, MessageSender sender) {
+ ChatMessage chatMessage;
+ if (sender.equals(MessageSender.AI)) {
+ chatMessage = new AiMessage(message);
+ } else if (sender.equals(MessageSender.USER)) {
+ chatMessage = new UserMessage(message);
+ } else if (sender.equals(MessageSender.SYSTEM)) {
+ chatMessage = new SystemMessage(message);
+ } else {
+ return;
+ }
+ chatMemory.add(chatMessage);
+ }
+
@Override
public PlatformType getPlatform() {
return PlatformType.DASH_SCOPE;
@@ -113,7 +131,7 @@ public class DashScopeAssistant extends AbstractAIAssistant
{
} catch (NoApiKeyException | InputRequiredException |
InvalidateParameter e) {
throw new RuntimeException(e);
}
- messageRepository.saveSystemMessage(systemPrompt, (Long)
dashScopeThreadParam.getThreadId());
+ saveMessage(systemPrompt, MessageSender.SYSTEM);
}
public static Builder builder() {
@@ -127,7 +145,7 @@ public class DashScopeAssistant extends AbstractAIAssistant
{
@Override
public Flux<String> streamAsk(String userMessage) {
- messageRepository.saveUserMessage(userMessage, (Long)
dashScopeThreadParam.getThreadId());
+ saveMessage(userMessage, MessageSender.USER);
TextMessageParam textMessageParam = TextMessageParam.builder()
.apiKey(dashScopeThreadParam.getApiKey())
.role(Role.USER.getValue())
@@ -161,13 +179,13 @@ public class DashScopeAssistant extends
AbstractAIAssistant {
return message;
})
.doOnComplete(() -> {
- messageRepository.saveAiMessage(finalMessage.toString(),
(Long) dashScopeThreadParam.getThreadId());
+ saveMessage(finalMessage.toString(), MessageSender.AI);
});
}
@Override
public String ask(String userMessage) {
- messageRepository.saveUserMessage(userMessage, (Long)
dashScopeThreadParam.getThreadId());
+ saveMessage(userMessage, MessageSender.USER);
TextMessageParam textMessageParam = TextMessageParam.builder()
.apiKey(dashScopeThreadParam.getApiKey())
.role(Role.USER.getValue())
@@ -231,7 +249,7 @@ public class DashScopeAssistant extends AbstractAIAssistant
{
ContentText contentText = (ContentText) content;
finalMessage.append(contentText.getText().getValue());
}
- messageRepository.saveAiMessage(finalMessage.toString(), (Long)
dashScopeThreadParam.getThreadId());
+ saveMessage(finalMessage.toString(), MessageSender.AI);
return finalMessage.toString();
}
@@ -279,27 +297,7 @@ public class DashScopeAssistant extends
AbstractAIAssistant {
return threadInfo;
}
- public static class Builder {
- private Object id;
- private AIAssistantConfigProvider configProvider;
- private MessageRepository messageRepository;
-
- public Builder() {}
-
- public Builder withConfigProvider(AIAssistantConfigProvider
configProvider) {
- this.configProvider = configProvider;
- return this;
- }
-
- public Builder id(Object id) {
- this.id = id;
- return this;
- }
-
- public Builder messageRepository(MessageRepository messageRepository) {
- this.messageRepository = messageRepository;
- return this;
- }
+ public static class Builder extends AbstractAIAssistant.Builder {
public AIAssistant build() {
String model =
ValidationUtils.ensureNotNull(configProvider.getModel(), "model");
@@ -316,10 +314,15 @@ public class DashScopeAssistant extends
AbstractAIAssistant {
if (assistantId != null) {
param.setAssistantId(assistantId);
}
+ MessageWindowChatMemory.Builder builder =
MessageWindowChatMemory.builder()
+ .chatMemoryStore(chatMemoryStore)
+ .maxMessages(MEMORY_LEN);
if (id != null) {
+ builder.id(id);
param.setThreadId(id);
}
- return new DashScopeAssistant(messageRepository, param);
+ MessageWindowChatMemory chatMemory = builder.build();
+ return new DashScopeAssistant(chatMemory, param);
}
}
}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-openai/src/main/java/org/apache/bigtop/manager/ai/openai/OpenAIAssistant.java
b/bigtop-manager-ai/bigtop-manager-ai-openai/src/main/java/org/apache/bigtop/manager/ai/openai/OpenAIAssistant.java
index 59eba58..d4aed6d 100644
---
a/bigtop-manager-ai/bigtop-manager-ai-openai/src/main/java/org/apache/bigtop/manager/ai/openai/OpenAIAssistant.java
+++
b/bigtop-manager-ai/bigtop-manager-ai-openai/src/main/java/org/apache/bigtop/manager/ai/openai/OpenAIAssistant.java
@@ -22,7 +22,6 @@ import org.apache.bigtop.manager.ai.core.AbstractAIAssistant;
import org.apache.bigtop.manager.ai.core.enums.PlatformType;
import
org.apache.bigtop.manager.ai.core.exception.AssistantConfigNotSetException;
import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
-import org.apache.bigtop.manager.ai.core.provider.AIAssistantConfigProvider;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.SystemMessage;
@@ -36,7 +35,6 @@ import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.model.openai.OpenAiStreamingChatModel;
import dev.langchain4j.model.output.Response;
-import dev.langchain4j.store.memory.chat.ChatMemoryStore;
import reactor.core.publisher.Flux;
import reactor.core.publisher.FluxSink;
@@ -44,7 +42,6 @@ public class OpenAIAssistant extends AbstractAIAssistant {
private final ChatLanguageModel chatLanguageModel;
private final StreamingChatLanguageModel streamingChatLanguageModel;
- private final ChatMemory chatMemory;
private static final String BASE_URL = "https://api.openai.com/v1";
@@ -52,9 +49,9 @@ public class OpenAIAssistant extends AbstractAIAssistant {
ChatLanguageModel chatLanguageModel,
StreamingChatLanguageModel streamingChatLanguageModel,
ChatMemory chatMemory) {
+ super(chatMemory);
this.chatLanguageModel = chatLanguageModel;
this.streamingChatLanguageModel = streamingChatLanguageModel;
- this.chatMemory = chatMemory;
}
@Override
@@ -129,28 +126,7 @@ public class OpenAIAssistant extends AbstractAIAssistant {
return new Builder();
}
- public static class Builder {
- private Object id;
-
- private ChatMemoryStore chatMemoryStore;
- private AIAssistantConfigProvider configProvider;
-
- public Builder() {}
-
- public Builder withConfigProvider(AIAssistantConfigProvider
configProvider) {
- this.configProvider = configProvider;
- return this;
- }
-
- public Builder id(Object id) {
- this.id = id;
- return this;
- }
-
- public Builder memoryStore(ChatMemoryStore chatMemoryStore) {
- this.chatMemoryStore = chatMemoryStore;
- return this;
- }
+ public static class Builder extends AbstractAIAssistant.Builder {
public AIAssistant build() {
String model =
ValidationUtils.ensureNotNull(configProvider.getModel(), "model");
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/AIChatServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/AIChatServiceImpl.java
index 025b4d4..c4336e8 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/AIChatServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/AIChatServiceImpl.java
@@ -20,7 +20,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.provider.PersistentStoreProvider;
+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.PlatformType;
import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
@@ -84,7 +84,7 @@ public class AIChatServiceImpl implements AIChatService {
public AIAssistantFactory getAiAssistantFactory() {
if (aiAssistantFactory == null) {
aiAssistantFactory =
- new GeneralAssistantFactory(new
PersistentStoreProvider(chatThreadDao, chatMessageDao));
+ new GeneralAssistantFactory(new
PersistentChatMemoryStore(chatThreadDao, chatMessageDao));
}
return aiAssistantFactory;
}