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 e659d1e BIGTOP-4212: Add language prompt of AI Chat (#58)
e659d1e is described below
commit e659d1e5289ed7737dd90a91b0f5ac4a5f137722
Author: haopeng <[email protected]>
AuthorDate: Mon Sep 2 15:45:58 2024 +0800
BIGTOP-4212: Add language prompt of AI Chat (#58)
---
.../ai/assistant/GeneralAssistantFactory.java | 4 +++
.../ai/assistant/provider/AIAssistantConfig.java | 18 +++++++++--
.../provider/LocSystemPromptProvider.java | 36 +++++++++++++++++-----
.../src/main/resources/language-prompt-en_US.st | 1 +
.../src/main/resources/language-prompt-zh_CN.st | 1 +
.../core/provider/AIAssistantConfigProvider.java | 2 ++
.../ai/core/provider/SystemPromptProvider.java | 2 ++
.../manager/server/service/AIChatService.java | 1 +
.../server/service/impl/AIChatServiceImpl.java | 2 ++
.../src/main/resources/ddl/MySQL-DDL-CREATE.sql | 2 ++
10 files changed, 59 insertions(+), 10 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 dfae2f7..2bc988e 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
@@ -78,6 +78,10 @@ public class GeneralAssistantFactory extends
AbstractAIAssistantFactory {
SystemMessage systemPrompt =
systemPromptProvider.getSystemPrompt(systemPrompts);
aiAssistant.setSystemPrompt(systemPrompt);
+ String locale = assistantConfig.getLanguage();
+ if (locale != null) {
+
aiAssistant.setSystemPrompt(systemPromptProvider.getLanguagePrompt(locale));
+ }
return aiAssistant;
}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/AIAssistantConfig.java
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/AIAssistantConfig.java
index 5266ead..fdd3b0d 100644
---
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/AIAssistantConfig.java
+++
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/AIAssistantConfig.java
@@ -35,14 +35,17 @@ public class AIAssistantConfig implements
AIAssistantConfigProvider {
*/
private final Map<String, String> credentials;
+ private final String language;
/**
* Platform extra configs are put here
*/
private final Map<String, String> configs;
- private AIAssistantConfig(String model, Map<String, String> credentials,
Map<String, String> configMap) {
+ private AIAssistantConfig(
+ String model, Map<String, String> credentials, String language,
Map<String, String> configMap) {
this.model = model;
this.credentials = credentials;
+ this.language = language;
this.configs = configMap;
}
@@ -65,8 +68,14 @@ public class AIAssistantConfig implements
AIAssistantConfigProvider {
return configs;
}
+ @Override
+ public String getLanguage() {
+ return language;
+ }
+
public static class Builder {
private String model;
+ private String language;
private final Map<String, String> credentials = new HashMap<>();
@@ -89,6 +98,11 @@ public class AIAssistantConfig implements
AIAssistantConfigProvider {
return this;
}
+ public Builder setLanguage(String language) {
+ this.language = language;
+ return this;
+ }
+
public Builder addConfig(String key, String value) {
configs.put(key, value);
return this;
@@ -100,7 +114,7 @@ public class AIAssistantConfig implements
AIAssistantConfigProvider {
}
public AIAssistantConfig build() {
- return new AIAssistantConfig(model, credentials, configs);
+ return new AIAssistantConfig(model, credentials, language,
configs);
}
}
}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/LocSystemPromptProvider.java
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/LocSystemPromptProvider.java
index b61dd16..7163fb2 100644
---
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/LocSystemPromptProvider.java
+++
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/java/org/apache/bigtop/manager/ai/assistant/provider/LocSystemPromptProvider.java
@@ -30,12 +30,11 @@ import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
+import java.util.Objects;
@Slf4j
public class LocSystemPromptProvider implements SystemPromptProvider {
- private static final String SYSTEM_PROMPT_PATH = "src/main/resources/";
-
@Override
public SystemMessage getSystemPrompt(SystemPrompt systemPrompt) {
if (systemPrompt == SystemPrompt.DEFAULT_PROMPT) {
@@ -50,17 +49,38 @@ public class LocSystemPromptProvider implements
SystemPromptProvider {
return getSystemPrompt(SystemPrompt.DEFAULT_PROMPT);
}
- private SystemMessage loadPromptFromFile(String fileName) {
- final String filePath = SYSTEM_PROMPT_PATH + fileName + ".st";
+ private String loadTextFromFile(String fileName) {
try {
- File file = ResourceUtils.getFile(filePath);
- String text = Files.readString(file.toPath(),
StandardCharsets.UTF_8);
- return SystemMessage.from(text);
- } catch (IOException e) {
+ String fullPath = Objects.requireNonNull(
+
this.getClass().getClassLoader().getResource(fileName))
+ .toString();
+ File file = ResourceUtils.getFile(fullPath);
+ return Files.readString(file.toPath(), StandardCharsets.UTF_8);
+ } catch (IOException | NullPointerException e) {
log.error(
"Exception occurred while loading SystemPrompt from local.
Here is some information:{}",
e.getMessage());
+ return null;
+ }
+ }
+
+ private SystemMessage loadPromptFromFile(String fileName) {
+ final String filePath = fileName + ".st";
+ String text = loadTextFromFile(filePath);
+ if (text == null) {
return SystemMessage.from("You are a helpful assistant.");
+ } else {
+ return SystemMessage.from(text);
+ }
+ }
+
+ public SystemMessage getLanguagePrompt(String locale) {
+ final String filePath = SystemPrompt.LANGUAGE_PROMPT.getValue() + '-'
+ locale + ".st";
+ String text = loadTextFromFile(filePath);
+ if (text == null) {
+ return SystemMessage.from("Answer in " + locale);
+ } else {
+ return SystemMessage.from(text);
}
}
}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/resources/language-prompt-en_US.st
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/resources/language-prompt-en_US.st
new file mode 100644
index 0000000..1d359c3
--- /dev/null
+++
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/resources/language-prompt-en_US.st
@@ -0,0 +1 @@
+Please answer the question in English:
\ No newline at end of file
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/resources/language-prompt-zh_CN.st
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/resources/language-prompt-zh_CN.st
new file mode 100644
index 0000000..561aaa7
--- /dev/null
+++
b/bigtop-manager-ai/bigtop-manager-ai-assistant/src/main/resources/language-prompt-zh_CN.st
@@ -0,0 +1 @@
+请使用中文回答问题:
\ No newline at end of file
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/AIAssistantConfigProvider.java
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/AIAssistantConfigProvider.java
index 04f9dbd..b49d99c 100644
---
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/AIAssistantConfigProvider.java
+++
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/AIAssistantConfigProvider.java
@@ -26,4 +26,6 @@ public interface AIAssistantConfigProvider {
Map<String, String> getCredentials();
Map<String, String> getConfigs();
+
+ String getLanguage();
}
diff --git
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/SystemPromptProvider.java
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/SystemPromptProvider.java
index 4340fc8..90f0013 100644
---
a/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/SystemPromptProvider.java
+++
b/bigtop-manager-ai/bigtop-manager-ai-core/src/main/java/org/apache/bigtop/manager/ai/core/provider/SystemPromptProvider.java
@@ -28,4 +28,6 @@ public interface SystemPromptProvider {
// return default system prompt
SystemMessage getSystemPrompt();
+
+ SystemMessage getLanguagePrompt(String locale);
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/AIChatService.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/AIChatService.java
index 06042ba..dc57fbe 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/AIChatService.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/AIChatService.java
@@ -30,6 +30,7 @@ import
org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.util.List;
public interface AIChatService {
+
List<PlatformVO> platforms();
List<PlatformAuthorizedVO> authorizedPlatforms();
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 e047871..16ef8e5 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
@@ -50,6 +50,7 @@ import org.apache.bigtop.manager.server.model.vo.PlatformVO;
import org.apache.bigtop.manager.server.service.AIChatService;
import org.jetbrains.annotations.NotNull;
+import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@@ -91,6 +92,7 @@ public class AIChatServiceImpl implements AIChatService {
private AIAssistantConfig getAIAssistantConfig(PlatformAuthorizedDTO
platformAuthorizedDTO) {
return AIAssistantConfig.builder()
.setModel(platformAuthorizedDTO.getModel())
+ .setLanguage(LocaleContextHolder.getLocale().toString())
.addCredentials(platformAuthorizedDTO.getCredentials())
.build();
}
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 23d3846..3988894 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
@@ -360,6 +360,8 @@ CREATE TABLE `llm_chat_message`
`sender` VARCHAR(50) NOT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
+ `create_by` BIGINT DEFAULT NULL,
+ `update_by` BIGINT DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_thread_id` (`thread_id`),
KEY `idx_user_id` (`user_id`)