You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by jp...@apache.org on 2026/03/02 11:34:16 UTC

(camel) 02/02: CAMEL-22545 add poolingMode option

This is an automated email from the ASF dual-hosted git repository.

jpoth pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 7f9f16ff41d5862bcb5be7e158838e736d11cd36
Author: John Poth <po...@gmail.com>
AuthorDate: Fri Feb 27 11:41:31 2026 +0100

    CAMEL-22545 add poolingMode option
---
 .../HuggingFaceComponentConfigurer.java            |  3 ++
 .../huggingface/HuggingFaceEndpointConfigurer.java |  3 ++
 .../huggingface/HuggingFaceEndpointUriFactory.java |  3 +-
 .../camel/component/huggingface/huggingface.json   | 42 +++++++++++-----------
 .../huggingface/HuggingFaceConfiguration.java      | 12 +++++++
 .../huggingface/tasks/AbstractTaskPredictor.java   | 20 +++++++++--
 6 files changed, 59 insertions(+), 24 deletions(-)

diff --git a/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceComponentConfigurer.java b/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceComponentConfigurer.java
index c069a858d910..050e6f5ac8c5 100644
--- a/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceComponentConfigurer.java
+++ b/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceComponentConfigurer.java
@@ -58,6 +58,7 @@ public class HuggingFaceComponentConfigurer extends PropertyConfigurerSupport im
         case "multiLabel": getOrCreateConfiguration(target).setMultiLabel(property(camelContext, boolean.class, value)); return true;
         case "oauthprofile":
         case "oauthProfile": getOrCreateConfiguration(target).setOauthProfile(property(camelContext, java.lang.String.class, value)); return true;
+        case "pooling": getOrCreateConfiguration(target).setPooling(property(camelContext, boolean.class, value)); return true;
         case "predicttimeout":
         case "predictTimeout": getOrCreateConfiguration(target).setPredictTimeout(property(camelContext, int.class, value)); return true;
         case "predictorbean":
@@ -105,6 +106,7 @@ public class HuggingFaceComponentConfigurer extends PropertyConfigurerSupport im
         case "multiLabel": return boolean.class;
         case "oauthprofile":
         case "oauthProfile": return java.lang.String.class;
+        case "pooling": return boolean.class;
         case "predicttimeout":
         case "predictTimeout": return int.class;
         case "predictorbean":
@@ -153,6 +155,7 @@ public class HuggingFaceComponentConfigurer extends PropertyConfigurerSupport im
         case "multiLabel": return getOrCreateConfiguration(target).isMultiLabel();
         case "oauthprofile":
         case "oauthProfile": return getOrCreateConfiguration(target).getOauthProfile();
+        case "pooling": return getOrCreateConfiguration(target).isPooling();
         case "predicttimeout":
         case "predictTimeout": return getOrCreateConfiguration(target).getPredictTimeout();
         case "predictorbean":
diff --git a/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointConfigurer.java b/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointConfigurer.java
index 1a18ecc45a1a..5e1496dc8c33 100644
--- a/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointConfigurer.java
+++ b/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointConfigurer.java
@@ -44,6 +44,7 @@ public class HuggingFaceEndpointConfigurer extends PropertyConfigurerSupport imp
         case "multiLabel": target.getConfiguration().setMultiLabel(property(camelContext, boolean.class, value)); return true;
         case "oauthprofile":
         case "oauthProfile": target.getConfiguration().setOauthProfile(property(camelContext, java.lang.String.class, value)); return true;
+        case "pooling": target.getConfiguration().setPooling(property(camelContext, boolean.class, value)); return true;
         case "predicttimeout":
         case "predictTimeout": target.getConfiguration().setPredictTimeout(property(camelContext, int.class, value)); return true;
         case "predictorbean":
@@ -84,6 +85,7 @@ public class HuggingFaceEndpointConfigurer extends PropertyConfigurerSupport imp
         case "multiLabel": return boolean.class;
         case "oauthprofile":
         case "oauthProfile": return java.lang.String.class;
+        case "pooling": return boolean.class;
         case "predicttimeout":
         case "predictTimeout": return int.class;
         case "predictorbean":
@@ -125,6 +127,7 @@ public class HuggingFaceEndpointConfigurer extends PropertyConfigurerSupport imp
         case "multiLabel": return target.getConfiguration().isMultiLabel();
         case "oauthprofile":
         case "oauthProfile": return target.getConfiguration().getOauthProfile();
+        case "pooling": return target.getConfiguration().isPooling();
         case "predicttimeout":
         case "predictTimeout": return target.getConfiguration().getPredictTimeout();
         case "predictorbean":
diff --git a/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointUriFactory.java b/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointUriFactory.java
index bb17f2ca65bd..2734be93d9a0 100644
--- a/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointUriFactory.java
+++ b/components/camel-ai/camel-huggingface/src/generated/java/org/apache/camel/component/huggingface/HuggingFaceEndpointUriFactory.java
@@ -23,7 +23,7 @@ public class HuggingFaceEndpointUriFactory extends org.apache.camel.support.comp
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Map<String, String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(19);
+        Set<String> props = new HashSet<>(20);
         props.add("authToken");
         props.add("autoSelect");
         props.add("device");
@@ -35,6 +35,7 @@ public class HuggingFaceEndpointUriFactory extends org.apache.camel.support.comp
         props.add("modelLoadingTimeout");
         props.add("multiLabel");
         props.add("oauthProfile");
+        props.add("pooling");
         props.add("predictTimeout");
         props.add("predictorBean");
         props.add("revision");
diff --git a/components/camel-ai/camel-huggingface/src/generated/resources/META-INF/org/apache/camel/component/huggingface/huggingface.json b/components/camel-ai/camel-huggingface/src/generated/resources/META-INF/org/apache/camel/component/huggingface/huggingface.json
index 24de317f56e4..0be8cb797bbd 100644
--- a/components/camel-ai/camel-huggingface/src/generated/resources/META-INF/org/apache/camel/component/huggingface/huggingface.json
+++ b/components/camel-ai/camel-huggingface/src/generated/resources/META-INF/org/apache/camel/component/huggingface/huggingface.json
@@ -35,17 +35,18 @@
     "modelId": { "index": 8, "kind": "property", "displayName": "Model Id", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Hugging Face model ID (e.g., distilbert-base-uncased-finetuned-sst-2-english)" },
     "modelLoadingTimeout": { "index": 9, "kind": "property", "displayName": "Model Loading Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Model loading timeout in seconds, if negative then use default (240 seconds)" },
     "multiLabel": { "index": 10, "kind": "property", "displayName": "Multi Label", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Allow multi-label classifications for zero-shot tasks" },
-    "predictorBean": { "index": 11, "kind": "property", "displayName": "Predictor Bean", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Bean name of a custom TaskPredictor implementation (for tasks not covered b [...]
-    "predictTimeout": { "index": 12, "kind": "property", "displayName": "Predict Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Predict timeout in seconds, if negative then use default (120 seconds)" },
-    "revision": { "index": 13, "kind": "property", "displayName": "Revision", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Model revision or branch (default: main)" },
-    "systemPrompt": { "index": 14, "kind": "property", "displayName": "System Prompt", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Initial system prompt for chat tasks (e.g., 'You are a helpful assistant name [...]
-    "temperature": { "index": 15, "kind": "property", "displayName": "Temperature", "group": "producer", "label": "", "required": false, "type": "number", "javaType": "float", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Temperature for sampling (0.0-1.0)" },
-    "topK": { "index": 16, "kind": "property", "displayName": "Top K", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Top-k parameter for classification tasks" },
-    "userRole": { "index": 17, "kind": "property", "displayName": "User Role", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "user", "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Role for user messages in chat history (e.g., 'user' or 'human')" },
-    "autowiredEnabled": { "index": 18, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
-    "healthCheckConsumerEnabled": { "index": 19, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
-    "healthCheckProducerEnabled": { "index": 20, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
-    "oauthProfile": { "index": 21, "kind": "property", "displayName": "Oauth Profile", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "OAuth profile name for obtaining an access token via the OAuth 2.0 Cl [...]
+    "pooling": { "index": 11, "kind": "property", "displayName": "Pooling", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Whether to pool the predictor (keep the Python process alive) or create a new one for each request" },
+    "predictorBean": { "index": 12, "kind": "property", "displayName": "Predictor Bean", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Bean name of a custom TaskPredictor implementation (for tasks not covered b [...]
+    "predictTimeout": { "index": 13, "kind": "property", "displayName": "Predict Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Predict timeout in seconds, if negative then use default (120 seconds)" },
+    "revision": { "index": 14, "kind": "property", "displayName": "Revision", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Model revision or branch (default: main)" },
+    "systemPrompt": { "index": 15, "kind": "property", "displayName": "System Prompt", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Initial system prompt for chat tasks (e.g., 'You are a helpful assistant name [...]
+    "temperature": { "index": 16, "kind": "property", "displayName": "Temperature", "group": "producer", "label": "", "required": false, "type": "number", "javaType": "float", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Temperature for sampling (0.0-1.0)" },
+    "topK": { "index": 17, "kind": "property", "displayName": "Top K", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Top-k parameter for classification tasks" },
+    "userRole": { "index": 18, "kind": "property", "displayName": "User Role", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "user", "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Role for user messages in chat history (e.g., 'user' or 'human')" },
+    "autowiredEnabled": { "index": 19, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
+    "healthCheckConsumerEnabled": { "index": 20, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
+    "healthCheckProducerEnabled": { "index": 21, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
+    "oauthProfile": { "index": 22, "kind": "property", "displayName": "Oauth Profile", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "OAuth profile name for obtaining an access token via the OAuth 2.0 Cl [...]
   },
   "headers": {
     "CamelHuggingFaceOutput": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The output from the model", "constantName": "org.apache.camel.component.huggingface.HuggingFaceConstants#OUTPUT" }
@@ -61,14 +62,15 @@
     "modelId": { "index": 7, "kind": "parameter", "displayName": "Model Id", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Hugging Face model ID (e.g., distilbert-base-uncased-finetuned-sst-2-english)" },
     "modelLoadingTimeout": { "index": 8, "kind": "parameter", "displayName": "Model Loading Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Model loading timeout in seconds, if negative then use default (240 seconds)" },
     "multiLabel": { "index": 9, "kind": "parameter", "displayName": "Multi Label", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Allow multi-label classifications for zero-shot tasks" },
-    "predictorBean": { "index": 10, "kind": "parameter", "displayName": "Predictor Bean", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Bean name of a custom TaskPredictor implementation (for tasks not covered  [...]
-    "predictTimeout": { "index": 11, "kind": "parameter", "displayName": "Predict Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Predict timeout in seconds, if negative then use default (120 seconds)" },
-    "revision": { "index": 12, "kind": "parameter", "displayName": "Revision", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Model revision or branch (default: main)" },
-    "systemPrompt": { "index": 13, "kind": "parameter", "displayName": "System Prompt", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Initial system prompt for chat tasks (e.g., 'You are a helpful assistant nam [...]
-    "temperature": { "index": 14, "kind": "parameter", "displayName": "Temperature", "group": "producer", "label": "", "required": false, "type": "number", "javaType": "float", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Temperature for sampling (0.0-1.0)" },
-    "topK": { "index": 15, "kind": "parameter", "displayName": "Top K", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Top-k parameter for classification tasks" },
-    "userRole": { "index": 16, "kind": "parameter", "displayName": "User Role", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "user", "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Role for user messages in chat history (e.g., 'user' or 'human')" },
-    "lazyStartProducer": { "index": 17, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...]
-    "oauthProfile": { "index": 18, "kind": "parameter", "displayName": "Oauth Profile", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "OAuth profile name for obtaining an access token via the OAuth 2.0 C [...]
+    "pooling": { "index": 10, "kind": "parameter", "displayName": "Pooling", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Whether to pool the predictor (keep the Python process alive) or create a new one for each request" },
+    "predictorBean": { "index": 11, "kind": "parameter", "displayName": "Predictor Bean", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Bean name of a custom TaskPredictor implementation (for tasks not covered  [...]
+    "predictTimeout": { "index": 12, "kind": "parameter", "displayName": "Predict Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Predict timeout in seconds, if negative then use default (120 seconds)" },
+    "revision": { "index": 13, "kind": "parameter", "displayName": "Revision", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Model revision or branch (default: main)" },
+    "systemPrompt": { "index": 14, "kind": "parameter", "displayName": "System Prompt", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Initial system prompt for chat tasks (e.g., 'You are a helpful assistant nam [...]
+    "temperature": { "index": 15, "kind": "parameter", "displayName": "Temperature", "group": "producer", "label": "", "required": false, "type": "number", "javaType": "float", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Temperature for sampling (0.0-1.0)" },
+    "topK": { "index": 16, "kind": "parameter", "displayName": "Top K", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 5, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Top-k parameter for classification tasks" },
+    "userRole": { "index": 17, "kind": "parameter", "displayName": "User Role", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "user", "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "Role for user messages in chat history (e.g., 'user' or 'human')" },
+    "lazyStartProducer": { "index": 18, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...]
+    "oauthProfile": { "index": 19, "kind": "parameter", "displayName": "Oauth Profile", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.huggingface.HuggingFaceConfiguration", "configurationField": "configuration", "description": "OAuth profile name for obtaining an access token via the OAuth 2.0 C [...]
   }
 }
diff --git a/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/HuggingFaceConfiguration.java b/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/HuggingFaceConfiguration.java
index 7b7e827548b9..c3709d5b009a 100644
--- a/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/HuggingFaceConfiguration.java
+++ b/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/HuggingFaceConfiguration.java
@@ -99,6 +99,18 @@ public class HuggingFaceConfiguration implements Cloneable {
     @UriParam(defaultValue = "5", description = "Top-k parameter for classification tasks")
     private int topK = 5;
 
+    @UriParam(defaultValue = "true",
+              description = "Whether to pool the predictor (keep the Python process alive) or create a new one for each request")
+    private boolean pooling = true;
+
+    public boolean isPooling() {
+        return pooling;
+    }
+
+    public void setPooling(boolean pooling) {
+        this.pooling = pooling;
+    }
+
     public int getTopK() {
         return topK;
     }
diff --git a/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/tasks/AbstractTaskPredictor.java b/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/tasks/AbstractTaskPredictor.java
index f67640d0755a..bc08beff3265 100644
--- a/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/tasks/AbstractTaskPredictor.java
+++ b/components/camel-ai/camel-huggingface/src/main/java/org/apache/camel/component/huggingface/tasks/AbstractTaskPredictor.java
@@ -44,6 +44,7 @@ public abstract class AbstractTaskPredictor implements TaskPredictor {
     protected HuggingFaceEndpoint endpoint;
     protected HuggingFaceConfiguration config;
     protected ZooModel<Input, Output> model;
+    protected Predictor<Input, Output> predictor;
     protected Path tmpDir;
 
     protected AbstractTaskPredictor(HuggingFaceEndpoint endpoint) {
@@ -118,9 +119,19 @@ public abstract class AbstractTaskPredictor implements TaskPredictor {
     @Override
     public void predict(Exchange exchange) throws Exception {
         Input input = prepareInput(exchange);
-        try (Predictor<Input, Output> djlPredictor = model.newPredictor()) {
-            Output output = djlPredictor.predict(input);
-            processOutput(exchange, output);
+        if (config.isPooling()) {
+            synchronized (this) {
+                if (predictor == null) {
+                    predictor = model.newPredictor();
+                }
+                Output output = predictor.predict(input);
+                processOutput(exchange, output);
+            }
+        } else {
+            try (Predictor<Input, Output> djlPredictor = model.newPredictor()) {
+                Output output = djlPredictor.predict(input);
+                processOutput(exchange, output);
+            }
         }
     }
 
@@ -130,6 +141,9 @@ public abstract class AbstractTaskPredictor implements TaskPredictor {
 
     @Override
     public void close() throws Exception {
+        if (predictor != null) {
+            predictor.close();
+        }
         if (model != null) {
             model.close();
         }