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 02ca841 BIGTOP-4244: Separate LLM Config and refactor APIs (#85)
02ca841 is described below
commit 02ca841eab48c802a3a2e6b19ca5f2e581dba87e
Author: haopeng <[email protected]>
AuthorDate: Sun Oct 20 17:11:50 2024 +0800
BIGTOP-4244: Separate LLM Config and refactor APIs (#85)
---
.../bigtop/manager/dao/po/AuthPlatformPO.java | 12 ++
.../server/controller/ChatbotController.java | 57 ++----
...botController.java => LLMConfigController.java} | 79 ++++---
.../manager/server/enums/AuthPlatformStatus.java | 56 +++++
.../model/converter/AuthPlatformConverter.java | 1 -
.../manager/server/model/dto/AuthPlatformDTO.java | 8 +
.../manager/server/model/req/AuthPlatformReq.java | 8 +
.../ChatbotThreadReq.java} | 10 +-
.../manager/server/model/vo/AuthPlatformVO.java | 12 +-
.../manager/server/service/ChatbotService.java | 14 --
.../{ChatbotService.java => LLMConfigService.java} | 16 +-
.../server/service/impl/ChatbotServiceImpl.java | 121 -----------
...tServiceImpl.java => LLMConfigServiceImpl.java} | 226 +++++++++------------
.../src/main/resources/ddl/MySQL-DDL-CREATE.sql | 4 +
.../main/resources/ddl/PostgreSQL-DDL-CREATE.sql | 8 +-
.../server/controller/ChatbotControllerTest.java | 71 +------
16 files changed, 258 insertions(+), 445 deletions(-)
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/AuthPlatformPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/AuthPlatformPO.java
index 8f22e4a..36432c2 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/AuthPlatformPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/AuthPlatformPO.java
@@ -43,4 +43,16 @@ public class AuthPlatformPO extends BasePO implements
Serializable {
@Column(name = "is_deleted")
private Boolean isDeleted;
+
+ @Column(name = "status")
+ private Integer status;
+
+ @Column(name = "name")
+ private String name;
+
+ @Column(name = "model")
+ private String model;
+
+ @Column(name = "desc")
+ private String desc;
}
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 6d42d7e..999e528 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
@@ -18,15 +18,10 @@
*/
package org.apache.bigtop.manager.server.controller;
-import org.apache.bigtop.manager.server.model.converter.AuthPlatformConverter;
-import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
-import org.apache.bigtop.manager.server.model.req.AuthPlatformReq;
import org.apache.bigtop.manager.server.model.req.ChatbotMessageReq;
-import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
+import org.apache.bigtop.manager.server.model.req.ChatbotThreadReq;
import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformVO;
import org.apache.bigtop.manager.server.service.ChatbotService;
import org.apache.bigtop.manager.server.utils.ResponseEntity;
@@ -34,9 +29,9 @@ import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@@ -48,47 +43,23 @@ import java.util.List;
@Tag(name = "Chatbot Controller")
@RestController
-@RequestMapping("/chatbot/")
+@RequestMapping("/llm/chatbot/")
public class ChatbotController {
@Resource
private ChatbotService chatbotService;
- @Operation(summary = "get platforms", description = "Get all platforms")
- @GetMapping("/platforms")
- public ResponseEntity<List<PlatformVO>> platforms() {
- return ResponseEntity.success(chatbotService.platforms());
- }
-
- @Operation(summary = "platform credentials", description = "Get platform
auth credentials")
- @GetMapping("/platforms/{platformId}/auth-credentials")
- public ResponseEntity<List<PlatformAuthCredentialVO>>
platformsAuthCredential(@PathVariable Long platformId) {
- return
ResponseEntity.success(chatbotService.platformsAuthCredentials(platformId));
- }
-
- @Operation(summary = "get auth platforms", description = "Get authorized
platforms")
- @GetMapping("/auth-platforms")
- public ResponseEntity<List<AuthPlatformVO>> authorizedPlatforms() {
- return ResponseEntity.success(chatbotService.authorizedPlatforms());
- }
-
- @Operation(summary = "auth platform", description = "Add authorized
platforms")
- @PostMapping("/auth-platforms")
- public ResponseEntity<AuthPlatformVO> addAuthorizedPlatform(@RequestBody
AuthPlatformReq authPlatformReq) {
- AuthPlatformDTO authPlatformDTO =
AuthPlatformConverter.INSTANCE.fromReq2DTO(authPlatformReq);
- return
ResponseEntity.success(chatbotService.addAuthorizedPlatform(authPlatformDTO));
- }
-
- @Operation(summary = "delete auth platform", description = "Delete
authorized platforms")
- @DeleteMapping("/auth-platforms/{authId}")
- public ResponseEntity<Boolean> deleteAuthorizedPlatform(@PathVariable Long
authId) {
- return
ResponseEntity.success(chatbotService.deleteAuthorizedPlatform(authId));
- }
-
@Operation(summary = "new thread", description = "Create a chat threads")
@PostMapping("/auth-platforms/{authId}/threads")
- public ResponseEntity<ChatThreadVO> createChatThreads(@PathVariable Long
authId, @RequestParam String model) {
- return ResponseEntity.success(chatbotService.createChatThreads(authId,
model));
+ public ResponseEntity<ChatThreadVO> createChatThreads(@PathVariable Long
authId) {
+ return ResponseEntity.success(chatbotService.createChatThreads(authId,
""));
+ }
+
+ @Operation(summary = "update thread", description = "Update a chat
threads")
+ @PutMapping("/auth-platforms/{authId}/threads")
+ public ResponseEntity<ChatThreadVO> updateChatThreads(
+ @PathVariable Long authId, @RequestBody ChatbotThreadReq
chatbotThreadReq) {
+ return ResponseEntity.success(chatbotService.createChatThreads(authId,
""));
}
@Operation(summary = "delete thread", description = "Delete a chat
threads")
@@ -99,8 +70,8 @@ public class ChatbotController {
@Operation(summary = "get threads", description = "Get all threads of a
auth platform")
@GetMapping("/auth-platforms/{authId}/threads")
- public ResponseEntity<List<ChatThreadVO>> getAllChatThreads(@PathVariable
Long authId, @RequestParam String model) {
- return ResponseEntity.success(chatbotService.getAllChatThreads(authId,
model));
+ public ResponseEntity<List<ChatThreadVO>> getAllChatThreads(@PathVariable
Long authId) {
+ return ResponseEntity.success(chatbotService.getAllChatThreads(authId,
""));
}
@Operation(summary = "talk", description = "Talk with Chatbot")
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/LLMConfigController.java
similarity index 53%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/LLMConfigController.java
index 6d42d7e..b6e41e2 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/LLMConfigController.java
@@ -21,24 +21,20 @@ package org.apache.bigtop.manager.server.controller;
import org.apache.bigtop.manager.server.model.converter.AuthPlatformConverter;
import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
import org.apache.bigtop.manager.server.model.req.AuthPlatformReq;
-import org.apache.bigtop.manager.server.model.req.ChatbotMessageReq;
import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
-import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
-import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
import org.apache.bigtop.manager.server.model.vo.PlatformVO;
-import org.apache.bigtop.manager.server.service.ChatbotService;
+import org.apache.bigtop.manager.server.service.LLMConfigService;
import org.apache.bigtop.manager.server.utils.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -46,73 +42,70 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import java.util.List;
-@Tag(name = "Chatbot Controller")
+@Tag(name = "LLM Config Controller")
@RestController
-@RequestMapping("/chatbot/")
-public class ChatbotController {
+@RequestMapping("/llm/config/")
+public class LLMConfigController {
@Resource
- private ChatbotService chatbotService;
+ private LLMConfigService llmConfigService;
@Operation(summary = "get platforms", description = "Get all platforms")
@GetMapping("/platforms")
public ResponseEntity<List<PlatformVO>> platforms() {
- return ResponseEntity.success(chatbotService.platforms());
+ return ResponseEntity.success(llmConfigService.platforms());
}
@Operation(summary = "platform credentials", description = "Get platform
auth credentials")
@GetMapping("/platforms/{platformId}/auth-credentials")
public ResponseEntity<List<PlatformAuthCredentialVO>>
platformsAuthCredential(@PathVariable Long platformId) {
- return
ResponseEntity.success(chatbotService.platformsAuthCredentials(platformId));
+ return
ResponseEntity.success(llmConfigService.platformsAuthCredentials(platformId));
}
@Operation(summary = "get auth platforms", description = "Get authorized
platforms")
@GetMapping("/auth-platforms")
public ResponseEntity<List<AuthPlatformVO>> authorizedPlatforms() {
- return ResponseEntity.success(chatbotService.authorizedPlatforms());
+ return ResponseEntity.success(llmConfigService.authorizedPlatforms());
}
- @Operation(summary = "auth platform", description = "Add authorized
platforms")
+ @Operation(summary = "test auth platform", description = "Test authorized
platforms")
+ @PostMapping("/auth-platforms/test")
+ public ResponseEntity<Boolean> testAuthorizedPlatform(@RequestBody
AuthPlatformReq authPlatformReq) {
+ AuthPlatformDTO authPlatformDTO =
AuthPlatformConverter.INSTANCE.fromReq2DTO(authPlatformReq);
+ return
ResponseEntity.success(llmConfigService.testAuthorizedPlatform(authPlatformDTO));
+ }
+
+ @Operation(summary = "add auth platform", description = "Add authorized
platforms")
@PostMapping("/auth-platforms")
public ResponseEntity<AuthPlatformVO> addAuthorizedPlatform(@RequestBody
AuthPlatformReq authPlatformReq) {
AuthPlatformDTO authPlatformDTO =
AuthPlatformConverter.INSTANCE.fromReq2DTO(authPlatformReq);
- return
ResponseEntity.success(chatbotService.addAuthorizedPlatform(authPlatformDTO));
+ return
ResponseEntity.success(llmConfigService.addAuthorizedPlatform(authPlatformDTO));
+ }
+
+ @Operation(summary = "update auth platform", description = "Update
authorized platforms")
+ @PutMapping("/auth-platforms/{authId}")
+ public ResponseEntity<AuthPlatformVO> updateAuthorizedPlatform(
+ @PathVariable Long authId, @RequestBody AuthPlatformReq
authPlatformReq) {
+ AuthPlatformDTO authPlatformDTO =
AuthPlatformConverter.INSTANCE.fromReq2DTO(authPlatformReq);
+ authPlatformDTO.setId(authId);
+ return
ResponseEntity.success(llmConfigService.updateAuthorizedPlatform(authPlatformDTO));
}
@Operation(summary = "delete auth platform", description = "Delete
authorized platforms")
@DeleteMapping("/auth-platforms/{authId}")
public ResponseEntity<Boolean> deleteAuthorizedPlatform(@PathVariable Long
authId) {
- return
ResponseEntity.success(chatbotService.deleteAuthorizedPlatform(authId));
- }
-
- @Operation(summary = "new thread", description = "Create a chat threads")
- @PostMapping("/auth-platforms/{authId}/threads")
- public ResponseEntity<ChatThreadVO> createChatThreads(@PathVariable Long
authId, @RequestParam String model) {
- return ResponseEntity.success(chatbotService.createChatThreads(authId,
model));
- }
-
- @Operation(summary = "delete thread", description = "Delete a chat
threads")
- @DeleteMapping("/auth-platforms/{authId}/threads/{threadId}")
- public ResponseEntity<Boolean> deleteChatThreads(@PathVariable Long
authId, @PathVariable Long threadId) {
- return ResponseEntity.success(chatbotService.deleteChatThreads(authId,
threadId));
- }
-
- @Operation(summary = "get threads", description = "Get all threads of a
auth platform")
- @GetMapping("/auth-platforms/{authId}/threads")
- public ResponseEntity<List<ChatThreadVO>> getAllChatThreads(@PathVariable
Long authId, @RequestParam String model) {
- return ResponseEntity.success(chatbotService.getAllChatThreads(authId,
model));
+ return
ResponseEntity.success(llmConfigService.deleteAuthorizedPlatform(authId));
}
- @Operation(summary = "talk", description = "Talk with Chatbot")
- @PostMapping("/auth-platforms/{authId}/threads/{threadId}/talk")
- public SseEmitter talk(
- @PathVariable Long authId, @PathVariable Long threadId,
@RequestBody ChatbotMessageReq messageReq) {
- return chatbotService.talk(authId, threadId, messageReq.getMessage());
+ @Operation(summary = "activate auth platform", description = "Activate
authorized platforms")
+ @PostMapping("/auth-platforms/{authId}/activate")
+ public ResponseEntity<Boolean> activateAuthorizedPlatform(@PathVariable
Long authId) {
+ return
ResponseEntity.success(llmConfigService.activateAuthorizedPlatform(authId));
}
- @Operation(summary = "history", description = "Get chat records")
- @GetMapping("/auth-platforms/{authId}/threads/{threadId}/history")
- public ResponseEntity<List<ChatMessageVO>> history(@PathVariable Long
authId, @PathVariable Long threadId) {
- return ResponseEntity.success(chatbotService.history(authId,
threadId));
+ @Operation(summary = "deactivate auth platform", description = "Deactivate
authorized platforms")
+ @PostMapping("/auth-platforms/{authId}/deactivate")
+ public ResponseEntity<Boolean> deactivateAuthorizedPlatform(@PathVariable
Long authId) {
+ return
ResponseEntity.success(llmConfigService.deactivateAuthorizedPlatform(authId));
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/enums/AuthPlatformStatus.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/enums/AuthPlatformStatus.java
new file mode 100644
index 0000000..58f8c5e
--- /dev/null
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/enums/AuthPlatformStatus.java
@@ -0,0 +1,56 @@
+/*
+ * 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.server.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum AuthPlatformStatus {
+ ACTIVE(1),
+ AVAILABLE(2),
+ UNAVAILABLE(3),
+ ;
+
+ private final Integer code;
+
+ AuthPlatformStatus(Integer code) {
+ this.code = code;
+ }
+
+ public static AuthPlatformStatus fromCode(Integer code) {
+ for (AuthPlatformStatus status : AuthPlatformStatus.values()) {
+ if (status.code.equals(code)) {
+ return status;
+ }
+ }
+ return UNAVAILABLE;
+ }
+
+ public static boolean isAvailable(int code) {
+ return AVAILABLE.code.equals(code);
+ }
+
+ public static boolean isActive(int code) {
+ return ACTIVE.code.equals(code);
+ }
+
+ public static boolean available(int code) {
+ return isAvailable(code) || isActive(code);
+ }
+}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/AuthPlatformConverter.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/AuthPlatformConverter.java
index 7fb9ff4..e3e991c 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/AuthPlatformConverter.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/AuthPlatformConverter.java
@@ -43,7 +43,6 @@ import java.util.stream.Collectors;
public interface AuthPlatformConverter {
AuthPlatformConverter INSTANCE =
Mappers.getMapper(AuthPlatformConverter.class);
- @Mapping(target = "supportModels", expression =
"java(platformPO.getSupportModels())")
@Mapping(target = "platformName", expression =
"java(platformPO.getName())")
AuthPlatformVO fromPO2VO(AuthPlatformPO authPlatformPO, @Context
PlatformPO platformPO);
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
index 4706385..aa61003 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
@@ -29,4 +29,12 @@ public class AuthPlatformDTO {
private Long platformId;
private Map<String, String> authCredentials;
+
+ private String name;
+
+ private String model;
+
+ private String desc;
+
+ private Boolean testPassed;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/AuthPlatformReq.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/AuthPlatformReq.java
index 77047bf..699d0c9 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/AuthPlatformReq.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/AuthPlatformReq.java
@@ -32,4 +32,12 @@ public class AuthPlatformReq {
@NotEmpty
private List<AuthCredentialReq> authCredentials;
+
+ private String name;
+
+ private String model;
+
+ private String desc;
+
+ private boolean testPassed;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/ChatbotThreadReq.java
similarity index 82%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/ChatbotThreadReq.java
index 4706385..c45bee4 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/ChatbotThreadReq.java
@@ -16,17 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.bigtop.manager.server.model.dto;
+package org.apache.bigtop.manager.server.model.req;
import lombok.Data;
-import java.util.Map;
-
@Data
-public class AuthPlatformDTO {
+public class ChatbotThreadReq {
private Long id;
- private Long platformId;
-
- private Map<String, String> authCredentials;
+ private String name;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/AuthPlatformVO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/AuthPlatformVO.java
index a1a4c36..eee6981 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/AuthPlatformVO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/AuthPlatformVO.java
@@ -28,13 +28,13 @@ public class AuthPlatformVO {
private String platformName;
- private String supportModels;
+ private String name;
- public AuthPlatformVO(long platformId, String name, String models) {
- this.platformId = platformId;
- this.platformName = name;
- this.supportModels = models;
- }
+ private String model;
+
+ private String desc;
+
+ private Integer status;
public AuthPlatformVO() {}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
index 8d65c97..360f7e3 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
@@ -18,12 +18,8 @@
*/
package org.apache.bigtop.manager.server.service;
-import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
-import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformVO;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@@ -31,16 +27,6 @@ import java.util.List;
public interface ChatbotService {
- List<PlatformVO> platforms();
-
- List<PlatformAuthCredentialVO> platformsAuthCredentials(Long platformId);
-
- List<AuthPlatformVO> authorizedPlatforms();
-
- AuthPlatformVO addAuthorizedPlatform(AuthPlatformDTO authPlatformDTO);
-
- boolean deleteAuthorizedPlatform(Long authId);
-
ChatThreadVO createChatThreads(Long authId, String model);
boolean deleteChatThreads(Long authId, Long threadId);
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/LLMConfigService.java
similarity index 72%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/LLMConfigService.java
index 8d65c97..96ca25c 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/LLMConfigService.java
@@ -20,16 +20,12 @@ package org.apache.bigtop.manager.server.service;
import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
-import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
-import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
import org.apache.bigtop.manager.server.model.vo.PlatformVO;
-import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
-
import java.util.List;
-public interface ChatbotService {
+public interface LLMConfigService {
List<PlatformVO> platforms();
@@ -41,13 +37,11 @@ public interface ChatbotService {
boolean deleteAuthorizedPlatform(Long authId);
- ChatThreadVO createChatThreads(Long authId, String model);
-
- boolean deleteChatThreads(Long authId, Long threadId);
+ boolean testAuthorizedPlatform(AuthPlatformDTO authPlatformDTO);
- List<ChatThreadVO> getAllChatThreads(Long platformId, String model);
+ AuthPlatformVO updateAuthorizedPlatform(AuthPlatformDTO authPlatformDTO);
- SseEmitter talk(Long authId, Long threadId, String message);
+ boolean activateAuthorizedPlatform(Long authId);
- List<ChatMessageVO> history(Long platformId, Long threadId);
+ boolean deactivateAuthorizedPlatform(Long authId);
}
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 7cbbbc1..962367b 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
@@ -39,18 +39,12 @@ import
org.apache.bigtop.manager.server.holder.SessionUserHolder;
import org.apache.bigtop.manager.server.model.converter.AuthPlatformConverter;
import org.apache.bigtop.manager.server.model.converter.ChatMessageConverter;
import org.apache.bigtop.manager.server.model.converter.ChatThreadConverter;
-import org.apache.bigtop.manager.server.model.converter.PlatformConverter;
import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
import org.apache.bigtop.manager.server.model.dto.ChatThreadDTO;
-import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
-import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformVO;
import org.apache.bigtop.manager.server.service.ChatbotService;
-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;
@@ -60,7 +54,6 @@ import reactor.core.publisher.Flux;
import jakarta.annotation.Resource;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -114,120 +107,6 @@ public class ChatbotServiceImpl implements ChatbotService
{
.create(getPlatformType(platformName),
getAIAssistantConfig(model, credentials, configs), threadId);
}
- private Boolean testAuthorization(String platformName, String model,
Map<String, String> credentials) {
- AIAssistant aiAssistant = getAIAssistantFactory()
- .create(getPlatformType(platformName),
getAIAssistantConfig(model, credentials, null));
- try {
- return aiAssistant.test();
- } catch (Exception e) {
- throw new ApiException(ApiExceptionEnum.CREDIT_INCORRECT,
e.getMessage());
- }
- }
-
- @Override
- public List<PlatformVO> platforms() {
- List<PlatformPO> platformPOs = platformDao.findAll();
- return PlatformConverter.INSTANCE.fromPO2VO(platformPOs);
- }
-
- @Override
- public List<PlatformAuthCredentialVO> platformsAuthCredentials(Long
platformId) {
- PlatformPO platformPO = platformDao.findById(platformId);
- if (platformPO == null) {
- throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
- }
- List<PlatformAuthCredentialVO> platformAuthCredentialVOs = new
ArrayList<>();
- PlatformDTO platformDTO =
PlatformConverter.INSTANCE.fromPO2DTO(platformPO);
- for (String key : platformDTO.getAuthCredentials().keySet()) {
- PlatformAuthCredentialVO platformAuthCredentialVO = new
PlatformAuthCredentialVO(
- key, platformDTO.getAuthCredentials().get(key));
- platformAuthCredentialVOs.add(platformAuthCredentialVO);
- }
- return platformAuthCredentialVOs;
- }
-
- @Override
- public List<AuthPlatformVO> authorizedPlatforms() {
- List<AuthPlatformVO> authorizedPlatforms = new ArrayList<>();
- List<AuthPlatformPO> authPlatformPOList = authPlatformDao.findAll();
- for (AuthPlatformPO authPlatformPO : authPlatformPOList) {
- if (authPlatformPO.getIsDeleted()) {
- continue;
- }
-
- PlatformPO platformPO =
platformDao.findById(authPlatformPO.getPlatformId());
-
authorizedPlatforms.add(AuthPlatformConverter.INSTANCE.fromPO2VO(authPlatformPO,
platformPO));
- }
-
- return authorizedPlatforms;
- }
-
- @Override
- public AuthPlatformVO addAuthorizedPlatform(AuthPlatformDTO
authPlatformDTO) {
- PlatformPO platformPO =
platformDao.findById(authPlatformDTO.getPlatformId());
- if (platformPO == null) {
- throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
- }
- Map<String, String> credentialSet =
- getStringMap(authPlatformDTO,
PlatformConverter.INSTANCE.fromPO2DTO(platformPO));
- List<String> models =
List.of(platformPO.getSupportModels().split(","));
- if (models.isEmpty()) {
- throw new ApiException(ApiExceptionEnum.MODEL_NOT_SUPPORTED);
- }
-
- if (!testAuthorization(platformPO.getName(), models.get(0),
credentialSet)) {
- throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
- }
-
- authPlatformDTO.setAuthCredentials(credentialSet);
- AuthPlatformPO authPlatformPO =
AuthPlatformConverter.INSTANCE.fromDTO2PO(authPlatformDTO);
- authPlatformDao.save(authPlatformPO);
- AuthPlatformVO authPlatformVO =
AuthPlatformConverter.INSTANCE.fromPO2VO(authPlatformPO, platformPO);
- authPlatformVO.setSupportModels(platformPO.getSupportModels());
- authPlatformVO.setPlatformName(platformPO.getName());
- return authPlatformVO;
- }
-
- private static @NotNull Map<String, String> getStringMap(AuthPlatformDTO
authPlatformDTO, PlatformDTO platformDTO) {
- if (platformDTO == null) {
- throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
- }
- Map<String, String> credentialNeed = platformDTO.getAuthCredentials();
- Map<String, String> credentialGet =
authPlatformDTO.getAuthCredentials();
- Map<String, String> credentialSet = new HashMap<>();
- for (String key : credentialNeed.keySet()) {
- if (!credentialGet.containsKey(key)) {
- throw new ApiException(ApiExceptionEnum.CREDIT_INCORRECT);
- }
- credentialSet.put(key, credentialGet.get(key));
- }
- return credentialSet;
- }
-
- @Override
- public boolean deleteAuthorizedPlatform(Long authId) {
- AuthPlatformPO authPlatformPO = authPlatformDao.findById(authId);
- if (authPlatformPO == null || authPlatformPO.getIsDeleted()) {
- throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
- }
-
- authPlatformPO.setIsDeleted(true);
- authPlatformDao.partialUpdateById(authPlatformPO);
-
- List<ChatThreadPO> chatThreadPOS =
chatThreadDao.findAllByAuthId(authPlatformPO.getId());
- for (ChatThreadPO chatThreadPO : chatThreadPOS) {
- chatThreadPO.setIsDeleted(true);
- chatThreadDao.partialUpdateById(chatThreadPO);
- List<ChatMessagePO> chatMessagePOS =
chatMessageDao.findAllByThreadId(chatThreadPO.getId());
- for (ChatMessagePO chatMessagePO : chatMessagePOS) {
- chatMessagePO.setIsDeleted(true);
- chatMessageDao.partialUpdateById(chatMessagePO);
- }
- }
-
- return true;
- }
-
@Override
public ChatThreadVO createChatThreads(Long authId, String model) {
AuthPlatformPO authPlatformPO = authPlatformDao.findById(authId);
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/LLMConfigServiceImpl.java
similarity index 58%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/LLMConfigServiceImpl.java
index 7cbbbc1..9e5bb78 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/LLMConfigServiceImpl.java
@@ -21,7 +21,6 @@ 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.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;
@@ -34,40 +33,32 @@ import
org.apache.bigtop.manager.dao.repository.ChatMessageDao;
import org.apache.bigtop.manager.dao.repository.ChatThreadDao;
import org.apache.bigtop.manager.dao.repository.PlatformDao;
import org.apache.bigtop.manager.server.enums.ApiExceptionEnum;
+import org.apache.bigtop.manager.server.enums.AuthPlatformStatus;
import org.apache.bigtop.manager.server.exception.ApiException;
-import org.apache.bigtop.manager.server.holder.SessionUserHolder;
import org.apache.bigtop.manager.server.model.converter.AuthPlatformConverter;
-import org.apache.bigtop.manager.server.model.converter.ChatMessageConverter;
-import org.apache.bigtop.manager.server.model.converter.ChatThreadConverter;
import org.apache.bigtop.manager.server.model.converter.PlatformConverter;
import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
-import org.apache.bigtop.manager.server.model.dto.ChatThreadDTO;
import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
-import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
-import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
import org.apache.bigtop.manager.server.model.vo.PlatformVO;
-import org.apache.bigtop.manager.server.service.ChatbotService;
+import org.apache.bigtop.manager.server.service.LLMConfigService;
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;
import lombok.extern.slf4j.Slf4j;
-import reactor.core.publisher.Flux;
import jakarta.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
@Service
@Slf4j
-public class ChatbotServiceImpl implements ChatbotService {
+public class LLMConfigServiceImpl implements LLMConfigService {
@Resource
private PlatformDao platformDao;
@@ -104,19 +95,13 @@ public class ChatbotServiceImpl implements ChatbotService {
return PlatformType.getPlatformType(platformName.toLowerCase());
}
- private AIAssistant buildAIAssistant(
- String platformName,
- String model,
- Map<String, String> credentials,
- Long threadId,
- Map<String, String> configs) {
- return getAIAssistantFactory()
- .create(getPlatformType(platformName),
getAIAssistantConfig(model, credentials, configs), threadId);
- }
-
private Boolean testAuthorization(String platformName, String model,
Map<String, String> credentials) {
- AIAssistant aiAssistant = getAIAssistantFactory()
- .create(getPlatformType(platformName),
getAIAssistantConfig(model, credentials, null));
+ AIAssistantConfig aiAssistantConfig = AIAssistantConfig.builder()
+ .setModel(model)
+ .setLanguage(LocaleContextHolder.getLocale().toString())
+ .addCredentials(credentials)
+ .build();
+ AIAssistant aiAssistant =
getAIAssistantFactory().create(getPlatformType(platformName),
aiAssistantConfig);
try {
return aiAssistant.test();
} catch (Exception e) {
@@ -124,6 +109,21 @@ public class ChatbotServiceImpl implements ChatbotService {
}
}
+ private void switchActivePlatform(Long id) {
+ List<AuthPlatformPO> authPlatformPOS = authPlatformDao.findAll();
+ for (AuthPlatformPO authPlatformPO : authPlatformPOS) {
+ if (!AuthPlatformStatus.available(authPlatformPO.getStatus())) {
+ continue;
+ }
+ if (authPlatformPO.getId().equals(id)) {
+ authPlatformPO.setStatus(AuthPlatformStatus.ACTIVE.getCode());
+ } else {
+
authPlatformPO.setStatus(AuthPlatformStatus.AVAILABLE.getCode());
+ }
+ }
+ authPlatformDao.partialUpdateByIds(authPlatformPOS);
+ }
+
@Override
public List<PlatformVO> platforms() {
List<PlatformPO> platformPOs = platformDao.findAll();
@@ -168,24 +168,20 @@ public class ChatbotServiceImpl implements ChatbotService
{
if (platformPO == null) {
throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
}
+
Map<String, String> credentialSet =
getStringMap(authPlatformDTO,
PlatformConverter.INSTANCE.fromPO2DTO(platformPO));
- List<String> models =
List.of(platformPO.getSupportModels().split(","));
- if (models.isEmpty()) {
- throw new ApiException(ApiExceptionEnum.MODEL_NOT_SUPPORTED);
- }
-
- if (!testAuthorization(platformPO.getName(), models.get(0),
credentialSet)) {
- throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
- }
authPlatformDTO.setAuthCredentials(credentialSet);
AuthPlatformPO authPlatformPO =
AuthPlatformConverter.INSTANCE.fromDTO2PO(authPlatformDTO);
+ if (authPlatformDTO.getTestPassed()) {
+ authPlatformPO.setStatus(AuthPlatformStatus.AVAILABLE.getCode());
+ } else {
+ authPlatformPO.setStatus(AuthPlatformStatus.UNAVAILABLE.getCode());
+ }
+
authPlatformDao.save(authPlatformPO);
- AuthPlatformVO authPlatformVO =
AuthPlatformConverter.INSTANCE.fromPO2VO(authPlatformPO, platformPO);
- authPlatformVO.setSupportModels(platformPO.getSupportModels());
- authPlatformVO.setPlatformName(platformPO.getName());
- return authPlatformVO;
+ return AuthPlatformConverter.INSTANCE.fromPO2VO(authPlatformPO,
platformPO);
}
private static @NotNull Map<String, String> getStringMap(AuthPlatformDTO
authPlatformDTO, PlatformDTO platformDTO) {
@@ -229,125 +225,95 @@ public class ChatbotServiceImpl implements
ChatbotService {
}
@Override
- public ChatThreadVO createChatThreads(Long authId, String model) {
- AuthPlatformPO authPlatformPO = authPlatformDao.findById(authId);
- if (authPlatformPO == null || authPlatformPO.getIsDeleted()) {
- throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
+ public boolean testAuthorizedPlatform(AuthPlatformDTO authPlatformDTO) {
+ if (authPlatformDTO.getId() != null) {
+ authPlatformDTO =
+
AuthPlatformConverter.INSTANCE.fromPO2DTO(authPlatformDao.findById(authPlatformDTO.getId()));
+ }
+
+ PlatformPO platformPO =
platformDao.findById(authPlatformDTO.getPlatformId());
+ if (platformPO == null) {
+ throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
}
- AuthPlatformDTO authPlatformDTO =
AuthPlatformConverter.INSTANCE.fromPO2DTO(authPlatformPO);
- Long userId = SessionUserHolder.getUserId();
- PlatformPO platformPO =
platformDao.findById(authPlatformPO.getPlatformId());
List<String> supportModels =
List.of(platformPO.getSupportModels().split(","));
- if (!supportModels.contains(model)) {
+ if (supportModels.isEmpty() ||
!supportModels.contains(authPlatformDTO.getModel())) {
throw new ApiException(ApiExceptionEnum.MODEL_NOT_SUPPORTED);
}
- ChatThreadDTO chatThreadDTO = new ChatThreadDTO();
- chatThreadDTO.setPlatformId(platformPO.getId());
- chatThreadDTO.setAuthId(authPlatformPO.getId());
-
- AIAssistant aiAssistant =
- buildAIAssistant(platformPO.getName(), model,
authPlatformDTO.getAuthCredentials(), null, null);
- Map<String, String> threadInfo = aiAssistant.createThread();
- chatThreadDTO.setThreadInfo(threadInfo);
- ChatThreadPO chatThreadPO =
ChatThreadConverter.INSTANCE.fromDTO2PO(chatThreadDTO);
- chatThreadPO.setUserId(userId);
- chatThreadPO.setModel(model);
- chatThreadDao.save(chatThreadPO);
- return ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO);
- }
- @Override
- public boolean deleteChatThreads(Long authId, Long threadId) {
- ChatThreadPO chatThreadPO = chatThreadDao.findById(threadId);
- if (chatThreadPO == null || chatThreadPO.getIsDeleted()) {
- throw new ApiException(ApiExceptionEnum.CHAT_THREAD_NOT_FOUND);
+ if (authPlatformDTO.getId() != null) {
+ AuthPlatformPO authPlatformPO =
authPlatformDao.findById(authPlatformDTO.getId());
+ if (authPlatformPO == null || authPlatformPO.getIsDeleted()) {
+ throw new
ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
+ }
+ AuthPlatformDTO existAuthPlatformDTO =
AuthPlatformConverter.INSTANCE.fromPO2DTO(authPlatformPO);
+
authPlatformDTO.setAuthCredentials(existAuthPlatformDTO.getAuthCredentials());
+ authPlatformDTO.setModel(existAuthPlatformDTO.getModel());
}
- chatThreadPO.setIsDeleted(true);
- chatThreadDao.partialUpdateById(chatThreadPO);
- List<ChatMessagePO> chatMessagePOS =
chatMessageDao.findAllByThreadId(threadId);
- for (ChatMessagePO chatMessagePO : chatMessagePOS) {
- chatMessagePO.setIsDeleted(true);
- chatMessageDao.partialUpdateById(chatMessagePO);
+ Map<String, String> credentialSet =
+ getStringMap(authPlatformDTO,
PlatformConverter.INSTANCE.fromPO2DTO(platformPO));
+ if (!testAuthorization(platformPO.getName(),
authPlatformDTO.getModel(), credentialSet)) {
+ throw new ApiException(ApiExceptionEnum.CREDIT_INCORRECT);
+ }
+
+ if (authPlatformDTO.getId() != null) {
+ AuthPlatformPO authPlatformPO =
AuthPlatformConverter.INSTANCE.fromDTO2PO(authPlatformDTO);
+ authPlatformPO.setStatus(AuthPlatformStatus.AVAILABLE.getCode());
+ authPlatformDao.partialUpdateById(authPlatformPO);
}
return true;
}
@Override
- public List<ChatThreadVO> getAllChatThreads(Long authId, String model) {
- Long userId = SessionUserHolder.getUserId();
- List<ChatThreadPO> chatThreadPOS =
chatThreadDao.findAllByAuthIdAndUserId(authId, userId);
- List<ChatThreadVO> chatThreads = new ArrayList<>();
- for (ChatThreadPO chatThreadPO : chatThreadPOS) {
- ChatThreadVO chatThreadVO =
ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO);
- if (chatThreadVO.getModel().equals(model)) {
- chatThreads.add(chatThreadVO);
- }
+ public AuthPlatformVO updateAuthorizedPlatform(AuthPlatformDTO
authPlatformDTO) {
+ AuthPlatformPO authPlatformPO =
authPlatformDao.findById(authPlatformDTO.getId());
+ if (authPlatformPO == null || authPlatformPO.getIsDeleted()) {
+ throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
}
- return chatThreads;
+
+ authPlatformPO.setName(authPlatformDTO.getName());
+ authPlatformPO.setDesc(authPlatformDTO.getDesc());
+ if (!authPlatformPO.getModel().equals(authPlatformDTO.getModel())) {
+ authPlatformPO.setStatus(AuthPlatformStatus.UNAVAILABLE.getCode());
+ }
+ authPlatformPO.setModel(authPlatformDTO.getModel());
+ authPlatformDao.partialUpdateById(authPlatformPO);
+
+ return AuthPlatformConverter.INSTANCE.fromPO2VO(
+ authPlatformPO,
platformDao.findById(authPlatformPO.getPlatformId()));
}
@Override
- public SseEmitter talk(Long authId, Long threadId, String message) {
- ChatThreadPO chatThreadPO = chatThreadDao.findById(threadId);
- Long userId = SessionUserHolder.getUserId();
- if (!Objects.equals(userId, chatThreadPO.getUserId()) ||
chatThreadPO.getIsDeleted()) {
- throw new ApiException(ApiExceptionEnum.CHAT_THREAD_NOT_FOUND);
- }
+ public boolean activateAuthorizedPlatform(Long authId) {
AuthPlatformPO authPlatformPO = authPlatformDao.findById(authId);
if (authPlatformPO == null || authPlatformPO.getIsDeleted()) {
throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
}
- AuthPlatformDTO authPlatformDTO =
AuthPlatformConverter.INSTANCE.fromPO2DTO(authPlatformPO);
- ChatThreadDTO chatThreadDTO =
ChatThreadConverter.INSTANCE.fromPO2DTO(chatThreadPO);
- PlatformPO platformPO =
platformDao.findById(authPlatformPO.getPlatformId());
- AIAssistant aiAssistant = buildAIAssistant(
- platformPO.getName(),
- chatThreadPO.getModel(),
- authPlatformDTO.getAuthCredentials(),
- chatThreadPO.getId(),
- chatThreadDTO.getThreadInfo());
- Flux<String> stringFlux = aiAssistant.streamAsk(message);
-
- SseEmitter emitter = new SseEmitter();
- stringFlux.subscribe(
- s -> {
- try {
- emitter.send(s);
- } catch (Exception e) {
- emitter.completeWithError(e);
- }
- },
- Throwable::printStackTrace,
- emitter::complete);
-
- emitter.onTimeout(emitter::complete);
- return emitter;
+
+ if (!AuthPlatformStatus.available(authPlatformPO.getStatus())) {
+ return false;
+ }
+
+ if (AuthPlatformStatus.isActive(authPlatformPO.getStatus())) {
+ return true;
+ }
+ switchActivePlatform(authPlatformPO.getId());
+ return true;
}
@Override
- public List<ChatMessageVO> history(Long authId, Long threadId) {
- List<ChatMessageVO> chatMessages = new ArrayList<>();
- ChatThreadPO chatThreadPO = chatThreadDao.findById(threadId);
- if (chatThreadPO == null || chatThreadPO.getIsDeleted()) {
- throw new ApiException(ApiExceptionEnum.CHAT_THREAD_NOT_FOUND);
- }
- Long userId = SessionUserHolder.getUserId();
- if (!chatThreadPO.getUserId().equals(userId)) {
- throw new ApiException(ApiExceptionEnum.PERMISSION_DENIED);
+ public boolean deactivateAuthorizedPlatform(Long authId) {
+ AuthPlatformPO authPlatformPO = authPlatformDao.findById(authId);
+ if (authPlatformPO == null || authPlatformPO.getIsDeleted()) {
+ throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
}
- List<ChatMessagePO> chatMessagePOs =
chatMessageDao.findAllByThreadId(threadId);
- for (ChatMessagePO chatMessagePO : chatMessagePOs) {
- ChatMessageVO chatMessageVO =
ChatMessageConverter.INSTANCE.fromPO2VO(chatMessagePO);
- MessageType sender = chatMessageVO.getSender();
- if (sender == null) {
- continue;
- }
- if (sender.equals(MessageType.USER) ||
sender.equals(MessageType.AI)) {
- chatMessages.add(chatMessageVO);
- }
+ AuthPlatformStatus authPlatformStatus =
AuthPlatformStatus.fromCode(authPlatformPO.getStatus());
+ if (authPlatformStatus.equals(AuthPlatformStatus.ACTIVE)) {
+ authPlatformPO.setStatus(AuthPlatformStatus.AVAILABLE.getCode());
+ return true;
}
- return chatMessages;
+ authPlatformPO.setStatus(authPlatformStatus.getCode());
+ return true;
}
}
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 1937ae4..4928062 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
@@ -329,6 +329,10 @@ CREATE TABLE `llm_auth_platform`
`platform_id` BIGINT(20) UNSIGNED NOT NULL,
`credentials` TEXT NOT NULL,
`is_deleted` TINYINT(1) DEFAULT 0 NULL,
+ `status` SMALLINT DEFAULT 0 COMMENT '1-Active,
2-Available, 3-Unavailable',
+ `model` VARCHAR(255) NOT NULL,
+ `name` VARCHAR(255) NOT NULL,
+ `desc` VARCHAR(255) NOT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
`create_by` BIGINT DEFAULT NULL,
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 2493c85..206f269 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,14 +338,18 @@ CREATE TABLE llm_auth_platform
id BIGINT CHECK (id > 0) NOT NULL GENERATED ALWAYS AS
IDENTITY,
platform_id BIGINT CHECK (platform_id > 0) NOT NULL,
credentials TEXT NOT NULL,
- is_deleted BOOLEAN DEFAULT FALSE,
+ is_deleted BOOLEAN DEFAULT FALSE,
+ status SMALLINT DEFAULT 0,
+ model VARCHAR(255) NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ "desc" VARCHAR(255) NOT NULL,
create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP /* ON UPDATE
CURRENT_TIMESTAMP */,
create_by BIGINT DEFAULT NULL,
update_by BIGINT DEFAULT NULL,
PRIMARY KEY (id)
);
-
+COMMENT ON COLUMN "llm_auth_platform".status IS '1-Active, 2-Available,
3-Unavailable';
CREATE INDEX idx_authorized_platform_id ON llm_auth_platform (platform_id);
CREATE TABLE llm_chat_thread
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 766053f..18936d5 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
@@ -18,14 +18,9 @@
*/
package org.apache.bigtop.manager.server.controller;
-import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
-import org.apache.bigtop.manager.server.model.req.AuthPlatformReq;
import org.apache.bigtop.manager.server.model.req.ChatbotMessageReq;
-import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformVO;
import org.apache.bigtop.manager.server.service.ChatbotService;
import org.apache.bigtop.manager.server.utils.MessageSourceUtils;
import org.apache.bigtop.manager.server.utils.ResponseEntity;
@@ -72,73 +67,15 @@ class ChatbotControllerTest {
mockedMessageSourceUtils.close();
}
- @Test
- void getAllPlatforms() {
- List<PlatformVO> platforms = new ArrayList<>();
- when(chatbotService.platforms()).thenReturn(platforms);
-
- ResponseEntity<List<PlatformVO>> response =
chatbotController.platforms();
-
- assertTrue(response.isSuccess());
- assertEquals(platforms, response.getData());
- }
-
- @Test
- void getAuthorizedPlatforms() {
- List<AuthPlatformVO> authorizedPlatforms = new ArrayList<>();
-
when(chatbotService.authorizedPlatforms()).thenReturn(authorizedPlatforms);
-
- ResponseEntity<List<AuthPlatformVO>> response =
chatbotController.authorizedPlatforms();
-
- assertTrue(response.isSuccess());
- assertEquals(authorizedPlatforms, response.getData());
- }
-
- @Test
- void platformsAuthCredential() {
- Long platformId = 1L;
- List<PlatformAuthCredentialVO> credentials = new ArrayList<>();
-
when(chatbotService.platformsAuthCredentials(platformId)).thenReturn(credentials);
-
- ResponseEntity<List<PlatformAuthCredentialVO>> response =
chatbotController.platformsAuthCredential(platformId);
-
- assertTrue(response.isSuccess());
- assertEquals(credentials, response.getData());
- }
-
- @Test
- void addAuthorizedPlatform() {
- AuthPlatformReq authPlatformReq = new AuthPlatformReq();
- AuthPlatformVO authorizedVO = new AuthPlatformVO();
-
-
when(chatbotService.addAuthorizedPlatform(any(AuthPlatformDTO.class))).thenReturn(authorizedVO);
-
- ResponseEntity<AuthPlatformVO> response =
chatbotController.addAuthorizedPlatform(authPlatformReq);
-
- assertTrue(response.isSuccess());
- assertEquals(authorizedVO, response.getData());
- }
-
- @Test
- void deleteAuthorizedPlatform() {
- Long platformId = 1L;
-
when(chatbotService.deleteAuthorizedPlatform(platformId)).thenReturn(true);
-
- ResponseEntity<Boolean> response =
chatbotController.deleteAuthorizedPlatform(platformId);
-
- assertTrue(response.isSuccess());
- assertEquals(true, response.getData());
- }
-
@Test
void createChatThreads() {
Long platformId = 1L;
- String model = "model1";
+ String model = "";
ChatThreadVO chatThread = new ChatThreadVO();
when(chatbotService.createChatThreads(eq(platformId),
eq(model))).thenReturn(chatThread);
- ResponseEntity<ChatThreadVO> response =
chatbotController.createChatThreads(platformId, model);
+ ResponseEntity<ChatThreadVO> response =
chatbotController.createChatThreads(platformId);
assertTrue(response.isSuccess());
assertEquals(chatThread, response.getData());
@@ -160,12 +97,12 @@ class ChatbotControllerTest {
@Test
void getAllChatThreads() {
Long platformId = 1L;
- String model = "model1";
+ String model = "";
List<ChatThreadVO> chatThreads = new ArrayList<>();
when(chatbotService.getAllChatThreads(eq(platformId),
eq(model))).thenReturn(chatThreads);
- ResponseEntity<List<ChatThreadVO>> response =
chatbotController.getAllChatThreads(platformId, model);
+ ResponseEntity<List<ChatThreadVO>> response =
chatbotController.getAllChatThreads(platformId);
assertTrue(response.isSuccess());
assertEquals(chatThreads, response.getData());