From e2b28db3260e705846738f4fdda08572f59faded Mon Sep 17 00:00:00 2001 From: ihoffmann-dot Date: Thu, 16 Jul 2026 16:56:00 -0300 Subject: [PATCH 1/2] fix(dotAI): forward maxCompletionTokens to Azure OpenAI builder for gpt-5.x and o-series models --- .../langchain4j/AzureOpenAiModelProviderStrategy.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java b/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java index d1b2f4c762f6..90a1c07cef98 100644 --- a/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java +++ b/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java @@ -31,7 +31,8 @@ public ChatModel buildChatModel(final ProviderConfig config, final String modelT if (config.maxRetries() != null) builder.maxRetries(config.maxRetries()); if (config.timeout() != null) builder.timeout(Duration.ofSeconds(config.timeout())); if (config.temperature() != null) builder.temperature(config.temperature()); - if (config.maxTokens() != null && !requiresCompletionTokens(config)) builder.maxTokens(config.maxTokens()); + if (config.maxTokens() != null && !requiresCompletionTokens(config)) { builder.maxTokens(config.maxTokens()); } + if (config.maxCompletionTokens() != null && requiresCompletionTokens(config)) { builder.maxCompletionTokens(config.maxCompletionTokens()); } return builder.build(); } @@ -46,7 +47,8 @@ public StreamingChatModel buildStreamingChatModel(final ProviderConfig config, f if (config.maxRetries() != null) builder.maxRetries(config.maxRetries()); if (config.timeout() != null) builder.timeout(Duration.ofSeconds(config.timeout())); if (config.temperature() != null) builder.temperature(config.temperature()); - if (config.maxTokens() != null && !requiresCompletionTokens(config)) builder.maxTokens(config.maxTokens()); + if (config.maxTokens() != null && !requiresCompletionTokens(config)) { builder.maxTokens(config.maxTokens()); } + if (config.maxCompletionTokens() != null && requiresCompletionTokens(config)) { builder.maxCompletionTokens(config.maxCompletionTokens()); } return builder.build(); } From 67eb7ed68a97dd0abc2ea104da9eb87d47a56161 Mon Sep 17 00:00:00 2001 From: ihoffmann-dot Date: Thu, 16 Jul 2026 17:15:04 -0300 Subject: [PATCH 2/2] style(dotAI): add missing braces to all if statements in AzureOpenAiModelProviderStrategy --- .../AzureOpenAiModelProviderStrategy.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java b/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java index 90a1c07cef98..f62919ba239c 100644 --- a/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java +++ b/dotCMS/src/main/java/com/dotcms/ai/client/langchain4j/AzureOpenAiModelProviderStrategy.java @@ -27,10 +27,10 @@ public ChatModel buildChatModel(final ProviderConfig config, final String modelT .apiKey(config.apiKey()) .endpoint(config.endpoint()) .deploymentName(deploymentName(config)); - if (config.apiVersion() != null) builder.serviceVersion(config.apiVersion()); - if (config.maxRetries() != null) builder.maxRetries(config.maxRetries()); - if (config.timeout() != null) builder.timeout(Duration.ofSeconds(config.timeout())); - if (config.temperature() != null) builder.temperature(config.temperature()); + if (config.apiVersion() != null) { builder.serviceVersion(config.apiVersion()); } + if (config.maxRetries() != null) { builder.maxRetries(config.maxRetries()); } + if (config.timeout() != null) { builder.timeout(Duration.ofSeconds(config.timeout())); } + if (config.temperature() != null) { builder.temperature(config.temperature()); } if (config.maxTokens() != null && !requiresCompletionTokens(config)) { builder.maxTokens(config.maxTokens()); } if (config.maxCompletionTokens() != null && requiresCompletionTokens(config)) { builder.maxCompletionTokens(config.maxCompletionTokens()); } return builder.build(); @@ -43,10 +43,10 @@ public StreamingChatModel buildStreamingChatModel(final ProviderConfig config, f .apiKey(config.apiKey()) .endpoint(config.endpoint()) .deploymentName(deploymentName(config)); - if (config.apiVersion() != null) builder.serviceVersion(config.apiVersion()); - if (config.maxRetries() != null) builder.maxRetries(config.maxRetries()); - if (config.timeout() != null) builder.timeout(Duration.ofSeconds(config.timeout())); - if (config.temperature() != null) builder.temperature(config.temperature()); + if (config.apiVersion() != null) { builder.serviceVersion(config.apiVersion()); } + if (config.maxRetries() != null) { builder.maxRetries(config.maxRetries()); } + if (config.timeout() != null) { builder.timeout(Duration.ofSeconds(config.timeout())); } + if (config.temperature() != null) { builder.temperature(config.temperature()); } if (config.maxTokens() != null && !requiresCompletionTokens(config)) { builder.maxTokens(config.maxTokens()); } if (config.maxCompletionTokens() != null && requiresCompletionTokens(config)) { builder.maxCompletionTokens(config.maxCompletionTokens()); } return builder.build(); @@ -59,10 +59,10 @@ public EmbeddingModel buildEmbeddingModel(final ProviderConfig config, final Str .apiKey(config.apiKey()) .endpoint(config.endpoint()) .deploymentName(deploymentName(config)); - if (config.apiVersion() != null) builder.serviceVersion(config.apiVersion()); - if (config.maxRetries() != null) builder.maxRetries(config.maxRetries()); - if (config.timeout() != null) builder.timeout(Duration.ofSeconds(config.timeout())); - if (config.dimensions() != null) builder.dimensions(config.dimensions()); + if (config.apiVersion() != null) { builder.serviceVersion(config.apiVersion()); } + if (config.maxRetries() != null) { builder.maxRetries(config.maxRetries()); } + if (config.timeout() != null) { builder.timeout(Duration.ofSeconds(config.timeout())); } + if (config.dimensions() != null) { builder.dimensions(config.dimensions()); } return builder.build(); } @@ -96,9 +96,9 @@ public ImageModel buildImageModel(final ProviderConfig config, final String mode .baseUrl(config.endpoint()) .apiKey(config.apiKey()) .modelName(deploymentName(config)); - if (config.size() != null) builder.size(config.size()); - if (config.timeout() != null) builder.timeout(Duration.ofSeconds(config.timeout())); - if (config.maxRetries() != null) builder.maxRetries(config.maxRetries()); + if (config.size() != null) { builder.size(config.size()); } + if (config.timeout() != null) { builder.timeout(Duration.ofSeconds(config.timeout())); } + if (config.maxRetries() != null) { builder.maxRetries(config.maxRetries()); } return builder.build(); } final OpenAiOfficialImageModel.Builder builder = OpenAiOfficialImageModel.builder() @@ -110,9 +110,9 @@ public ImageModel buildImageModel(final ProviderConfig config, final String mode if (config.apiVersion() != null) { builder.azureOpenAIServiceVersion(AzureOpenAIServiceVersion.Companion.fromString(config.apiVersion())); } - if (config.size() != null) builder.size(config.size()); - if (config.timeout() != null) builder.timeout(Duration.ofSeconds(config.timeout())); - if (config.maxRetries() != null) builder.maxRetries(config.maxRetries()); + if (config.size() != null) { builder.size(config.size()); } + if (config.timeout() != null) { builder.timeout(Duration.ofSeconds(config.timeout())); } + if (config.maxRetries() != null) { builder.maxRetries(config.maxRetries()); } return builder.build(); }