Support connecting multiple maas platforms 21/139821/1
authorkaixiliu <liukaixi@chinamobile.com>
Thu, 26 Dec 2024 08:10:56 +0000 (16:10 +0800)
committerkaixiliu <liukaixi@chinamobile.com>
Thu, 26 Dec 2024 08:11:36 +0000 (16:11 +0800)
Issue-ID: USECASEUI-844
Change-Id: I9b08bee4e8ede22620853393c01e78a4c452575e
Signed-off-by: kaixiliu <liukaixi@chinamobile.com>
37 files changed:
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/MaaSPlatform.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/BiShengCreateDatasetResponse.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/ProcessFileResponse.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/ResponseStatus.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/fastgpt/dataset/CreateCollectionParam.java [moved from llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/fastgpt/CreateCollectionParam.java with 81% similarity]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/fastgpt/dataset/CreateDataSetParam.java [moved from llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/fastgpt/CreateDataSetParam.java with 78% similarity]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/fastgpt/dataset/CreateDataSetResponse.java [moved from llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/fastgpt/CreateDataSetResponse.java with 73% similarity]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/config/WebClientConfig.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/BiShengConstant.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/CommonConstant.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/FastGptConstant.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/ServerConstant.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/controller/ApplicationController.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/controller/DatasetController.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/controller/MaaSController.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/mapper/ApplicationMapper.java [moved from llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/mapper/FastGptApplicationMapper.java with 81% similarity]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/mapper/DatasetMapper.java [moved from llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/mapper/FastGptDatasetMapper.java with 89% similarity]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/mapper/MaaSPlatformMapper.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/ApplicationService.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/BiShengApplicationService.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/BiShengDatasetService.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/DatasetService.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/FastGptApplicationService.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/FastGptDatasetService.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/MaaSService.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/ApplicationServiceImpl.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/BiShengApplicationServiceImpl.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/BiShengDatasetServiceImpl.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/DatasetServiceImpl.java [new file with mode: 0644]
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/FastGptApplicationServiceImpl.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/FastGptDatasetServiceImpl.java
llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/MaaSServiceImpl.java
llm-adaptation/src/main/resources/application.yaml
llm-adaptation/src/main/resources/llm-adaptation-init.sql
llm-adaptation/src/main/resources/mapper/ApplicationMapper.xml [moved from llm-adaptation/src/main/resources/mapper/FastGptApplicationMapper.xml with 83% similarity]
llm-adaptation/src/main/resources/mapper/DatasetMapper.xml [moved from llm-adaptation/src/main/resources/mapper/FastGptDatasetMapper.xml with 82% similarity]
llm-adaptation/src/main/resources/mapper/MaaSPlatformMapper.xml

diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/BiShengCreateDatasetResponse.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/BiShengCreateDatasetResponse.java
new file mode 100644 (file)
index 0000000..3047376
--- /dev/null
@@ -0,0 +1,9 @@
+package org.onap.usecaseui.llmadaptation.bean.bisheng;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Data;
+
+@Data
+public class BiShengCreateDatasetResponse extends ResponseStatus {
+    private JSONObject data;
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/ProcessFileResponse.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/ProcessFileResponse.java
new file mode 100644 (file)
index 0000000..829f8cd
--- /dev/null
@@ -0,0 +1,12 @@
+package org.onap.usecaseui.llmadaptation.bean.bisheng;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class ProcessFileResponse extends ResponseStatus{
+    private List<JSONObject> data;
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/ResponseStatus.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/bean/bisheng/ResponseStatus.java
new file mode 100644 (file)
index 0000000..90c64b6
--- /dev/null
@@ -0,0 +1,12 @@
+package org.onap.usecaseui.llmadaptation.bean.bisheng;
+
+import lombok.Data;
+
+@Data
+public class ResponseStatus {
+    private int status_code;
+
+    private String status_message;
+
+    private String detail;
+}
index d0a6926..8434b6b 100644 (file)
@@ -31,8 +31,8 @@ public class WebClientConfig {
     public WebClient getWebClient() {
         HttpClient httpClient = HttpClient.create()
                 .tcpConfiguration(tcpClient -> tcpClient
-                        .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000))
-                .responseTimeout(Duration.ofSeconds(10));
+                        .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 50000))
+                .responseTimeout(Duration.ofSeconds(50));
         return WebClient.builder().clientConnector(new ReactorClientHttpConnector(httpClient)).build();
     }
 }
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/BiShengConstant.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/BiShengConstant.java
new file mode 100644 (file)
index 0000000..3a9a3bc
--- /dev/null
@@ -0,0 +1,21 @@
+package org.onap.usecaseui.llmadaptation.constant;
+
+public class BiShengConstant {
+    public static final String COOKIE_VALUE = "access_token_cookie=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ7XCJ1c2VyX25hbWVcIjogXCJyb290XCIsIFwidXNlcl9pZFwiOiAxLCBcInJvbGVcIjogXCJhZG1pblwifSIsImlhdCI6MTczMzEyMjYwMSwibmJmIjoxNzMzMTIyNjAxLCJqdGkiOiI3YzAwNTMyYy1hOGI2LTQwM2YtYmVjMi1mZjAyODU1NjNhMGUiLCJleHAiOjIwNDg0ODI2MDEsInR5cGUiOiJhY2Nlc3MiLCJmcmVzaCI6ZmFsc2V9.K7H2Yoc8h5qv55ciOtfiQZhInWkt7VH5Uq7OGdsxhek";
+
+    public static final String CREATE_DATASET_URL = "/api/v1/knowledge/create";
+
+    public static final String UPLOAD_FILE_URL = "/api/v1/knowledge/upload";
+
+    public static final String PROCESS_FILE_URL = "/api/v1/knowledge/process";
+
+    public static final String DATASET_V2_URL = "/api/v2/filelib/";
+
+    public static final String APPLICATION_URL = "/api/v1/assistant";
+
+    public static final String APPLICATION_CHAT_URL = "/api/v2/assistant/chat/completions";
+
+    public static final String DELETE_APPLICATION = "/api/v1/assistant/delete?assistant_id=";
+
+    public static final String GET_APPLICATION_URL = "/api/v1/assistant/info/";
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/CommonConstant.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/CommonConstant.java
new file mode 100644 (file)
index 0000000..a61484a
--- /dev/null
@@ -0,0 +1,5 @@
+package org.onap.usecaseui.llmadaptation.constant;
+
+public class CommonConstant {
+    public static final String COOKIE = "Cookie";
+}
index 7aefa8f..a4fb335 100644 (file)
@@ -1,29 +1,29 @@
 package org.onap.usecaseui.llmadaptation.constant;
 
 public class FastGptConstant {
-    public static final String COOKIE = "Cookie";
+    public static final String COOKIE_VALUE = "fastgpt_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2NzFmNTQ2MGM4Zjc3YTFjMGYzZTUyYmEiLCJ0ZWFtSWQiOiI2NzFmNTQ2MGM4Zjc3YTFjMGYzZTUyYzAiLCJ0bWJJZCI6IjY3MWY1NDYwYzhmNzdhMWMwZjNlNTJjMiIsImlzUm9vdCI6dHJ1ZSwiZXhwIjoxNzM1NTIzMzY0LCJpYXQiOjE3MzQ5MTg1NjR9.GPomC4qSnz3ADnEIo4sgl8jROaCsomEh9J6kfVAZuBQ";
 
-    public static final String COOKIE_VALUE = "fastgpt_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2NzFmNTQ2MGM4Zjc3YTFjMGYzZTUyYmEiLCJ0ZWFtSWQiOiI2NzFmNTQ2MGM4Zjc3YTFjMGYzZTUyYzAiLCJ0bWJJZCI6IjY3MWY1NDYwYzhmNzdhMWMwZjNlNTJjMiIsImlzUm9vdCI6dHJ1ZSwiZXhwIjoxNzMzMjc0Mzc2LCJpYXQiOjE3MzI2Njk1NzZ9.NdJ_ShISQOa1f5AvGsfq8Zrh4g4e2JwtX1TZ2iCLN6I";
+    public static final String CREATE_DATASET_URL = "/api/core/dataset/create";
 
-    public static final String CREATE_DATASET_URL = "http://172.22.16.126:3000/api/core/dataset/create";
+    public static final String UPLOAD_FILE_URL = "/api/common/file/upload";
 
-    public static final String UPLOAD_FILE_URL = "http://172.22.16.126:3000/api/common/file/upload";
+    public static final String CRATE_COLLECTION_URL = "/api/core/dataset/collection/create/fileId";
 
-    public static final String CRATE_COLLECTION_URL = "http://172.22.16.126:3000/api/core/dataset/collection/create/fileId";
+    public static final String UPDATE_DATASET_URL = "/api/core/dataset/update";
 
-    public static final String DELETE_DATASET_URL = "http://172.22.16.126:3000/api/core/dataset/delete?id=";
+    public static final String DELETE_DATASET_URL = "/api/core/dataset/delete?id=";
 
-    public static final String CREATE_APPLICATION = "http://172.22.16.126:3000/api/core/app/create";
+    public static final String CREATE_APPLICATION = "/api/core/app/create";
 
-    public static final String UPDATE_APPLICATION = "http://172.22.16.126:3000/api/core/app/update?appId=";
+    public static final String UPDATE_APPLICATION = "/api/core/app/update?appId=";
 
-    public static final String PUBLISH_APPLICATION = "http://172.22.16.126:3000/api/core/app/version/publish?appId=";
+    public static final String PUBLISH_APPLICATION = "/api/core/app/version/publish?appId=";
 
     public static final String CREATE_APP_PARAM_FILE_URL = "classpath:Param/createApplication.json";
 
     public static final String PUBLISH_APP_PARAM_FILE_URL = "classpath:Param/publishApplication.json";
 
-    public static final String APPLICATION_CHAT_URL = "http://172.22.16.126:3000/api/v1/chat/completions";
+    public static final String APPLICATION_CHAT_URL = "/api/v1/chat/completions";
 
-    public static final String DELETE_APPLICATION = "http://172.22.16.126:3000/api/core/app/del?appId=";
+    public static final String DELETE_APPLICATION = "/api/core/app/del?appId=";
 }
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/ServerConstant.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/constant/ServerConstant.java
new file mode 100644 (file)
index 0000000..efc6012
--- /dev/null
@@ -0,0 +1,28 @@
+package org.onap.usecaseui.llmadaptation.constant;
+
+import lombok.Getter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+@Getter
+public class ServerConstant {
+
+    @Value("${fastGpt.server}")
+    private String fastGptServer;
+
+    @Value("${biSheng.server}")
+    private String biShengServer;
+
+    @Value("${fastGpt.model}")
+    private String fastGptModel;
+
+    @Value("${biSheng.model}")
+    private int biShengModel;
+
+    @Value("${fastGpt.maaSType}")
+    private String fastGptType;
+
+    @Value("${biSheng.maaSType}")
+    private String biShengType;
+}
index f10495e..a6493de 100644 (file)
@@ -2,9 +2,8 @@ package org.onap.usecaseui.llmadaptation.controller;
 
 import com.alibaba.fastjson2.JSONObject;
 import lombok.extern.slf4j.Slf4j;
-import org.onap.usecaseui.llmadaptation.bean.Application;
-import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
-import org.onap.usecaseui.llmadaptation.service.FastGptApplicationService;
+import org.onap.usecaseui.llmadaptation.bean.*;
+import org.onap.usecaseui.llmadaptation.service.ApplicationService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
@@ -15,32 +14,37 @@ import reactor.core.publisher.Mono;
 @RestController
 @RequestMapping("/api/usecaseui-llm-adaptation/v1/application")
 public class ApplicationController {
-
     @Autowired
-    private FastGptApplicationService fastGptApplicationService;
+    private ApplicationService applicationService;
 
     @PostMapping(value = "/create", produces = MediaType.APPLICATION_JSON_VALUE)
     public Mono<ServiceResult> createApplication(@RequestBody Application application) {
-        return fastGptApplicationService.createApplication(application);
+        return applicationService.createApplication(application);
+
     }
 
     @DeleteMapping(value = "/delete/{applicationId}", produces = MediaType.APPLICATION_JSON_VALUE)
     public Mono<ServiceResult> removeKnowledgeBase(@PathVariable("applicationId") String applicationId) {
-        return fastGptApplicationService.removeApplication(applicationId);
+        return applicationService.removeApplication(applicationId);
     }
 
     @PostMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
     public Flux<String> streamData(@RequestBody JSONObject question) {
-        return fastGptApplicationService.chat(question);
+        return applicationService.chat(question);
     }
 
     @GetMapping(value = {"/query"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public ServiceResult getApplications() {
-        return fastGptApplicationService.getApplications();
+        return applicationService.getApplications();
     }
 
     @GetMapping(value = {"/queryById/{applicationId}"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public ServiceResult getApplications(@PathVariable("applicationId") String applicationId) {
-        return fastGptApplicationService.getApplicationById(applicationId);
+        return applicationService.getApplicationById(applicationId);
+    }
+
+    @PostMapping(value = "/edit", produces = MediaType.APPLICATION_JSON_VALUE)
+    public Mono<ServiceResult> editDataset(@RequestBody Application application) {
+        return applicationService.editApplication(application);
     }
 }
index 5425cd6..af2a672 100644 (file)
@@ -4,8 +4,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
 import org.onap.usecaseui.llmadaptation.bean.ResultHeader;
 import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
-import org.onap.usecaseui.llmadaptation.mapper.FastGptDatasetMapper;
-import org.onap.usecaseui.llmadaptation.service.FastGptDatasetService;
+import org.onap.usecaseui.llmadaptation.mapper.DatasetMapper;
+import org.onap.usecaseui.llmadaptation.service.DatasetService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.http.codec.multipart.FilePart;
@@ -19,36 +19,43 @@ import java.util.List;
 @RestController
 @RequestMapping("/api/usecaseui-llm-adaptation/v1/knowledgeBase")
 public class DatasetController {
+
     @Autowired
-    private FastGptDatasetService fastGptDatasetService;
+    private DatasetMapper datasetMapper;
 
     @Autowired
-    private FastGptDatasetMapper fastGptDatasetMapper;
+    private DatasetService datasetService;
+
 
     @PostMapping(value = "/create", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     public Mono<ServiceResult> handleFileUpload(@RequestPart("files") Flux<FilePart> fileParts,
                                                 @RequestPart("metaData") String metaData) {
-        return fastGptDatasetService.createDataset(fileParts, metaData);
+        return datasetService.createDataset(fileParts, metaData);
     }
 
     @DeleteMapping(value = "/delete/{knowledgeBaseId}", produces = MediaType.APPLICATION_JSON_VALUE)
     public Mono<ServiceResult> removeKnowledgeBase(@PathVariable("knowledgeBaseId") String knowledgeBaseId) {
-        return fastGptDatasetService.removeDataset(knowledgeBaseId);
+        return datasetService.removeDataset(knowledgeBaseId);
     }
 
     @GetMapping(value = {"/query"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public ServiceResult getKnowledgeBaseRecord() {
-        return fastGptDatasetService.getDataSetRecord();
+        return datasetService.getDataSetRecord();
     }
 
     @GetMapping(value = {"/queryById/{knowledgeBaseId}"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public ServiceResult getKnowledgeBaseRecordById(@PathVariable("knowledgeBaseId") String knowledgeBaseId) {
-        return fastGptDatasetService.geDatasetById(knowledgeBaseId);
+        return datasetService.geDatasetById(knowledgeBaseId);
     }
 
     @GetMapping(value = {"/queryByMaaSId/{maaSPlatformId}"}, produces = MediaType.APPLICATION_JSON_VALUE)
     public ServiceResult getKnowledgeBaseRecordByMaaSId(@PathVariable("maaSPlatformId") String maaSPlatformId) {
-        List<KnowledgeBase> knowledgeBaseByMaaSId = fastGptDatasetMapper.getKnowledgeBaseByMaaSId(maaSPlatformId);
+        List<KnowledgeBase> knowledgeBaseByMaaSId = datasetMapper.getKnowledgeBaseByMaaSId(maaSPlatformId);
         return new ServiceResult(new ResultHeader(200, "success"), knowledgeBaseByMaaSId);
     }
+
+    @PostMapping(value = "/edit", produces = MediaType.APPLICATION_JSON_VALUE)
+    public Mono<ServiceResult> editDataset(@RequestBody KnowledgeBase knowledgeBase) {
+        return datasetService.editDataset(knowledgeBase);
+    }
 }
index 4418287..2884f7b 100644 (file)
@@ -2,12 +2,10 @@ package org.onap.usecaseui.llmadaptation.controller;
 
 import lombok.extern.slf4j.Slf4j;
 import org.onap.usecaseui.llmadaptation.bean.*;
-import org.onap.usecaseui.llmadaptation.mapper.MaaSPlatformMapper;
 import org.onap.usecaseui.llmadaptation.service.MaaSService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
-import reactor.core.publisher.Mono;
 
 import java.util.List;
 
@@ -16,9 +14,6 @@ import java.util.List;
 @RequestMapping("/api/usecaseui-llm-adaptation/v1/")
 public class MaaSController {
 
-    @Autowired
-    private MaaSPlatformMapper maaSPlatformMapper;
-
     @Autowired
     private MaaSService maaSService;
 
@@ -30,9 +25,6 @@ public class MaaSController {
 
     @PostMapping(value = "/maas/register", produces = MediaType.APPLICATION_JSON_VALUE)
     public ServiceResult registerMaaSPlatform(@RequestBody MaaSPlatform maaSPlatform) {
-        maaSPlatformMapper.insertMaaSPlatform(maaSPlatform);
-        maaSPlatformMapper.insertModel(maaSPlatform.getMaaSPlatformId(), maaSPlatform.getModelList());
-        return new ServiceResult(new ResultHeader(200, "success"));
+        return maaSService.registerMaaSPlatform(maaSPlatform);
     }
-
 }
@@ -7,7 +7,7 @@ import org.onap.usecaseui.llmadaptation.bean.Application;
 import java.util.List;
 
 @Mapper
-public interface FastGptApplicationMapper {
+public interface ApplicationMapper {
     List<Application> getAllApplication();
 
     int insertApplication(@Param(value = "application") Application application);
@@ -15,4 +15,6 @@ public interface FastGptApplicationMapper {
     int deleteApplicationById(@Param(value = "applicationId") String applicationId);
 
     Application getApplicationById(@Param(value = "applicationId") String applicationId);
+
+    int updateApplication(@Param(value = "application") Application application);
 }
@@ -7,7 +7,7 @@ import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
 import java.util.List;
 
 @Mapper
-public interface FastGptDatasetMapper {
+public interface DatasetMapper {
     int insertKnowledgeBaseRecord(@Param(value = "knowledgeBase") KnowledgeBase knowledgeBase);
 
     int insertFileName(@Param(value = "fileId") String fileId,@Param(value = "fileName") String fileName,@Param(value = "knowledgeBaseId") String knowledgeBaseId);
@@ -23,4 +23,6 @@ public interface FastGptDatasetMapper {
     List<KnowledgeBase> getKnowledgeBaseByMaaSId(@Param(value = "maaSPlatformId") String maaSPlatformId);
 
     int deleteFileById(@Param(value = "knowledgeBaseId") String knowledgeBaseId);
+
+    int updateKnowledgeBase(@Param(value = "knowledgeBase") KnowledgeBase knowledgeBase);
 }
index bfe4089..d4eb21b 100644 (file)
@@ -18,4 +18,8 @@ public interface MaaSPlatformMapper {
     List<MaaSPlatform> getMaaSPlatforms();
 
     List<ModelInformation> getModelList(@Param(value = "maaSPlatformId") String maaSPlatformId);
+
+    MaaSPlatform getMaaSPlatformById(@Param(value = "maaSPlatformId") String maaSPlatformId);
+
+    ModelInformation getModelById(@Param(value = "modelId") String modelId);
 }
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/ApplicationService.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/ApplicationService.java
new file mode 100644 (file)
index 0000000..636832e
--- /dev/null
@@ -0,0 +1,21 @@
+package org.onap.usecaseui.llmadaptation.service;
+
+import com.alibaba.fastjson2.JSONObject;
+import org.onap.usecaseui.llmadaptation.bean.Application;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+public interface ApplicationService {
+    Mono<ServiceResult> createApplication(Application application);
+
+    Flux<String> chat(JSONObject question);
+
+    Mono<ServiceResult> removeApplication(String applicationId);
+
+    ServiceResult getApplications();
+
+    ServiceResult getApplicationById(String applicationId);
+
+    Mono<ServiceResult> editApplication(Application application);
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/BiShengApplicationService.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/BiShengApplicationService.java
new file mode 100644 (file)
index 0000000..8f600c4
--- /dev/null
@@ -0,0 +1,17 @@
+package org.onap.usecaseui.llmadaptation.service;
+
+import com.alibaba.fastjson2.JSONObject;
+import org.onap.usecaseui.llmadaptation.bean.Application;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+public interface BiShengApplicationService {
+    Mono<ServiceResult> createApplication(Application application);
+
+    Flux<String> chat(JSONObject question);
+
+    Mono<ServiceResult> removeApplication(String applicationId);
+
+    Mono<ServiceResult> editApplication(Application application);
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/BiShengDatasetService.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/BiShengDatasetService.java
new file mode 100644 (file)
index 0000000..27716d7
--- /dev/null
@@ -0,0 +1,15 @@
+package org.onap.usecaseui.llmadaptation.service;
+
+import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
+import org.springframework.http.codec.multipart.FilePart;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+public interface BiShengDatasetService {
+    Mono<ServiceResult> createDataset(Flux<FilePart> fileParts, String metaData);
+
+    Mono<ServiceResult> removeDataset(String knowledgeBaseId);
+
+    Mono<ServiceResult> editDataset(KnowledgeBase knowledgeBase);
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/DatasetService.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/DatasetService.java
new file mode 100644 (file)
index 0000000..f213362
--- /dev/null
@@ -0,0 +1,19 @@
+package org.onap.usecaseui.llmadaptation.service;
+
+import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
+import org.springframework.http.codec.multipart.FilePart;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+public interface DatasetService {
+    Mono<ServiceResult> createDataset(Flux<FilePart> fileParts, String metaData);
+
+    Mono<ServiceResult> removeDataset(String knowledgeBaseId);
+
+    ServiceResult getDataSetRecord();
+
+    ServiceResult geDatasetById(String knowledgeBaseId);
+
+    Mono<ServiceResult> editDataset(KnowledgeBase knowledgeBase);
+}
index 19e6c11..6d09e6f 100644 (file)
@@ -13,7 +13,5 @@ public interface FastGptApplicationService {
 
     Mono<ServiceResult> removeApplication(String applicationId);
 
-    ServiceResult getApplications();
-
-    ServiceResult getApplicationById(String applicationId);
+    Mono<ServiceResult> editApplication(Application application);
 }
index 901b1e0..47356b8 100644 (file)
@@ -1,5 +1,6 @@
 package org.onap.usecaseui.llmadaptation.service;
 
+import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
 import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
 import org.springframework.http.codec.multipart.FilePart;
 import reactor.core.publisher.Flux;
@@ -10,7 +11,5 @@ public interface FastGptDatasetService {
 
     Mono<ServiceResult> removeDataset(String knowledgeBaseId);
 
-    ServiceResult getDataSetRecord();
-
-    ServiceResult geDatasetById(String knowledgeBaseId);
+    Mono<ServiceResult> editDataset(KnowledgeBase knowledgeBase);
 }
index 0517887..026666a 100644 (file)
@@ -1,10 +1,13 @@
 package org.onap.usecaseui.llmadaptation.service;
 
+import org.onap.usecaseui.llmadaptation.bean.MaaSPlatform;
 import org.onap.usecaseui.llmadaptation.bean.Operator;
-import reactor.core.publisher.Mono;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
 
 import java.util.List;
 
 public interface MaaSService {
     List<Operator> getAllMaaSPlatform();
+
+    ServiceResult registerMaaSPlatform(MaaSPlatform maaSPlatform);
 }
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/ApplicationServiceImpl.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/ApplicationServiceImpl.java
new file mode 100644 (file)
index 0000000..ae9a515
--- /dev/null
@@ -0,0 +1,138 @@
+package org.onap.usecaseui.llmadaptation.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.onap.usecaseui.llmadaptation.bean.*;
+import org.onap.usecaseui.llmadaptation.constant.ServerConstant;
+import org.onap.usecaseui.llmadaptation.mapper.ApplicationMapper;
+import org.onap.usecaseui.llmadaptation.mapper.DatasetMapper;
+import org.onap.usecaseui.llmadaptation.mapper.MaaSPlatformMapper;
+import org.onap.usecaseui.llmadaptation.service.ApplicationService;
+import org.onap.usecaseui.llmadaptation.service.BiShengApplicationService;
+import org.onap.usecaseui.llmadaptation.service.FastGptApplicationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class ApplicationServiceImpl implements ApplicationService {
+    @Autowired
+    private ApplicationMapper applicationMapper;
+
+    @Autowired
+    private DatasetMapper datasetMapper;
+
+    @Autowired
+    private FastGptApplicationService fastGptApplicationService;
+
+    @Autowired
+    private BiShengApplicationService biShengApplicationService;
+
+    @Autowired
+    private MaaSPlatformMapper maaSPlatformMapper;
+
+    @Autowired
+    private ServerConstant serverConstant;
+
+    @Override
+    public Mono<ServiceResult> createApplication(Application application) {
+        List<Application> applications = applicationMapper.getAllApplication();
+        if (!CollectionUtils.isEmpty(applications)) {
+            List<Application> collect = applications.stream().filter(app -> app.getApplicationName().equals(application.getApplicationName())).toList();
+            if (!collect.isEmpty()) {
+                return Mono.just(new ServiceResult(new ResultHeader(500, "name exists"), applications));
+            }
+        }
+        MaaSPlatform maaSPlatformById = maaSPlatformMapper.getMaaSPlatformById(application.getMaaSPlatformId());
+        if (maaSPlatformById == null) {
+            return Mono.just(new ServiceResult(new ResultHeader(500, "maas is not exist")));
+        }
+        String maaSType = maaSPlatformById.getMaaSType();
+        String fastGptType = serverConstant.getFastGptType();
+        if (fastGptType.equals(maaSType)) {
+            return fastGptApplicationService.createApplication(application);
+        }
+        return biShengApplicationService.createApplication(application);
+    }
+
+    @Override
+    public Mono<ServiceResult> removeApplication(String applicationId) {
+        String maaSType = getMaaSType(applicationId);
+        String fastGptType = serverConstant.getFastGptType();
+        if (fastGptType.equals(maaSType)) {
+            return fastGptApplicationService.removeApplication(applicationId);
+        }
+        return biShengApplicationService.removeApplication(applicationId);
+    }
+
+    @Override
+    public Flux<String> chat(JSONObject question) {
+        String applicationId = question.getString("applicationId");
+        String maaSType = getMaaSType(applicationId);
+        String fastGptType = serverConstant.getFastGptType();
+        if (fastGptType.equals(maaSType)) {
+            return fastGptApplicationService.chat(question);
+        }
+        return biShengApplicationService.chat(question);
+    }
+
+    @Override
+    public ServiceResult getApplications() {
+        List<Application> allApplication = applicationMapper.getAllApplication();
+        if (CollectionUtils.isEmpty(allApplication)) {
+            return new ServiceResult(new ResultHeader(500, "no application"), allApplication);
+        }
+        allApplication.forEach(application -> {
+            KnowledgeBase knowledgeBaseRecordById = datasetMapper.getKnowledgeBaseRecordById(application.getKnowledgeBaseId());
+            if (knowledgeBaseRecordById != null) {
+                application.setOperatorId(knowledgeBaseRecordById.getOperatorId());
+                application.setOperatorName(knowledgeBaseRecordById.getOperatorName());
+                application.setMaaSPlatformId(knowledgeBaseRecordById.getMaaSPlatformId());
+                application.setMaaSPlatformName(knowledgeBaseRecordById.getMaaSPlatformName());
+                application.setKnowledgeBaseName(knowledgeBaseRecordById.getKnowledgeBaseName());
+            }
+        });
+        return new ServiceResult(new ResultHeader(200, "success"), allApplication);
+    }
+
+    @Override
+    public ServiceResult getApplicationById(String applicationId) {
+        Application application = applicationMapper.getApplicationById(applicationId);
+        if (application == null) {
+            return new ServiceResult(new ResultHeader(500, "no application"), application);
+        }
+        KnowledgeBase knowledgeBaseRecordById = datasetMapper.getKnowledgeBaseRecordById(application.getKnowledgeBaseId());
+        application.setOperatorId(knowledgeBaseRecordById.getOperatorId());
+        application.setOperatorName(knowledgeBaseRecordById.getOperatorName());
+        application.setMaaSPlatformId(knowledgeBaseRecordById.getMaaSPlatformId());
+        application.setMaaSPlatformName(knowledgeBaseRecordById.getMaaSPlatformName());
+        application.setKnowledgeBaseName(knowledgeBaseRecordById.getKnowledgeBaseName());
+        return new ServiceResult(new ResultHeader(200, "success"), application);
+    }
+
+    @Override
+    public Mono<ServiceResult> editApplication(Application application) {
+        MaaSPlatform maaSPlatformById = maaSPlatformMapper.getMaaSPlatformById(application.getMaaSPlatformId());
+        if (maaSPlatformById == null) {
+            return Mono.just(new ServiceResult(new ResultHeader(500, "maas is not exist")));
+        }
+        String maaSType = maaSPlatformById.getMaaSType();
+        String fastGptType = serverConstant.getFastGptType();
+        if (fastGptType.equals(maaSType)) {
+            return fastGptApplicationService.editApplication(application);
+        }
+        return biShengApplicationService.editApplication(application);
+    }
+
+    private String getMaaSType(String applicationId) {
+        Application applicationById = applicationMapper.getApplicationById(applicationId);
+        KnowledgeBase knowledgeBaseRecordById = datasetMapper.getKnowledgeBaseRecordById(applicationById.getKnowledgeBaseId());
+        MaaSPlatform maaSPlatformById = maaSPlatformMapper.getMaaSPlatformById(knowledgeBaseRecordById.getMaaSPlatformId());
+        return maaSPlatformById.getMaaSType();
+    }
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/BiShengApplicationServiceImpl.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/BiShengApplicationServiceImpl.java
new file mode 100644 (file)
index 0000000..737fc66
--- /dev/null
@@ -0,0 +1,178 @@
+package org.onap.usecaseui.llmadaptation.service.impl;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.onap.usecaseui.llmadaptation.bean.Application;
+import org.onap.usecaseui.llmadaptation.bean.ResultHeader;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
+import org.onap.usecaseui.llmadaptation.bean.bisheng.BiShengCreateDatasetResponse;
+import org.onap.usecaseui.llmadaptation.constant.BiShengConstant;
+import org.onap.usecaseui.llmadaptation.constant.CommonConstant;
+import org.onap.usecaseui.llmadaptation.constant.ServerConstant;
+import org.onap.usecaseui.llmadaptation.mapper.ApplicationMapper;
+import org.onap.usecaseui.llmadaptation.service.BiShengApplicationService;
+import org.onap.usecaseui.llmadaptation.util.TimeUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.springframework.http.MediaType.APPLICATION_JSON;
+
+@Slf4j
+@Service
+public class BiShengApplicationServiceImpl implements BiShengApplicationService {
+    @Autowired
+    private ApplicationMapper applicationMapper;
+
+    @Autowired
+    private WebClient webClient;
+
+    @Autowired
+    private ServerConstant serverConstant;
+
+    @Override
+    public Mono<ServiceResult> createApplication(Application application) {
+        JSONObject createParam = new JSONObject();
+        createParam.put("logo", "");
+        createParam.put("name", application.getApplicationName());
+        createParam.put("prompt", application.getPrompt());
+        return webClient.post()
+                .uri(serverConstant.getBiShengServer() + BiShengConstant.APPLICATION_URL)
+                .contentType(APPLICATION_JSON)
+                .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                .bodyValue(createParam)
+                .retrieve()
+                .bodyToMono(BiShengCreateDatasetResponse.class)
+                .flatMap(createResponse -> {
+                    JSONObject data = createResponse.getData();
+                    if (data == null) {
+                        return Mono.just(new ServiceResult(new ResultHeader(createResponse.getStatus_code(), createResponse.getStatus_message())));
+                    }
+                    String applicationId = data.getString("id");
+                    data.put("model_name", application.getLargeModelId());
+                    data.put("temperature", application.getTemperature() / 10);
+                    List<Integer> list = new ArrayList<>();
+                    list.add(Integer.valueOf(application.getKnowledgeBaseId()));
+                    data.put("knowledge_list", list);
+                    data.put("guide_word", application.getOpeningRemarks());
+                    data.put("update_time", TimeUtil.getNowTime());
+                    return webClient.put()
+                            .uri(serverConstant.getBiShengServer() + BiShengConstant.APPLICATION_URL)
+                            .contentType(APPLICATION_JSON)
+                            .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                            .bodyValue(data)
+                            .retrieve()
+                            .bodyToMono(BiShengCreateDatasetResponse.class)
+                            .flatMap(updateResponse -> {
+                                application.setApplicationId(applicationId);
+                                applicationMapper.insertApplication(application);
+                                return Mono.just(new ServiceResult(new ResultHeader(200, "Application created successfully")));
+                            });
+                }).onErrorResume(e -> {
+                    log.error("Error occurred while creating application: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "Application creation failed")));
+                });
+    }
+
+    @Override
+    public Flux<String> chat(JSONObject question) {
+        JSONObject param = new JSONObject();
+        param.put("model", question.getString("applicationId"));
+        param.put("temperature", 0);
+        param.put("stream", true);
+        JSONObject message = new JSONObject();
+        message.put("role", "user");
+        message.put("content", question.getString("question"));
+        JSONArray jsonArray = new JSONArray();
+        jsonArray.add(message);
+        param.put("messages", jsonArray);
+        return webClient.post()
+                .uri(serverConstant.getBiShengServer() + BiShengConstant.APPLICATION_CHAT_URL)
+                .bodyValue(param)
+                .retrieve()
+                .bodyToFlux(String.class)
+                .flatMap(response -> {
+                    if("[DONE]".equals(response)){
+                        return Flux.just(response);
+                    }
+                    JSONArray choices = JSONObject.parseObject(response).getJSONArray("choices");
+                    String jsonString = JSONObject.toJSONString(choices.get(0));
+                    JSONObject jsonObject = JSONObject.parseObject(jsonString);
+                    String string = jsonObject.getJSONObject("delta").getString("content");
+                    return Flux.just(string);
+                })
+                .onErrorResume(e -> {
+                    log.error("An error occurred {}", e.getMessage());
+                    return Flux.just("Network Error");
+                });
+    }
+
+    @Override
+    public Mono<ServiceResult> removeApplication(String applicationId) {
+        String url = serverConstant.getBiShengServer() + BiShengConstant.DELETE_APPLICATION + applicationId;
+        return webClient.post()
+                .uri(url)
+                .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                .retrieve()
+                .bodyToMono(BiShengCreateDatasetResponse.class)
+                .flatMap(response -> {
+                    if (response.getStatus_code() == 200) {
+                        return Mono.fromRunnable(() -> {
+                            try {
+                                applicationMapper.deleteApplicationById(applicationId);
+                            } catch (Exception dbException) {
+                                throw new RuntimeException("Database operation failed", dbException);
+                            }
+                        }).then(Mono.just(new ServiceResult(new ResultHeader(200, "delete success"))));
+                    } else {
+                        return Mono.just(new ServiceResult(new ResultHeader(500, response.getStatus_message())));
+                    }
+                })
+                .onErrorResume(e -> {
+                    log.error("Error occurred while delete dataset: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "delete failed")));
+                });
+    }
+
+    @Override
+    public Mono<ServiceResult> editApplication(Application application) {
+        String url = serverConstant.getBiShengServer() + BiShengConstant.GET_APPLICATION_URL + application.getApplicationId();
+        return webClient.get()
+                .uri(url)
+                .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                .retrieve()
+                .bodyToMono(BiShengCreateDatasetResponse.class)
+                .flatMap(createResponse -> {
+                    JSONObject data = createResponse.getData();
+                    if (data == null) {
+                        return Mono.just(new ServiceResult(new ResultHeader(createResponse.getStatus_code(), createResponse.getStatus_message())));
+                    }
+                    data.put("desc", application.getApplicationDescription());
+                    data.put("name", application.getApplicationName());
+                    data.put("update_time", TimeUtil.getNowTime());
+                    List<Integer> list = new ArrayList<>();
+                    list.add(Integer.valueOf(application.getKnowledgeBaseId()));
+                    data.put("knowledge_list", list);
+                    return webClient.put()
+                            .uri(serverConstant.getBiShengServer() + BiShengConstant.APPLICATION_URL)
+                            .contentType(APPLICATION_JSON)
+                            .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                            .bodyValue(data)
+                            .retrieve()
+                            .bodyToMono(BiShengCreateDatasetResponse.class)
+                            .flatMap(updateResponse -> {
+                                applicationMapper.updateApplication(application);
+                                return Mono.just(new ServiceResult(new ResultHeader(200, "Application update successfully")));
+                            });
+                }).onErrorResume(e -> {
+                    log.error("Error occurred while update application: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "Application update failed")));
+                });
+    }
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/BiShengDatasetServiceImpl.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/BiShengDatasetServiceImpl.java
new file mode 100644 (file)
index 0000000..bc1cec0
--- /dev/null
@@ -0,0 +1,191 @@
+package org.onap.usecaseui.llmadaptation.service.impl;
+
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
+import org.onap.usecaseui.llmadaptation.bean.ResultHeader;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
+import org.onap.usecaseui.llmadaptation.bean.bisheng.BiShengCreateDatasetResponse;
+import org.onap.usecaseui.llmadaptation.bean.bisheng.ProcessFileResponse;
+import org.onap.usecaseui.llmadaptation.constant.BiShengConstant;
+import org.onap.usecaseui.llmadaptation.constant.CommonConstant;
+import org.onap.usecaseui.llmadaptation.constant.ServerConstant;
+import org.onap.usecaseui.llmadaptation.mapper.DatasetMapper;
+import org.onap.usecaseui.llmadaptation.service.BiShengDatasetService;
+import org.onap.usecaseui.llmadaptation.util.TimeUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.ContentDisposition;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.MultipartBodyBuilder;
+import org.springframework.http.codec.multipart.FilePart;
+import org.springframework.stereotype.Service;
+import org.springframework.web.reactive.function.BodyInserters;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.UUID;
+
+import static org.springframework.http.MediaType.APPLICATION_JSON;
+
+@Slf4j
+@Service
+public class BiShengDatasetServiceImpl implements BiShengDatasetService {
+
+    @Autowired
+    private WebClient webClient;
+
+    @Autowired
+    private DatasetMapper datasetMapper;
+
+    @Autowired
+    private ServerConstant serverConstant;
+
+    @Override
+    public Mono<ServiceResult> createDataset(Flux<FilePart> fileParts, String metaData) {
+        KnowledgeBase knowledgeBase = JSONObject.parseObject(metaData, KnowledgeBase.class);
+        knowledgeBase.setUpdateTime(TimeUtil.getNowTime());
+        JSONObject createParam = new JSONObject();
+        createParam.put("description", knowledgeBase.getKnowledgeBaseDescription());
+        createParam.put("model", serverConstant.getBiShengModel());
+        createParam.put("name", knowledgeBase.getKnowledgeBaseName());
+        return webClient.post()
+                .uri(serverConstant.getBiShengServer() + BiShengConstant.CREATE_DATASET_URL)
+                .contentType(APPLICATION_JSON)
+                .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                .bodyValue(createParam)
+                .retrieve()
+                .bodyToMono(BiShengCreateDatasetResponse.class)
+                .flatMap(response -> {
+                    if (response.getStatus_code() != 200) {
+                        return Mono.just(new ServiceResult(new ResultHeader(500, response.getStatus_message())));
+                    }
+                    int knowledgeBaseId = response.getData().getIntValue("id");
+                    return fileParts.flatMap(filePart -> processFile(filePart, knowledgeBaseId))
+                            .then(Mono.defer(() -> {
+                                knowledgeBase.setKnowledgeBaseId(String.valueOf(knowledgeBaseId));
+                                datasetMapper.insertKnowledgeBaseRecord(knowledgeBase);
+                                return Mono.just(new ServiceResult(new ResultHeader(200, "create success")));
+                            })).onErrorResume(e -> {
+                                log.error("Error occurred during file upload: {}", e.getMessage());
+                                return Mono.just(new ServiceResult(new ResultHeader(500, "file upload failed")));
+                            });
+                }).onErrorResume(e -> {
+                    log.error("Error occurred while creating dataset: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "create failed")));
+                });
+    }
+
+    private Mono<Void> processFile(FilePart filePart, int knowledgeBaseId) {
+        String filename = filePart.filename();
+        Flux<DataBuffer> content = filePart.content();
+        MultipartBodyBuilder builder = new MultipartBodyBuilder();
+        builder.asyncPart("file", content, DataBuffer.class)
+                .headers(headers -> {
+                    ContentDisposition contentDisposition = ContentDisposition
+                            .builder("form-data")
+                            .name("file")
+                            .filename(filename)
+                            .build();
+                    headers.setContentDisposition(contentDisposition);
+                    headers.setContentType(MediaType.TEXT_PLAIN);
+                });
+        return webClient.post()
+                .uri(serverConstant.getBiShengServer() + BiShengConstant.UPLOAD_FILE_URL)
+                .contentType(MediaType.MULTIPART_FORM_DATA)
+                .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                .body(BodyInserters.fromMultipartData(builder.build()))
+                .retrieve()
+                .bodyToMono(BiShengCreateDatasetResponse.class)
+                .flatMap(response -> {
+                    if (response.getStatus_code() != 200) {
+                        log.error("response is {}", response);
+                        return Mono.empty();
+                    }
+                    String filePath = response.getData().getString("file_path");
+                    JSONObject processParam = new JSONObject();
+                    processParam.put("knowledge_id", knowledgeBaseId);
+                    JSONArray jsonArray = new JSONArray();
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("file_path", filePath);
+                    jsonArray.add(jsonObject);
+                    processParam.put("file_list", jsonArray);
+                    return webClient.post()
+                            .uri(serverConstant.getBiShengServer() + BiShengConstant.PROCESS_FILE_URL)
+                            .contentType(APPLICATION_JSON)
+                            .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                            .bodyValue(processParam)
+                            .retrieve()
+                            .bodyToMono(ProcessFileResponse.class).flatMap(lastResponse -> {
+                                if (lastResponse.getStatus_code() == 200) {
+                                    String fileId = UUID.randomUUID().toString();
+                                    datasetMapper.insertFileName(fileId, filename, String.valueOf(knowledgeBaseId));
+                                }
+                                return Mono.empty();
+                            });
+                });
+    }
+
+    @Override
+    public Mono<ServiceResult> removeDataset(String knowledgeBaseId) {
+        return webClient.delete()
+                .uri(serverConstant.getBiShengServer() + BiShengConstant.DATASET_V2_URL + knowledgeBaseId)
+                .header(CommonConstant.COOKIE, BiShengConstant.COOKIE_VALUE)
+                .retrieve()
+                .bodyToMono(BiShengCreateDatasetResponse.class)
+                .flatMap(response -> {
+                    if (response.getStatus_code() == 200) {
+                        return Mono.fromRunnable(() -> {
+                            try {
+                                datasetMapper.deleteKnowledgeBaseByUuid(knowledgeBaseId);
+                                datasetMapper.deleteFileById(knowledgeBaseId);
+                            } catch (Exception dbException) {
+                                throw new RuntimeException("Database operation failed", dbException);
+                            }
+                        }).then(Mono.just(new ServiceResult(new ResultHeader(200, "delete success"))));
+                    } else {
+                        return Mono.just(new ServiceResult(new ResultHeader(500, response.getStatus_message())));
+                    }
+                })
+                .onErrorResume(e -> {
+                    log.error("Error occurred while delete dataset: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "delete failed")));
+                });
+    }
+
+    @Override
+    public Mono<ServiceResult> editDataset(KnowledgeBase knowledgeBase) {
+        KnowledgeBase knowledgeBaseRecordById = datasetMapper.getKnowledgeBaseRecordById(knowledgeBase.getKnowledgeBaseId());
+        if (knowledgeBaseRecordById == null) {
+            return Mono.just(new ServiceResult(new ResultHeader(500, "dataset is not exist")));
+        }
+        JSONObject updateParam = new JSONObject();
+        updateParam.put("knowledge_id", knowledgeBase.getKnowledgeBaseId());
+        updateParam.put("name", knowledgeBase.getKnowledgeBaseName());
+        updateParam.put("description", knowledgeBase.getKnowledgeBaseDescription());
+        updateParam.put("model", serverConstant.getBiShengModel());
+
+        return webClient.put()
+                .uri(serverConstant.getBiShengServer() + BiShengConstant.DATASET_V2_URL)
+                .contentType(APPLICATION_JSON)
+                .bodyValue(updateParam)
+                .retrieve()
+                .bodyToMono(BiShengCreateDatasetResponse.class)
+                .flatMap(response -> {
+                    if (response.getStatus_code() == 200) {
+                        return Mono.fromRunnable(() -> {
+                            knowledgeBase.setUpdateTime(TimeUtil.getNowTime());
+                            datasetMapper.updateKnowledgeBase(knowledgeBase);
+                        }).then(Mono.just(new ServiceResult(new ResultHeader(200, "update success"))));
+                    } else {
+                        return Mono.just(new ServiceResult(new ResultHeader(500, response.getStatus_message())));
+                    }
+                })
+                .onErrorResume(e -> {
+                    log.error("Error occurred while delete dataset: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "update failed")));
+                });
+    }
+}
diff --git a/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/DatasetServiceImpl.java b/llm-adaptation/src/main/java/org/onap/usecaseui/llmadaptation/service/impl/DatasetServiceImpl.java
new file mode 100644 (file)
index 0000000..0a6feb5
--- /dev/null
@@ -0,0 +1,111 @@
+package org.onap.usecaseui.llmadaptation.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
+import org.onap.usecaseui.llmadaptation.bean.MaaSPlatform;
+import org.onap.usecaseui.llmadaptation.bean.ResultHeader;
+import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
+import org.onap.usecaseui.llmadaptation.constant.ServerConstant;
+import org.onap.usecaseui.llmadaptation.mapper.DatasetMapper;
+import org.onap.usecaseui.llmadaptation.mapper.MaaSPlatformMapper;
+import org.onap.usecaseui.llmadaptation.service.BiShengDatasetService;
+import org.onap.usecaseui.llmadaptation.service.DatasetService;
+import org.onap.usecaseui.llmadaptation.service.FastGptDatasetService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.codec.multipart.FilePart;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class DatasetServiceImpl implements DatasetService {
+
+    @Autowired
+    private DatasetMapper datasetMapper;
+
+    @Autowired
+    private FastGptDatasetService fastGptDatasetService;
+
+    @Autowired
+    private BiShengDatasetService biShengDatasetService;
+
+    @Autowired
+    private MaaSPlatformMapper maaSPlatformMapper;
+
+    @Autowired
+    private ServerConstant serverConstant;
+
+    @Override
+    public Mono<ServiceResult> createDataset(Flux<FilePart> fileParts, String metaData) {
+        KnowledgeBase knowledgeBase = JSONObject.parseObject(metaData, KnowledgeBase.class);
+        List<KnowledgeBase> knowledgeBaseRecords = datasetMapper.getKnowledgeBaseRecords();
+        if (!CollectionUtils.isEmpty(knowledgeBaseRecords)) {
+            List<KnowledgeBase> collect = knowledgeBaseRecords.stream().filter(base -> base.getKnowledgeBaseName().equals(knowledgeBase.getKnowledgeBaseName())).toList();
+            if (!collect.isEmpty()) {
+                return Mono.just(new ServiceResult(new ResultHeader(200, "name exists"), knowledgeBaseRecords));
+            }
+        }
+        MaaSPlatform maaSPlatformById = maaSPlatformMapper.getMaaSPlatformById(knowledgeBase.getMaaSPlatformId());
+        String maaSType = maaSPlatformById.getMaaSType();
+        String fastGptType = serverConstant.getFastGptType();
+        if (fastGptType.equals(maaSType)) {
+            return fastGptDatasetService.createDataset(fileParts, metaData);
+        }
+        return biShengDatasetService.createDataset(fileParts, metaData);
+    }
+
+    @Override
+    public Mono<ServiceResult> removeDataset(String knowledgeBaseId) {
+        KnowledgeBase knowledgeBaseRecordById = datasetMapper.getKnowledgeBaseRecordById(knowledgeBaseId);
+        MaaSPlatform maaSPlatformById = maaSPlatformMapper.getMaaSPlatformById(knowledgeBaseRecordById.getMaaSPlatformId());
+        String maaSType = maaSPlatformById.getMaaSType();
+        String fastGptType = serverConstant.getFastGptType();
+        if (fastGptType.equals(maaSType)) {
+            return fastGptDatasetService.removeDataset(knowledgeBaseId);
+        }
+        return biShengDatasetService.removeDataset(knowledgeBaseId);
+    }
+
+    @Override
+    public ServiceResult getDataSetRecord() {
+        List<KnowledgeBase> knowledgeBaseRecords = datasetMapper.getKnowledgeBaseRecords();
+        if (CollectionUtils.isEmpty(knowledgeBaseRecords)) {
+            return new ServiceResult(new ResultHeader(500, "get datasets failed"), knowledgeBaseRecords);
+        }
+
+        knowledgeBaseRecords.forEach(knowledgeBase -> {
+            List<String> fileNamesByKnowledgeBaseId = datasetMapper.getFileNamesByKnowledgeBaseId(knowledgeBase.getKnowledgeBaseId());
+            knowledgeBase.setFilesName(fileNamesByKnowledgeBaseId);
+        });
+        return new ServiceResult(new ResultHeader(200, "success"), knowledgeBaseRecords);
+    }
+
+    @Override
+    public ServiceResult geDatasetById(String knowledgeBaseId) {
+        KnowledgeBase knowledgeBase = datasetMapper.getKnowledgeBaseRecordById(knowledgeBaseId);
+        if (knowledgeBase == null) {
+            return new ServiceResult(new ResultHeader(500, "get dataset failed"));
+        }
+        List<String> fileNamesByKnowledgeBaseId = datasetMapper.getFileNamesByKnowledgeBaseId(knowledgeBase.getKnowledgeBaseId());
+        knowledgeBase.setFilesName(fileNamesByKnowledgeBaseId);
+
+        return new ServiceResult(new ResultHeader(200, "success"), knowledgeBase);
+    }
+
+    @Override
+    public Mono<ServiceResult> editDataset(KnowledgeBase knowledgeBase) {
+        KnowledgeBase knowledgeBaseRecordById = datasetMapper.getKnowledgeBaseRecordById(knowledgeBase.getKnowledgeBaseId());
+        MaaSPlatform maaSPlatformById = maaSPlatformMapper.getMaaSPlatformById(knowledgeBaseRecordById.getMaaSPlatformId());
+        String maaSType = maaSPlatformById.getMaaSType();
+        String fastGptType = serverConstant.getFastGptType();
+        if (fastGptType.equals(maaSType)) {
+            return fastGptDatasetService.editDataset(knowledgeBase);
+        }
+        return biShengDatasetService.editDataset(knowledgeBase);
+    }
+}
index d8f68ad..14f30ad 100644 (file)
@@ -5,20 +5,19 @@ import com.alibaba.fastjson2.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.onap.usecaseui.llmadaptation.bean.Application;
-import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
 import org.onap.usecaseui.llmadaptation.bean.ResultHeader;
 import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
-import org.onap.usecaseui.llmadaptation.bean.fastgpt.CreateDataSetResponse;
+import org.onap.usecaseui.llmadaptation.bean.fastgpt.dataset.CreateDataSetResponse;
 import org.onap.usecaseui.llmadaptation.bean.fastgpt.application.*;
+import org.onap.usecaseui.llmadaptation.constant.CommonConstant;
 import org.onap.usecaseui.llmadaptation.constant.FastGptConstant;
-import org.onap.usecaseui.llmadaptation.mapper.FastGptApplicationMapper;
-import org.onap.usecaseui.llmadaptation.mapper.FastGptDatasetMapper;
+import org.onap.usecaseui.llmadaptation.constant.ServerConstant;
+import org.onap.usecaseui.llmadaptation.mapper.ApplicationMapper;
 import org.onap.usecaseui.llmadaptation.service.FastGptApplicationService;
 import org.onap.usecaseui.llmadaptation.util.TimeUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.ResourceLoader;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.reactive.function.client.WebClient;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
@@ -39,16 +38,17 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
     private ResourceLoader resourceLoader;
 
     @Autowired
-    private FastGptApplicationMapper fastGptApplicationMapper;
+    private ApplicationMapper applicationMapper;
 
     @Autowired
     private WebClient webClient;
 
     @Autowired
-    private FastGptDatasetMapper fastGptDatasetMapper;
+    private ServerConstant serverConstant;
 
     private final ObjectMapper objectMapper = new ObjectMapper();
 
+    @Override
     public Mono<ServiceResult> createApplication(Application application) {
         try (InputStream inputStream = resourceLoader.getResource(FastGptConstant.CREATE_APP_PARAM_FILE_URL).getInputStream()) {
             CreateApplicationParam createApplicationParam = objectMapper.readValue(inputStream, CreateApplicationParam.class);
@@ -68,9 +68,9 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
 
     private Mono<ServiceResult> createApplication(CreateApplicationParam createApplicationParam, Application application) {
         return webClient.post()
-                .uri(FastGptConstant.CREATE_APPLICATION)
+                .uri(serverConstant.getFastGptServer() + FastGptConstant.CREATE_APPLICATION)
                 .contentType(APPLICATION_JSON)
-                .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                 .bodyValue(createApplicationParam)
                 .retrieve()
                 .bodyToMono(CreateDataSetResponse.class)
@@ -85,7 +85,7 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
     private Mono<ServiceResult> handleApplicationResponse(CreateDataSetResponse createDataSetResponse, Application application) {
         String data = String.valueOf(createDataSetResponse.getData());
         application.setApplicationId(data);
-        String url = FastGptConstant.UPDATE_APPLICATION + data;
+        String url = serverConstant.getFastGptServer() + FastGptConstant.UPDATE_APPLICATION + data;
         UpdateApplicationParam updateApplicationParam = new UpdateApplicationParam();
         updateApplicationParam.setAvatar("/imgs/app/avatar/simple.svg");
         updateApplicationParam.setDefaultPermission(0);
@@ -95,7 +95,7 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
         return webClient.put()
                 .uri(url)
                 .contentType(APPLICATION_JSON)
-                .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                 .bodyValue(updateApplicationParam)
                 .retrieve()
                 .bodyToMono(CreateDataSetResponse.class)
@@ -113,18 +113,18 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
             publishApplicationParam.setVersionName(TimeUtil.getNowTime());
             publishApplicationParam.getChatConfig().setWelcomeText(application.getOpeningRemarks());
             setApplicationParameters(application, publishApplicationParam);
-            String publishUrl = FastGptConstant.PUBLISH_APPLICATION + data;
+            String publishUrl = serverConstant.getFastGptServer() + FastGptConstant.PUBLISH_APPLICATION + data;
 
             return webClient.post()
                     .uri(publishUrl)
                     .contentType(APPLICATION_JSON)
-                    .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                    .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                     .bodyValue(publishApplicationParam)
                     .retrieve()
                     .bodyToMono(CreateDataSetResponse.class)
                     .flatMap(response -> {
                         if (response.getCode() == 200) {
-                            fastGptApplicationMapper.insertApplication(application);
+                            applicationMapper.insertApplication(application);
                             return Mono.just(new ServiceResult(new ResultHeader(200, "Application created successfully")));
                         }
                         return Mono.just(new ServiceResult(new ResultHeader(500, response.getStatusText())));
@@ -166,8 +166,8 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
         });
     }
 
+    @Override
     public Flux<String> chat(JSONObject question) {
-        log.info(JSONObject.toJSONString(question));
         ChatParam chatParam = new ChatParam();
         chatParam.setAppId(question.getString("applicationId"));
         chatParam.setStream(true);
@@ -186,9 +186,9 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
         chatParam.setMessages(messages);
         AtomicBoolean isDone = new AtomicBoolean(false);
         return webClient.post()
-                .uri(FastGptConstant.APPLICATION_CHAT_URL)
+                .uri(serverConstant.getFastGptServer() + FastGptConstant.APPLICATION_CHAT_URL)
                 .contentType(APPLICATION_JSON)
-                .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                 .bodyValue(chatParam)
                 .retrieve()
                 .bodyToFlux(String.class).flatMap(response -> parseAndTransform(response, isDone))
@@ -210,7 +210,7 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
         JSONObject choice = choices.getJSONObject(0);
         if ("stop".equals(choice.getString("finish_reason"))) {
             isDone.set(true);
-            return Flux.empty();
+            return Flux.just("[DONE]");
         }
         String string = choice.getJSONObject("delta").getString("content");
         isDone.set(false);
@@ -218,21 +218,21 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
         return Flux.just(string);
     }
 
+    @Override
     public Mono<ServiceResult> removeApplication(String applicationId) {
-        String url = FastGptConstant.DELETE_APPLICATION + applicationId;
-
+        String url = serverConstant.getFastGptServer() + FastGptConstant.DELETE_APPLICATION + applicationId;
         return webClient.delete()
                 .uri(url)
-                .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                 .retrieve()
                 .bodyToMono(CreateDataSetResponse.class)
                 .flatMap(response -> {
                     if (response.getCode() == 200) {
                         return Mono.fromRunnable(() -> {
                             try {
-                                fastGptApplicationMapper.deleteApplicationById(applicationId);
+                                applicationMapper.deleteApplicationById(applicationId);
                             } catch (Exception dbException) {
-                                throw new RuntimeException("Database operation failed", dbException); // 抛出新异常
+                                throw new RuntimeException("Database operation failed", dbException);
                             }
                         }).then(Mono.just(new ServiceResult(new ResultHeader(200, "delete success"))));
                     } else {
@@ -245,35 +245,34 @@ public class FastGptApplicationServiceImpl implements FastGptApplicationService
                 });
     }
 
-    public ServiceResult getApplications() {
-        List<Application> allApplication = fastGptApplicationMapper.getAllApplication();
-        if (CollectionUtils.isEmpty(allApplication)) {
-            return new ServiceResult(new ResultHeader(200, "no application"), allApplication);
-        }
-        allApplication.forEach(application -> {
-            KnowledgeBase knowledgeBaseRecordById = fastGptDatasetMapper.getKnowledgeBaseRecordById(application.getKnowledgeBaseId());
-            if (knowledgeBaseRecordById != null) {
-                application.setOperatorId(knowledgeBaseRecordById.getOperatorId());
-                application.setOperatorName(knowledgeBaseRecordById.getOperatorName());
-                application.setMaaSPlatformId(knowledgeBaseRecordById.getMaaSPlatformId());
-                application.setMaaSPlatformName(knowledgeBaseRecordById.getMaaSPlatformName());
-                application.setKnowledgeBaseName(knowledgeBaseRecordById.getKnowledgeBaseName());
-            }
-        });
-        return new ServiceResult(new ResultHeader(200, "success"), allApplication);
-    }
+    @Override
+    public Mono<ServiceResult> editApplication(Application application) {
+        String url = serverConstant.getFastGptServer() + FastGptConstant.UPDATE_APPLICATION + application.getApplicationId();
+        UpdateApplicationParam updateApplicationParam = new UpdateApplicationParam();
+        updateApplicationParam.setAvatar("/imgs/app/avatar/simple.svg");
+        updateApplicationParam.setName(application.getApplicationName());
+        updateApplicationParam.setIntro(application.getApplicationDescription());
 
-    public ServiceResult getApplicationById(String applicationId) {
-        Application application = fastGptApplicationMapper.getApplicationById(applicationId);
-        if (application == null) {
-            return new ServiceResult(new ResultHeader(200, "no application"), application);
-        }
-        KnowledgeBase knowledgeBaseRecordById = fastGptDatasetMapper.getKnowledgeBaseRecordById(application.getKnowledgeBaseId());
-        application.setOperatorId(knowledgeBaseRecordById.getOperatorId());
-        application.setOperatorName(knowledgeBaseRecordById.getOperatorName());
-        application.setMaaSPlatformId(knowledgeBaseRecordById.getMaaSPlatformId());
-        application.setMaaSPlatformName(knowledgeBaseRecordById.getMaaSPlatformName());
-        application.setKnowledgeBaseName(knowledgeBaseRecordById.getKnowledgeBaseName());
-        return new ServiceResult(new ResultHeader(200, "success"), application);
+        return webClient.put()
+                .uri(url)
+                .contentType(APPLICATION_JSON)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .bodyValue(updateApplicationParam)
+                .retrieve()
+                .bodyToMono(CreateDataSetResponse.class)
+                .flatMap(response -> {
+                    if (response.getCode() == 200) {
+                        return Mono.fromRunnable(() -> {
+                            applicationMapper.updateApplication(application);
+                        }).then(Mono.just(new ServiceResult(new ResultHeader(200, "edit success"))));
+                    } else {
+                        return Mono.just(new ServiceResult(new ResultHeader(500, response.getStatusText())));
+                    }
+                })
+                .onErrorResume(e -> {
+                    log.error("Error occurred while delete dataset: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "edit failed")));
+                });
     }
+
 }
index 0cc1528..df8787d 100644 (file)
@@ -7,11 +7,13 @@ import org.jetbrains.annotations.NotNull;
 import org.onap.usecaseui.llmadaptation.bean.KnowledgeBase;
 import org.onap.usecaseui.llmadaptation.bean.ResultHeader;
 import org.onap.usecaseui.llmadaptation.bean.ServiceResult;
-import org.onap.usecaseui.llmadaptation.bean.fastgpt.CreateCollectionParam;
-import org.onap.usecaseui.llmadaptation.bean.fastgpt.CreateDataSetParam;
-import org.onap.usecaseui.llmadaptation.bean.fastgpt.CreateDataSetResponse;
+import org.onap.usecaseui.llmadaptation.bean.fastgpt.dataset.CreateCollectionParam;
+import org.onap.usecaseui.llmadaptation.bean.fastgpt.dataset.CreateDataSetParam;
+import org.onap.usecaseui.llmadaptation.bean.fastgpt.dataset.CreateDataSetResponse;
+import org.onap.usecaseui.llmadaptation.constant.CommonConstant;
 import org.onap.usecaseui.llmadaptation.constant.FastGptConstant;
-import org.onap.usecaseui.llmadaptation.mapper.FastGptDatasetMapper;
+import org.onap.usecaseui.llmadaptation.constant.ServerConstant;
+import org.onap.usecaseui.llmadaptation.mapper.DatasetMapper;
 import org.onap.usecaseui.llmadaptation.service.FastGptDatasetService;
 import org.onap.usecaseui.llmadaptation.util.TimeUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,13 +23,11 @@ import org.springframework.http.MediaType;
 import org.springframework.http.client.MultipartBodyBuilder;
 import org.springframework.http.codec.multipart.FilePart;
 import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
 import org.springframework.web.reactive.function.BodyInserters;
 import org.springframework.web.reactive.function.client.WebClient;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
-import java.util.List;
 
 import static org.springframework.http.MediaType.APPLICATION_JSON;
 
@@ -35,25 +35,29 @@ import static org.springframework.http.MediaType.APPLICATION_JSON;
 @Service
 public class FastGptDatasetServiceImpl implements FastGptDatasetService {
     @Autowired
-    private FastGptDatasetMapper fastGptDatasetMapper;
+    private DatasetMapper datasetMapper;
 
     @Autowired
     private WebClient webClient;
 
+    @Autowired
+    private ServerConstant serverConstant;
+
+    @Override
     public Mono<ServiceResult> createDataset(Flux<FilePart> fileParts, String metaData) {
         KnowledgeBase knowledgeBase = JSONObject.parseObject(metaData, KnowledgeBase.class);
         knowledgeBase.setUpdateTime(TimeUtil.getNowTime());
         CreateDataSetParam dataSetParam = new CreateDataSetParam();
-        dataSetParam.setAgentModel("qwen2:7b");
+        dataSetParam.setAgentModel(serverConstant.getFastGptModel());
         dataSetParam.setType("dataset");
         dataSetParam.setAvatar("core/dataset/commonDatasetColor");
         dataSetParam.setVectorModel("m3e");
         dataSetParam.setIntro(knowledgeBase.getKnowledgeBaseDescription());
         dataSetParam.setName(knowledgeBase.getKnowledgeBaseName());
         return webClient.post()
-                .uri(FastGptConstant.CREATE_DATASET_URL)
+                .uri(serverConstant.getFastGptServer() + FastGptConstant.CREATE_DATASET_URL)
                 .contentType(APPLICATION_JSON)
-                .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                 .bodyValue(dataSetParam)
                 .retrieve()
                 .bodyToMono(CreateDataSetResponse.class)
@@ -63,7 +67,7 @@ public class FastGptDatasetServiceImpl implements FastGptDatasetService {
                         return fileParts.flatMap(filePart -> uploadFile(filePart, knowledgeBaseId))
                                 .then(Mono.defer(() -> {
                                     knowledgeBase.setKnowledgeBaseId(knowledgeBaseId);
-                                    fastGptDatasetMapper.insertKnowledgeBaseRecord(knowledgeBase);
+                                    datasetMapper.insertKnowledgeBaseRecord(knowledgeBase);
                                     return Mono.just(new ServiceResult(new ResultHeader(200, "create success")));
                                 }))
                                 .onErrorResume(e -> {
@@ -99,9 +103,9 @@ public class FastGptDatasetServiceImpl implements FastGptDatasetService {
                 });
 
         return webClient.post()
-                .uri(FastGptConstant.UPLOAD_FILE_URL)
+                .uri(serverConstant.getFastGptServer() + FastGptConstant.UPLOAD_FILE_URL)
                 .contentType(MediaType.MULTIPART_FORM_DATA)
-                .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                 .body(BodyInserters.fromMultipartData(builder.build()))
                 .retrieve()
                 .bodyToMono(CreateDataSetResponse.class)
@@ -116,15 +120,15 @@ public class FastGptDatasetServiceImpl implements FastGptDatasetService {
                     CreateCollectionParam createCollectionParam = getCreateCollectionParam(knowledgeBaseId, fileId);
 
                     return webClient.post()
-                            .uri(FastGptConstant.CRATE_COLLECTION_URL)
+                            .uri(serverConstant.getFastGptServer() + FastGptConstant.CRATE_COLLECTION_URL)
                             .contentType(APPLICATION_JSON)
-                            .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                            .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                             .bodyValue(createCollectionParam)
                             .retrieve()
                             .bodyToMono(CreateDataSetResponse.class)
                             .flatMap(responseData -> {
                                 if (responseData.getCode() == 200) {
-                                    fastGptDatasetMapper.insertFileName(fileId, filename, knowledgeBaseId);
+                                    datasetMapper.insertFileName(fileId, filename, knowledgeBaseId);
                                 }
                                 return Mono.empty();
                             });
@@ -144,21 +148,22 @@ public class FastGptDatasetServiceImpl implements FastGptDatasetService {
         return createCollectionParam;
     }
 
+    @Override
     public Mono<ServiceResult> removeDataset(String knowledgeBaseId) {
-        String url = FastGptConstant.DELETE_DATASET_URL + knowledgeBaseId;
+        String url = serverConstant.getFastGptServer() + FastGptConstant.DELETE_DATASET_URL + knowledgeBaseId;
         return webClient.delete()
                 .uri(url)
-                .header(FastGptConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
                 .retrieve()
                 .bodyToMono(CreateDataSetResponse.class)
                 .flatMap(response -> {
                     if (response.getCode() == 200) {
                         return Mono.fromRunnable(() -> {
                             try {
-                                fastGptDatasetMapper.deleteKnowledgeBaseByUuid(knowledgeBaseId);
-                                fastGptDatasetMapper.deleteFileById(knowledgeBaseId);
+                                datasetMapper.deleteKnowledgeBaseByUuid(knowledgeBaseId);
+                                datasetMapper.deleteFileById(knowledgeBaseId);
                             } catch (Exception dbException) {
-                                throw new RuntimeException("Database operation failed", dbException); // 抛出新异常
+                                throw new RuntimeException("Database operation failed", dbException);
                             }
                         }).then(Mono.just(new ServiceResult(new ResultHeader(200, "delete success"))));
                     } else {
@@ -171,28 +176,38 @@ public class FastGptDatasetServiceImpl implements FastGptDatasetService {
                 });
     }
 
-    public ServiceResult getDataSetRecord() {
-        List<KnowledgeBase> knowledgeBaseRecords = fastGptDatasetMapper.getKnowledgeBaseRecords();
-        if (CollectionUtils.isEmpty(knowledgeBaseRecords)) {
-            return new ServiceResult(new ResultHeader(200, "get datasets failed"), knowledgeBaseRecords);
-        }
-
-        knowledgeBaseRecords.forEach(knowledgeBase -> {
-            List<String> fileNamesByKnowledgeBaseId = fastGptDatasetMapper.getFileNamesByKnowledgeBaseId(knowledgeBase.getKnowledgeBaseId());
-            knowledgeBase.setFilesName(fileNamesByKnowledgeBaseId);
-        });
-        return new ServiceResult(new ResultHeader(200, "success"), knowledgeBaseRecords);
-    }
-
-    public ServiceResult geDatasetById(String knowledgeBaseId) {
-        KnowledgeBase knowledgeBase = fastGptDatasetMapper.getKnowledgeBaseRecordById(knowledgeBaseId);
-        if (knowledgeBase == null) {
-            return new ServiceResult(new ResultHeader(200, "get dataset failed"));
+    @Override
+    public Mono<ServiceResult> editDataset(KnowledgeBase knowledgeBase) {
+        KnowledgeBase knowledgeBaseRecordById = datasetMapper.getKnowledgeBaseRecordById(knowledgeBase.getKnowledgeBaseId());
+        if (knowledgeBaseRecordById == null) {
+            return Mono.just(new ServiceResult(new ResultHeader(500, "dataset is not exist")));
         }
-        List<String> fileNamesByKnowledgeBaseId = fastGptDatasetMapper.getFileNamesByKnowledgeBaseId(knowledgeBase.getKnowledgeBaseId());
-        knowledgeBase.setFilesName(fileNamesByKnowledgeBaseId);
-
-        return new ServiceResult(new ResultHeader(200, "success"), knowledgeBase);
+        JSONObject updateParam = new JSONObject();
+        updateParam.put("id", knowledgeBase.getKnowledgeBaseId());
+        updateParam.put("name", knowledgeBase.getKnowledgeBaseName());
+        updateParam.put("intro", knowledgeBase.getKnowledgeBaseDescription());
+        updateParam.put("avatar", "core/dataset/commonDatasetColor");
+
+        return webClient.put()
+                .uri(serverConstant.getFastGptServer() + FastGptConstant.UPDATE_DATASET_URL)
+                .contentType(APPLICATION_JSON)
+                .header(CommonConstant.COOKIE, FastGptConstant.COOKIE_VALUE)
+                .bodyValue(updateParam)
+                .retrieve()
+                .bodyToMono(CreateDataSetResponse.class)
+                .flatMap(response -> {
+                    if (response.getCode() == 200) {
+                        return Mono.fromRunnable(() -> {
+                            knowledgeBase.setUpdateTime(TimeUtil.getNowTime());
+                            datasetMapper.updateKnowledgeBase(knowledgeBase);
+                        }).then(Mono.just(new ServiceResult(new ResultHeader(200, "update success"))));
+                    } else {
+                        return Mono.just(new ServiceResult(new ResultHeader(500, response.getStatusText())));
+                    }
+                })
+                .onErrorResume(e -> {
+                    log.error("Error occurred while delete dataset: {}", e.getMessage());
+                    return Mono.just(new ServiceResult(new ResultHeader(500, "update failed")));
+                });
     }
-
 }
index 10ee028..6823e1a 100644 (file)
@@ -1,21 +1,13 @@
 package org.onap.usecaseui.llmadaptation.service.impl;
 
-import com.alibaba.fastjson2.JSONObject;
-import io.netty.util.internal.StringUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.onap.usecaseui.llmadaptation.bean.MaaSPlatform;
-import org.onap.usecaseui.llmadaptation.bean.ModelInformation;
-import org.onap.usecaseui.llmadaptation.bean.Operator;
-import org.onap.usecaseui.llmadaptation.bean.fastgpt.CreateDataSetResponse;
+import org.onap.usecaseui.llmadaptation.bean.*;
 import org.onap.usecaseui.llmadaptation.mapper.MaaSPlatformMapper;
 import org.onap.usecaseui.llmadaptation.service.MaaSService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.web.reactive.function.client.WebClient;
-import reactor.core.publisher.Mono;
 
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -49,4 +41,22 @@ public class MaaSServiceImpl implements MaaSService {
         });
         return operatorList;
     }
+
+    @Override
+    public ServiceResult registerMaaSPlatform(MaaSPlatform maaSPlatform) {
+        MaaSPlatform maaSPlatformById = maaSPlatformMapper.getMaaSPlatformById(maaSPlatform.getMaaSPlatformId());
+        if (maaSPlatformById != null) {
+            return new ServiceResult(new ResultHeader(500, maaSPlatform.getMaaSPlatformName() + "already exists"));
+        }
+        List<ModelInformation> modelList = maaSPlatform.getModelList();
+        for (ModelInformation model : modelList) {
+            ModelInformation modelById = maaSPlatformMapper.getModelById(model.getModelId());
+            if (modelById != null) {
+                return new ServiceResult(new ResultHeader(500, model.getModelName() + " already exists"));
+            }
+        }
+        maaSPlatformMapper.insertMaaSPlatform(maaSPlatform);
+        maaSPlatformMapper.insertModel(maaSPlatform.getMaaSPlatformId(), maaSPlatform.getModelList());
+        return new ServiceResult(new ResultHeader(200, "register success"));
+    }
 }
index 1b19cc1..ec234d9 100644 (file)
@@ -1,6 +1,13 @@
 server:
   port: 8084
-
+fastGpt:
+  server: http://172.22.16.126:3000
+  model: qwen2:7b
+  maaSType: fastGpt
+biSheng:
+  server: http://172.22.16.127:3001
+  model: 3
+  maaSType: biSheng
 spring:
   main:
     allow-circular-references: true
@@ -20,5 +27,4 @@ mybatis:
 
 logging:
   level:
-    org.springframework.web: DEBUG
-    com.yourpackage: TRACE
\ No newline at end of file
+    org.springframework.web: DEBUG
\ No newline at end of file
index b8a56e4..f46a9eb 100644 (file)
@@ -4,7 +4,8 @@ create table if not exists maas_platform(
     maas_platform_id varchar(255) primary key,
     maas_platform_name varchar(255),
     operator_id varchar(255),
-    operator_name varchar(255)
+    operator_name varchar(255),
+    maas_type varchar(255)
 );
 
 create table if not exists model_information(
@@ -2,7 +2,7 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.onap.usecaseui.llmadaptation.mapper.FastGptApplicationMapper">
+<mapper namespace="org.onap.usecaseui.llmadaptation.mapper.ApplicationMapper">
     <insert id="insertApplication">
         insert into application(application_id,
                                 application_name,
                opening_remarks as openingRemarks
         from application where application_id = #{applicationId}
     </select>
+
+    <update id="updateApplication">
+        update application
+        <trim prefix="set" suffixOverrides=",">
+            <if test="application.applicationName != null">application_name = #{application.applicationName},</if>
+            <if test="application.applicationDescription != null">application_description = #{application.applicationDescription},</if>
+        </trim>
+        where application_id = #{application.applicationId}
+    </update>
 </mapper>
\ No newline at end of file
@@ -2,7 +2,7 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="org.onap.usecaseui.llmadaptation.mapper.FastGptDatasetMapper">
+<mapper namespace="org.onap.usecaseui.llmadaptation.mapper.DatasetMapper">
     <insert id="insertKnowledgeBaseRecord">
         insert into knowledge_base(knowledge_base_id,
                                    knowledge_base_name,
         delete from file where knowledge_base_id = #{knowledgeBaseId}
     </delete>
 
+    <update id="updateKnowledgeBase">
+        update knowledge_base
+        <trim prefix="set" suffixOverrides=",">
+            <if test="knowledgeBase.knowledgeBaseDescription != null">knowledge_base_description = #{knowledgeBase.knowledgeBaseDescription},</if>
+            <if test="knowledgeBase.knowledgeBaseName != null">knowledge_base_name = #{knowledgeBase.knowledgeBaseName},</if>
+            <if test="knowledgeBase.updateTime != null">update_time = to_timestamp(#{knowledgeBase.updateTime},'yyyy-MM-dd HH24:mi:ss'),</if>
+        </trim>
+        where knowledge_base_id = #{knowledgeBase.knowledgeBaseId}
+    </update>
 </mapper>
\ No newline at end of file
index b8d8354..69ce9e6 100644 (file)
@@ -4,26 +4,28 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.onap.usecaseui.llmadaptation.mapper.MaaSPlatformMapper">
     <insert id="insertMaaSPlatform">
-        insert into maas_platform(maas_platform_id,maas_platform_name,operator_id,operator_name)
+        insert into maas_platform(maas_platform_id,maas_platform_name,operator_id,operator_name,maas_type)
         values (#{maaSPlatform.maaSPlatformId},
                 #{maaSPlatform.maaSPlatformName},
                 #{maaSPlatform.operatorId},
-                #{maaSPlatform.operatorName})
+                #{maaSPlatform.operatorName},
+                #{maaSPlatform.maaSType})
     </insert>
     <insert id="insertModel">
         insert into model_information(model_id,model_name,maas_platform_id)
         values
         <foreach collection="modelInformationList" index="index" item="item" separator=",">
             (#{item.modelId},
-             #{item.modelName},
-             #{maaSPlatformId})
+            #{item.modelName},
+            #{maaSPlatformId})
         </foreach>
     </insert>
     <select id="getMaaSPlatforms" resultType="org.onap.usecaseui.llmadaptation.bean.MaaSPlatform">
         select maas_platform_id as maaSPlatformId,
                maas_platform_name as maaSPlatformName,
                operator_id as operatorId,
-               operator_name as operatorName
+               operator_name as operatorName,
+               maas_type as maaSType
         from maas_platform
     </select>
     <select id="getModelList" resultType="org.onap.usecaseui.llmadaptation.bean.ModelInformation">
                model_name as modelName
         from model_information where maas_platform_id = #{maaSPlatformId}
     </select>
+    <select id="getMaaSPlatformById" resultType="org.onap.usecaseui.llmadaptation.bean.MaaSPlatform">
+        select maas_platform_id as maaSPlatformId,
+               maas_platform_name as maaSPlatformName,
+               operator_id as operatorId,
+               operator_name as operatorName,
+               maas_type as maaSType
+        from maas_platform
+        where maas_platform_id = #{maaSPlatformId}
+    </select>
+    <select id="getModelById" resultType="org.onap.usecaseui.llmadaptation.bean.ModelInformation">
+        select model_id as modelId,
+               model_name as modelName
+        from model_information where model_id = #{modelId}
+    </select>
 </mapper>
\ No newline at end of file