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();
}