1
This commit is contained in:
@@ -1,9 +1,55 @@
|
|||||||
package com.metis.llm.engine;
|
package com.metis.llm.engine;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.metis.domain.entity.base.Model;
|
||||||
|
import com.metis.enums.ModelTypeEnum;
|
||||||
|
import com.metis.llm.domain.CompletionParams;
|
||||||
|
import com.metis.llm.domain.LLMChatModeConfig;
|
||||||
|
import com.metis.llm.domain.LLMEmbeddingModelConfig;
|
||||||
|
import com.metis.llm.domain.config.OllamaModelConfig;
|
||||||
|
import com.metis.llm.service.ModelEngine;
|
||||||
|
import dev.langchain4j.model.chat.ChatModel;
|
||||||
|
import dev.langchain4j.model.chat.request.ResponseFormat;
|
||||||
|
import dev.langchain4j.model.embedding.EmbeddingModel;
|
||||||
|
import dev.langchain4j.model.ollama.OllamaChatModel;
|
||||||
|
import dev.langchain4j.model.ollama.OllamaEmbeddingModel;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class OllamaModelEngine {
|
public class OllamaModelEngine implements ModelEngine<OllamaModelConfig> {
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModelTypeEnum getType() {
|
||||||
|
return ModelTypeEnum.OLLAMA;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChatModel getChatLanguageModel(Model model, LLMChatModeConfig modelConfig) {
|
||||||
|
CompletionParams completionParams = modelConfig.getCompletionParams();
|
||||||
|
ResponseFormat responseFormat = ResponseFormat.JSON;
|
||||||
|
if (StrUtil.isNotBlank(completionParams.getResponseFormat()) && "text".equals(completionParams.getResponseFormat())) {
|
||||||
|
responseFormat = ResponseFormat.TEXT;
|
||||||
|
}
|
||||||
|
return OllamaChatModel.builder()
|
||||||
|
.baseUrl(model.getUrl())
|
||||||
|
.modelName(modelConfig.getModelName())
|
||||||
|
.modelName(modelConfig.getModelName())
|
||||||
|
.temperature(completionParams.getTemperature())
|
||||||
|
.maxRetries(completionParams.getMaxTokens())
|
||||||
|
.topP(completionParams.getTopP())
|
||||||
|
.seed(completionParams.getSeed())
|
||||||
|
.responseFormat(responseFormat)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EmbeddingModel getEmbeddingModel(Model model, LLMEmbeddingModelConfig modeConfig) {
|
||||||
|
return OllamaEmbeddingModel.builder()
|
||||||
|
.baseUrl(model.getUrl())
|
||||||
|
.modelName(modeConfig.getModelName())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public class OpenApiModelEngine implements ModelEngine<OpenApiConfig> {
|
|||||||
public EmbeddingModel getEmbeddingModel(Model model, LLMEmbeddingModelConfig modelConfig) {
|
public EmbeddingModel getEmbeddingModel(Model model, LLMEmbeddingModelConfig modelConfig) {
|
||||||
return OpenAiEmbeddingModel.builder()
|
return OpenAiEmbeddingModel.builder()
|
||||||
.apiKey(model.getApiKey())
|
.apiKey(model.getApiKey())
|
||||||
.baseUrl(modelConfig.getModelName())
|
.baseUrl(model.getUrl())
|
||||||
.modelName(modelConfig.getModelName())
|
.modelName(modelConfig.getModelName())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
37
metis-starter/src/test/java/aa/ModelClient.java
Normal file
37
metis-starter/src/test/java/aa/ModelClient.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package aa;
|
||||||
|
|
||||||
|
import dev.langchain4j.http.client.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static java.time.Duration.ofSeconds;
|
||||||
|
|
||||||
|
public class ModelClient {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
String baseUrl = "https://api.siliconflow.cn";
|
||||||
|
|
||||||
|
HttpClientBuilder httpClientBuilder = HttpClientBuilderLoader.loadHttpClientBuilder();
|
||||||
|
|
||||||
|
HttpClient httpClient = httpClientBuilder
|
||||||
|
.connectTimeout(ofSeconds(15))
|
||||||
|
.readTimeout(ofSeconds(60))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Map<String, String> defaultHeaders = new HashMap<>();
|
||||||
|
defaultHeaders.put("Authorization", "Bearer sk-nnaoladfdjcybfelzkyhmihhnbbazycemiosghvhxfqujfjl");
|
||||||
|
HttpRequest httpRequest = HttpRequest.builder()
|
||||||
|
.method(HttpMethod.GET)
|
||||||
|
.url(baseUrl, "/v1/models/'Qwen/Qwen2.5-Coder-7B-Instruct'")
|
||||||
|
// .url(baseUrl, "/v1/models/Qwen2.5-Coder-32B-Instruct")
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.addHeaders(defaultHeaders)
|
||||||
|
.build();
|
||||||
|
SuccessfulHttpResponse httpResponse = httpClient.execute(httpRequest);
|
||||||
|
String body = httpResponse.body();
|
||||||
|
System.out.println(body);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user