From d81d41fd7bfe5d2f5e6be6a5aa9439c96fdaaea0 Mon Sep 17 00:00:00 2001 From: Dmytro Skarzhynets Date: Fri, 27 Jun 2025 19:37:12 +0300 Subject: [PATCH] AI rule node: add max output tokens for all providers --- .../service/ai/Langchain4jChatModelConfigurerImpl.java | 10 ++++++++++ .../data/ai/model/chat/AmazonBedrockChatModel.java | 1 + .../common/data/ai/model/chat/AnthropicChatModel.java | 1 + .../data/ai/model/chat/AzureOpenAiChatModel.java | 1 + .../data/ai/model/chat/GitHubModelsChatModel.java | 1 + .../data/ai/model/chat/GoogleAiGeminiChatModel.java | 1 + .../ai/model/chat/GoogleVertexAiGeminiChatModel.java | 1 + .../common/data/ai/model/chat/MistralAiChatModel.java | 1 + .../common/data/ai/model/chat/OpenAiChatModel.java | 1 + 9 files changed, 18 insertions(+) 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 c8022e518c..fdcea9df18 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 @@ -63,6 +63,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .topP(modelConfig.topP()) .frequencyPenalty(modelConfig.frequencyPenalty()) .presencePenalty(modelConfig.presencePenalty()) + .maxTokens(modelConfig.maxOutputTokens()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -78,6 +79,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .topP(modelConfig.topP()) .frequencyPenalty(modelConfig.frequencyPenalty()) .presencePenalty(modelConfig.presencePenalty()) + .maxTokens(modelConfig.maxOutputTokens()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -94,6 +96,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .topK(modelConfig.topK()) .frequencyPenalty(modelConfig.frequencyPenalty()) .presencePenalty(modelConfig.presencePenalty()) + .maxOutputTokens(modelConfig.maxOutputTokens()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -165,6 +168,9 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur if (modelConfig.frequencyPenalty() != null) { generationConfigBuilder.setPresencePenalty(modelConfig.frequencyPenalty().floatValue()); } + if (modelConfig.maxOutputTokens() != null) { + generationConfigBuilder.setMaxOutputTokens(modelConfig.maxOutputTokens()); + } var generationConfig = generationConfigBuilder.build(); // construct generative model instance @@ -191,6 +197,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .topP(modelConfig.topP()) .frequencyPenalty(modelConfig.frequencyPenalty()) .presencePenalty(modelConfig.presencePenalty()) + .maxTokens(modelConfig.maxOutputTokens()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -205,6 +212,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .temperature(modelConfig.temperature()) .topP(modelConfig.topP()) .topK(modelConfig.topK()) + .maxTokens(modelConfig.maxOutputTokens()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); @@ -227,6 +235,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur var defaultChatRequestParams = ChatRequestParameters.builder() .temperature(modelConfig.temperature()) .topP(modelConfig.topP()) + .maxOutputTokens(modelConfig.maxOutputTokens()) .build(); return BedrockChatModel.builder() @@ -248,6 +257,7 @@ class Langchain4jChatModelConfigurerImpl implements Langchain4jChatModelConfigur .topP(modelConfig.topP()) .frequencyPenalty(modelConfig.frequencyPenalty()) .presencePenalty(modelConfig.presencePenalty()) + .maxTokens(modelConfig.maxOutputTokens()) .timeout(toDuration(modelConfig.timeoutSeconds())) .maxRetries(modelConfig.maxRetries()) .build(); 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 7d38d6e721..cd4a27326b 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 @@ -31,6 +31,7 @@ public record AmazonBedrockChatModel( String modelId, Double temperature, Double topP, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {} 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 ff218d99af..eff282645a 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 @@ -32,6 +32,7 @@ public record AnthropicChatModel( Double temperature, Double topP, Integer topK, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {} 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 c6ba4c9b80..ff59f042c6 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 @@ -33,6 +33,7 @@ public record AzureOpenAiChatModel( Double topP, Double frequencyPenalty, Double presencePenalty, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {} 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 24ece4ec16..684c8133b7 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 @@ -33,6 +33,7 @@ public record GitHubModelsChatModel( Double topP, Double frequencyPenalty, Double presencePenalty, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {} 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 ffed1c7de0..7618032837 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 @@ -34,6 +34,7 @@ public record GoogleAiGeminiChatModel( Integer topK, Double frequencyPenalty, Double presencePenalty, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {} 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 16744d3b90..8755760fe6 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 @@ -34,6 +34,7 @@ public record GoogleVertexAiGeminiChatModel( Integer topK, Double frequencyPenalty, Double presencePenalty, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {} 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 c44e7b4ec8..c896b2c158 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 @@ -33,6 +33,7 @@ public record MistralAiChatModel( Double topP, Double frequencyPenalty, Double presencePenalty, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {} 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 439786abda..435e543595 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 @@ -33,6 +33,7 @@ public record OpenAiChatModel( Double topP, Double frequencyPenalty, Double presencePenalty, + Integer maxOutputTokens, Integer timeoutSeconds, Integer maxRetries ) implements AiChatModelConfig {}