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 42a17216 BIGTOP-4293: Adjust some LLM APIs (#116)
42a17216 is described below
commit 42a1721686e3af819aac96c6badcb14257f409be
Author: haopeng <[email protected]>
AuthorDate: Wed Dec 4 11:47:07 2024 +0800
BIGTOP-4293: Adjust some LLM APIs (#116)
---
.../apache/bigtop/manager/dao/po/PlatformPO.java | 3 ++
.../server/controller/LLMConfigController.java | 6 +++
.../model/converter/ChatThreadConverter.java | 8 +++-
.../manager/server/model/vo/ChatThreadVO.java | 4 ++
.../bigtop/manager/server/model/vo/PlatformVO.java | 6 +--
.../model/vo/{ChatThreadVO.java => TalkVO.java} | 16 ++------
.../manager/server/service/LLMConfigService.java | 2 +
.../server/service/impl/ChatbotServiceImpl.java | 45 ++++++++++++++++++----
.../server/service/impl/LLMConfigServiceImpl.java | 24 ++++++++++++
.../src/main/resources/ddl/MySQL-DDL-CREATE.sql | 13 +++++++
.../main/resources/ddl/PostgreSQL-DDL-CREATE.sql | 13 +++++++
11 files changed, 114 insertions(+), 26 deletions(-)
diff --git
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformPO.java
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformPO.java
index df68a303..99c1071f 100644
---
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformPO.java
+++
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformPO.java
@@ -43,4 +43,7 @@ public class PlatformPO extends BasePO implements
Serializable {
@Column(name = "support_models", length = 255)
private String supportModels;
+
+ @Column(name = "desc")
+ private String desc;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/LLMConfigController.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/LLMConfigController.java
index 51f24a00..2b27cbb6 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/LLMConfigController.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/LLMConfigController.java
@@ -56,6 +56,12 @@ public class LLMConfigController {
return ResponseEntity.success(llmConfigService.platforms());
}
+ @Operation(summary = "get platform", description = "Get platform")
+ @GetMapping("/platforms/{id}")
+ public ResponseEntity<PlatformVO> getPlatform(@PathVariable Long id) {
+ return ResponseEntity.success(llmConfigService.getPlatform(id));
+ }
+
@Operation(summary = "platform credentials", description = "Get platform
auth credentials")
@GetMapping("/platforms/{platformId}/auth-credentials")
public ResponseEntity<List<PlatformAuthCredentialVO>>
platformsAuthCredential(@PathVariable Long platformId) {
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatThreadConverter.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatThreadConverter.java
index 59aa3fae..b28b3700 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatThreadConverter.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/ChatThreadConverter.java
@@ -18,12 +18,15 @@
*/
package org.apache.bigtop.manager.server.model.converter;
+import org.apache.bigtop.manager.dao.po.AuthPlatformPO;
import org.apache.bigtop.manager.dao.po.ChatThreadPO;
+import org.apache.bigtop.manager.dao.po.PlatformPO;
import org.apache.bigtop.manager.server.config.MapStructSharedConfig;
import org.apache.bigtop.manager.server.model.dto.ChatThreadDTO;
import org.apache.bigtop.manager.server.model.req.ChatbotThreadReq;
import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
+import org.mapstruct.Context;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@@ -35,7 +38,10 @@ public interface ChatThreadConverter {
ChatThreadConverter INSTANCE =
Mappers.getMapper(ChatThreadConverter.class);
@Mapping(source = "id", target = "threadId")
- ChatThreadVO fromPO2VO(ChatThreadPO platformAuthorizedPO);
+ @Mapping(target = "model", expression = "java(authPlatformPO.getModel())")
+ @Mapping(target = "platformName", expression =
"java(platformPO.getName())")
+ ChatThreadVO fromPO2VO(
+ ChatThreadPO platformAuthorizedPO, @Context AuthPlatformPO
authPlatformPO, @Context PlatformPO platformPO);
ChatThreadPO fromDTO2PO(ChatThreadDTO chatThreadDTO);
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
index ce49396b..846bbc39 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
@@ -30,6 +30,10 @@ public class ChatThreadVO {
private String name;
+ private String platformName;
+
+ private String model;
+
private String createTime;
private String updateTime;
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformVO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformVO.java
index 5e127229..1e6c1c1e 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformVO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformVO.java
@@ -28,9 +28,5 @@ public class PlatformVO {
private String supportModels;
- public PlatformVO(Long id, String name, String models) {
- this.id = id;
- this.name = name;
- this.supportModels = models;
- }
+ private String desc;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/TalkVO.java
similarity index 79%
copy from
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
copy to
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/TalkVO.java
index ce49396b..f52de979 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/TalkVO.java
@@ -21,18 +21,8 @@ package org.apache.bigtop.manager.server.model.vo;
import lombok.Data;
@Data
-public class ChatThreadVO {
- private Long threadId;
+public class TalkVO {
+ private String content;
- private Long authId;
-
- private Long platformId;
-
- private String name;
-
- private String createTime;
-
- private String updateTime;
-
- public ChatThreadVO() {}
+ private String finishReason;
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/LLMConfigService.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/LLMConfigService.java
index c5400002..223b5723 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/LLMConfigService.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/LLMConfigService.java
@@ -46,4 +46,6 @@ public interface LLMConfigService {
boolean deactivateAuthorizedPlatform(Long authId);
AuthPlatformVO getAuthorizedPlatform(Long authId);
+
+ PlatformVO getPlatform(Long id);
}
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 6bc70776..2ab8acde 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
@@ -44,6 +44,7 @@ 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.vo.ChatMessageVO;
import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
+import org.apache.bigtop.manager.server.model.vo.TalkVO;
import org.apache.bigtop.manager.server.service.ChatbotService;
import org.springframework.context.i18n.LocaleContextHolder;
@@ -139,7 +140,7 @@ public class ChatbotServiceImpl implements ChatbotService {
ChatThreadPO chatThreadPO =
ChatThreadConverter.INSTANCE.fromDTO2PO(chatThreadDTO);
chatThreadPO.setUserId(userId);
chatThreadDao.save(chatThreadPO);
- return ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO);
+ return ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO,
authPlatformPO, platformPO);
}
@Override
@@ -164,6 +165,8 @@ public class ChatbotServiceImpl implements ChatbotService {
if (authPlatformPO == null) {
throw new ApiException(ApiExceptionEnum.NO_PLATFORM_IN_USE);
}
+ PlatformPO platformPO =
platformDao.findById(authPlatformPO.getPlatformId());
+
Long authId = authPlatformPO.getId();
Long userId = SessionUserHolder.getUserId();
List<ChatThreadPO> chatThreadPOS =
chatThreadDao.findAllByAuthIdAndUserId(authId, userId);
@@ -172,7 +175,8 @@ public class ChatbotServiceImpl implements ChatbotService {
if (chatThreadPO.getIsDeleted()) {
continue;
}
- ChatThreadVO chatThreadVO =
ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO);
+ ChatThreadVO chatThreadVO =
+ ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO,
authPlatformPO, platformPO);
chatThreads.add(chatThreadVO);
}
return chatThreads;
@@ -207,13 +211,36 @@ public class ChatbotServiceImpl implements ChatbotService
{
stringFlux.subscribe(
s -> {
try {
- emitter.send(s);
+ TalkVO talkVO = new TalkVO();
+ talkVO.setContent(s);
+ talkVO.setFinishReason(null);
+ emitter.send(talkVO);
} catch (Exception e) {
emitter.completeWithError(e);
}
},
- Throwable::printStackTrace,
- emitter::complete);
+ throwable -> {
+ try {
+ TalkVO errorVO = new TalkVO();
+ errorVO.setContent(null);
+ errorVO.setFinishReason("Error: " +
throwable.getMessage());
+ emitter.send(errorVO);
+ } catch (Exception sendException) {
+ sendException.printStackTrace();
+ }
+ emitter.completeWithError(throwable);
+ },
+ () -> {
+ try {
+ TalkVO finishVO = new TalkVO();
+ finishVO.setContent(null);
+ finishVO.setFinishReason("completed");
+ emitter.send(finishVO);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ emitter.complete();
+ });
emitter.onTimeout(emitter::complete);
return emitter;
@@ -258,7 +285,9 @@ public class ChatbotServiceImpl implements ChatbotService {
chatThreadPO.setName(chatThreadDTO.getName());
chatThreadDao.partialUpdateById(chatThreadPO);
- return ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO);
+ AuthPlatformPO authPlatformPO =
authPlatformDao.findById(chatThreadPO.getAuthId());
+ return ChatThreadConverter.INSTANCE.fromPO2VO(
+ chatThreadPO, authPlatformPO,
platformDao.findById(authPlatformPO.getPlatformId()));
}
@Override
@@ -271,6 +300,8 @@ public class ChatbotServiceImpl implements ChatbotService {
if (!chatThreadPO.getUserId().equals(userId)) {
throw new ApiException(ApiExceptionEnum.PERMISSION_DENIED);
}
- return ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO);
+ AuthPlatformPO authPlatformPO =
authPlatformDao.findById(chatThreadPO.getAuthId());
+ return ChatThreadConverter.INSTANCE.fromPO2VO(
+ chatThreadPO, authPlatformPO,
platformDao.findById(authPlatformPO.getPlatformId()));
}
}
diff --git
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/LLMConfigServiceImpl.java
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/LLMConfigServiceImpl.java
index f5cf12c9..e26dfc71 100644
---
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/LLMConfigServiceImpl.java
+++
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/LLMConfigServiceImpl.java
@@ -276,6 +276,21 @@ public class LLMConfigServiceImpl implements
LLMConfigService {
throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
}
+ String newModel = authPlatformDTO.getModel();
+ if (newModel != null) {
+ if (AuthPlatformStatus.isActive(authPlatformPO.getStatus())) {
+ throw new ApiException(ApiExceptionEnum.PLATFORM_IS_ACTIVE);
+ }
+
+ authPlatformPO.setModel(newModel);
+
+ if (authPlatformDTO.getTestPassed()) {
+
authPlatformPO.setStatus(AuthPlatformStatus.AVAILABLE.getCode());
+ } else {
+
authPlatformPO.setStatus(AuthPlatformStatus.UNAVAILABLE.getCode());
+ }
+ }
+
authPlatformPO.setName(authPlatformDTO.getName());
authPlatformPO.setDesc(authPlatformDTO.getDesc());
@@ -328,4 +343,13 @@ public class LLMConfigServiceImpl implements
LLMConfigService {
return AuthPlatformConverter.INSTANCE.fromPO2VO(
authPlatformPO,
platformDao.findById(authPlatformPO.getPlatformId()));
}
+
+ @Override
+ public PlatformVO getPlatform(Long id) {
+ PlatformPO platformPO = platformDao.findById(id);
+ if (platformPO == null) {
+ throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
+ }
+ return PlatformConverter.INSTANCE.fromPO2VO(platformPO);
+ }
}
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 761abea4..79ea4e51 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
@@ -270,6 +270,7 @@ CREATE TABLE `llm_platform`
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`credential` TEXT DEFAULT NULL,
+ `desc` TEXT DEFAULT NULL,
`support_models` VARCHAR(255) DEFAULT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
@@ -346,3 +347,15 @@ VALUES
('{"apiKey": "API Key"}', 'OpenAI',
'gpt-3.5-turbo,gpt-4,gpt-4o,gpt-3.5-turbo-16k,gpt-4-turbo-preview,gpt-4-32k,gpt-4o-mini'),
('{"apiKey": "API Key"}', 'DashScope',
'qwen-1.8b-chat,qwen-max,qwen-plus,qwen-turbo'),
('{"apiKey": "API Key", "secretKey": "Secret Key"}',
'QianFan','Yi-34B-Chat,ERNIE-4.0-8K,ERNIE-3.5-128K,ERNIE-Speed-8K,Llama-2-7B-Chat,Fuyu-8B');
+
+UPDATE `llm_platform`
+SET `desc` = 'Get your API Key in https://platform.openai.com/api-keys'
+WHERE `name` = 'OpenAI';
+
+UPDATE `llm_platform`
+SET `desc` = 'Get your API Key in
https://bailian.console.aliyun.com/?apiKey=1#/api-key'
+WHERE `name` = 'DashScope';
+
+UPDATE `llm_platform`
+SET `desc` = 'Get API Key and Secret Key in
https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application/v1'
+WHERE `name` = 'QianFan';
\ No newline at end of file
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 060893b9..e2b5ca39 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
@@ -280,6 +280,7 @@ CREATE TABLE llm_platform
id BIGINT CHECK (id > 0) NOT NULL GENERATED ALWAYS AS IDENTITY,
name VARCHAR(255) NOT NULL,
credential TEXT DEFAULT NULL,
+ "desc" TEXT DEFAULT NULL,
support_models VARCHAR(255) DEFAULT NULL,
create_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP /* ON UPDATE
CURRENT_TIMESTAMP */,
@@ -357,3 +358,15 @@ VALUES
('{"apiKey": "API
Key"}','OpenAI','gpt-3.5-turbo,gpt-4,gpt-4o,gpt-3.5-turbo-16k,gpt-4-turbo-preview,gpt-4-32k,gpt-4o-mini'),
('{"apiKey": "API
Key"}','DashScope','qwen-1.8b-chat,qwen-max,qwen-plus,qwen-turbo'),
('{"apiKey": "API Key", "secretKey": "Secret
Key"}','QianFan','Yi-34B-Chat,ERNIE-4.0-8K,ERNIE-3.5-128K,ERNIE-Speed-8K,Llama-2-7B-Chat,Fuyu-8B');
+
+UPDATE llm_platform
+SET "desc" = 'Get your API Key in https://platform.openai.com/api-keys'
+WHERE "name" = 'OpenAI';
+
+UPDATE llm_platform
+SET "desc" = 'Get your API Key in
https://bailian.console.aliyun.com/?apiKey=1#/api-key'
+WHERE "name" = 'DashScope';
+
+UPDATE llm_platform
+SET "desc" = 'Get API Key and Secret Key in
https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application/v1'
+WHERE "name" = 'QianFan';