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 <[email protected]>
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();
         }

Reply via email to