This is an automated email from the ASF dual-hosted git repository. zqr10159 pushed a commit to branch 2.0.0 in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
commit 721e53d20680d64c703ee10c204cc37851a00ba0 Author: Logic <[email protected]> AuthorDate: Sat Jun 6 18:34:18 2026 +0800 fix(ai): upgrade spring ai and keep chat client optional --- hertzbeat-ai/pom.xml | 2 +- .../org/apache/hertzbeat/ai/config/LlmConfig.java | 30 +++++++++++++++++----- .../apache/hertzbeat/ai/config/LlmConfigTest.java | 6 +++++ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/hertzbeat-ai/pom.xml b/hertzbeat-ai/pom.xml index 7697f6fb32..e582ff0e08 100644 --- a/hertzbeat-ai/pom.xml +++ b/hertzbeat-ai/pom.xml @@ -25,7 +25,7 @@ </parent> <artifactId>hertzbeat-ai</artifactId> <properties> - <spring-ai.version>2.0.0-M8</spring-ai.version> + <spring-ai.version>2.0.0-RC1</spring-ai.version> <java.version>21</java.version> </properties> diff --git a/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/LlmConfig.java b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/LlmConfig.java index da39573081..018151edb4 100644 --- a/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/LlmConfig.java +++ b/hertzbeat-ai/src/main/java/org/apache/hertzbeat/ai/config/LlmConfig.java @@ -19,9 +19,11 @@ package org.apache.hertzbeat.ai.config; import com.openai.client.OpenAIClient; -import com.openai.client.okhttp.OpenAIOkHttpClient; -import com.openai.credential.BearerTokenCredential; +import io.micrometer.core.instrument.Metrics; +import io.micrometer.observation.ObservationRegistry; import jakarta.annotation.PostConstruct; +import java.time.Duration; +import java.util.Map; import lombok.extern.slf4j.Slf4j; import org.apache.hertzbeat.common.support.event.AiProviderConfigChangeEvent; import org.apache.hertzbeat.common.entity.dto.ModelProviderConfig; @@ -31,6 +33,7 @@ import org.apache.hertzbeat.common.util.JsonUtil; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.openai.OpenAiChatModel; import org.springframework.ai.openai.OpenAiChatOptions; +import org.springframework.ai.openai.setup.OpenAiSetup; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; @@ -72,7 +75,7 @@ public class LlmConfig { private ChatClient createChatClient() { try { return createConfiguredChatClient(); - } catch (RuntimeException e) { + } catch (RuntimeException | LinkageError e) { log.warn("LLM Provider configuration cannot create ChatClient, ChatClient bean will not be created", e); return null; } @@ -116,10 +119,23 @@ public class LlmConfig { } } - OpenAIClient openAiClient = OpenAIOkHttpClient.builder() - .baseUrl(modelProviderConfig.getBaseUrl()) - .credential(BearerTokenCredential.create(modelProviderConfig.getApiKey())) - .build(); + OpenAIClient openAiClient = OpenAiSetup.setupSyncClient( + modelProviderConfig.getBaseUrl(), + modelProviderConfig.getApiKey(), + null, + null, + null, + null, + false, + false, + null, + Duration.ofSeconds(60), + 10, + null, + Map.of(), + ObservationRegistry.NOOP, + Metrics.globalRegistry, + null); // Create Chat Options OpenAiChatOptions openAiChatOptions = OpenAiChatOptions.builder() diff --git a/hertzbeat-ai/src/test/java/org/apache/hertzbeat/ai/config/LlmConfigTest.java b/hertzbeat-ai/src/test/java/org/apache/hertzbeat/ai/config/LlmConfigTest.java index 3ba5d35c25..2d7c83d258 100644 --- a/hertzbeat-ai/src/test/java/org/apache/hertzbeat/ai/config/LlmConfigTest.java +++ b/hertzbeat-ai/src/test/java/org/apache/hertzbeat/ai/config/LlmConfigTest.java @@ -31,6 +31,7 @@ import org.apache.hertzbeat.common.entity.manager.GeneralConfig; import org.apache.hertzbeat.common.util.JsonUtil; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; import org.springframework.context.support.GenericApplicationContext; class LlmConfigTest { @@ -106,6 +107,11 @@ class LlmConfigTest { }); } + @Test + void openAiChatClientHasNoBeanAnnotation() throws NoSuchMethodException { + assertFalse(LlmConfig.class.getDeclaredMethod("openAiChatClient").isAnnotationPresent(Bean.class)); + } + @Test void applicationContextRegistersClientWithConfiguredApiKey() { GeneralConfigDao generalConfigDao = mock(GeneralConfigDao.class); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
