This is an automated email from the ASF dual-hosted git repository.
oscerd pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new f87dc55553ea CAMEL-24490: camel-ibm-watsonx-ai - apply the configured
timeout to the watsonx.ai service clients (#25739)
f87dc55553ea is described below
commit f87dc55553ead759ba00ace0f55d46be266a44e2
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Aug 26 09:14:31 2026 +0200
CAMEL-24490: camel-ibm-watsonx-ai - apply the configured timeout to the
watsonx.ai service clients (#25739)
WatsonxAiServiceFactory built every watsonx.ai service (chat, text
generation,
embedding, rerank, tokenization, detection, text extraction/classification,
time series, foundation model, deployment, tool) without applying the
timeout
@UriParam, so the documented "Request timeout in milliseconds" option was
silently ignored and every request used the SDK default. Apply the
configured
timeout to each builder via
applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t))).
The SDK then governs how the timeout applies to both unary and streaming
requests, so the streaming CompletableFuture is no longer left unbounded
when a
timeout is configured.
Signed-off-by: Andrea Cosentino <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>
---
.../ibm/watsonx/ai/service/WatsonxAiServiceFactory.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git
a/components/camel-ibm/camel-ibm-watsonx-ai/src/main/java/org/apache/camel/component/ibm/watsonx/ai/service/WatsonxAiServiceFactory.java
b/components/camel-ibm/camel-ibm-watsonx-ai/src/main/java/org/apache/camel/component/ibm/watsonx/ai/service/WatsonxAiServiceFactory.java
index 70797eed2f68..74ecfe172507 100644
---
a/components/camel-ibm/camel-ibm-watsonx-ai/src/main/java/org/apache/camel/component/ibm/watsonx/ai/service/WatsonxAiServiceFactory.java
+++
b/components/camel-ibm/camel-ibm-watsonx-ai/src/main/java/org/apache/camel/component/ibm/watsonx/ai/service/WatsonxAiServiceFactory.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.ibm.watsonx.ai.service;
+import java.time.Duration;
import java.util.function.Consumer;
import com.ibm.watsonx.ai.chat.ChatService;
@@ -51,6 +52,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
applyIfNotNull(config.getModelId(), builder::modelId);
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -66,6 +68,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
applyIfNotNull(config.getModelId(), builder::modelId);
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -81,6 +84,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
applyIfNotNull(config.getModelId(), builder::modelId);
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -96,6 +100,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
applyIfNotNull(config.getModelId(), builder::modelId);
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -111,6 +116,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
applyIfNotNull(config.getModelId(), builder::modelId);
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -126,6 +132,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
// DetectionService doesn't have modelId
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -150,6 +157,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
// TextExtractionService doesn't have modelId
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -171,6 +179,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
// TextClassificationService doesn't have modelId
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -186,6 +195,7 @@ public final class WatsonxAiServiceFactory {
applyIfNotNull(config.getSpaceId(), builder::spaceId);
applyIfNotNull(config.getModelId(), builder::modelId);
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -198,6 +208,7 @@ public final class WatsonxAiServiceFactory {
// FoundationModelService doesn't have projectId, spaceId, modelId
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -211,6 +222,7 @@ public final class WatsonxAiServiceFactory {
// DeploymentService doesn't have projectId, spaceId, modelId
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));
@@ -231,6 +243,7 @@ public final class WatsonxAiServiceFactory {
// ToolService doesn't have projectId, spaceId, modelId
applyIfNotNull(config.getVerifySsl(), builder::verifySsl);
+ applyIfNotNull(config.getTimeout(), t ->
builder.timeout(Duration.ofMillis(t)));
applyIfTrue(config.getLogRequests(), () -> builder.logRequests(true));
applyIfTrue(config.getLogResponses(), () ->
builder.logResponses(true));