diff --git a/io.sc.platform.ai.frontend/src/views/chat/Chat.vue b/io.sc.platform.ai.frontend/src/views/chat/Chat.vue
index 88760671..645efaee 100644
--- a/io.sc.platform.ai.frontend/src/views/chat/Chat.vue
+++ b/io.sc.platform.ai.frontend/src/views/chat/Chat.vue
@@ -45,7 +45,16 @@
-
+
@@ -58,10 +67,12 @@ import { $t, axios, Environment, Tools, Fetch } from 'platform-core';
const $q = useQuasar();
const splitterHeightRef = ref(0); //右边部分的总高度
+const textareaRef = ref();
const questionRef = ref();
const questionHistoryRef = ref([]);
const showThinkRef = ref(true);
const messagesRef = reactive(new Map());
+const imeRef = ref(false);
/**
* 当可垂直扩展的布局的高度发生变化时, 修改右边部分的总高度
@@ -71,6 +82,9 @@ const sizeChanged = (args: any) => {
};
const sendMessage = (event: any) => {
+ if (imeRef.value) {
+ return;
+ }
if (($q.platform.is.mac && event.metaKey) || ($q.platform.is.win && event.ctrlKey)) {
questionRef.value = questionRef.value + '\n';
return;
@@ -99,7 +113,7 @@ const doSendMessage = async (message: string) => {
});
// 准备发出请求
- const url = Environment.apiContextPath('/api/ai/ollama/chat');
+ const url = Environment.apiContextPath('/api/ai/chat');
// 设置请求头
const headers = Fetch.buildHeaders();
if (!Fetch.isAuthorization(url)) {
@@ -181,6 +195,13 @@ const newSession = () => {
};
onMounted(() => {
+ const textarea = textareaRef.value.getNativeElement();
+ textarea.addEventListener('compositionstart', (event: any) => {
+ imeRef.value = true;
+ });
+ textarea.addEventListener('compositionend', (event: any) => {
+ imeRef.value = false;
+ });
newSession();
});
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/AnythingllmService.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/AnythingllmService.java
deleted file mode 100644
index 5a4cd87e..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/AnythingllmService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.sc.platform.ai.anythingllm.service;
-
-public interface AnythingllmService {
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/impl/AnythingllmServiceImpl.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/impl/AnythingllmServiceImpl.java
deleted file mode 100644
index 6c3bec81..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/impl/AnythingllmServiceImpl.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package io.sc.platform.ai.anythingllm.service.impl;
-
-import io.sc.platform.ai.anythingllm.service.AnythingllmService;
-
-public class AnythingllmServiceImpl implements AnythingllmService {
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatApi.java
deleted file mode 100644
index de60523c..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatApi.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package io.sc.platform.ai.anythingllm.service.support.workspaces;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import io.sc.platform.ai.ollama.MessageWrapper;
-import io.sc.platform.ai.ollama.OllamaApi;
-import io.sc.platform.ai.ollama.service.support.chat.ChatRequest;
-import io.sc.platform.ai.ollama.service.support.chat.Message;
-import io.sc.platform.util.CollectionUtil;
-import io.sc.platform.util.ObjectMapperUtil;
-import okhttp3.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
-import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
-
-import java.util.List;
-
-public class StreamChatApi extends OllamaApi {
- private static final Logger log = LoggerFactory.getLogger(StreamChatApi.class);
-
- public StreamChatApi(String baseUrl){
- super("/api/chat","POST");
- this.baseUrl =baseUrl;
- }
-
- public ResponseBodyEmitter execute(MessageWrapper chatRequest) {
- ChatRequest chatCompletion =createChatCompletion(chatRequest);
- if(chatCompletion==null) { return null; }
- Call call =createRequestCall(chatCompletion);
- if(call==null) { return null; }
-
- ResponseBodyEmitter emitter =new ResponseBodyEmitter();
- call.enqueue(new StreamChatCallback(emitter));
- return emitter;
- }
-
- private ChatRequest createChatCompletion(MessageWrapper chatRequest) {
- if(chatRequest==null) { return null; }
-
- String model =chatRequest.getModel();
- if(!StringUtils.hasText(model)) { return null; }
-
- List questions =chatRequest.getQuestions();
- if(!CollectionUtil.hasElements(questions)){ return null; }
-
- ChatRequest chatCompletion =new ChatRequest();
- chatCompletion.setModel(model);
-
- chatCompletion.addMessage(new Message("user", "使用中文回答"));
- for(String question : questions){
- chatCompletion.addMessage(new Message("user",question));
- }
- return chatCompletion;
- }
-
- private Call createRequestCall(ChatRequest chatCompletion) {
- if(chatCompletion==null) { return null; }
-
- OkHttpClient client = new OkHttpClient.Builder()
- .connectTimeout(this.connectTimeout)
- .readTimeout(this.readTimeout)
- .writeTimeout(this.writeTimeout)
- .build();
-
- Headers headers = new Headers.Builder()
- .set("Content-Type", "application/json")
- .set("Accept", "text/event-stream")
- .build();
- String json ="";
- try {
- json = ObjectMapperUtil.json().writeValueAsString(chatCompletion);
- } catch (JsonProcessingException e){
- log.error("",e);
- return null;
- }
- RequestBody body = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));
- okhttp3.Request request = new okhttp3.Request.Builder()
- .url(this.baseUrl + this.url)
- .headers(headers)
- .post(body)
- .build();
-
- Call call = client.newCall(request);
- return call;
- }
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/OllamaApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/AiApi.java
similarity index 77%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/OllamaApi.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/AiApi.java
index 1fa6ca53..e4b96ab5 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/OllamaApi.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/AiApi.java
@@ -1,29 +1,20 @@
-package io.sc.platform.ai.ollama;
+package io.sc.platform.ai.api;
import java.time.Duration;
-public class OllamaApi {
- protected String baseUrl ="http://localhost:11434";
+public class AiApi {
protected String url;
protected String method;
protected Duration connectTimeout =Duration.ofMinutes(2);
protected Duration readTimeout =Duration.ofMinutes(2);
protected Duration writeTimeout =Duration.ofMinutes(2);
- public OllamaApi(){}
- public OllamaApi(String url,String method){
+ public AiApi(){}
+ public AiApi(String url, String method){
this.url =url;
this.method =method;
}
- public String getBaseUrl() {
- return baseUrl;
- }
-
- public void setBaseUrl(String baseUrl) {
- this.baseUrl = baseUrl;
- }
-
public String getUrl() {
return url;
}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/MessageWrapper.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/MessageWrapper.java
similarity index 79%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/MessageWrapper.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/MessageWrapper.java
index 4ec117bc..d8902d88 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/MessageWrapper.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/MessageWrapper.java
@@ -1,4 +1,4 @@
-package io.sc.platform.ai.ollama;
+package io.sc.platform.ai.api;
import java.util.ArrayList;
import java.util.List;
@@ -7,6 +7,10 @@ public class MessageWrapper {
private String model;
private List questions =new ArrayList<>();
+ public void addQuestion(String question){
+ this.questions.add(question);
+ }
+
public String getModel() {
return model;
}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/ServiceProvider.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/ServiceProvider.java
new file mode 100644
index 00000000..801a9ee0
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/ServiceProvider.java
@@ -0,0 +1,19 @@
+package io.sc.platform.ai.api;
+
+/**
+ * 服务提供商名称枚举
+ */
+public enum ServiceProvider {
+ ANYTHING_LLM("AnythingLLM"),
+ OLLAMA("Ollama");
+
+ private String value;
+
+ ServiceProvider(String value){
+ this.value =value;
+ }
+
+ public String value(){
+ return this.value;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/controller/ApiWebController.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/controller/ApiWebController.java
new file mode 100644
index 00000000..22f191bd
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/controller/ApiWebController.java
@@ -0,0 +1,18 @@
+package io.sc.platform.ai.api.controller;
+
+import io.sc.platform.ai.api.service.ApiService;
+import io.sc.platform.ai.api.MessageWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+@RestController("io.sc.platform.ai.api.controller.ApiWebController")
+@RequestMapping("/api/ai")
+public class ApiWebController {
+ @Autowired private ApiService apiService;
+
+ @PostMapping("/chat")
+ public ResponseBodyEmitter chat(@RequestBody MessageWrapper wrapper){
+ return apiService.chat(wrapper);
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiConfigurationService.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiConfigurationService.java
new file mode 100644
index 00000000..0a6a3149
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiConfigurationService.java
@@ -0,0 +1,42 @@
+package io.sc.platform.ai.api.service;
+
+/**
+ * API 配置服务接口
+ */
+public interface ApiConfigurationService {
+ /**
+ * 获取默认服务提供商名称
+ * @return 默认服务提供商名称
+ */
+ public String getDefaultServiceProvider();
+
+ /**
+ * 获取 ollama api base url
+ * @return ollama api base url
+ */
+ public String getOllamaApiBaseUrl();
+
+ /**
+ * 获取 ollama 默认模型名称
+ * @return ollama 默认模型名称
+ */
+ public String getOllamaDefaultModelName();
+
+ /**
+ * 获取 AnythingLLM api base url
+ * @return AnythingLLM api base url
+ */
+ public String getAnythingllmApiBaseUrl();
+
+ /**
+ * 获取 AnythingLLM api 秘钥
+ * @return AnythingLLM api 秘钥
+ */
+ public String getAnythingllmApiKey();
+
+ /**
+ * 获取 AnythingLLM 默认工作空间
+ * @return AnythingLLM 默认工作空间
+ */
+ public String getAnythingllmDefaultWorkspace();
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiService.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiService.java
new file mode 100644
index 00000000..022595fa
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiService.java
@@ -0,0 +1,8 @@
+package io.sc.platform.ai.api.service;
+
+import io.sc.platform.ai.api.MessageWrapper;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+public interface ApiService {
+ public ResponseBodyEmitter chat(MessageWrapper wrapper);
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiConfigurationServiceImpl.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiConfigurationServiceImpl.java
new file mode 100644
index 00000000..2b3d6065
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiConfigurationServiceImpl.java
@@ -0,0 +1,53 @@
+package io.sc.platform.ai.api.service.impl;
+
+import io.sc.platform.ai.api.service.ApiConfigurationService;
+import io.sc.platform.mvc.service.SystemParameterService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("io.sc.platform.ai.api.service.impl.ApiConfigurationServiceImpl")
+public class ApiConfigurationServiceImpl implements ApiConfigurationService {
+ // default service provider
+ private static final String KEY_DEFAULT_SERVICE_PROVIDER ="parameter.ai.provider.default";
+
+ // Ollama config
+ private static final String KEY_OLLAMA_API_BASE_URL ="parameter.ai.provider.ollama.apiUrl";
+ private static final String KEY_OLLAMA_DEFAULT_MODEL_NAME ="parameter.ai.provider.ollama.defaultModelName";
+
+ // AnythingLLM config
+ private static final String KEY_ANYTHINGLLM_API_BASE_URL ="parameter.ai.provider.anythingllm.apiUrl";
+ private static final String KEY_ANYTHINGLLM_API_KEY ="parameter.ai.provider.anythingllm.apiKey";
+ private static final String KEY_ANYTHINGLLM_DEFAULT_WORKSPACE_KEY ="parameter.ai.provider.anythingllm.defaultWorkspace";
+
+ @Autowired private SystemParameterService systemParameterService;
+
+ @Override
+ public String getDefaultServiceProvider() {
+ return systemParameterService.getParameter(KEY_DEFAULT_SERVICE_PROVIDER);
+ }
+
+ @Override
+ public String getOllamaApiBaseUrl() {
+ return systemParameterService.getParameter(KEY_OLLAMA_API_BASE_URL);
+ }
+
+ @Override
+ public String getOllamaDefaultModelName() {
+ return systemParameterService.getParameter(KEY_OLLAMA_DEFAULT_MODEL_NAME);
+ }
+
+ @Override
+ public String getAnythingllmApiBaseUrl() {
+ return systemParameterService.getParameter(KEY_ANYTHINGLLM_API_BASE_URL);
+ }
+
+ @Override
+ public String getAnythingllmApiKey() {
+ return systemParameterService.getParameter(KEY_ANYTHINGLLM_API_KEY);
+ }
+
+ @Override
+ public String getAnythingllmDefaultWorkspace() {
+ return systemParameterService.getParameter(KEY_ANYTHINGLLM_DEFAULT_WORKSPACE_KEY);
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiServiceImpl.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiServiceImpl.java
new file mode 100644
index 00000000..d7b7e112
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiServiceImpl.java
@@ -0,0 +1,30 @@
+package io.sc.platform.ai.api.service.impl;
+
+import io.sc.platform.ai.api.ServiceProvider;
+import io.sc.platform.ai.api.service.ApiConfigurationService;
+import io.sc.platform.ai.api.service.ApiService;
+import io.sc.platform.ai.provider.anythingllm.service.AnythingllmService;
+import io.sc.platform.ai.api.MessageWrapper;
+import io.sc.platform.ai.provider.ollama.service.OllamaService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+@Service("io.sc.platform.ai.api.service.impl.ApiServiceImpl")
+public class ApiServiceImpl implements ApiService {
+ @Autowired private ApiConfigurationService apiConfigurationService;
+
+ @Autowired private AnythingllmService anythingllmService;
+ @Autowired private OllamaService ollamaService;
+
+ @Override
+ public ResponseBodyEmitter chat(MessageWrapper wrapper) {
+ String provider =apiConfigurationService.getDefaultServiceProvider();
+ if(ServiceProvider.ANYTHING_LLM.value().equals(provider)){
+ return anythingllmService.chat(wrapper);
+ }else if(ServiceProvider.OLLAMA.value().equals(provider)){
+ return ollamaService.chat(wrapper);
+ }
+ return null;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/OllamaService.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/OllamaService.java
deleted file mode 100644
index 31661581..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/OllamaService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package io.sc.platform.ai.ollama.service;
-
-import io.sc.platform.ai.ollama.MessageWrapper;
-import io.sc.platform.ai.ollama.service.support.tags.TagsResponse;
-import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
-
-import java.util.List;
-
-public interface OllamaService {
- public ResponseBodyEmitter chat(MessageWrapper wrapper);
- public TagsResponse tags();
- public List modelNames();
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/impl/OllamaServiceImpl.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/impl/OllamaServiceImpl.java
deleted file mode 100644
index abcac5b5..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/impl/OllamaServiceImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package io.sc.platform.ai.ollama.service.impl;
-
-import io.sc.platform.ai.ollama.MessageWrapper;
-import io.sc.platform.ai.ollama.service.OllamaService;
-import io.sc.platform.ai.ollama.service.support.chat.ChatApi;
-import io.sc.platform.ai.ollama.service.support.tags.Model;
-import io.sc.platform.ai.ollama.service.support.tags.TagsApi;
-import io.sc.platform.ai.ollama.service.support.tags.TagsResponse;
-import io.sc.platform.mvc.service.SystemParameterService;
-import io.sc.platform.util.CollectionUtil;
-import io.sc.platform.util.StringUtil;
-import io.sc.platform.util.support.NumberStringComparator;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-@Service("io.sc.platform.ai.service.impl.OllamaServiceImpl")
-public class OllamaServiceImpl implements OllamaService {
- private static final String KEY_API_URL ="parameter.ai.provider.ollama.apiUrl";
- private static final String KEY_DEFAULT_MODEL_NAME ="parameter.ai.provider.ollama.defaultModelName";
-
- @Autowired private SystemParameterService systemParameterService;
-
- @Override
- public ResponseBodyEmitter chat(MessageWrapper wrapper) {
- Map parameters =getParameters();
- if(!StringUtil.hasText(wrapper.getModel())){
- wrapper.setModel(parameters.get(KEY_DEFAULT_MODEL_NAME));
- }
- ChatApi api =new ChatApi(parameters.get(KEY_API_URL));
- return api.execute(wrapper);
- }
-
- @Override
- public TagsResponse tags() {
- Map parameters =getParameters();
- TagsApi api =new TagsApi(parameters.get(KEY_API_URL));
- return api.execute();
- }
-
- @Override
- public List modelNames() {
- Map parameters =getParameters();
- TagsApi api =new TagsApi(parameters.get(KEY_API_URL));
- TagsResponse response =api.execute();
- if(response==null){
- return Collections.emptyList();
- }
- List models =response.getModels();
- if(!CollectionUtil.hasElements(models)){
- return Collections.emptyList();
- }
- List result =new ArrayList<>();
- for(Model model : models){
- result.add(model.getModel());
- }
- Collections.sort(result, new NumberStringComparator());
- return result;
- }
-
- private Map getParameters(){
- return systemParameterService.getParameters(new String[]{KEY_API_URL,KEY_DEFAULT_MODEL_NAME});
- }
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/blobs/BlobsApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/blobs/BlobsApi.java
deleted file mode 100644
index 4f32b3f5..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/blobs/BlobsApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.blobs;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class BlobsApi extends OllamaApi {
- public BlobsApi(){
- super("/api/blobs/","HEAD");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Tool.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Tool.java
deleted file mode 100644
index 6a869bdb..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Tool.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.chat;
-
-public class Tool {
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/copy/OllamaCopyApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/copy/OllamaCopyApi.java
deleted file mode 100644
index dd829b77..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/copy/OllamaCopyApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.copy;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaCopyApi extends OllamaApi {
- public OllamaCopyApi(){
- super("/api/copy","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/create/OllamaCreateApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/create/OllamaCreateApi.java
deleted file mode 100644
index 4219aae7..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/create/OllamaCreateApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.create;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaCreateApi extends OllamaApi {
- public OllamaCreateApi(){
- super("/api/create","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/delete/OllamaDeleteApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/delete/OllamaDeleteApi.java
deleted file mode 100644
index a1a3ad17..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/delete/OllamaDeleteApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.delete;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaDeleteApi extends OllamaApi {
- public OllamaDeleteApi(){
- super("/api/delete","DELETE");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embed/OllamaEmbedApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embed/OllamaEmbedApi.java
deleted file mode 100644
index 440255fc..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embed/OllamaEmbedApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.embed;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaEmbedApi extends OllamaApi {
- public OllamaEmbedApi(){
- super("/api/embed","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embeddings/OllamaEmbeddingsApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embeddings/OllamaEmbeddingsApi.java
deleted file mode 100644
index 0d2d2cb6..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embeddings/OllamaEmbeddingsApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.embeddings;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaEmbeddingsApi extends OllamaApi {
- public OllamaEmbeddingsApi(){
- super("/api/embeddings","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/generate/OllamaGenerateApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/generate/OllamaGenerateApi.java
deleted file mode 100644
index a8bba44d..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/generate/OllamaGenerateApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.generate;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaGenerateApi extends OllamaApi {
- public OllamaGenerateApi(){
- super("/api/generate","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/ps/OllamaPsApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/ps/OllamaPsApi.java
deleted file mode 100644
index b2f7fd2c..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/ps/OllamaPsApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.ps;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaPsApi extends OllamaApi {
- public OllamaPsApi(){
- super("/api/ps","GET");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/pull/OllamaPullApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/pull/OllamaPullApi.java
deleted file mode 100644
index 88afbc86..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/pull/OllamaPullApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.pull;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaPullApi extends OllamaApi {
- public OllamaPullApi(){
- super("/api/pull","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/push/OllamaPushApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/push/OllamaPushApi.java
deleted file mode 100644
index 05b0398f..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/push/OllamaPushApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.push;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaPushApi extends OllamaApi {
- public OllamaPushApi(){
- super("/api/push","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/show/OllamaShowApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/show/OllamaShowApi.java
deleted file mode 100644
index 738c7d92..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/show/OllamaShowApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.show;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaShowApi extends OllamaApi {
- public OllamaShowApi(){
- super("/api/show","POST");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/version/OllamaVersionApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/version/OllamaVersionApi.java
deleted file mode 100644
index 7a453f91..00000000
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/version/OllamaVersionApi.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.sc.platform.ai.ollama.service.support.version;
-
-import io.sc.platform.ai.ollama.OllamaApi;
-
-public class OllamaVersionApi extends OllamaApi {
- public OllamaVersionApi(){
- super("/api/version","GET");
- }
-
-
-}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/api/AnythingllmApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/api/AnythingllmApi.java
new file mode 100644
index 00000000..7f7c68ee
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/api/AnythingllmApi.java
@@ -0,0 +1,20 @@
+package io.sc.platform.ai.provider.anythingllm.api;
+
+import io.sc.platform.ai.api.AiApi;
+
+public class AnythingllmApi extends AiApi {
+ protected String apiKey;
+
+ public AnythingllmApi(String url,String method,String apiKey) {
+ super(url,method);
+ this.apiKey =apiKey;
+ }
+
+ public String getApiKey() {
+ return apiKey;
+ }
+
+ public void setApiKey(String apiKey) {
+ this.apiKey = apiKey;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/AnythingllmService.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/AnythingllmService.java
new file mode 100644
index 00000000..50ffea63
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/AnythingllmService.java
@@ -0,0 +1,16 @@
+package io.sc.platform.ai.provider.anythingllm.service;
+
+import io.sc.platform.ai.api.MessageWrapper;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+import java.util.List;
+
+public interface AnythingllmService {
+ public ResponseBodyEmitter chat(MessageWrapper wrapper);
+
+ /**
+ * 获取所有工作空间名称列表
+ * @return 所有工作空间名称列表
+ */
+ public List workspaceNames();
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/impl/AnythingllmServiceImpl.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/impl/AnythingllmServiceImpl.java
new file mode 100644
index 00000000..63198600
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/impl/AnythingllmServiceImpl.java
@@ -0,0 +1,34 @@
+package io.sc.platform.ai.provider.anythingllm.service.impl;
+
+import io.sc.platform.ai.api.service.ApiConfigurationService;
+import io.sc.platform.ai.provider.anythingllm.service.AnythingllmService;
+import io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat.ChatApi;
+import io.sc.platform.ai.provider.anythingllm.support.workspace.workspaces.WorkspacesApi;
+import io.sc.platform.ai.api.MessageWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+import java.util.List;
+
+@Service("io.sc.platform.ai.provider.anythingllm.service.impl.AnythingllmServiceImpl")
+public class AnythingllmServiceImpl implements AnythingllmService {
+ @Autowired private ApiConfigurationService apiConfigurationService;
+
+ @Override
+ public ResponseBodyEmitter chat(MessageWrapper wrapper) {
+ String baseUrl =apiConfigurationService.getAnythingllmApiBaseUrl();
+ String apiKey =apiConfigurationService.getAnythingllmApiKey();
+ String defaultWorkspace=apiConfigurationService.getAnythingllmDefaultWorkspace();
+ ChatApi api =new ChatApi(baseUrl,apiKey,defaultWorkspace);
+ return api.execute(wrapper);
+ }
+
+ @Override
+ public List workspaceNames() {
+ String baseUrl =apiConfigurationService.getAnythingllmApiBaseUrl();
+ String apiKey =apiConfigurationService.getAnythingllmApiKey();
+ WorkspacesApi api =new WorkspacesApi(baseUrl,apiKey);
+ return api.workspaceNames();
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatApi.java
new file mode 100644
index 00000000..d032e134
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatApi.java
@@ -0,0 +1,87 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import io.sc.platform.ai.api.MessageWrapper;
+import io.sc.platform.ai.provider.anythingllm.api.AnythingllmApi;
+import io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat.request.ChatRequest;
+import io.sc.platform.security.util.SecurityUtil;
+import io.sc.platform.util.CollectionUtil;
+import io.sc.platform.util.ObjectMapperUtil;
+import io.sc.platform.util.UrlUtil;
+import okhttp3.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+import java.util.List;
+
+public class ChatApi extends AnythingllmApi {
+ private static final Logger log = LoggerFactory.getLogger(ChatApi.class);
+
+ public ChatApi(String baseUrl, String apiKey,String workspace){
+ super(UrlUtil.concatUrl(baseUrl,"/api/v1/workspace/" + workspace + "/stream-chat"),"POST",apiKey);
+ this.apiKey =apiKey;
+ }
+
+ public ResponseBodyEmitter execute(MessageWrapper wrapper) {
+ ChatRequest chatRequest =createChatRequest(wrapper);
+ if(chatRequest==null) { return null; }
+ Call call =createRequestCall(chatRequest);
+ if(call==null) { return null; }
+
+ ResponseBodyEmitter emitter =new ResponseBodyEmitter();
+ call.enqueue(new ChatCallback(emitter));
+ return emitter;
+ }
+
+ private ChatRequest createChatRequest(MessageWrapper wrapper) {
+ if(wrapper==null) { return null; }
+
+ List questions =wrapper.getQuestions();
+ if(!CollectionUtil.hasElements(questions)){ return null; }
+
+ StringBuilder sb =new StringBuilder();
+ for(String question : questions){
+ sb.append(question).append("\n");
+ }
+ ChatRequest request =new ChatRequest();
+ request.setMode("chat");
+ request.setMessage(sb.toString());
+ request.setSessionId(SecurityUtil.getUserId());
+ return request;
+ }
+
+ private Call createRequestCall(ChatRequest chatRequest) {
+ if(chatRequest==null) { return null; }
+
+ OkHttpClient client = new OkHttpClient.Builder()
+ .connectTimeout(this.connectTimeout)
+ .readTimeout(this.readTimeout)
+ .writeTimeout(this.writeTimeout)
+ .build();
+
+ Headers headers = new Headers.Builder()
+ .add("Content-Type: application/json")
+ .add("Accept: text/event-stream")
+ .add("Authorization: Bearer " + apiKey)
+ .build();
+ String json ="";
+ try {
+ json = ObjectMapperUtil.json().writeValueAsString(chatRequest);
+ } catch (JsonProcessingException e){
+ log.error("",e);
+ return null;
+ }
+ RequestBody body = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));
+ log.info("[" + this.getMethod() + "]: " + this.url);
+ log.info(json);
+ okhttp3.Request request = new okhttp3.Request.Builder()
+ .url(this.url)
+ .headers(headers)
+ .post(body)
+ .build();
+
+ Call call = client.newCall(request);
+ return call;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatCallback.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatCallback.java
similarity index 58%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatCallback.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatCallback.java
index 0d07453f..aaccbed2 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatCallback.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatCallback.java
@@ -1,6 +1,9 @@
-package io.sc.platform.ai.anythingllm.service.support.workspaces;
+package io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat;
-import io.sc.platform.ai.ollama.service.support.chat.ChatResponse;
+import com.fasterxml.jackson.core.type.TypeReference;
+import io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat.response.Message;
+import io.sc.platform.ai.provider.ollama.service.support.chat.vo.ChatResponse;
+import io.sc.platform.util.CollectionUtil;
import io.sc.platform.util.ObjectMapperUtil;
import okhttp3.Call;
import okhttp3.Callback;
@@ -8,14 +11,17 @@ import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.BufferedSource;
import org.jetbrains.annotations.NotNull;
+import org.springframework.util.StringUtils;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
-public class StreamChatCallback implements Callback {
+public class ChatCallback implements Callback {
private ResponseBodyEmitter emitter;
- public StreamChatCallback(ResponseBodyEmitter emitter){
+ public ChatCallback(ResponseBodyEmitter emitter){
this.emitter =emitter;
}
@@ -31,8 +37,12 @@ public class StreamChatCallback implements Callback {
BufferedSource bufferedSource = body.source();
while (!bufferedSource.exhausted()) {
String line = bufferedSource.readUtf8Line();
- ChatResponse responseObject =ObjectMapperUtil.json().readValue(line, ChatResponse.class);
- emitter.send(responseObject.getMessage().getContent());
+ if(!StringUtils.hasText(line)){
+ continue;
+ }
+ line =line.substring(5);
+ Message message =ObjectMapperUtil.json().readValue(line, Message.class);
+ emitter.send(message.getTextResponse());
}
emitter.complete();
} catch (Exception e) {
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/Attachment.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/Attachment.java
new file mode 100644
index 00000000..6b66ffd2
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/Attachment.java
@@ -0,0 +1,31 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat.request;
+
+public class Attachment {
+ private String name;
+ private String mime;
+ private String contentString;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getMime() {
+ return mime;
+ }
+
+ public void setMime(String mime) {
+ this.mime = mime;
+ }
+
+ public String getContentString() {
+ return contentString;
+ }
+
+ public void setContentString(String contentString) {
+ this.contentString = contentString;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/ChatRequest.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/ChatRequest.java
new file mode 100644
index 00000000..b263284d
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/ChatRequest.java
@@ -0,0 +1,46 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat.request;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@JsonIgnoreProperties(ignoreUnknown=true)
+public class ChatRequest {
+ private String message;
+ private String mode;
+ private String sessionId;
+ private List attachments =new ArrayList<>();
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getMode() {
+ return mode;
+ }
+
+ public void setMode(String mode) {
+ this.mode = mode;
+ }
+
+ public String getSessionId() {
+ return sessionId;
+ }
+
+ public void setSessionId(String sessionId) {
+ this.sessionId = sessionId;
+ }
+
+ public List getAttachments() {
+ return attachments;
+ }
+
+ public void setAttachments(List attachments) {
+ this.attachments = attachments;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Message.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Message.java
new file mode 100644
index 00000000..e194fd30
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Message.java
@@ -0,0 +1,64 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@JsonIgnoreProperties(ignoreUnknown=true)
+public class Message {
+ private String id;
+ private String type;
+ private String textResponse;
+ private List sources =new ArrayList<>();
+ private boolean close;
+ private String error;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public String getTextResponse() {
+ return textResponse;
+ }
+
+ public void setTextResponse(String textResponse) {
+ this.textResponse = textResponse;
+ }
+
+ public List getSources() {
+ return sources;
+ }
+
+ public void setSources(List sources) {
+ this.sources = sources;
+ }
+
+ public boolean isClose() {
+ return close;
+ }
+
+ public void setClose(boolean close) {
+ this.close = close;
+ }
+
+ public String getError() {
+ return error;
+ }
+
+ public void setError(String error) {
+ this.error = error;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Source.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Source.java
new file mode 100644
index 00000000..907e2787
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Source.java
@@ -0,0 +1,7 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.streamchat.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown=true)
+public class Source {
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/WorkspacesApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/WorkspacesApi.java
new file mode 100644
index 00000000..4ad72d8e
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/WorkspacesApi.java
@@ -0,0 +1,71 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.workspaces;
+
+import io.sc.platform.ai.provider.anythingllm.api.AnythingllmApi;
+import io.sc.platform.ai.provider.anythingllm.support.workspace.workspaces.response.Workspace;
+import io.sc.platform.ai.provider.anythingllm.support.workspace.workspaces.response.WorkspacesResponse;
+import io.sc.platform.util.CollectionUtil;
+import io.sc.platform.util.ObjectMapperUtil;
+import io.sc.platform.util.UrlUtil;
+import okhttp3.*;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class WorkspacesApi extends AnythingllmApi {
+
+ public WorkspacesApi(String baseUrl, String apiKey){
+ super(UrlUtil.concatUrl(baseUrl,"/api/v1/workspaces"),"GET",apiKey);
+ this.apiKey =apiKey;
+ }
+
+ public WorkspacesResponse execute() {
+ Call call =createRequestCall();
+ if(call==null) { return null; }
+ try {
+ Response response = call.execute();
+ ResponseBody body =response.body();
+ WorkspacesResponse workspacesResponse = ObjectMapperUtil.json().readValue(body.source().readUtf8(), WorkspacesResponse.class);
+ return workspacesResponse;
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public List workspaceNames() {
+ WorkspacesResponse workspacesResponse =execute();
+ if(workspacesResponse==null) { return Collections.emptyList(); }
+ List workspaces =workspacesResponse.getWorkspaces();
+ if(!CollectionUtil.hasElements(workspaces)) { return Collections.emptyList(); }
+ List result =new ArrayList<>();
+ for(Workspace workspace : workspacesResponse.getWorkspaces()){
+ result.add(workspace.getName());
+ }
+ return result;
+ }
+
+ private Call createRequestCall() {
+ OkHttpClient client = new OkHttpClient.Builder()
+ .connectTimeout(this.connectTimeout)
+ .readTimeout(this.readTimeout)
+ .writeTimeout(this.writeTimeout)
+ .build();
+ Request request = new Request.Builder()
+ .url(this.url)
+ .header("Authorization","Bearer " + apiKey)
+ .get()
+ .build();
+
+ Call call = client.newCall(request);
+ return call;
+ }
+
+ public static void main(String[] args) {
+ WorkspacesApi api =new WorkspacesApi("http://localhost:3001","8X0N9TN-HQ3MTVK-M4NM8BQ-W6EYE8A");
+ WorkspacesResponse workspacesResponse =api.execute();
+ for(Workspace workspace : workspacesResponse.getWorkspaces()){
+ System.out.println(workspace.getName());
+ }
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Thread.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Thread.java
new file mode 100644
index 00000000..db6a4104
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Thread.java
@@ -0,0 +1,37 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.workspaces.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown=true)
+public class Thread {
+ @JsonProperty("user_id")
+ private String userId;
+
+ private String slug;
+ private String name;
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSlug() {
+ return slug;
+ }
+
+ public void setSlug(String slug) {
+ this.slug = slug;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Workspace.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Workspace.java
new file mode 100644
index 00000000..5be319ba
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Workspace.java
@@ -0,0 +1,189 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.workspaces.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import java.util.List;
+
+@JsonIgnoreProperties(ignoreUnknown=true)
+public class Workspace {
+ private long id;
+ private String name;
+ private String slug;
+ private String vectorTag;
+ private String createdAt;
+ private String openAiTemp;
+ private long openAiHistory;
+ private String lastUpdatedAt;
+ private String openAiPrompt;
+ private double similarityThreshold;
+ private String chatProvider;
+ private String chatModel;
+ private int topN;
+ private String chatMode;
+ private String pfpFilename;
+ private String agentProvider;
+ private String agentModel;
+ private String queryRefusalResponse;
+ private String vectorSearchMode;
+ private List threads;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSlug() {
+ return slug;
+ }
+
+ public void setSlug(String slug) {
+ this.slug = slug;
+ }
+
+ public String getVectorTag() {
+ return vectorTag;
+ }
+
+ public void setVectorTag(String vectorTag) {
+ this.vectorTag = vectorTag;
+ }
+
+ public String getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(String createdAt) {
+ this.createdAt = createdAt;
+ }
+
+ public String getOpenAiTemp() {
+ return openAiTemp;
+ }
+
+ public void setOpenAiTemp(String openAiTemp) {
+ this.openAiTemp = openAiTemp;
+ }
+
+ public long getOpenAiHistory() {
+ return openAiHistory;
+ }
+
+ public void setOpenAiHistory(long openAiHistory) {
+ this.openAiHistory = openAiHistory;
+ }
+
+ public String getLastUpdatedAt() {
+ return lastUpdatedAt;
+ }
+
+ public void setLastUpdatedAt(String lastUpdatedAt) {
+ this.lastUpdatedAt = lastUpdatedAt;
+ }
+
+ public String getOpenAiPrompt() {
+ return openAiPrompt;
+ }
+
+ public void setOpenAiPrompt(String openAiPrompt) {
+ this.openAiPrompt = openAiPrompt;
+ }
+
+ public double getSimilarityThreshold() {
+ return similarityThreshold;
+ }
+
+ public void setSimilarityThreshold(double similarityThreshold) {
+ this.similarityThreshold = similarityThreshold;
+ }
+
+ public String getChatProvider() {
+ return chatProvider;
+ }
+
+ public void setChatProvider(String chatProvider) {
+ this.chatProvider = chatProvider;
+ }
+
+ public String getChatModel() {
+ return chatModel;
+ }
+
+ public void setChatModel(String chatModel) {
+ this.chatModel = chatModel;
+ }
+
+ public int getTopN() {
+ return topN;
+ }
+
+ public void setTopN(int topN) {
+ this.topN = topN;
+ }
+
+ public String getChatMode() {
+ return chatMode;
+ }
+
+ public void setChatMode(String chatMode) {
+ this.chatMode = chatMode;
+ }
+
+ public String getPfpFilename() {
+ return pfpFilename;
+ }
+
+ public void setPfpFilename(String pfpFilename) {
+ this.pfpFilename = pfpFilename;
+ }
+
+ public String getAgentProvider() {
+ return agentProvider;
+ }
+
+ public void setAgentProvider(String agentProvider) {
+ this.agentProvider = agentProvider;
+ }
+
+ public String getAgentModel() {
+ return agentModel;
+ }
+
+ public void setAgentModel(String agentModel) {
+ this.agentModel = agentModel;
+ }
+
+ public String getQueryRefusalResponse() {
+ return queryRefusalResponse;
+ }
+
+ public void setQueryRefusalResponse(String queryRefusalResponse) {
+ this.queryRefusalResponse = queryRefusalResponse;
+ }
+
+ public String getVectorSearchMode() {
+ return vectorSearchMode;
+ }
+
+ public void setVectorSearchMode(String vectorSearchMode) {
+ this.vectorSearchMode = vectorSearchMode;
+ }
+
+ public List getThreads() {
+ return threads;
+ }
+
+ public void setThreads(List threads) {
+ this.threads = threads;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/WorkspacesResponse.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/WorkspacesResponse.java
new file mode 100644
index 00000000..f800c625
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/WorkspacesResponse.java
@@ -0,0 +1,18 @@
+package io.sc.platform.ai.provider.anythingllm.support.workspace.workspaces.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+import java.util.List;
+
+@JsonIgnoreProperties(ignoreUnknown=true)
+public class WorkspacesResponse {
+ private List workspaces;
+
+ public List getWorkspaces() {
+ return workspaces;
+ }
+
+ public void setWorkspaces(List workspaces) {
+ this.workspaces = workspaces;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/controller/OllamaWebController.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/controller/OllamaWebController.java
similarity index 76%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/controller/OllamaWebController.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/controller/OllamaWebController.java
index 37d22ceb..505366e9 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/controller/OllamaWebController.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/controller/OllamaWebController.java
@@ -1,8 +1,8 @@
-package io.sc.platform.ai.ollama.controller;
+package io.sc.platform.ai.provider.ollama.controller;
-import io.sc.platform.ai.ollama.MessageWrapper;
-import io.sc.platform.ai.ollama.service.OllamaService;
-import io.sc.platform.ai.ollama.service.support.tags.TagsResponse;
+import io.sc.platform.ai.api.MessageWrapper;
+import io.sc.platform.ai.provider.ollama.service.OllamaService;
+import io.sc.platform.ai.provider.ollama.service.support.tags.TagsResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/OllamaService.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/OllamaService.java
new file mode 100644
index 00000000..622fe71d
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/OllamaService.java
@@ -0,0 +1,14 @@
+package io.sc.platform.ai.provider.ollama.service;
+
+import io.sc.platform.ai.api.MessageWrapper;
+import io.sc.platform.ai.api.service.ApiService;
+import io.sc.platform.ai.provider.ollama.service.support.tags.TagsResponse;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+import java.util.List;
+
+public interface OllamaService {
+ public ResponseBodyEmitter chat(MessageWrapper wrapper);
+ public TagsResponse tags();
+ public List modelNames();
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/impl/OllamaServiceImpl.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/impl/OllamaServiceImpl.java
new file mode 100644
index 00000000..23a50392
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/impl/OllamaServiceImpl.java
@@ -0,0 +1,58 @@
+package io.sc.platform.ai.provider.ollama.service.impl;
+
+import io.sc.platform.ai.api.service.ApiConfigurationService;
+import io.sc.platform.ai.api.MessageWrapper;
+import io.sc.platform.ai.provider.ollama.service.OllamaService;
+import io.sc.platform.ai.provider.ollama.service.support.chat.ChatApi;
+import io.sc.platform.ai.provider.ollama.service.support.tags.Model;
+import io.sc.platform.ai.provider.ollama.service.support.tags.TagsApi;
+import io.sc.platform.ai.provider.ollama.service.support.tags.TagsResponse;
+import io.sc.platform.util.CollectionUtil;
+import io.sc.platform.util.StringUtil;
+import io.sc.platform.util.support.NumberStringComparator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Service("io.sc.platform.ai.provider.ollama.service.impl.OllamaServiceImpl")
+public class OllamaServiceImpl implements OllamaService {
+ @Autowired private ApiConfigurationService apiConfigurationService;
+
+ @Override
+ public ResponseBodyEmitter chat(MessageWrapper wrapper) {
+ if(!StringUtil.hasText(wrapper.getModel())){
+ wrapper.setModel(apiConfigurationService.getOllamaDefaultModelName());
+ }
+ ChatApi api =new ChatApi(apiConfigurationService.getOllamaApiBaseUrl());
+ return api.execute(wrapper);
+ }
+
+ @Override
+ public TagsResponse tags() {
+ TagsApi api =new TagsApi(apiConfigurationService.getOllamaApiBaseUrl());
+ return api.execute();
+ }
+
+ @Override
+ public List modelNames() {
+ TagsApi api =new TagsApi(apiConfigurationService.getOllamaApiBaseUrl());
+ TagsResponse response =api.execute();
+ if(response==null){
+ return Collections.emptyList();
+ }
+ List models =response.getModels();
+ if(!CollectionUtil.hasElements(models)){
+ return Collections.emptyList();
+ }
+ List result =new ArrayList<>();
+ for(Model model : models){
+ result.add(model.getModel());
+ }
+ Collections.sort(result, new NumberStringComparator());
+ return result;
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/blobs/BlobsApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/blobs/BlobsApi.java
new file mode 100644
index 00000000..e0098141
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/blobs/BlobsApi.java
@@ -0,0 +1,10 @@
+package io.sc.platform.ai.provider.ollama.service.support.blobs;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class BlobsApi extends AiApi {
+ public BlobsApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/blobs/"),"HEAD");
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatApi.java
similarity index 84%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatApi.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatApi.java
index ff6c7fbc..6b43735f 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatApi.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatApi.java
@@ -1,10 +1,13 @@
-package io.sc.platform.ai.ollama.service.support.chat;
+package io.sc.platform.ai.provider.ollama.service.support.chat;
import com.fasterxml.jackson.core.JsonProcessingException;
-import io.sc.platform.ai.ollama.MessageWrapper;
-import io.sc.platform.ai.ollama.OllamaApi;
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.ai.api.MessageWrapper;
+import io.sc.platform.ai.provider.ollama.service.support.chat.vo.ChatRequest;
+import io.sc.platform.ai.provider.ollama.service.support.chat.vo.Message;
import io.sc.platform.util.CollectionUtil;
import io.sc.platform.util.ObjectMapperUtil;
+import io.sc.platform.util.UrlUtil;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,12 +16,11 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter
import java.util.List;
-public class ChatApi extends OllamaApi {
+public class ChatApi extends AiApi {
private static final Logger log = LoggerFactory.getLogger(ChatApi.class);
public ChatApi(String baseUrl){
- super("/api/chat","POST");
- this.baseUrl =baseUrl;
+ super(UrlUtil.concatUrl(baseUrl,"/api/chat"),"POST");
}
public ResponseBodyEmitter execute(MessageWrapper wrapper) {
@@ -73,7 +75,7 @@ public class ChatApi extends OllamaApi {
}
RequestBody body = RequestBody.create(json, MediaType.parse("application/json; charset=utf-8"));
okhttp3.Request request = new okhttp3.Request.Builder()
- .url(this.baseUrl + this.url)
+ .url(this.url)
.headers(headers)
.post(body)
.build();
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatCallback.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatCallback.java
similarity index 91%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatCallback.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatCallback.java
index 407029da..ac8ed6ab 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatCallback.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatCallback.java
@@ -1,5 +1,6 @@
-package io.sc.platform.ai.ollama.service.support.chat;
+package io.sc.platform.ai.provider.ollama.service.support.chat;
+import io.sc.platform.ai.provider.ollama.service.support.chat.vo.ChatResponse;
import io.sc.platform.util.ObjectMapperUtil;
import okhttp3.Call;
import okhttp3.Callback;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatRequest.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatRequest.java
similarity index 96%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatRequest.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatRequest.java
index cc66b358..5efa831f 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatRequest.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatRequest.java
@@ -1,4 +1,4 @@
-package io.sc.platform.ai.ollama.service.support.chat;
+package io.sc.platform.ai.provider.ollama.service.support.chat.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatResponse.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatResponse.java
similarity index 97%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatResponse.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatResponse.java
index a0040e35..d5e619a6 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatResponse.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatResponse.java
@@ -1,4 +1,4 @@
-package io.sc.platform.ai.ollama.service.support.chat;
+package io.sc.platform.ai.provider.ollama.service.support.chat.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Message.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Message.java
similarity index 94%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Message.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Message.java
index 097d5ded..4307b83c 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Message.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Message.java
@@ -1,4 +1,4 @@
-package io.sc.platform.ai.ollama.service.support.chat;
+package io.sc.platform.ai.provider.ollama.service.support.chat.vo;
import java.util.ArrayList;
import java.util.List;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Tool.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Tool.java
new file mode 100644
index 00000000..6dcad1c2
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Tool.java
@@ -0,0 +1,4 @@
+package io.sc.platform.ai.provider.ollama.service.support.chat.vo;
+
+public class Tool {
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/copy/CopyApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/copy/CopyApi.java
new file mode 100644
index 00000000..b9f9f632
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/copy/CopyApi.java
@@ -0,0 +1,10 @@
+package io.sc.platform.ai.provider.ollama.service.support.copy;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class CopyApi extends AiApi {
+ public CopyApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/copy"),"POST");
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/create/CreateApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/create/CreateApi.java
new file mode 100644
index 00000000..aeba22a3
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/create/CreateApi.java
@@ -0,0 +1,10 @@
+package io.sc.platform.ai.provider.ollama.service.support.create;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class CreateApi extends AiApi {
+ public CreateApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/create"),"POST");
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/delete/DeleteApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/delete/DeleteApi.java
new file mode 100644
index 00000000..324e5c32
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/delete/DeleteApi.java
@@ -0,0 +1,10 @@
+package io.sc.platform.ai.provider.ollama.service.support.delete;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class DeleteApi extends AiApi {
+ public DeleteApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/delete"),"DELETE");
+ }
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embed/EmbedApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embed/EmbedApi.java
new file mode 100644
index 00000000..444f6df0
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embed/EmbedApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.embed;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class EmbedApi extends AiApi {
+ public EmbedApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/embed"),"POST");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embeddings/EmbeddingsApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embeddings/EmbeddingsApi.java
new file mode 100644
index 00000000..3d9c64e9
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embeddings/EmbeddingsApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.embeddings;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class EmbeddingsApi extends AiApi {
+ public EmbeddingsApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/embeddings"),"POST");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/generate/GenerateApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/generate/GenerateApi.java
new file mode 100644
index 00000000..1fa45e1a
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/generate/GenerateApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.generate;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class GenerateApi extends AiApi {
+ public GenerateApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/generate"),"POST");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/ps/PsApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/ps/PsApi.java
new file mode 100644
index 00000000..f3be2105
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/ps/PsApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.ps;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class PsApi extends AiApi {
+ public PsApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/ps"),"GET");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/pull/PullApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/pull/PullApi.java
new file mode 100644
index 00000000..e2e0414f
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/pull/PullApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.pull;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class PullApi extends AiApi {
+ public PullApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/pull"),"POST");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/push/PushApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/push/PushApi.java
new file mode 100644
index 00000000..13a8c4cd
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/push/PushApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.push;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class PushApi extends AiApi {
+ public PushApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/push"),"POST");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/show/ShowApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/show/ShowApi.java
new file mode 100644
index 00000000..9b4de366
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/show/ShowApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.show;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class ShowApi extends AiApi {
+ public ShowApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/show"),"POST");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Details.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Details.java
similarity index 95%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Details.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Details.java
index e7f3b9f0..5a20038f 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Details.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Details.java
@@ -1,4 +1,4 @@
-package io.sc.platform.ai.ollama.service.support.tags;
+package io.sc.platform.ai.provider.ollama.service.support.tags;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Model.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Model.java
similarity index 95%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Model.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Model.java
index c4efcf96..aa0ae833 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Model.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Model.java
@@ -1,4 +1,4 @@
-package io.sc.platform.ai.ollama.service.support.tags;
+package io.sc.platform.ai.provider.ollama.service.support.tags;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsApi.java
similarity index 79%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsApi.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsApi.java
index e2e5ac66..8b821aee 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsApi.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsApi.java
@@ -1,15 +1,15 @@
-package io.sc.platform.ai.ollama.service.support.tags;
+package io.sc.platform.ai.provider.ollama.service.support.tags;
-import io.sc.platform.ai.ollama.OllamaApi;
+import io.sc.platform.ai.api.AiApi;
import io.sc.platform.util.ObjectMapperUtil;
+import io.sc.platform.util.UrlUtil;
import okhttp3.*;
import java.io.IOException;
-public class TagsApi extends OllamaApi {
+public class TagsApi extends AiApi {
public TagsApi(String baseUrl){
- super("/api/tags","GET");
- this.baseUrl =baseUrl;
+ super(UrlUtil.concatUrl(baseUrl,"/api/tags"),"GET");
}
public TagsResponse execute() {
@@ -32,7 +32,7 @@ public class TagsApi extends OllamaApi {
.writeTimeout(this.writeTimeout)
.build();
Request request = new Request.Builder()
- .url(this.baseUrl + this.url)
+ .url(this.url)
.get()
.build();
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsResponse.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsResponse.java
similarity index 85%
rename from io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsResponse.java
rename to io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsResponse.java
index 9d335f8b..a1128c1d 100644
--- a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsResponse.java
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsResponse.java
@@ -1,4 +1,4 @@
-package io.sc.platform.ai.ollama.service.support.tags;
+package io.sc.platform.ai.provider.ollama.service.support.tags;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/version/VersionApi.java b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/version/VersionApi.java
new file mode 100644
index 00000000..3bb520f2
--- /dev/null
+++ b/io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/version/VersionApi.java
@@ -0,0 +1,12 @@
+package io.sc.platform.ai.provider.ollama.service.support.version;
+
+import io.sc.platform.ai.api.AiApi;
+import io.sc.platform.util.UrlUtil;
+
+public class VersionApi extends AiApi {
+ public VersionApi(String baseUrl){
+ super(UrlUtil.concatUrl(baseUrl,"/api/version"),"GET");
+ }
+
+
+}
diff --git a/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/components.json b/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/components.json
index fbfe8232..23aef8fc 100644
--- a/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/components.json
+++ b/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/components.json
@@ -9,8 +9,14 @@
{
"includes":[
- "io.sc.platform.ai.ollama.controller",
- "io.sc.platform.ai.ollama.service.impl"
+ "io.sc.platform.ai.api.controller",
+ "io.sc.platform.ai.api.service.impl",
+
+ "io.sc.platform.ai.provider.anythingllm.controller",
+ "io.sc.platform.ai.provider.anythingllm.service.impl",
+
+ "io.sc.platform.ai.provider.ollama.controller",
+ "io.sc.platform.ai.provider.ollama.service.impl"
],
"excludes":[]
}
diff --git a/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/parameters.json b/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/parameters.json
index a0f17490..b292e9d4 100644
--- a/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/parameters.json
+++ b/io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/parameters.json
@@ -29,10 +29,11 @@
"id" :"parameter.ai.provider.default",
"parentId" :"parameter.ai",
"code" :"parameter.ai.provider.default",
- "defaultValue" :"ollama",
+ "defaultValue" :"Ollama",
"order" : 200,
"options" : {
- "ollama" : "parameter.ai.provider.default.options.ollama"
+ "Ollama" : "parameter.ai.provider.default.options.ollama",
+ "AnythingLLM" : "parameter.ai.provider.default.options.anythingllm"
}
},
//AI 服务器/服务提供者
@@ -63,5 +64,31 @@
"deepseek-r1:70b" : "deepseek-r1:70b",
"deepseek-r1:671b" : "deepseek-r1:671b"
}
+ },
+ //AI 服务器/服务提供者/AnythingLLM
+ {"id":"parameter.ai.provider.anythingllm", "parentId":"parameter.ai.provider", "order":200},
+ //AI 服务器/服务提供者/AnythingLLM/api url
+ {
+ "id" :"parameter.ai.provider.anythingllm.apiUrl",
+ "parentId" :"parameter.ai.provider.anythingllm",
+ "code" :"parameter.ai.provider.anythingllm.apiUrl",
+ "defaultValue" :"http://localhost:3001",
+ "order" : 100
+ },
+ //AI 服务器/服务提供者/AnythingLLM/api 秘钥
+ {
+ "id" :"parameter.ai.provider.anythingllm.apiKey",
+ "parentId" :"parameter.ai.provider.anythingllm",
+ "code" :"parameter.ai.provider.anythingllm.apiKey",
+ "defaultValue" :"",
+ "order" : 200
+ },
+ //AI 服务器/服务提供者/AnythingLLM/默认工作空间
+ {
+ "id" :"parameter.ai.provider.anythingllm.defaultWorkspace",
+ "parentId" :"parameter.ai.provider.anythingllm",
+ "code" :"parameter.ai.provider.anythingllm.defaultWorkspace",
+ "defaultValue" :"",
+ "order" : 300
}
]
diff --git a/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters.properties b/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters.properties
index 11b92d1d..e34abe5c 100644
--- a/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters.properties
+++ b/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters.properties
@@ -3,10 +3,16 @@ parameter.ai.chat.enable=AI Chat Enable
parameter.ai.chat.enable.options.enable=Enable
parameter.ai.chat.enable.options.disable=Disable
-parameter.ai.provider.default=Model Provider (default)
+parameter.ai.provider.default=Service Provider (default)
+parameter.ai.provider.default.options.anythingllm=Anything LLM
parameter.ai.provider.default.options.ollama=Ollama
-parameter.ai.provider=Model Providers
+parameter.ai.provider=Service Providers
parameter.ai.provider.ollama=Ollama
parameter.ai.provider.ollama.apiUrl=Api URL
-parameter.ai.provider.ollama.defaultModelName=Default Model Name
\ No newline at end of file
+parameter.ai.provider.ollama.defaultModelName=Default Model Name
+
+parameter.ai.provider.anythingllm=AnythingLLM
+parameter.ai.provider.anythingllm.apiUrl=Api URL
+parameter.ai.provider.anythingllm.apiKey=Api Key
+parameter.ai.provider.anythingllm.defaultWorkspace=Default Workspace
\ No newline at end of file
diff --git a/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_tw_CN.properties b/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_tw_CN.properties
index 755c59ec..9e2fac71 100644
--- a/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_tw_CN.properties
+++ b/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_tw_CN.properties
@@ -3,10 +3,16 @@ parameter.ai.chat.enable=\u662F\u5426\u958B\u555F\u667A\u80FD\u5C0D\u8A71
parameter.ai.chat.enable.options.enable=\u958B\u555F
parameter.ai.chat.enable.options.disable=\u95DC\u9589
-parameter.ai.provider.default=\u9ED8\u8A8D\u6A21\u578B\u63D0\u4F9B\u5546
+parameter.ai.provider.default=\u9ED8\u8A8D\u670D\u52D9\u63D0\u4F9B\u5546
+parameter.ai.provider.default.options.anythingllm=Anything LLM
parameter.ai.provider.default.options.ollama=Ollama
-parameter.ai.provider=\u6A21\u578B\u63D0\u4F9B\u5546
+parameter.ai.provider=\u670D\u52D9\u63D0\u4F9B\u5546
parameter.ai.provider.ollama=Ollama
parameter.ai.provider.ollama.apiUrl=Api URL
-parameter.ai.provider.ollama.defaultModelName=\u9ED8\u8A8D\u6A21\u578B\u540D\u7A31
\ No newline at end of file
+parameter.ai.provider.ollama.defaultModelName=\u9ED8\u8A8D\u6A21\u578B\u540D\u7A31
+
+parameter.ai.provider.anythingllm=AnythingLLM
+parameter.ai.provider.anythingllm.apiUrl=Api URL
+parameter.ai.provider.anythingllm.apiKey=Api \u79D8\u9470
+parameter.ai.provider.anythingllm.defaultWorkspace=\u9ED8\u8A8D\u5DE5\u4F5C\u7A7A\u9593
\ No newline at end of file
diff --git a/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_zh_CN.properties b/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_zh_CN.properties
index 4cbc5b93..8565dd8c 100644
--- a/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_zh_CN.properties
+++ b/io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_zh_CN.properties
@@ -4,10 +4,16 @@ parameter.ai.chat.enable=\u662F\u5426\u5F00\u542F\u667A\u80FD\u5BF9\u8BDD
parameter.ai.chat.enable.options.enable=\u5F00\u542F
parameter.ai.chat.enable.options.disable=\u5173\u95ED
-parameter.ai.provider.default=\u9ED8\u8BA4\u6A21\u578B\u63D0\u4F9B\u5546
+parameter.ai.provider.default=\u9ED8\u8BA4\u670D\u52A1\u63D0\u4F9B\u5546
+parameter.ai.provider.default.options.anythingllm=Anything LLM
parameter.ai.provider.default.options.ollama=Ollama
-parameter.ai.provider=\u6A21\u578B\u63D0\u4F9B\u5546
+parameter.ai.provider=\u670D\u52A1\u63D0\u4F9B\u5546
parameter.ai.provider.ollama=Ollama
parameter.ai.provider.ollama.apiUrl=Api URL
-parameter.ai.provider.ollama.defaultModelName=\u9ED8\u8BA4\u6A21\u578B\u540D\u79F0
\ No newline at end of file
+parameter.ai.provider.ollama.defaultModelName=\u9ED8\u8BA4\u6A21\u578B\u540D\u79F0
+
+parameter.ai.provider.anythingllm=AnythingLLM
+parameter.ai.provider.anythingllm.apiUrl=Api URL
+parameter.ai.provider.anythingllm.apiKey=Api \u79D8\u94A5
+parameter.ai.provider.anythingllm.defaultWorkspace=\u9ED8\u8BA4\u5DE5\u4F5C\u7A7A\u95F4
\ No newline at end of file
diff --git a/io.sc.platform.core.frontend/src/views/testcase/ai/Ai.vue b/io.sc.platform.core.frontend/src/views/testcase/ai/Ai.vue
index ab7628dd..7c165eee 100644
--- a/io.sc.platform.core.frontend/src/views/testcase/ai/Ai.vue
+++ b/io.sc.platform.core.frontend/src/views/testcase/ai/Ai.vue
@@ -99,7 +99,7 @@ const doSendMessage = async (message: string) => {
});
// 准备发出请求
- const url = Environment.apiContextPath('/api/ai/ollama/chat');
+ const url = Environment.apiContextPath('/api/ai/chat');
// 设置请求头
const headers = Fetch.buildHeaders();
if (!Fetch.isAuthorization(url)) {
diff --git a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/criteria/impl/Or.java b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/criteria/impl/Or.java
index ebc53876..372ef018 100644
--- a/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/criteria/impl/Or.java
+++ b/io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/criteria/impl/Or.java
@@ -20,6 +20,7 @@ public class Or extends Criteria {
List predicates =new ArrayList<>();
for(Criteria _criteria : criteria){
_criteria.setConversionService(conversionService);
+ _criteria.setRepositories(repositories);
predicates.add(_criteria.getPredicate(root, query, builder));
}
return builder.or(predicates.toArray(new Predicate[]{}));
diff --git a/io.sc.platform.system.frontend/src/views/parameter/Parameter.vue b/io.sc.platform.system.frontend/src/views/parameter/Parameter.vue
index 416dc298..94aede6d 100644
--- a/io.sc.platform.system.frontend/src/views/parameter/Parameter.vue
+++ b/io.sc.platform.system.frontend/src/views/parameter/Parameter.vue
@@ -193,6 +193,7 @@ const changeOptions = () => {
const isExistsOptions = () => {
const row = treeGridRef.value.getSelectedRow();
+ console.log(row);
if (row) {
return row.options && Object.keys(row.options).length > 0;
}
diff --git a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java
index 362b8831..9ef4195c 100644
--- a/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java
+++ b/io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java
@@ -14,10 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@RestController("io.sc.platform.system.parameter.controller.ParameterWebController")
@RequestMapping("api/system/parameter")
@@ -27,30 +24,51 @@ public class ParameterWebController extends RestCrudController page =super.query(request, response, queryParameter);
List vos =page.getContent();
if(vos!=null && !vos.isEmpty()){
- List parameters = PluginManager.getInstance().getParameters();
- if(parameters!=null && !parameters.isEmpty()){
- Map parameterMap =new HashMap<>(parameters.size());
- for(Parameter parameter : parameters){
- parameterMap.put(parameter.getCode(),parameter);
- }
- for(ParameterVo vo : vos){
- Parameter parameter =parameterMap.get(vo.getCode());
- if(parameter!=null) {
- vo.setDefaultValue(parameter.getDefaultValue());
- if("parameter.system.homePage".equals(parameter.getCode())){
- Map homeMap =new LinkedHashMap<>();
- homeMap.put("/home","home.default");
- homeMap.putAll(PluginManager.getInstance().getFrontEndRouteHomeMap());
- vo.setOptions(homeMap);
- }else {
- if (parameter.getOptions() != null) {
- vo.setOptions(parameter.getOptions());
- }
- }
- }
- }
+ Map parameterMap =getParameterPlugins();
+ for(ParameterVo vo : vos){
+ Parameter parameter =parameterMap.get(vo.getCode());
+ mergeProperties(vo,parameter);
}
}
return page;
}
+
+ @Override
+ protected ParameterVo update(HttpServletRequest request, HttpServletResponse response, String s, ParameterEntity entity) throws Exception {
+ ParameterVo vo =super.update(request, response, s, entity);
+ if(vo!=null){
+ Map parameterMap =getParameterPlugins();
+ Parameter parameter =parameterMap.get(vo.getCode());
+ mergeProperties(vo,parameter);
+ }
+ return vo;
+ }
+
+ private Map getParameterPlugins(){
+ List parameters = PluginManager.getInstance().getParameters();
+ if(parameters!=null && !parameters.isEmpty()) {
+ Map parameterMap = new HashMap<>(parameters.size());
+ for (Parameter parameter : parameters) {
+ parameterMap.put(parameter.getCode(), parameter);
+ }
+ return parameterMap;
+ }
+ return Collections.emptyMap();
+ }
+
+ private void mergeProperties(ParameterVo vo,Parameter parameter){
+ if(parameter!=null) {
+ vo.setDefaultValue(parameter.getDefaultValue());
+ if("parameter.system.homePage".equals(parameter.getCode())){
+ Map homeMap =new LinkedHashMap<>();
+ homeMap.put("/home","home.default");
+ homeMap.putAll(PluginManager.getInstance().getFrontEndRouteHomeMap());
+ vo.setOptions(homeMap);
+ }else {
+ if (parameter.getOptions() != null) {
+ vo.setOptions(parameter.getOptions());
+ }
+ }
+ }
+ }
}