diff --git a/metis-starter/src/main/java/com/metis/llm/engine/OllamaModelEngine.java b/metis-starter/src/main/java/com/metis/llm/engine/OllamaModelEngine.java index fe2c36e..0f7a0ac 100644 --- a/metis-starter/src/main/java/com/metis/llm/engine/OllamaModelEngine.java +++ b/metis-starter/src/main/java/com/metis/llm/engine/OllamaModelEngine.java @@ -1,9 +1,55 @@ 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 org.springframework.stereotype.Service; @Slf4j @Service -public class OllamaModelEngine { +public class OllamaModelEngine implements ModelEngine { + + + @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(); + } } diff --git a/metis-starter/src/main/java/com/metis/llm/engine/OpenApiModelEngine.java b/metis-starter/src/main/java/com/metis/llm/engine/OpenApiModelEngine.java index d3d5247..4e1acae 100644 --- a/metis-starter/src/main/java/com/metis/llm/engine/OpenApiModelEngine.java +++ b/metis-starter/src/main/java/com/metis/llm/engine/OpenApiModelEngine.java @@ -43,7 +43,7 @@ public class OpenApiModelEngine implements ModelEngine { public EmbeddingModel getEmbeddingModel(Model model, LLMEmbeddingModelConfig modelConfig) { return OpenAiEmbeddingModel.builder() .apiKey(model.getApiKey()) - .baseUrl(modelConfig.getModelName()) + .baseUrl(model.getUrl()) .modelName(modelConfig.getModelName()) .build(); } diff --git a/metis-starter/src/test/java/aa/ModelClient.java b/metis-starter/src/test/java/aa/ModelClient.java new file mode 100644 index 0000000..4075d87 --- /dev/null +++ b/metis-starter/src/test/java/aa/ModelClient.java @@ -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 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); + } + + +}