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