diff --git a/common/pom.xml b/common/pom.xml index 9f493fccb..060063a65 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -221,8 +221,11 @@ dev.langchain4j langchain4j-qianfan + + dev.langchain4j + langchain4j-zhipu-ai + - com.hankcs hanlp diff --git a/common/src/main/java/dev/langchain4j/qianfan/spring/AutoConfig.java b/common/src/main/java/dev/langchain4j/qianfan/spring/QianfanAutoConfig.java similarity index 99% rename from common/src/main/java/dev/langchain4j/qianfan/spring/AutoConfig.java rename to common/src/main/java/dev/langchain4j/qianfan/spring/QianfanAutoConfig.java index 464cbb8f7..3f81f7053 100644 --- a/common/src/main/java/dev/langchain4j/qianfan/spring/AutoConfig.java +++ b/common/src/main/java/dev/langchain4j/qianfan/spring/QianfanAutoConfig.java @@ -1,5 +1,7 @@ package dev.langchain4j.qianfan.spring; +import static dev.langchain4j.qianfan.spring.Properties.PREFIX; + import dev.langchain4j.model.qianfan.QianfanChatModel; import dev.langchain4j.model.qianfan.QianfanEmbeddingModel; import dev.langchain4j.model.qianfan.QianfanLanguageModel; @@ -10,11 +12,9 @@ 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 AutoConfig { +public class QianfanAutoConfig { @Bean @ConditionalOnProperty(PREFIX + ".chat-model.api-key") diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/ChatModelProperties.java b/common/src/main/java/dev/langchain4j/zhipu/spring/ChatModelProperties.java new file mode 100644 index 000000000..000d29997 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/zhipu/spring/ChatModelProperties.java @@ -0,0 +1,19 @@ +package dev.langchain4j.zhipu.spring; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +class ChatModelProperties { + + String baseUrl; + String apiKey; + Double temperature; + Double topP; + String model; + Integer maxRetries; + Integer maxToken; + Boolean logRequests; + Boolean logResponses; +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/EmbeddingModelProperties.java b/common/src/main/java/dev/langchain4j/zhipu/spring/EmbeddingModelProperties.java new file mode 100644 index 000000000..8b79cccfb --- /dev/null +++ b/common/src/main/java/dev/langchain4j/zhipu/spring/EmbeddingModelProperties.java @@ -0,0 +1,16 @@ +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; +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/Properties.java b/common/src/main/java/dev/langchain4j/zhipu/spring/Properties.java new file mode 100644 index 000000000..97eeb55d9 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/zhipu/spring/Properties.java @@ -0,0 +1,23 @@ +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; +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/zhipu/spring/ZhipuAutoConfig.java b/common/src/main/java/dev/langchain4j/zhipu/spring/ZhipuAutoConfig.java new file mode 100644 index 000000000..a2d0d3f25 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/zhipu/spring/ZhipuAutoConfig.java @@ -0,0 +1,63 @@ +package dev.langchain4j.zhipu.spring; + +import static dev.langchain4j.zhipu.spring.Properties.PREFIX; + +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; + +@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.getModel()) + .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.getModel()) + .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(); + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 220104a0e..4fc77f5c3 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.tencent.supersonic @@ -130,11 +130,6 @@ langchain4j-local-ai ${langchain4j.version} - - dev.langchain4j - langchain4j-hugging-face - ${langchain4j.version} - dev.langchain4j langchain4j-chroma @@ -195,6 +190,11 @@ langchain4j-qianfan ${langchain4j.version} + + dev.langchain4j + langchain4j-zhipu-ai + ${langchain4j.version} + org.springframework.boot spring-boot-autoconfigure-processor