mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 11:07:06 +00:00
(improvement)(common) support dashscope in springboot (#1192)
This commit is contained in:
@@ -225,6 +225,10 @@
|
||||
<groupId>dev.langchain4j</groupId>
|
||||
<artifactId>langchain4j-zhipu-ai</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>dev.langchain4j</groupId>
|
||||
<artifactId>langchain4j-dashscope</artifactId>
|
||||
</dependency>
|
||||
<!--langchain4j-->
|
||||
<dependency>
|
||||
<groupId>com.hankcs</groupId>
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package dev.langchain4j.dashscope.spring;
|
||||
|
||||
import java.util.List;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
class ChatModelProperties {
|
||||
|
||||
String baseUrl;
|
||||
String apiKey;
|
||||
String modelName;
|
||||
Double topP;
|
||||
Integer topK;
|
||||
Boolean enableSearch;
|
||||
Integer seed;
|
||||
Float repetitionPenalty;
|
||||
Float temperature;
|
||||
List<String> stops;
|
||||
Integer maxTokens;
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package dev.langchain4j.dashscope.spring;
|
||||
|
||||
|
||||
import static dev.langchain4j.dashscope.spring.Properties.PREFIX;
|
||||
|
||||
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;
|
||||
|
||||
@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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package dev.langchain4j.dashscope.spring;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
class EmbeddingModelProperties {
|
||||
|
||||
private String apiKey;
|
||||
private String modelName;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
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;
|
||||
}
|
||||
@@ -77,7 +77,7 @@ public class QianfanAutoConfig {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnProperty(PREFIX + ".streaming-language-model.api-key")
|
||||
QianfanStreamingLanguageModel openAiStreamingLanguageModel(Properties properties) {
|
||||
QianfanStreamingLanguageModel qianfanStreamingLanguageModel(Properties properties) {
|
||||
LanguageModelProperties languageModelProperties = properties.getStreamingLanguageModel();
|
||||
return QianfanStreamingLanguageModel.builder()
|
||||
.endpoint(languageModelProperties.getEndpoint())
|
||||
|
||||
6
pom.xml
6
pom.xml
@@ -195,6 +195,12 @@
|
||||
<artifactId>langchain4j-zhipu-ai</artifactId>
|
||||
<version>${langchain4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>dev.langchain4j</groupId>
|
||||
<artifactId>langchain4j-dashscope</artifactId>
|
||||
<version>${langchain4j.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure-processor</artifactId>
|
||||
|
||||
Reference in New Issue
Block a user