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`)

Reply via email to