diff --git a/application/src/main/java/org/thingsboard/server/service/ai/Langchain4jChatModelConfigurerImpl.java b/application/src/main/java/org/thingsboard/server/service/ai/Langchain4jChatModelConfigurerImpl.java index 72e9506fdc..97863a0a4a 100644 --- a/application/src/main/java/org/thingsboard/server/service/ai/Langchain4jChatModelConfigurerImpl.java +++ b/application/src/main/java/org/thingsboard/server/service/ai/Langchain4jChatModelConfigurerImpl.java @@ -56,6 +56,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .apiKey(chatModel.providerConfig().apiKey()) .modelName(modelConfig.modelId()) .temperature(modelConfig.temperature()) + .topP(modelConfig.topP()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -68,6 +69,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .apiKey(chatModel.providerConfig().apiKey()) .deploymentName(modelConfig.modelId()) .temperature(modelConfig.temperature()) + .topP(modelConfig.topP()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -80,6 +82,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .apiKey(chatModel.providerConfig().apiKey()) .modelName(modelConfig.modelId()) .temperature(modelConfig.temperature()) + .topP(modelConfig.topP()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -112,6 +115,9 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur if (modelConfig.temperature() != null) { generationConfigBuilder.setTemperature(modelConfig.temperature().floatValue()); } + if (modelConfig.topP() != null) { + generationConfigBuilder.setTopP(modelConfig.topP().floatValue()); + } var generationConfig = generationConfigBuilder.build(); // construct generative model instance @@ -128,6 +134,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .apiKey(chatModel.providerConfig().apiKey()) .modelName(modelConfig.modelId()) .temperature(modelConfig.temperature()) + .topP(modelConfig.topP()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -140,6 +147,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .apiKey(chatModel.providerConfig().apiKey()) .modelName(modelConfig.modelId()) .temperature(modelConfig.temperature()) + .topP(modelConfig.topP()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -161,6 +169,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur var defaultChatRequestParams = ChatRequestParameters.builder() .temperature(modelConfig.temperature()) + .topP(modelConfig.topP()) .build(); return BedrockChatModel.builder() @@ -179,6 +188,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .gitHubToken(chatModel.providerConfig().personalAccessToken()) .modelName(modelConfig.modelId()) .temperature(modelConfig.temperature()) + .topP(modelConfig.topP()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AiChatModelConfig.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AiChatModelConfig.java index d5e794cec0..5562c12740 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AiChatModelConfig.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AiChatModelConfig.java @@ -23,14 +23,10 @@ public sealed interface AiChatModelConfig> extend GoogleVertexAiGeminiChatModel.Config, MistralAiChatModel.Config, AnthropicChatModel.Config, AmazonBedrockChatModel.Config, GitHubModelsChatModel.Config { - Double temperature(); - Integer timeoutSeconds(); Integer maxRetries(); - C withTemperature(Double temperature); - C withTimeoutSeconds(Integer timeoutSeconds); C withMaxRetries(Integer maxRetries); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java index 26eb885078..7d38d6e721 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AmazonBedrockChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.AmazonBedrockProviderConfig; public record AmazonBedrockChatModel( AiModelType modelType, AmazonBedrockProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public AmazonBedrockChatModel.Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public AmazonBedrockChatModel.Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public AmazonBedrockChatModel.Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public AmazonBedrockChatModel withModelConfig(AmazonBedrockChatModel.Config config) { - return new AmazonBedrockChatModel(modelType, providerConfig, config); - } - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java index 93c195ecab..a15a3f9078 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AnthropicChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.AnthropicProviderConfig; public record AnthropicChatModel( AiModelType modelType, AnthropicProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public AnthropicChatModel.Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public AnthropicChatModel.Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public AnthropicChatModel.Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public AnthropicChatModel withModelConfig(AnthropicChatModel.Config config) { - return new AnthropicChatModel(modelType, providerConfig, config); - } - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java index 70e8b26711..6d54975748 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/AzureOpenAiChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.AzureOpenAiProviderConfig; public record AzureOpenAiChatModel( AiModelType modelType, AzureOpenAiProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public AzureOpenAiChatModel.Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public AzureOpenAiChatModel.Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public AzureOpenAiChatModel.Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public AzureOpenAiChatModel withModelConfig(AzureOpenAiChatModel.Config config) { - return new AzureOpenAiChatModel(modelType, providerConfig, config); - } - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java index 828169ec37..075473f111 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GitHubModelsChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.GithubModelsProviderConfig; public record GitHubModelsChatModel( AiModelType modelType, GithubModelsProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public GitHubModelsChatModel.Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public GitHubModelsChatModel.Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public GitHubModelsChatModel.Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public GitHubModelsChatModel withModelConfig(GitHubModelsChatModel.Config config) { - return new GitHubModelsChatModel(modelType, providerConfig, config); - } - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java index 80b7e46858..9b1d6b9e91 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleAiGeminiChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.GoogleAiGeminiProviderConfig; public record GoogleAiGeminiChatModel( AiModelType modelType, GoogleAiGeminiProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public GoogleAiGeminiChatModel withModelConfig(GoogleAiGeminiChatModel.Config config) { - return new GoogleAiGeminiChatModel(modelType, providerConfig, config); - } - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java index 201311de23..5659aed918 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/GoogleVertexAiGeminiChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.GoogleVertexAiGeminiProviderConfig; public record GoogleVertexAiGeminiChatModel( AiModelType modelType, GoogleVertexAiGeminiProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, // TODO: not supported by Vertex AI Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public GoogleVertexAiGeminiChatModel withModelConfig(GoogleVertexAiGeminiChatModel.Config config) { - return new GoogleVertexAiGeminiChatModel(modelType, providerConfig, config); - } - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java index 493c0582c6..b76ce500f4 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/MistralAiChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.MistralAiProviderConfig; public record MistralAiChatModel( AiModelType modelType, MistralAiProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public MistralAiChatModel withModelConfig(Config config) { - return new MistralAiChatModel(modelType, providerConfig, config); - } - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java index 3c138d97b7..d066ee4d50 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/ai/model/chat/OpenAiChatModel.java @@ -16,47 +16,28 @@ package org.thingsboard.server.common.data.ai.model.chat; import dev.langchain4j.model.chat.ChatModel; +import lombok.With; import org.thingsboard.server.common.data.ai.model.AiModelType; import org.thingsboard.server.common.data.ai.provider.OpenAiProviderConfig; public record OpenAiChatModel( AiModelType modelType, OpenAiProviderConfig providerConfig, - Config modelConfig + @With Config modelConfig ) implements AiChatModel { + @With public record Config( String modelId, Double temperature, + Double topP, Integer timeoutSeconds, Integer maxRetries - ) implements AiChatModelConfig { - - @Override - public OpenAiChatModel.Config withTemperature(Double temperature) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public OpenAiChatModel.Config withTimeoutSeconds(Integer timeoutSeconds) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - @Override - public OpenAiChatModel.Config withMaxRetries(Integer maxRetries) { - return new Config(modelId, temperature, timeoutSeconds, maxRetries); - } - - } + ) implements AiChatModelConfig {} @Override public ChatModel configure(Langchain4jChatModelConfigurer configurer) { return configurer.configureChatModel(this); } - @Override - public OpenAiChatModel withModelConfig(OpenAiChatModel.Config config) { - return new OpenAiChatModel(modelType, providerConfig, config); - } - }