Browse Source

后端修复 orm criteria 的 OR 查询的bug

main
wangshaoping 2 months ago
parent
commit
787aa3df76
  1. 25
      io.sc.platform.ai.frontend/src/views/chat/Chat.vue
  2. 4
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/AnythingllmService.java
  3. 6
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/impl/AnythingllmServiceImpl.java
  4. 86
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatApi.java
  5. 17
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/AiApi.java
  6. 6
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/MessageWrapper.java
  7. 19
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/ServiceProvider.java
  8. 18
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/controller/ApiWebController.java
  9. 42
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiConfigurationService.java
  10. 8
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/ApiService.java
  11. 53
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiConfigurationServiceImpl.java
  12. 30
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/api/service/impl/ApiServiceImpl.java
  13. 13
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/OllamaService.java
  14. 69
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/impl/OllamaServiceImpl.java
  15. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/blobs/BlobsApi.java
  16. 4
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Tool.java
  17. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/copy/OllamaCopyApi.java
  18. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/create/OllamaCreateApi.java
  19. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/delete/OllamaDeleteApi.java
  20. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embed/OllamaEmbedApi.java
  21. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embeddings/OllamaEmbeddingsApi.java
  22. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/generate/OllamaGenerateApi.java
  23. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/ps/OllamaPsApi.java
  24. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/pull/OllamaPullApi.java
  25. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/push/OllamaPushApi.java
  26. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/show/OllamaShowApi.java
  27. 11
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/version/OllamaVersionApi.java
  28. 20
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/api/AnythingllmApi.java
  29. 16
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/AnythingllmService.java
  30. 34
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/service/impl/AnythingllmServiceImpl.java
  31. 87
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatApi.java
  32. 22
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/ChatCallback.java
  33. 31
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/Attachment.java
  34. 46
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/request/ChatRequest.java
  35. 64
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Message.java
  36. 7
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/streamchat/response/Source.java
  37. 71
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/WorkspacesApi.java
  38. 37
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Thread.java
  39. 189
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/Workspace.java
  40. 18
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/anythingllm/support/workspace/workspaces/response/WorkspacesResponse.java
  41. 8
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/controller/OllamaWebController.java
  42. 14
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/OllamaService.java
  43. 58
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/impl/OllamaServiceImpl.java
  44. 10
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/blobs/BlobsApi.java
  45. 16
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatApi.java
  46. 3
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/ChatCallback.java
  47. 2
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatRequest.java
  48. 2
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/ChatResponse.java
  49. 2
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Message.java
  50. 4
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/chat/vo/Tool.java
  51. 10
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/copy/CopyApi.java
  52. 10
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/create/CreateApi.java
  53. 10
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/delete/DeleteApi.java
  54. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embed/EmbedApi.java
  55. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/embeddings/EmbeddingsApi.java
  56. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/generate/GenerateApi.java
  57. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/ps/PsApi.java
  58. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/pull/PullApi.java
  59. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/push/PushApi.java
  60. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/show/ShowApi.java
  61. 2
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Details.java
  62. 2
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/Model.java
  63. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsApi.java
  64. 2
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/tags/TagsResponse.java
  65. 12
      io.sc.platform.ai/src/main/java/io/sc/platform/ai/provider/ollama/service/support/version/VersionApi.java
  66. 10
      io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/components.json
  67. 31
      io.sc.platform.ai/src/main/resources/META-INF/platform/plugins/parameters.json
  68. 10
      io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters.properties
  69. 10
      io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_tw_CN.properties
  70. 10
      io.sc.platform.ai/src/main/resources/io/sc/platform/ai/i18n/parameters_zh_CN.properties
  71. 2
      io.sc.platform.core.frontend/src/views/testcase/ai/Ai.vue
  72. 1
      io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/criteria/impl/Or.java
  73. 1
      io.sc.platform.system.frontend/src/views/parameter/Parameter.vue
  74. 46
      io.sc.platform.system/src/main/java/io/sc/platform/system/parameter/controller/ParameterWebController.java

25
io.sc.platform.ai.frontend/src/views/chat/Chat.vue

@ -45,7 +45,16 @@
<q-btn :label="$t('ai.chat.action.newSession')" flat dense icon="bi-chat-text" class="q-mr-sm" @click="newSession" />
<q-toggle v-model="showThinkRef" color="green" :label="showThinkRef ? $t('ai.chat.action.showThink') : $t('ai.chat.action.notShowThink')" />
</q-toolbar>
<q-input v-model="questionRef" type="textarea" rows="5" outlined clearable style="height: 100%" @keydown.enter.prevent="sendMessage" />
<q-input
ref="textareaRef"
v-model="questionRef"
type="textarea"
rows="5"
outlined
clearable
style="height: 100%"
@keydown.enter.prevent="sendMessage"
/>
</div>
</template>
</q-splitter>
@ -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<string, object>());
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();
});
</script>

4
io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/AnythingllmService.java

@ -1,4 +0,0 @@
package io.sc.platform.ai.anythingllm.service;
public interface AnythingllmService {
}

6
io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/impl/AnythingllmServiceImpl.java

@ -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 {
}

86
io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatApi.java

@ -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<String> 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;
}
}

17
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/OllamaApi.java → 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;
}

6
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/MessageWrapper.java → 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<String> questions =new ArrayList<>();
public void addQuestion(String question){
this.questions.add(question);
}
public String getModel() {
return model;
}

19
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;
}
}

18
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);
}
}

42
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();
}

8
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);
}

53
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);
}
}

30
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;
}
}

13
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/OllamaService.java

@ -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<String> modelNames();
}

69
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/impl/OllamaServiceImpl.java

@ -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<String,String> 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<String,String> parameters =getParameters();
TagsApi api =new TagsApi(parameters.get(KEY_API_URL));
return api.execute();
}
@Override
public List<String> modelNames() {
Map<String,String> parameters =getParameters();
TagsApi api =new TagsApi(parameters.get(KEY_API_URL));
TagsResponse response =api.execute();
if(response==null){
return Collections.emptyList();
}
List<Model> models =response.getModels();
if(!CollectionUtil.hasElements(models)){
return Collections.emptyList();
}
List<String> result =new ArrayList<>();
for(Model model : models){
result.add(model.getModel());
}
Collections.sort(result, new NumberStringComparator());
return result;
}
private Map<String,String> getParameters(){
return systemParameterService.getParameters(new String[]{KEY_API_URL,KEY_DEFAULT_MODEL_NAME});
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/blobs/BlobsApi.java

@ -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");
}
}

4
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Tool.java

@ -1,4 +0,0 @@
package io.sc.platform.ai.ollama.service.support.chat;
public class Tool {
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/copy/OllamaCopyApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/create/OllamaCreateApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/delete/OllamaDeleteApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embed/OllamaEmbedApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/embeddings/OllamaEmbeddingsApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/generate/OllamaGenerateApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/ps/OllamaPsApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/pull/OllamaPullApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/push/OllamaPushApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/show/OllamaShowApi.java

@ -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");
}
}

11
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/version/OllamaVersionApi.java

@ -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");
}
}

20
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;
}
}

16
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<String> workspaceNames();
}

34
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<String> workspaceNames() {
String baseUrl =apiConfigurationService.getAnythingllmApiBaseUrl();
String apiKey =apiConfigurationService.getAnythingllmApiKey();
WorkspacesApi api =new WorkspacesApi(baseUrl,apiKey);
return api.workspaceNames();
}
}

87
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<String> 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;
}
}

22
io.sc.platform.ai/src/main/java/io/sc/platform/ai/anythingllm/service/support/workspaces/StreamChatCallback.java → 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) {

31
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;
}
}

46
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<Attachment> 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<Attachment> getAttachments() {
return attachments;
}
public void setAttachments(List<Attachment> attachments) {
this.attachments = attachments;
}
}

64
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<Source> 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<Source> getSources() {
return sources;
}
public void setSources(List<Source> 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;
}
}

7
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 {
}

71
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<String> workspaceNames() {
WorkspacesResponse workspacesResponse =execute();
if(workspacesResponse==null) { return Collections.emptyList(); }
List<Workspace> workspaces =workspacesResponse.getWorkspaces();
if(!CollectionUtil.hasElements(workspaces)) { return Collections.emptyList(); }
List<String> 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());
}
}
}

37
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;
}
}

189
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<Thread> 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<Thread> getThreads() {
return threads;
}
public void setThreads(List<Thread> threads) {
this.threads = threads;
}
}

18
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<Workspace> workspaces;
public List<Workspace> getWorkspaces() {
return workspaces;
}
public void setWorkspaces(List<Workspace> workspaces) {
this.workspaces = workspaces;
}
}

8
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/controller/OllamaWebController.java → 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;

14
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<String> modelNames();
}

58
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<String> modelNames() {
TagsApi api =new TagsApi(apiConfigurationService.getOllamaApiBaseUrl());
TagsResponse response =api.execute();
if(response==null){
return Collections.emptyList();
}
List<Model> models =response.getModels();
if(!CollectionUtil.hasElements(models)){
return Collections.emptyList();
}
List<String> result =new ArrayList<>();
for(Model model : models){
result.add(model.getModel());
}
Collections.sort(result, new NumberStringComparator());
return result;
}
}

10
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");
}
}

16
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatApi.java → 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();

3
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatCallback.java → 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;

2
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatRequest.java → 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;

2
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/ChatResponse.java → 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;

2
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/chat/Message.java → 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;

4
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 {
}

10
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");
}
}

10
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");
}
}

10
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");
}
}

12
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");
}
}

12
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");
}
}

12
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");
}
}

12
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");
}
}

12
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");
}
}

12
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");
}
}

12
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");
}
}

2
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Details.java → 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;

2
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/Model.java → 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;

12
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsApi.java → 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();

2
io.sc.platform.ai/src/main/java/io/sc/platform/ai/ollama/service/support/tags/TagsResponse.java → 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;

12
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");
}
}

10
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":[]
}

31
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
}
]

10
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
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

10
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
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

10
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
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

2
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)) {

1
io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/criteria/impl/Or.java

@ -20,6 +20,7 @@ public class Or<E> extends Criteria<E> {
List<Predicate> 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[]{}));

1
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;
}

46
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,14 +24,39 @@ public class ParameterWebController extends RestCrudController<ParameterVo, Para
Page<ParameterVo> page =super.query(request, response, queryParameter);
List<ParameterVo> vos =page.getContent();
if(vos!=null && !vos.isEmpty()){
List<Parameter> parameters = PluginManager.getInstance().getParameters();
if(parameters!=null && !parameters.isEmpty()){
Map<String,Parameter> parameterMap =new HashMap<>(parameters.size());
for(Parameter parameter : parameters){
parameterMap.put(parameter.getCode(),parameter);
}
Map<String,Parameter> 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<String,Parameter> parameterMap =getParameterPlugins();
Parameter parameter =parameterMap.get(vo.getCode());
mergeProperties(vo,parameter);
}
return vo;
}
private Map<String,Parameter> getParameterPlugins(){
List<Parameter> parameters = PluginManager.getInstance().getParameters();
if(parameters!=null && !parameters.isEmpty()) {
Map<String, Parameter> 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())){
@ -49,8 +71,4 @@ public class ParameterWebController extends RestCrudController<ParameterVo, Para
}
}
}
}
}
return page;
}
}

Loading…
Cancel
Save