From c4992501bd30c283734f39a57477fd8bcc522a53 Mon Sep 17 00:00:00 2001 From: beat4ocean <105700600+beat4ocean@users.noreply.github.com> Date: Mon, 5 May 2025 15:51:26 +0800 Subject: [PATCH] [Improvement][headless] Only expose OPEN_AI/OLLAMA/DIFY chat model providers. (#2237) --- common/pom.xml | 44 +------ .../config/EmbeddingModelParameterConfig.java | 43 ++----- .../common/pojo/ChatModelParameters.java | 12 +- .../dashscope/spring/ChatModelProperties.java | 23 ---- .../dashscope/spring/DashscopeAutoConfig.java | 84 ------------ .../spring/EmbeddingModelProperties.java | 12 -- .../dashscope/spring/Properties.java | 29 ----- .../model/openai/OpenAiChatModel.java | 5 +- .../model/zhipu/ChatCompletionModel.java | 16 --- .../model/zhipu/ZhipuAiChatModel.java | 100 --------------- .../provider/AzureModelFactory.java | 51 -------- .../provider/DashscopeModelFactory.java | 39 ------ .../provider/DifyModelFactory.java | 7 +- .../provider/QianfanModelFactory.java | 47 ------- .../provider/ZhipuModelFactory.java | 45 ------- .../qianfan/spring/ChatModelProperties.java | 21 --- .../spring/EmbeddingModelProperties.java | 18 --- .../spring/LanguageModelProperties.java | 21 --- .../qianfan/spring/Properties.java | 29 ----- .../qianfan/spring/QianfanAutoConfig.java | 102 --------------- .../zhipu/spring/ChatModelProperties.java | 19 --- .../spring/EmbeddingModelProperties.java | 16 --- .../langchain4j/zhipu/spring/Properties.java | 23 ---- .../zhipu/spring/ZhipuAutoConfig.java | 53 -------- .../provider/ModelProviderTest.java | 121 ------------------ pom.xml | 25 ---- 26 files changed, 25 insertions(+), 980 deletions(-) delete mode 100644 common/src/main/java/dev/langchain4j/dashscope/spring/ChatModelProperties.java delete mode 100644 common/src/main/java/dev/langchain4j/dashscope/spring/DashscopeAutoConfig.java delete mode 100644 common/src/main/java/dev/langchain4j/dashscope/spring/EmbeddingModelProperties.java delete mode 100644 common/src/main/java/dev/langchain4j/dashscope/spring/Properties.java delete mode 100644 common/src/main/java/dev/langchain4j/model/zhipu/ChatCompletionModel.java delete mode 100644 common/src/main/java/dev/langchain4j/model/zhipu/ZhipuAiChatModel.java delete mode 100644 common/src/main/java/dev/langchain4j/provider/AzureModelFactory.java delete mode 100644 common/src/main/java/dev/langchain4j/provider/DashscopeModelFactory.java delete mode 100644 common/src/main/java/dev/langchain4j/provider/QianfanModelFactory.java delete mode 100644 common/src/main/java/dev/langchain4j/provider/ZhipuModelFactory.java delete mode 100644 common/src/main/java/dev/langchain4j/qianfan/spring/ChatModelProperties.java delete mode 100644 common/src/main/java/dev/langchain4j/qianfan/spring/EmbeddingModelProperties.java delete mode 100644 common/src/main/java/dev/langchain4j/qianfan/spring/LanguageModelProperties.java delete mode 100644 common/src/main/java/dev/langchain4j/qianfan/spring/Properties.java delete mode 100644 common/src/main/java/dev/langchain4j/qianfan/spring/QianfanAutoConfig.java delete mode 100644 common/src/main/java/dev/langchain4j/zhipu/spring/ChatModelProperties.java delete mode 100644 common/src/main/java/dev/langchain4j/zhipu/spring/EmbeddingModelProperties.java delete mode 100644 common/src/main/java/dev/langchain4j/zhipu/spring/Properties.java delete mode 100644 common/src/main/java/dev/langchain4j/zhipu/spring/ZhipuAutoConfig.java diff --git a/common/pom.xml b/common/pom.xml index 165189202..18c5c7dae 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -21,7 +21,10 @@ org.springframework.boot spring-boot-starter-validation - + + org.springframework.boot + spring-boot-autoconfigure-processor + org.slf4j @@ -33,7 +36,7 @@ org.apache.httpcomponents.client5 httpclient5 - ${httpclient5.version} + ${httpclient5.version} @@ -182,10 +185,6 @@ dev.langchain4j langchain4j-pgvector - - dev.langchain4j - langchain4j-azure-open-ai - dev.langchain4j langchain4j-embeddings-bge-small-zh @@ -198,34 +197,6 @@ dev.langchain4j langchain4j-embeddings-all-minilm-l6-v2-q - - dev.langchain4j - langchain4j-qianfan - - - dev.langchain4j - langchain4j-zhipu-ai - - - dev.langchain4j - langchain4j-dashscope - - - org.slf4j - slf4j-simple - - - - - dev.langchain4j - langchain4j-chatglm - - - org.slf4j - slf4j-simple - - - dev.langchain4j langchain4j-ollama @@ -237,11 +208,6 @@ ${hanlp.version} - - org.springframework.boot - spring-boot-autoconfigure-processor - - com.google.code.gson gson diff --git a/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingModelParameterConfig.java b/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingModelParameterConfig.java index 0a9098a8a..4beacc241 100644 --- a/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingModelParameterConfig.java +++ b/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingModelParameterConfig.java @@ -4,14 +4,10 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.EmbeddingModelConfig; import com.tencent.supersonic.common.pojo.Parameter; -import dev.langchain4j.provider.AzureModelFactory; -import dev.langchain4j.provider.DashscopeModelFactory; import dev.langchain4j.provider.EmbeddingModelConstant; import dev.langchain4j.provider.InMemoryModelFactory; import dev.langchain4j.provider.OllamaModelFactory; import dev.langchain4j.provider.OpenAiModelFactory; -import dev.langchain4j.provider.QianfanModelFactory; -import dev.langchain4j.provider.ZhipuModelFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -70,52 +66,31 @@ public class EmbeddingModelParameterConfig extends ParameterConfig { private static ArrayList getCandidateValues() { return Lists.newArrayList(InMemoryModelFactory.PROVIDER, OpenAiModelFactory.PROVIDER, - OllamaModelFactory.PROVIDER, DashscopeModelFactory.PROVIDER, - QianfanModelFactory.PROVIDER, ZhipuModelFactory.PROVIDER, - AzureModelFactory.PROVIDER); + OllamaModelFactory.PROVIDER); } private static List getBaseUrlDependency() { return getDependency(EMBEDDING_MODEL_PROVIDER.getName(), - Lists.newArrayList(OpenAiModelFactory.PROVIDER, OllamaModelFactory.PROVIDER, - AzureModelFactory.PROVIDER, DashscopeModelFactory.PROVIDER, - QianfanModelFactory.PROVIDER, ZhipuModelFactory.PROVIDER), + Lists.newArrayList(OpenAiModelFactory.PROVIDER, OllamaModelFactory.PROVIDER), ImmutableMap.of(OpenAiModelFactory.PROVIDER, OpenAiModelFactory.DEFAULT_BASE_URL, - OllamaModelFactory.PROVIDER, OllamaModelFactory.DEFAULT_BASE_URL, - AzureModelFactory.PROVIDER, AzureModelFactory.DEFAULT_BASE_URL, - DashscopeModelFactory.PROVIDER, DashscopeModelFactory.DEFAULT_BASE_URL, - QianfanModelFactory.PROVIDER, QianfanModelFactory.DEFAULT_BASE_URL, - ZhipuModelFactory.PROVIDER, ZhipuModelFactory.DEFAULT_BASE_URL)); + OllamaModelFactory.PROVIDER, OllamaModelFactory.DEFAULT_BASE_URL)); } private static List getApiKeyDependency() { return getDependency(EMBEDDING_MODEL_PROVIDER.getName(), - Lists.newArrayList(OpenAiModelFactory.PROVIDER, AzureModelFactory.PROVIDER, - DashscopeModelFactory.PROVIDER, QianfanModelFactory.PROVIDER, - ZhipuModelFactory.PROVIDER), - ImmutableMap.of(OpenAiModelFactory.PROVIDER, DEMO, AzureModelFactory.PROVIDER, DEMO, - DashscopeModelFactory.PROVIDER, DEMO, QianfanModelFactory.PROVIDER, DEMO, - ZhipuModelFactory.PROVIDER, DEMO)); + Lists.newArrayList(OpenAiModelFactory.PROVIDER), + ImmutableMap.of(OpenAiModelFactory.PROVIDER, DEMO)); } private static List getModelNameDependency() { return getDependency(EMBEDDING_MODEL_PROVIDER.getName(), Lists.newArrayList(InMemoryModelFactory.PROVIDER, OpenAiModelFactory.PROVIDER, - OllamaModelFactory.PROVIDER, AzureModelFactory.PROVIDER, - DashscopeModelFactory.PROVIDER, QianfanModelFactory.PROVIDER, - ZhipuModelFactory.PROVIDER), + OllamaModelFactory.PROVIDER), ImmutableMap.of(InMemoryModelFactory.PROVIDER, EmbeddingModelConstant.BGE_SMALL_ZH, OpenAiModelFactory.PROVIDER, OpenAiModelFactory.DEFAULT_EMBEDDING_MODEL_NAME, OllamaModelFactory.PROVIDER, - OllamaModelFactory.DEFAULT_EMBEDDING_MODEL_NAME, AzureModelFactory.PROVIDER, - AzureModelFactory.DEFAULT_EMBEDDING_MODEL_NAME, - DashscopeModelFactory.PROVIDER, - DashscopeModelFactory.DEFAULT_EMBEDDING_MODEL_NAME, - QianfanModelFactory.PROVIDER, - QianfanModelFactory.DEFAULT_EMBEDDING_MODEL_NAME, - ZhipuModelFactory.PROVIDER, - ZhipuModelFactory.DEFAULT_EMBEDDING_MODEL_NAME)); + OllamaModelFactory.DEFAULT_EMBEDDING_MODEL_NAME)); } private static List getModelPathDependency() { @@ -126,7 +101,7 @@ public class EmbeddingModelParameterConfig extends ParameterConfig { private static List getSecretKeyDependency() { return getDependency(EMBEDDING_MODEL_PROVIDER.getName(), - Lists.newArrayList(QianfanModelFactory.PROVIDER), - ImmutableMap.of(QianfanModelFactory.PROVIDER, DEMO)); + Lists.newArrayList(OpenAiModelFactory.PROVIDER), + ImmutableMap.of(OpenAiModelFactory.PROVIDER, DEMO)); } } diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/ChatModelParameters.java b/common/src/main/java/com/tencent/supersonic/common/pojo/ChatModelParameters.java index 0cc42b1d3..cfca50591 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/ChatModelParameters.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/ChatModelParameters.java @@ -85,20 +85,20 @@ public class ChatModelParameters { private static List getEndpointDependency() { return getDependency(CHAT_MODEL_PROVIDER.getName(), - Lists.newArrayList(QianfanModelFactory.PROVIDER), ImmutableMap - .of(QianfanModelFactory.PROVIDER, QianfanModelFactory.DEFAULT_ENDPOINT)); + Lists.newArrayList(OpenAiModelFactory.PROVIDER), ImmutableMap + .of(OpenAiModelFactory.PROVIDER, OpenAiModelFactory.DEFAULT_MODEL_NAME)); } private static List getEnableSearchDependency() { return getDependency(CHAT_MODEL_PROVIDER.getName(), - Lists.newArrayList(DashscopeModelFactory.PROVIDER), - ImmutableMap.of(DashscopeModelFactory.PROVIDER, "false")); + Lists.newArrayList(OpenAiModelFactory.PROVIDER), + ImmutableMap.of(OpenAiModelFactory.PROVIDER, "false")); } private static List getSecretKeyDependency() { return getDependency(CHAT_MODEL_PROVIDER.getName(), - Lists.newArrayList(QianfanModelFactory.PROVIDER), ImmutableMap.of( - QianfanModelFactory.PROVIDER, ModelProvider.DEMO_CHAT_MODEL.getApiKey())); + Lists.newArrayList(OpenAiModelFactory.PROVIDER), ImmutableMap.of( + OpenAiModelFactory.PROVIDER, ModelProvider.DEMO_CHAT_MODEL.getApiKey())); } private static List getDependency(String dependencyParameterName, diff --git a/common/src/main/java/dev/langchain4j/dashscope/spring/ChatModelProperties.java b/common/src/main/java/dev/langchain4j/dashscope/spring/ChatModelProperties.java deleted file mode 100644 index 5cfc33d62..000000000 --- a/common/src/main/java/dev/langchain4j/dashscope/spring/ChatModelProperties.java +++ /dev/null @@ -1,23 +0,0 @@ -package dev.langchain4j.dashscope.spring; - -import lombok.Getter; -import lombok.Setter; - -import java.util.List; - -@Getter -@Setter -class ChatModelProperties { - - String baseUrl; - String apiKey; - String modelName; - Double topP; - Integer topK; - Boolean enableSearch; - Integer seed; - Float repetitionPenalty; - Float temperature; - List stops; - Integer maxTokens; -} diff --git a/common/src/main/java/dev/langchain4j/dashscope/spring/DashscopeAutoConfig.java b/common/src/main/java/dev/langchain4j/dashscope/spring/DashscopeAutoConfig.java deleted file mode 100644 index b74408496..000000000 --- a/common/src/main/java/dev/langchain4j/dashscope/spring/DashscopeAutoConfig.java +++ /dev/null @@ -1,84 +0,0 @@ -package dev.langchain4j.dashscope.spring; - -import dev.langchain4j.model.dashscope.QwenChatModel; -import dev.langchain4j.model.dashscope.QwenEmbeddingModel; -import dev.langchain4j.model.dashscope.QwenLanguageModel; -import dev.langchain4j.model.dashscope.QwenStreamingChatModel; -import dev.langchain4j.model.dashscope.QwenStreamingLanguageModel; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import static dev.langchain4j.dashscope.spring.Properties.PREFIX; - -@Configuration -@EnableConfigurationProperties(Properties.class) -public class DashscopeAutoConfig { - - @Bean - @ConditionalOnProperty(PREFIX + ".chat-model.api-key") - QwenChatModel qwenChatModel(Properties properties) { - ChatModelProperties chatModelProperties = properties.getChatModel(); - return QwenChatModel.builder().baseUrl(chatModelProperties.getBaseUrl()) - .apiKey(chatModelProperties.getApiKey()) - .modelName(chatModelProperties.getModelName()).topP(chatModelProperties.getTopP()) - .topK(chatModelProperties.getTopK()) - .enableSearch(chatModelProperties.getEnableSearch()) - .seed(chatModelProperties.getSeed()) - .repetitionPenalty(chatModelProperties.getRepetitionPenalty()) - .temperature(chatModelProperties.getTemperature()) - .stops(chatModelProperties.getStops()).maxTokens(chatModelProperties.getMaxTokens()) - .build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".streaming-chat-model.api-key") - QwenStreamingChatModel qwenStreamingChatModel(Properties properties) { - ChatModelProperties chatModelProperties = properties.getStreamingChatModel(); - return QwenStreamingChatModel.builder().baseUrl(chatModelProperties.getBaseUrl()) - .apiKey(chatModelProperties.getApiKey()) - .modelName(chatModelProperties.getModelName()).topP(chatModelProperties.getTopP()) - .topK(chatModelProperties.getTopK()) - .enableSearch(chatModelProperties.getEnableSearch()) - .seed(chatModelProperties.getSeed()) - .repetitionPenalty(chatModelProperties.getRepetitionPenalty()) - .temperature(chatModelProperties.getTemperature()) - .stops(chatModelProperties.getStops()).maxTokens(chatModelProperties.getMaxTokens()) - .build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".language-model.api-key") - QwenLanguageModel qwenLanguageModel(Properties properties) { - ChatModelProperties languageModel = properties.getLanguageModel(); - return QwenLanguageModel.builder().baseUrl(languageModel.getBaseUrl()) - .apiKey(languageModel.getApiKey()).modelName(languageModel.getModelName()) - .topP(languageModel.getTopP()).topK(languageModel.getTopK()) - .enableSearch(languageModel.getEnableSearch()).seed(languageModel.getSeed()) - .repetitionPenalty(languageModel.getRepetitionPenalty()) - .temperature(languageModel.getTemperature()).stops(languageModel.getStops()) - .maxTokens(languageModel.getMaxTokens()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".streaming-language-model.api-key") - QwenStreamingLanguageModel qwenStreamingLanguageModel(Properties properties) { - ChatModelProperties languageModel = properties.getStreamingLanguageModel(); - return QwenStreamingLanguageModel.builder().baseUrl(languageModel.getBaseUrl()) - .apiKey(languageModel.getApiKey()).modelName(languageModel.getModelName()) - .topP(languageModel.getTopP()).topK(languageModel.getTopK()) - .enableSearch(languageModel.getEnableSearch()).seed(languageModel.getSeed()) - .repetitionPenalty(languageModel.getRepetitionPenalty()) - .temperature(languageModel.getTemperature()).stops(languageModel.getStops()) - .maxTokens(languageModel.getMaxTokens()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".embedding-model.api-key") - QwenEmbeddingModel qwenEmbeddingModel(Properties properties) { - EmbeddingModelProperties embeddingModelProperties = properties.getEmbeddingModel(); - return QwenEmbeddingModel.builder().apiKey(embeddingModelProperties.getApiKey()) - .modelName(embeddingModelProperties.getModelName()).build(); - } -} diff --git a/common/src/main/java/dev/langchain4j/dashscope/spring/EmbeddingModelProperties.java b/common/src/main/java/dev/langchain4j/dashscope/spring/EmbeddingModelProperties.java deleted file mode 100644 index 78c0b0b1e..000000000 --- a/common/src/main/java/dev/langchain4j/dashscope/spring/EmbeddingModelProperties.java +++ /dev/null @@ -1,12 +0,0 @@ -package dev.langchain4j.dashscope.spring; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -class EmbeddingModelProperties { - - private String apiKey; - private String modelName; -} diff --git a/common/src/main/java/dev/langchain4j/dashscope/spring/Properties.java b/common/src/main/java/dev/langchain4j/dashscope/spring/Properties.java deleted file mode 100644 index b232a7549..000000000 --- a/common/src/main/java/dev/langchain4j/dashscope/spring/Properties.java +++ /dev/null @@ -1,29 +0,0 @@ -package dev.langchain4j.dashscope.spring; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.NestedConfigurationProperty; - -@Getter -@Setter -@ConfigurationProperties(prefix = Properties.PREFIX) -public class Properties { - - static final String PREFIX = "langchain4j.dashscope"; - - @NestedConfigurationProperty - ChatModelProperties chatModel; - - @NestedConfigurationProperty - ChatModelProperties streamingChatModel; - - @NestedConfigurationProperty - ChatModelProperties languageModel; - - @NestedConfigurationProperty - ChatModelProperties streamingLanguageModel; - - @NestedConfigurationProperty - EmbeddingModelProperties embeddingModel; -} diff --git a/common/src/main/java/dev/langchain4j/model/openai/OpenAiChatModel.java b/common/src/main/java/dev/langchain4j/model/openai/OpenAiChatModel.java index aed877711..e237008a7 100644 --- a/common/src/main/java/dev/langchain4j/model/openai/OpenAiChatModel.java +++ b/common/src/main/java/dev/langchain4j/model/openai/OpenAiChatModel.java @@ -66,7 +66,6 @@ import static java.util.Collections.singletonList; @Slf4j public class OpenAiChatModel implements ChatLanguageModel, TokenCountEstimator { - public static final String ZHIPU = "bigmodel"; private final OpenAiClient client; private final String baseUrl; private final String modelName; @@ -192,9 +191,7 @@ public class OpenAiChatModel implements ChatLanguageModel, TokenCountEstimator { .responseFormat(responseFormat).seed(seed).user(user) .parallelToolCalls(parallelToolCalls); - if (!(baseUrl.contains(ZHIPU))) { - requestBuilder.temperature(temperature); - } + requestBuilder.temperature(temperature); if (toolSpecifications != null && !toolSpecifications.isEmpty()) { requestBuilder.tools(toTools(toolSpecifications, strictTools)); diff --git a/common/src/main/java/dev/langchain4j/model/zhipu/ChatCompletionModel.java b/common/src/main/java/dev/langchain4j/model/zhipu/ChatCompletionModel.java deleted file mode 100644 index 4e153f9e5..000000000 --- a/common/src/main/java/dev/langchain4j/model/zhipu/ChatCompletionModel.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.langchain4j.model.zhipu; - -public enum ChatCompletionModel { - GLM_4("glm-4"), GLM_3_TURBO("glm-3-turbo"), CHATGLM_TURBO("chatglm_turbo"); - - private final String value; - - ChatCompletionModel(String value) { - this.value = value; - } - - @Override - public String toString() { - return this.value; - } -} diff --git a/common/src/main/java/dev/langchain4j/model/zhipu/ZhipuAiChatModel.java b/common/src/main/java/dev/langchain4j/model/zhipu/ZhipuAiChatModel.java deleted file mode 100644 index 3d14e4045..000000000 --- a/common/src/main/java/dev/langchain4j/model/zhipu/ZhipuAiChatModel.java +++ /dev/null @@ -1,100 +0,0 @@ -package dev.langchain4j.model.zhipu; - -import dev.langchain4j.agent.tool.ToolSpecification; -import dev.langchain4j.data.message.AiMessage; -import dev.langchain4j.data.message.ChatMessage; -import dev.langchain4j.model.chat.ChatLanguageModel; -import dev.langchain4j.model.output.Response; -import dev.langchain4j.model.zhipu.chat.ChatCompletionRequest; -import dev.langchain4j.model.zhipu.chat.ChatCompletionResponse; -import dev.langchain4j.model.zhipu.spi.ZhipuAiChatModelBuilderFactory; -import lombok.Builder; - -import java.util.List; - -import static dev.langchain4j.internal.RetryUtils.withRetry; -import static dev.langchain4j.internal.Utils.getOrDefault; -import static dev.langchain4j.internal.Utils.isNullOrEmpty; -import static dev.langchain4j.internal.ValidationUtils.ensureNotEmpty; -import static dev.langchain4j.model.zhipu.DefaultZhipuAiHelper.aiMessageFrom; -import static dev.langchain4j.model.zhipu.DefaultZhipuAiHelper.finishReasonFrom; -import static dev.langchain4j.model.zhipu.DefaultZhipuAiHelper.toTools; -import static dev.langchain4j.model.zhipu.DefaultZhipuAiHelper.toZhipuAiMessages; -import static dev.langchain4j.model.zhipu.DefaultZhipuAiHelper.tokenUsageFrom; -import static dev.langchain4j.model.zhipu.chat.ToolChoiceMode.AUTO; -import static dev.langchain4j.spi.ServiceHelper.loadFactories; -import static java.util.Collections.singletonList; - -/** - * Represents an ZhipuAi language model with a chat completion interface, such as glm-3-turbo and - * glm-4. You can find description of parameters - * here. - */ -public class ZhipuAiChatModel implements ChatLanguageModel { - - private final String baseUrl; - private final Double temperature; - private final Double topP; - private final String model; - private final Integer maxRetries; - private final Integer maxToken; - private final ZhipuAiClient client; - - @Builder - public ZhipuAiChatModel(String baseUrl, String apiKey, Double temperature, Double topP, - String model, Integer maxRetries, Integer maxToken, Boolean logRequests, - Boolean logResponses) { - this.baseUrl = getOrDefault(baseUrl, "https://open.bigmodel.cn/"); - this.temperature = getOrDefault(temperature, 0.7); - this.topP = topP; - this.model = getOrDefault(model, ChatCompletionModel.GLM_4.toString()); - this.maxRetries = getOrDefault(maxRetries, 3); - this.maxToken = getOrDefault(maxToken, 512); - this.client = ZhipuAiClient.builder().baseUrl(this.baseUrl).apiKey(apiKey) - .logRequests(getOrDefault(logRequests, false)) - .logResponses(getOrDefault(logResponses, false)).build(); - } - - public static ZhipuAiChatModelBuilder builder() { - for (ZhipuAiChatModelBuilderFactory factories : loadFactories( - ZhipuAiChatModelBuilderFactory.class)) { - return factories.get(); - } - return new ZhipuAiChatModelBuilder(); - } - - @Override - public Response generate(List messages) { - return generate(messages, (ToolSpecification) null); - } - - @Override - public Response generate(List messages, - List toolSpecifications) { - ensureNotEmpty(messages, "messages"); - - ChatCompletionRequest.Builder requestBuilder = - ChatCompletionRequest.builder().model(this.model).maxTokens(maxToken).stream(false) - .topP(topP).toolChoice(AUTO).messages(toZhipuAiMessages(messages)); - - if (!isNullOrEmpty(toolSpecifications)) { - requestBuilder.tools(toTools(toolSpecifications)); - } - - ChatCompletionResponse response = - withRetry(() -> client.chatCompletion(requestBuilder.build()), maxRetries); - return Response.from(aiMessageFrom(response), tokenUsageFrom(response.getUsage()), - finishReasonFrom(response.getChoices().get(0).getFinishReason())); - } - - @Override - public Response generate(List messages, - ToolSpecification toolSpecification) { - return generate(messages, - toolSpecification != null ? singletonList(toolSpecification) : null); - } - - public static class ZhipuAiChatModelBuilder { - public ZhipuAiChatModelBuilder() {} - } -} diff --git a/common/src/main/java/dev/langchain4j/provider/AzureModelFactory.java b/common/src/main/java/dev/langchain4j/provider/AzureModelFactory.java deleted file mode 100644 index 1637c3ac9..000000000 --- a/common/src/main/java/dev/langchain4j/provider/AzureModelFactory.java +++ /dev/null @@ -1,51 +0,0 @@ -package dev.langchain4j.provider; - -import com.tencent.supersonic.common.pojo.ChatModelConfig; -import com.tencent.supersonic.common.pojo.EmbeddingModelConfig; -import dev.langchain4j.model.azure.AzureOpenAiChatModel; -import dev.langchain4j.model.azure.AzureOpenAiEmbeddingModel; -import dev.langchain4j.model.chat.ChatLanguageModel; -import dev.langchain4j.model.embedding.EmbeddingModel; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Service; - -import java.time.Duration; - -@Service -public class AzureModelFactory implements ModelFactory, InitializingBean { - public static final String PROVIDER = "AZURE"; - public static final String DEFAULT_BASE_URL = "https://your-resource-name.openai.azure.com/"; - public static final String DEFAULT_MODEL_NAME = "gpt-35-turbo"; - public static final String DEFAULT_EMBEDDING_MODEL_NAME = "text-embedding-ada-002"; - - @Override - public ChatLanguageModel createChatModel(ChatModelConfig modelConfig) { - AzureOpenAiChatModel.Builder builder = AzureOpenAiChatModel.builder() - .endpoint(modelConfig.getBaseUrl()).apiKey(modelConfig.getApiKey()) - .deploymentName(modelConfig.getModelName()) - .temperature(modelConfig.getTemperature()).maxRetries(modelConfig.getMaxRetries()) - .topP(modelConfig.getTopP()) - .timeout(Duration.ofSeconds( - modelConfig.getTimeOut() == null ? 0L : modelConfig.getTimeOut())) - .logRequestsAndResponses( - modelConfig.getLogRequests() != null && modelConfig.getLogResponses()); - return builder.build(); - } - - @Override - public EmbeddingModel createEmbeddingModel(EmbeddingModelConfig embeddingModelConfig) { - AzureOpenAiEmbeddingModel.Builder builder = - AzureOpenAiEmbeddingModel.builder().endpoint(embeddingModelConfig.getBaseUrl()) - .apiKey(embeddingModelConfig.getApiKey()) - .deploymentName(embeddingModelConfig.getModelName()) - .maxRetries(embeddingModelConfig.getMaxRetries()) - .logRequestsAndResponses(embeddingModelConfig.getLogRequests() != null - && embeddingModelConfig.getLogResponses()); - return builder.build(); - } - - @Override - public void afterPropertiesSet() { - ModelProvider.add(PROVIDER, this); - } -} diff --git a/common/src/main/java/dev/langchain4j/provider/DashscopeModelFactory.java b/common/src/main/java/dev/langchain4j/provider/DashscopeModelFactory.java deleted file mode 100644 index 22529ef73..000000000 --- a/common/src/main/java/dev/langchain4j/provider/DashscopeModelFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -package dev.langchain4j.provider; - -import com.tencent.supersonic.common.pojo.ChatModelConfig; -import com.tencent.supersonic.common.pojo.EmbeddingModelConfig; -import dev.langchain4j.model.chat.ChatLanguageModel; -import dev.langchain4j.model.dashscope.QwenChatModel; -import dev.langchain4j.model.dashscope.QwenEmbeddingModel; -import dev.langchain4j.model.dashscope.QwenModelName; -import dev.langchain4j.model.embedding.EmbeddingModel; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Service; - -@Service -public class DashscopeModelFactory implements ModelFactory, InitializingBean { - public static final String PROVIDER = "DASHSCOPE"; - public static final String DEFAULT_BASE_URL = "https://dashscope.aliyuncs.com/api/v1"; - public static final String DEFAULT_MODEL_NAME = QwenModelName.QWEN_PLUS; - public static final String DEFAULT_EMBEDDING_MODEL_NAME = "text-embedding-v2"; - - @Override - public ChatLanguageModel createChatModel(ChatModelConfig modelConfig) { - return QwenChatModel.builder().baseUrl(modelConfig.getBaseUrl()) - .apiKey(modelConfig.getApiKey()).modelName(modelConfig.getModelName()) - .temperature(modelConfig.getTemperature() == null ? 0L - : modelConfig.getTemperature().floatValue()) - .topP(modelConfig.getTopP()).enableSearch(modelConfig.getEnableSearch()).build(); - } - - @Override - public EmbeddingModel createEmbeddingModel(EmbeddingModelConfig embeddingModelConfig) { - return QwenEmbeddingModel.builder().apiKey(embeddingModelConfig.getApiKey()) - .modelName(embeddingModelConfig.getModelName()).build(); - } - - @Override - public void afterPropertiesSet() { - ModelProvider.add(PROVIDER, this); - } -} diff --git a/common/src/main/java/dev/langchain4j/provider/DifyModelFactory.java b/common/src/main/java/dev/langchain4j/provider/DifyModelFactory.java index c1cf43d25..91c1c3ad0 100644 --- a/common/src/main/java/dev/langchain4j/provider/DifyModelFactory.java +++ b/common/src/main/java/dev/langchain4j/provider/DifyModelFactory.java @@ -6,7 +6,7 @@ import com.tencent.supersonic.common.util.AESEncryptionUtil; import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.dify.DifyAiChatModel; import dev.langchain4j.model.embedding.EmbeddingModel; -import dev.langchain4j.model.zhipu.ZhipuAiEmbeddingModel; +import dev.langchain4j.model.openai.OpenAiEmbeddingModel; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Service; @@ -27,8 +27,9 @@ public class DifyModelFactory implements ModelFactory, InitializingBean { @Override public EmbeddingModel createEmbeddingModel(EmbeddingModelConfig embeddingModelConfig) { - return ZhipuAiEmbeddingModel.builder().baseUrl(embeddingModelConfig.getBaseUrl()) - .apiKey(embeddingModelConfig.getApiKey()).model(embeddingModelConfig.getModelName()) + return OpenAiEmbeddingModel.builder().baseUrl(embeddingModelConfig.getBaseUrl()) + .apiKey(embeddingModelConfig.getApiKey()) + .modelName(embeddingModelConfig.getModelName()) .maxRetries(embeddingModelConfig.getMaxRetries()) .logRequests(embeddingModelConfig.getLogRequests()) .logResponses(embeddingModelConfig.getLogResponses()).build(); diff --git a/common/src/main/java/dev/langchain4j/provider/QianfanModelFactory.java b/common/src/main/java/dev/langchain4j/provider/QianfanModelFactory.java deleted file mode 100644 index 28f8f3d3e..000000000 --- a/common/src/main/java/dev/langchain4j/provider/QianfanModelFactory.java +++ /dev/null @@ -1,47 +0,0 @@ -package dev.langchain4j.provider; - -import com.tencent.supersonic.common.pojo.ChatModelConfig; -import com.tencent.supersonic.common.pojo.EmbeddingModelConfig; -import dev.langchain4j.model.chat.ChatLanguageModel; -import dev.langchain4j.model.embedding.EmbeddingModel; -import dev.langchain4j.model.qianfan.QianfanChatModel; -import dev.langchain4j.model.qianfan.QianfanEmbeddingModel; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Service; - -@Service -public class QianfanModelFactory implements ModelFactory, InitializingBean { - - public static final String PROVIDER = "QIANFAN"; - public static final String DEFAULT_BASE_URL = "https://aip.baidubce.com"; - public static final String DEFAULT_MODEL_NAME = "Llama-2-70b-chat"; - - public static final String DEFAULT_EMBEDDING_MODEL_NAME = "Embedding-V1"; - public static final String DEFAULT_ENDPOINT = "llama_2_70b"; - - @Override - public ChatLanguageModel createChatModel(ChatModelConfig modelConfig) { - return QianfanChatModel.builder().baseUrl(modelConfig.getBaseUrl()) - .apiKey(modelConfig.getApiKey()).secretKey(modelConfig.getSecretKey()) - .endpoint(modelConfig.getEndpoint()).modelName(modelConfig.getModelName()) - .temperature(modelConfig.getTemperature()).topP(modelConfig.getTopP()) - .maxRetries(modelConfig.getMaxRetries()).logRequests(modelConfig.getLogRequests()) - .logResponses(modelConfig.getLogResponses()).build(); - } - - @Override - public EmbeddingModel createEmbeddingModel(EmbeddingModelConfig embeddingModelConfig) { - return QianfanEmbeddingModel.builder().baseUrl(embeddingModelConfig.getBaseUrl()) - .apiKey(embeddingModelConfig.getApiKey()) - .secretKey(embeddingModelConfig.getSecretKey()) - .modelName(embeddingModelConfig.getModelName()) - .maxRetries(embeddingModelConfig.getMaxRetries()) - .logRequests(embeddingModelConfig.getLogRequests()) - .logResponses(embeddingModelConfig.getLogResponses()).build(); - } - - @Override - public void afterPropertiesSet() { - ModelProvider.add(PROVIDER, this); - } -} diff --git a/common/src/main/java/dev/langchain4j/provider/ZhipuModelFactory.java b/common/src/main/java/dev/langchain4j/provider/ZhipuModelFactory.java deleted file mode 100644 index b326db682..000000000 --- a/common/src/main/java/dev/langchain4j/provider/ZhipuModelFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -package dev.langchain4j.provider; - -import com.tencent.supersonic.common.pojo.ChatModelConfig; -import com.tencent.supersonic.common.pojo.EmbeddingModelConfig; -import dev.langchain4j.model.chat.ChatLanguageModel; -import dev.langchain4j.model.embedding.EmbeddingModel; -import dev.langchain4j.model.zhipu.ChatCompletionModel; -import dev.langchain4j.model.zhipu.ZhipuAiChatModel; -import dev.langchain4j.model.zhipu.ZhipuAiEmbeddingModel; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.stereotype.Service; - -import static java.time.Duration.ofSeconds; - -@Service -public class ZhipuModelFactory implements ModelFactory, InitializingBean { - public static final String PROVIDER = "ZHIPU"; - public static final String DEFAULT_BASE_URL = "https://open.bigmodel.cn/"; - public static final String DEFAULT_MODEL_NAME = ChatCompletionModel.GLM_4.toString(); - public static final String DEFAULT_EMBEDDING_MODEL_NAME = "embedding-2"; - - @Override - public ChatLanguageModel createChatModel(ChatModelConfig modelConfig) { - return ZhipuAiChatModel.builder().baseUrl(modelConfig.getBaseUrl()) - .apiKey(modelConfig.getApiKey()).model(modelConfig.getModelName()) - .temperature(modelConfig.getTemperature()).topP(modelConfig.getTopP()) - .maxRetries(modelConfig.getMaxRetries()).logRequests(modelConfig.getLogRequests()) - .logResponses(modelConfig.getLogResponses()).build(); - } - - @Override - public EmbeddingModel createEmbeddingModel(EmbeddingModelConfig embeddingModelConfig) { - return ZhipuAiEmbeddingModel.builder().baseUrl(embeddingModelConfig.getBaseUrl()) - .apiKey(embeddingModelConfig.getApiKey()).model(embeddingModelConfig.getModelName()) - .maxRetries(embeddingModelConfig.getMaxRetries()).callTimeout(ofSeconds(60)) - .connectTimeout(ofSeconds(60)).writeTimeout(ofSeconds(60)) - .readTimeout(ofSeconds(60)).logRequests(embeddingModelConfig.getLogRequests()) - .logResponses(embeddingModelConfig.getLogResponses()).build(); - } - - @Override - public void afterPropertiesSet() { - ModelProvider.add(PROVIDER, this); - } -} diff --git a/common/src/main/java/dev/langchain4j/qianfan/spring/ChatModelProperties.java b/common/src/main/java/dev/langchain4j/qianfan/spring/ChatModelProperties.java deleted file mode 100644 index 9ec121214..000000000 --- a/common/src/main/java/dev/langchain4j/qianfan/spring/ChatModelProperties.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.langchain4j.qianfan.spring; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -class ChatModelProperties { - private String baseUrl; - private String apiKey; - private String secretKey; - private Double temperature; - private Integer maxRetries; - private Double topP; - private String modelName; - private String endpoint; - private String responseFormat; - private Double penaltyScore; - private Boolean logRequests; - private Boolean logResponses; -} diff --git a/common/src/main/java/dev/langchain4j/qianfan/spring/EmbeddingModelProperties.java b/common/src/main/java/dev/langchain4j/qianfan/spring/EmbeddingModelProperties.java deleted file mode 100644 index b3d3defff..000000000 --- a/common/src/main/java/dev/langchain4j/qianfan/spring/EmbeddingModelProperties.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.langchain4j.qianfan.spring; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -class EmbeddingModelProperties { - private String baseUrl; - private String apiKey; - private String secretKey; - private Integer maxRetries; - private String modelName; - private String endpoint; - private String user; - private Boolean logRequests; - private Boolean logResponses; -} diff --git a/common/src/main/java/dev/langchain4j/qianfan/spring/LanguageModelProperties.java b/common/src/main/java/dev/langchain4j/qianfan/spring/LanguageModelProperties.java deleted file mode 100644 index 39c57096e..000000000 --- a/common/src/main/java/dev/langchain4j/qianfan/spring/LanguageModelProperties.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.langchain4j.qianfan.spring; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -class LanguageModelProperties { - private String baseUrl; - private String apiKey; - private String secretKey; - private Double temperature; - private Integer maxRetries; - private Integer topK; - private Double topP; - private String modelName; - private String endpoint; - private Double penaltyScore; - private Boolean logRequests; - private Boolean logResponses; -} diff --git a/common/src/main/java/dev/langchain4j/qianfan/spring/Properties.java b/common/src/main/java/dev/langchain4j/qianfan/spring/Properties.java deleted file mode 100644 index 7f809283e..000000000 --- a/common/src/main/java/dev/langchain4j/qianfan/spring/Properties.java +++ /dev/null @@ -1,29 +0,0 @@ -package dev.langchain4j.qianfan.spring; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.NestedConfigurationProperty; - -@Getter -@Setter -@ConfigurationProperties(prefix = Properties.PREFIX) -public class Properties { - - static final String PREFIX = "langchain4j.qianfan"; - - @NestedConfigurationProperty - ChatModelProperties chatModel; - - @NestedConfigurationProperty - ChatModelProperties streamingChatModel; - - @NestedConfigurationProperty - LanguageModelProperties languageModel; - - @NestedConfigurationProperty - LanguageModelProperties streamingLanguageModel; - - @NestedConfigurationProperty - EmbeddingModelProperties embeddingModel; -} diff --git a/common/src/main/java/dev/langchain4j/qianfan/spring/QianfanAutoConfig.java b/common/src/main/java/dev/langchain4j/qianfan/spring/QianfanAutoConfig.java deleted file mode 100644 index e324d54a5..000000000 --- a/common/src/main/java/dev/langchain4j/qianfan/spring/QianfanAutoConfig.java +++ /dev/null @@ -1,102 +0,0 @@ -package dev.langchain4j.qianfan.spring; - -import dev.langchain4j.model.qianfan.QianfanChatModel; -import dev.langchain4j.model.qianfan.QianfanEmbeddingModel; -import dev.langchain4j.model.qianfan.QianfanLanguageModel; -import dev.langchain4j.model.qianfan.QianfanStreamingChatModel; -import dev.langchain4j.model.qianfan.QianfanStreamingLanguageModel; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import static dev.langchain4j.qianfan.spring.Properties.PREFIX; - -@Configuration -@EnableConfigurationProperties(Properties.class) -public class QianfanAutoConfig { - - @Bean - @ConditionalOnProperty(PREFIX + ".chat-model.api-key") - QianfanChatModel qianfanChatModel(Properties properties) { - ChatModelProperties chatModelProperties = properties.getChatModel(); - return QianfanChatModel.builder().baseUrl(chatModelProperties.getBaseUrl()) - .apiKey(chatModelProperties.getApiKey()) - .secretKey(chatModelProperties.getSecretKey()) - .endpoint(chatModelProperties.getEndpoint()) - .penaltyScore(chatModelProperties.getPenaltyScore()) - .modelName(chatModelProperties.getModelName()) - .temperature(chatModelProperties.getTemperature()) - .topP(chatModelProperties.getTopP()) - .responseFormat(chatModelProperties.getResponseFormat()) - .maxRetries(chatModelProperties.getMaxRetries()) - .logRequests(chatModelProperties.getLogRequests()) - .logResponses(chatModelProperties.getLogResponses()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".streaming-chat-model.api-key") - QianfanStreamingChatModel qianfanStreamingChatModel(Properties properties) { - ChatModelProperties chatModelProperties = properties.getStreamingChatModel(); - return QianfanStreamingChatModel.builder().endpoint(chatModelProperties.getEndpoint()) - .penaltyScore(chatModelProperties.getPenaltyScore()) - .temperature(chatModelProperties.getTemperature()) - .topP(chatModelProperties.getTopP()).baseUrl(chatModelProperties.getBaseUrl()) - .apiKey(chatModelProperties.getApiKey()) - .secretKey(chatModelProperties.getSecretKey()) - .modelName(chatModelProperties.getModelName()) - .responseFormat(chatModelProperties.getResponseFormat()) - .logRequests(chatModelProperties.getLogRequests()) - .logResponses(chatModelProperties.getLogResponses()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".language-model.api-key") - QianfanLanguageModel qianfanLanguageModel(Properties properties) { - LanguageModelProperties languageModelProperties = properties.getLanguageModel(); - return QianfanLanguageModel.builder().endpoint(languageModelProperties.getEndpoint()) - .penaltyScore(languageModelProperties.getPenaltyScore()) - .topK(languageModelProperties.getTopK()).topP(languageModelProperties.getTopP()) - .baseUrl(languageModelProperties.getBaseUrl()) - .apiKey(languageModelProperties.getApiKey()) - .secretKey(languageModelProperties.getSecretKey()) - .modelName(languageModelProperties.getModelName()) - .temperature(languageModelProperties.getTemperature()) - .maxRetries(languageModelProperties.getMaxRetries()) - .logRequests(languageModelProperties.getLogRequests()) - .logResponses(languageModelProperties.getLogResponses()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".streaming-language-model.api-key") - QianfanStreamingLanguageModel qianfanStreamingLanguageModel(Properties properties) { - LanguageModelProperties languageModelProperties = properties.getStreamingLanguageModel(); - return QianfanStreamingLanguageModel.builder() - .endpoint(languageModelProperties.getEndpoint()) - .penaltyScore(languageModelProperties.getPenaltyScore()) - .topK(languageModelProperties.getTopK()).topP(languageModelProperties.getTopP()) - .baseUrl(languageModelProperties.getBaseUrl()) - .apiKey(languageModelProperties.getApiKey()) - .secretKey(languageModelProperties.getSecretKey()) - .modelName(languageModelProperties.getModelName()) - .temperature(languageModelProperties.getTemperature()) - .maxRetries(languageModelProperties.getMaxRetries()) - .logRequests(languageModelProperties.getLogRequests()) - .logResponses(languageModelProperties.getLogResponses()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".embedding-model.api-key") - QianfanEmbeddingModel qianfanEmbeddingModel(Properties properties) { - EmbeddingModelProperties embeddingModelProperties = properties.getEmbeddingModel(); - return QianfanEmbeddingModel.builder().baseUrl(embeddingModelProperties.getBaseUrl()) - .endpoint(embeddingModelProperties.getEndpoint()) - .apiKey(embeddingModelProperties.getApiKey()) - .secretKey(embeddingModelProperties.getSecretKey()) - .modelName(embeddingModelProperties.getModelName()) - .user(embeddingModelProperties.getUser()) - .maxRetries(embeddingModelProperties.getMaxRetries()) - .logRequests(embeddingModelProperties.getLogRequests()) - .logResponses(embeddingModelProperties.getLogResponses()).build(); - } -} diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/ChatModelProperties.java b/common/src/main/java/dev/langchain4j/zhipu/spring/ChatModelProperties.java deleted file mode 100644 index c2b0e05c6..000000000 --- a/common/src/main/java/dev/langchain4j/zhipu/spring/ChatModelProperties.java +++ /dev/null @@ -1,19 +0,0 @@ -package dev.langchain4j.zhipu.spring; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -class ChatModelProperties { - - String baseUrl; - String apiKey; - Double temperature; - Double topP; - String modelName; - Integer maxRetries; - Integer maxToken; - Boolean logRequests; - Boolean logResponses; -} diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/EmbeddingModelProperties.java b/common/src/main/java/dev/langchain4j/zhipu/spring/EmbeddingModelProperties.java deleted file mode 100644 index 4e67756e6..000000000 --- a/common/src/main/java/dev/langchain4j/zhipu/spring/EmbeddingModelProperties.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.langchain4j.zhipu.spring; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -class EmbeddingModelProperties { - - String baseUrl; - String apiKey; - String model; - Integer maxRetries; - Boolean logRequests; - Boolean logResponses; -} diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/Properties.java b/common/src/main/java/dev/langchain4j/zhipu/spring/Properties.java deleted file mode 100644 index f045d23fd..000000000 --- a/common/src/main/java/dev/langchain4j/zhipu/spring/Properties.java +++ /dev/null @@ -1,23 +0,0 @@ -package dev.langchain4j.zhipu.spring; - -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.NestedConfigurationProperty; - -@Getter -@Setter -@ConfigurationProperties(prefix = Properties.PREFIX) -public class Properties { - - static final String PREFIX = "langchain4j.zhipu"; - - @NestedConfigurationProperty - ChatModelProperties chatModel; - - @NestedConfigurationProperty - ChatModelProperties streamingChatModel; - - @NestedConfigurationProperty - EmbeddingModelProperties embeddingModel; -} diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/ZhipuAutoConfig.java b/common/src/main/java/dev/langchain4j/zhipu/spring/ZhipuAutoConfig.java deleted file mode 100644 index 3eebaebf7..000000000 --- a/common/src/main/java/dev/langchain4j/zhipu/spring/ZhipuAutoConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -package dev.langchain4j.zhipu.spring; - -import dev.langchain4j.model.zhipu.ZhipuAiChatModel; -import dev.langchain4j.model.zhipu.ZhipuAiEmbeddingModel; -import dev.langchain4j.model.zhipu.ZhipuAiStreamingChatModel; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import static dev.langchain4j.zhipu.spring.Properties.PREFIX; - -@Configuration -@EnableConfigurationProperties(Properties.class) -public class ZhipuAutoConfig { - - @Bean - @ConditionalOnProperty(PREFIX + ".chat-model.api-key") - ZhipuAiChatModel zhipuAiChatModel(Properties properties) { - ChatModelProperties chatModelProperties = properties.getChatModel(); - return ZhipuAiChatModel.builder().baseUrl(chatModelProperties.getBaseUrl()) - .apiKey(chatModelProperties.getApiKey()).model(chatModelProperties.getModelName()) - .temperature(chatModelProperties.getTemperature()) - .topP(chatModelProperties.getTopP()).maxRetries(chatModelProperties.getMaxRetries()) - .maxToken(chatModelProperties.getMaxToken()) - .logRequests(chatModelProperties.getLogRequests()) - .logResponses(chatModelProperties.getLogResponses()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".streaming-chat-model.api-key") - ZhipuAiStreamingChatModel zhipuStreamingChatModel(Properties properties) { - ChatModelProperties chatModelProperties = properties.getStreamingChatModel(); - return ZhipuAiStreamingChatModel.builder().baseUrl(chatModelProperties.getBaseUrl()) - .apiKey(chatModelProperties.getApiKey()).model(chatModelProperties.getModelName()) - .temperature(chatModelProperties.getTemperature()) - .topP(chatModelProperties.getTopP()).maxToken(chatModelProperties.getMaxToken()) - .logRequests(chatModelProperties.getLogRequests()) - .logResponses(chatModelProperties.getLogResponses()).build(); - } - - @Bean - @ConditionalOnProperty(PREFIX + ".embedding-model.api-key") - ZhipuAiEmbeddingModel zhipuEmbeddingModel(Properties properties) { - EmbeddingModelProperties embeddingModelProperties = properties.getEmbeddingModel(); - return ZhipuAiEmbeddingModel.builder().baseUrl(embeddingModelProperties.getBaseUrl()) - .apiKey(embeddingModelProperties.getApiKey()) - .model(embeddingModelProperties.getModel()) - .maxRetries(embeddingModelProperties.getMaxRetries()) - .logRequests(embeddingModelProperties.getLogRequests()) - .logResponses(embeddingModelProperties.getLogResponses()).build(); - } -} diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/provider/ModelProviderTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/provider/ModelProviderTest.java index 95b862ee1..a052438b4 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/provider/ModelProviderTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/provider/ModelProviderTest.java @@ -8,20 +8,15 @@ import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.embedding.EmbeddingModel; import dev.langchain4j.model.output.Response; -import dev.langchain4j.provider.AzureModelFactory; -import dev.langchain4j.provider.DashscopeModelFactory; import dev.langchain4j.provider.EmbeddingModelConstant; import dev.langchain4j.provider.InMemoryModelFactory; import dev.langchain4j.provider.ModelProvider; import dev.langchain4j.provider.OpenAiModelFactory; -import dev.langchain4j.provider.QianfanModelFactory; -import dev.langchain4j.provider.ZhipuModelFactory; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import static org.junit.Assert.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; @TestInstance(TestInstance.Lifecycle.PER_CLASS) @Disabled @@ -40,65 +35,6 @@ public class ModelProviderTest extends BaseApplication { assertNotNull(response); } - @Test - public void test_qianfan_chat_model() { - ChatModelConfig modelConfig = new ChatModelConfig(); - modelConfig.setProvider(QianfanModelFactory.PROVIDER); - modelConfig.setModelName(QianfanModelFactory.DEFAULT_MODEL_NAME); - modelConfig.setBaseUrl(QianfanModelFactory.DEFAULT_BASE_URL); - modelConfig.setSecretKey(ParameterConfig.DEMO); - modelConfig.setApiKey(ParameterConfig.DEMO); - modelConfig.setEndpoint(QianfanModelFactory.DEFAULT_ENDPOINT); - - ChatLanguageModel chatModel = ModelProvider.getChatModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - chatModel.generate("hi"); - }); - } - - @Test - public void test_zhipu_chat_model() { - ChatModelConfig modelConfig = new ChatModelConfig(); - modelConfig.setProvider(ZhipuModelFactory.PROVIDER); - modelConfig.setModelName(ZhipuModelFactory.DEFAULT_MODEL_NAME); - modelConfig.setBaseUrl(ZhipuModelFactory.DEFAULT_BASE_URL); - modelConfig.setApiKey("e2724491714b3b2a0274e987905f1001.5JyHgf4vbZVJ7gC5"); - - ChatLanguageModel chatModel = ModelProvider.getChatModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - chatModel.generate("hi"); - }); - } - - @Test - public void test_dashscope_chat_model() { - ChatModelConfig modelConfig = new ChatModelConfig(); - modelConfig.setProvider(DashscopeModelFactory.PROVIDER); - modelConfig.setModelName(DashscopeModelFactory.DEFAULT_MODEL_NAME); - modelConfig.setBaseUrl(DashscopeModelFactory.DEFAULT_BASE_URL); - modelConfig.setEnableSearch(true); - modelConfig.setApiKey(ParameterConfig.DEMO); - - ChatLanguageModel chatModel = ModelProvider.getChatModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - chatModel.generate("hi"); - }); - } - - @Test - public void test_azure_chat_model() { - ChatModelConfig modelConfig = new ChatModelConfig(); - modelConfig.setProvider(AzureModelFactory.PROVIDER); - modelConfig.setModelName(AzureModelFactory.DEFAULT_MODEL_NAME); - modelConfig.setBaseUrl(AzureModelFactory.DEFAULT_BASE_URL); - modelConfig.setApiKey(ParameterConfig.DEMO); - - ChatLanguageModel chatModel = ModelProvider.getChatModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - chatModel.generate("hi"); - }); - } - @Test public void test_in_memory_embedding_model() { EmbeddingModelConfig modelConfig = new EmbeddingModelConfig(); @@ -122,61 +58,4 @@ public class ModelProviderTest extends BaseApplication { Response embed = embeddingModel.embed("hi"); assertNotNull(embed); } - - @Test - public void test_azure_embedding_model() { - EmbeddingModelConfig modelConfig = new EmbeddingModelConfig(); - modelConfig.setProvider(AzureModelFactory.PROVIDER); - modelConfig.setModelName(AzureModelFactory.DEFAULT_EMBEDDING_MODEL_NAME); - modelConfig.setBaseUrl(AzureModelFactory.DEFAULT_BASE_URL); - modelConfig.setApiKey(ParameterConfig.DEMO); - - EmbeddingModel embeddingModel = ModelProvider.getEmbeddingModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - embeddingModel.embed("hi"); - }); - } - - @Test - public void test_dashscope_embedding_model() { - EmbeddingModelConfig modelConfig = new EmbeddingModelConfig(); - modelConfig.setProvider(DashscopeModelFactory.PROVIDER); - modelConfig.setModelName(DashscopeModelFactory.DEFAULT_EMBEDDING_MODEL_NAME); - modelConfig.setBaseUrl(DashscopeModelFactory.DEFAULT_BASE_URL); - modelConfig.setApiKey(ParameterConfig.DEMO); - - EmbeddingModel embeddingModel = ModelProvider.getEmbeddingModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - embeddingModel.embed("hi"); - }); - } - - @Test - public void test_qianfan_embedding_model() { - EmbeddingModelConfig modelConfig = new EmbeddingModelConfig(); - modelConfig.setProvider(QianfanModelFactory.PROVIDER); - modelConfig.setModelName(QianfanModelFactory.DEFAULT_EMBEDDING_MODEL_NAME); - modelConfig.setBaseUrl(QianfanModelFactory.DEFAULT_BASE_URL); - modelConfig.setApiKey(ParameterConfig.DEMO); - modelConfig.setSecretKey(ParameterConfig.DEMO); - - EmbeddingModel embeddingModel = ModelProvider.getEmbeddingModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - embeddingModel.embed("hi"); - }); - } - - @Test - public void test_zhipu_embedding_model() { - EmbeddingModelConfig modelConfig = new EmbeddingModelConfig(); - modelConfig.setProvider(ZhipuModelFactory.PROVIDER); - modelConfig.setModelName(ZhipuModelFactory.DEFAULT_EMBEDDING_MODEL_NAME); - modelConfig.setBaseUrl(ZhipuModelFactory.DEFAULT_BASE_URL); - modelConfig.setApiKey("e2724491714b3b2a0274e987905f1001.5JyHgf4vbZVJ7gC5"); - - EmbeddingModel embeddingModel = ModelProvider.getEmbeddingModel(modelConfig); - assertThrows(RuntimeException.class, () -> { - embeddingModel.embed("hi"); - }); - } } diff --git a/pom.xml b/pom.xml index 92921c6f2..8db6a8336 100644 --- a/pom.xml +++ b/pom.xml @@ -146,31 +146,11 @@ langchain4j-embeddings-bge-small-zh ${langchain4j.embedding.version} - - dev.langchain4j - langchain4j-azure-open-ai - ${langchain4j.version} - dev.langchain4j langchain4j-embeddings-all-minilm-l6-v2-q ${langchain4j.embedding.version} - - dev.langchain4j - langchain4j-qianfan - ${langchain4j.version} - - - dev.langchain4j - langchain4j-zhipu-ai - ${langchain4j.version} - - - dev.langchain4j - langchain4j-dashscope - ${langchain4j.version} - dev.langchain4j langchain4j-milvus @@ -186,11 +166,6 @@ langchain4j-pgvector ${langchain4j.version} - - dev.langchain4j - langchain4j-chatglm - ${langchain4j.version} - dev.langchain4j langchain4j-ollama