From 20697efac1640a2c51e25a9e37005bdb68be90b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E6=AF=9B?= <1402564807@qq.com> Date: Thu, 27 Jun 2024 15:09:18 +0800 Subject: [PATCH] (improvement)(headless) Add localAi auto-configuration. (#1243) --- .../localai/spring/ChatModelProperties.java | 21 +++++ .../spring/EmbeddingModelProperties.java | 19 ++++ .../spring/LanguageModelProperties.java | 22 +++++ .../localai/spring/LocalAiAutoConfig.java | 89 +++++++++++++++++++ .../localai/spring/Properties.java | 29 ++++++ 5 files changed, 180 insertions(+) create mode 100644 common/src/main/java/dev/langchain4j/localai/spring/ChatModelProperties.java create mode 100644 common/src/main/java/dev/langchain4j/localai/spring/EmbeddingModelProperties.java create mode 100644 common/src/main/java/dev/langchain4j/localai/spring/LanguageModelProperties.java create mode 100644 common/src/main/java/dev/langchain4j/localai/spring/LocalAiAutoConfig.java create mode 100644 common/src/main/java/dev/langchain4j/localai/spring/Properties.java diff --git a/common/src/main/java/dev/langchain4j/localai/spring/ChatModelProperties.java b/common/src/main/java/dev/langchain4j/localai/spring/ChatModelProperties.java new file mode 100644 index 000000000..bdb25daaf --- /dev/null +++ b/common/src/main/java/dev/langchain4j/localai/spring/ChatModelProperties.java @@ -0,0 +1,21 @@ +package dev.langchain4j.localai.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; +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/localai/spring/EmbeddingModelProperties.java b/common/src/main/java/dev/langchain4j/localai/spring/EmbeddingModelProperties.java new file mode 100644 index 000000000..932f3fa47 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/localai/spring/EmbeddingModelProperties.java @@ -0,0 +1,19 @@ +package dev.langchain4j.localai.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; + +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/localai/spring/LanguageModelProperties.java b/common/src/main/java/dev/langchain4j/localai/spring/LanguageModelProperties.java new file mode 100644 index 000000000..c9bb80a9a --- /dev/null +++ b/common/src/main/java/dev/langchain4j/localai/spring/LanguageModelProperties.java @@ -0,0 +1,22 @@ +package dev.langchain4j.localai.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; + +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/localai/spring/LocalAiAutoConfig.java b/common/src/main/java/dev/langchain4j/localai/spring/LocalAiAutoConfig.java new file mode 100644 index 000000000..f3fb521cf --- /dev/null +++ b/common/src/main/java/dev/langchain4j/localai/spring/LocalAiAutoConfig.java @@ -0,0 +1,89 @@ +package dev.langchain4j.localai.spring; + +import dev.langchain4j.model.localai.LocalAiChatModel; +import dev.langchain4j.model.localai.LocalAiEmbeddingModel; +import dev.langchain4j.model.localai.LocalAiLanguageModel; +import dev.langchain4j.model.localai.LocalAiStreamingChatModel; +import dev.langchain4j.model.localai.LocalAiStreamingLanguageModel; +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.localai.spring.Properties.PREFIX; + +@Configuration +@EnableConfigurationProperties(Properties.class) +public class LocalAiAutoConfig { + + @Bean + @ConditionalOnProperty(PREFIX + ".chat-model.base-url") + LocalAiChatModel localAiChatModel(Properties properties) { + ChatModelProperties chatModelProperties = properties.getChatModel(); + return LocalAiChatModel.builder() + .baseUrl(chatModelProperties.getBaseUrl()) + .modelName(chatModelProperties.getModelName()) + .temperature(chatModelProperties.getTemperature()) + .topP(chatModelProperties.getTopP()) + .maxRetries(chatModelProperties.getMaxRetries()) + .logRequests(chatModelProperties.getLogRequests()) + .logResponses(chatModelProperties.getLogResponses()) + .build(); + } + + @Bean + @ConditionalOnProperty(PREFIX + ".streaming-chat-model.base-url") + LocalAiStreamingChatModel localAiStreamingChatModel(Properties properties) { + ChatModelProperties chatModelProperties = properties.getStreamingChatModel(); + return LocalAiStreamingChatModel.builder() + .temperature(chatModelProperties.getTemperature()) + .topP(chatModelProperties.getTopP()) + .baseUrl(chatModelProperties.getBaseUrl()) + .modelName(chatModelProperties.getModelName()) + .logRequests(chatModelProperties.getLogRequests()) + .logResponses(chatModelProperties.getLogResponses()) + .build(); + } + + @Bean + @ConditionalOnProperty(PREFIX + ".language-model.base-url") + LocalAiLanguageModel localAiLanguageModel(Properties properties) { + LanguageModelProperties languageModelProperties = properties.getLanguageModel(); + return LocalAiLanguageModel.builder() + .topP(languageModelProperties.getTopP()) + .baseUrl(languageModelProperties.getBaseUrl()) + .modelName(languageModelProperties.getModelName()) + .temperature(languageModelProperties.getTemperature()) + .maxRetries(languageModelProperties.getMaxRetries()) + .logRequests(languageModelProperties.getLogRequests()) + .logResponses(languageModelProperties.getLogResponses()) + .build(); + } + + @Bean + @ConditionalOnProperty(PREFIX + ".streaming-language-model.base-url") + LocalAiStreamingLanguageModel localAiStreamingLanguageModel(Properties properties) { + LanguageModelProperties languageModelProperties = properties.getStreamingLanguageModel(); + return LocalAiStreamingLanguageModel.builder() + .topP(languageModelProperties.getTopP()) + .baseUrl(languageModelProperties.getBaseUrl()) + .modelName(languageModelProperties.getModelName()) + .temperature(languageModelProperties.getTemperature()) + .logRequests(languageModelProperties.getLogRequests()) + .logResponses(languageModelProperties.getLogResponses()) + .build(); + } + + @Bean + @ConditionalOnProperty(PREFIX + ".embedding-model.base-url") + LocalAiEmbeddingModel localAiEmbeddingModel(Properties properties) { + EmbeddingModelProperties embeddingModelProperties = properties.getEmbeddingModel(); + return LocalAiEmbeddingModel.builder() + .baseUrl(embeddingModelProperties.getBaseUrl()) + .modelName(embeddingModelProperties.getModelName()) + .maxRetries(embeddingModelProperties.getMaxRetries()) + .logRequests(embeddingModelProperties.getLogRequests()) + .logResponses(embeddingModelProperties.getLogResponses()) + .build(); + } +} \ No newline at end of file diff --git a/common/src/main/java/dev/langchain4j/localai/spring/Properties.java b/common/src/main/java/dev/langchain4j/localai/spring/Properties.java new file mode 100644 index 000000000..61ae589b7 --- /dev/null +++ b/common/src/main/java/dev/langchain4j/localai/spring/Properties.java @@ -0,0 +1,29 @@ +package dev.langchain4j.localai.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.local-ai"; + + @NestedConfigurationProperty + ChatModelProperties chatModel; + + @NestedConfigurationProperty + ChatModelProperties streamingChatModel; + + @NestedConfigurationProperty + LanguageModelProperties languageModel; + + @NestedConfigurationProperty + LanguageModelProperties streamingLanguageModel; + + @NestedConfigurationProperty + EmbeddingModelProperties embeddingModel; +}