This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 4038a364254d CAMEL-23968: Expose OpenAI SDK client timeout, retries
and headers
4038a364254d is described below
commit 4038a364254d1b4a67c3ad41065a1680dd6d43ca
Author: Omar Atie <[email protected]>
AuthorDate: Sun Jul 19 10:51:42 2026 -0700
CAMEL-23968: Expose OpenAI SDK client timeout, retries and headers
Add requestTimeout, maxRetries, and additionalHeader options to camel-openai
component. These options are wired through configureHttpClient() during
client
creation. Includes configuration and mock integration tests.
Closes #24900
Co-Authored-By: Cursor <[email protected]>
---
.../apache/camel/catalog/components/openai.json | 95 ++++-----
.../component/openai/OpenAIEndpointConfigurer.java | 20 ++
.../component/openai/OpenAIEndpointUriFactory.java | 11 +-
.../org/apache/camel/component/openai/openai.json | 95 ++++-----
.../component/openai/OpenAIConfiguration.java | 41 ++++
.../camel/component/openai/OpenAIEndpoint.java | 16 ++
.../openai/OpenAIClientConfigurationTest.java | 215 +++++++++++++++++++++
.../endpoint/dsl/OpenAIEndpointBuilderFactory.java | 109 +++++++++++
8 files changed, 507 insertions(+), 95 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/openai.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/openai.json
index 6c38a7b582f4..3784ba5f8579 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/openai.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/openai.json
@@ -78,51 +78,54 @@
"properties": {
"operation": { "index": 0, "kind": "path", "displayName": "Operation",
"group": "producer", "label": "", "required": true, "type": "enum", "javaType":
"org.apache.camel.component.openai.OpenAIOperations", "enum": [
"chat-completion", "embeddings", "tool-execution", "audio-transcription" ],
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The operation to perform: 'chat-completion',
'embeddings', 'tool-execution', or 'audio-transcription'" },
"additionalBodyProperty": { "index": 1, "kind": "parameter",
"displayName": "Additional Body Property", "group": "producer", "label": "",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"additionalBodyProperty.", "multiValue": true, "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configur [...]
- "additionalResponseHeader": { "index": 2, "kind": "parameter",
"displayName": "Additional Response Header", "group": "producer", "label": "",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"additionalResponseHeader.", "multiValue": true, "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "co [...]
- "apiKey": { "index": 3, "kind": "parameter", "displayName": "Api Key",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "OpenAI API key. Can also be set via
OPENAI_API_KEY environment variable." },
- "audioLanguage": { "index": 4, "kind": "parameter", "displayName": "Audio
Language", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The language of the
input audio in ISO-639-1 format (e.g., 'en'). Improves accuracy a [...]
- "audioModel": { "index": 5, "kind": "parameter", "displayName": "Audio
Model", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for audio transcription
(e.g., whisper-1, gpt-4o-transcribe)" },
- "audioPrompt": { "index": 6, "kind": "parameter", "displayName": "Audio
Prompt", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Optional text to guide the model's style or
continue a previous audio segment" },
- "audioResponseFormat": { "index": 7, "kind": "parameter", "displayName":
"Audio Response Format", "group": "producer", "label": "", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "json", "text",
"srt", "verbose_json", "vtt" ], "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "json",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "descrip [...]
- "audioTemperature": { "index": 8, "kind": "parameter", "displayName":
"Audio Temperature", "group": "producer", "label": "", "required": false,
"type": "number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Sampling temperature for
transcription (0.0 to 1.0)" },
- "audioTimestampGranularities": { "index": 9, "kind": "parameter",
"displayName": "Audio Timestamp Granularities", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Comma-separated timestamp granularities:
'word', 'segmen [...]
- "autoToolExecution": { "index": 10, "kind": "parameter", "displayName":
"Auto Tool Execution", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
true, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "When true and MCP servers are configured,
automatically execu [...]
- "baseUrl": { "index": 11, "kind": "parameter", "displayName": "Base Url",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue":
"https:\/\/api.openai.com\/v1", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Base URL for OpenAI API. Defaults to OpenAI's
of [...]
- "conversationHistoryProperty": { "index": 12, "kind": "parameter",
"displayName": "Conversation History Property", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "CamelOpenAIConversationHistory", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Excha [...]
- "conversationMemory": { "index": 13, "kind": "parameter", "displayName":
"Conversation Memory", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Enable conversation memory per Exchange" },
- "developerMessage": { "index": 14, "kind": "parameter", "displayName":
"Developer Message", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Developer message to
prepend before user messages" },
- "dimensions": { "index": 15, "kind": "parameter", "displayName":
"Dimensions", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Number of dimensions for
the embedding output. Only supported by text-embedding-3 models. [...]
- "embeddingModel": { "index": 16, "kind": "parameter", "displayName":
"Embedding Model", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The model to use for
embeddings" },
- "encodingFormat": { "index": 17, "kind": "parameter", "displayName":
"Encoding Format", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "java.lang.String", "enum": [ "float", "base64" ],
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "base64", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The format for embedding ou [...]
- "jsonSchema": { "index": 18, "kind": "parameter", "displayName": "Json
Schema", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "supportFileReference": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "JSON schema for
structured output validation" },
- "maxTokens": { "index": 19, "kind": "parameter", "displayName": "Max
Tokens", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tokens
to generate" },
- "maxToolIterations": { "index": 20, "kind": "parameter", "displayName":
"Max Tool Iterations", "group": "producer", "label": "", "required": false,
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "defaultValue": 50,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tool
call loop iterations to prevent infinite loops" },
- "mcpProtocolVersions": { "index": 21, "kind": "parameter", "displayName":
"Mcp Protocol Versions", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Comma-separated list of
MCP protocol versions to advertise when connect [...]
- "mcpReconnect": { "index": 22, "kind": "parameter", "displayName": "Mcp
Reconnect", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Automatically reconnect
to MCP servers when a tool call fails due to a t [...]
- "mcpServer": { "index": 23, "kind": "parameter", "displayName": "Mcp
Server", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"mcpServer.", "multiValue": true, "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "MCP (Model Cont [...]
- "mcpTimeout": { "index": 24, "kind": "parameter", "displayName": "Mcp
Timeout", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 20, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Timeout in seconds for MCP tool call requests.
Applies to all MCP operations inclu [...]
- "model": { "index": 25, "kind": "parameter", "displayName": "Model",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for chat completion" },
- "outputClass": { "index": 26, "kind": "parameter", "displayName": "Output
Class", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Fully qualified class name for structured
output using response format" },
- "storeFullResponse": { "index": 27, "kind": "parameter", "displayName":
"Store Full Response", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Store the full response in the exchange
property 'CamelOpenA [...]
- "streaming": { "index": 28, "kind": "parameter", "displayName":
"Streaming", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Enable streaming
responses" },
- "stripThinking": { "index": 29, "kind": "parameter", "displayName": "Strip
Thinking", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Strip ... blocks from
model responses (used by reasoning models like [...]
- "systemMessage": { "index": 30, "kind": "parameter", "displayName":
"System Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "System message to
prepend. When set and conversationMemory is enabled, the conversat [...]
- "temperature": { "index": 31, "kind": "parameter", "displayName":
"Temperature", "group": "producer", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Temperature for response
generation (0.0 to 2.0)" },
- "topP": { "index": 32, "kind": "parameter", "displayName": "Top P",
"group": "producer", "label": "", "required": false, "type": "number",
"javaType": "java.lang.Double", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Top P for response generation (0.0 to 1.0)" },
- "userMessage": { "index": 33, "kind": "parameter", "displayName": "User
Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Default user message
text to use when no prompt is provided" },
- "lazyStartProducer": { "index": 34, "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": 35, "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.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "OAuth profile name for
obtaining an access token via the OAuth 2.0 Client Cred [...]
- "sslContextParameters": { "index": 36, "kind": "parameter", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "SSLContextParameters to
use [...]
- "sslEndpointAlgorithm": { "index": 37, "kind": "parameter", "displayName":
"Ssl Endpoint Algorithm", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "security":
"insecure:ssl", "insecureValue": "none", "defaultValue": "https",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", [...]
- "sslKeymanagerAlgorithm": { "index": 38, "kind": "parameter",
"displayName": "Ssl Keymanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "SunX509", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the key [...]
- "sslKeyPassword": { "index": 39, "kind": "parameter", "displayName": "Ssl
Key Password", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password of the private key in the key
store file" },
- "sslKeystoreLocation": { "index": 40, "kind": "parameter", "displayName":
"Ssl Keystore Location", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The location of the key
store file. This is optional and can be [...]
- "sslKeystorePassword": { "index": 41, "kind": "parameter", "displayName":
"Ssl Keystore Password", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The store password for the key store file" },
- "sslKeystoreType": { "index": 42, "kind": "parameter", "displayName": "Ssl
Keystore Type", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the key store file" },
- "sslProtocol": { "index": 43, "kind": "parameter", "displayName": "Ssl
Protocol", "group": "security", "label": "security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"TLSv1.3", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The SSL protocol used to generate the
SSLContext" },
- "sslTrustmanagerAlgorithm": { "index": 44, "kind": "parameter",
"displayName": "Ssl Trustmanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "PKIX", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the tru [...]
- "sslTruststoreLocation": { "index": 45, "kind": "parameter",
"displayName": "Ssl Truststore Location", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The location of the trust store file, used to
validate the [...]
- "sslTruststorePassword": { "index": 46, "kind": "parameter",
"displayName": "Ssl Truststore Password", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password for the trust store file. [...]
- "sslTruststoreType": { "index": 47, "kind": "parameter", "displayName":
"Ssl Truststore Type", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the trust store file" }
+ "additionalHeader": { "index": 2, "kind": "parameter", "displayName":
"Additional Header", "group": "producer", "label": "", "required": false,
"type": "object", "javaType": "java.util.Map<java.lang.String,
java.lang.Object>", "prefix": "additionalHeader.", "multiValue": true,
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": true,
"security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"config [...]
+ "additionalResponseHeader": { "index": 3, "kind": "parameter",
"displayName": "Additional Response Header", "group": "producer", "label": "",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"additionalResponseHeader.", "multiValue": true, "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "co [...]
+ "apiKey": { "index": 4, "kind": "parameter", "displayName": "Api Key",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "OpenAI API key. Can also be set via
OPENAI_API_KEY environment variable." },
+ "audioLanguage": { "index": 5, "kind": "parameter", "displayName": "Audio
Language", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The language of the
input audio in ISO-639-1 format (e.g., 'en'). Improves accuracy a [...]
+ "audioModel": { "index": 6, "kind": "parameter", "displayName": "Audio
Model", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for audio transcription
(e.g., whisper-1, gpt-4o-transcribe)" },
+ "audioPrompt": { "index": 7, "kind": "parameter", "displayName": "Audio
Prompt", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Optional text to guide the model's style or
continue a previous audio segment" },
+ "audioResponseFormat": { "index": 8, "kind": "parameter", "displayName":
"Audio Response Format", "group": "producer", "label": "", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "json", "text",
"srt", "verbose_json", "vtt" ], "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "json",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "descrip [...]
+ "audioTemperature": { "index": 9, "kind": "parameter", "displayName":
"Audio Temperature", "group": "producer", "label": "", "required": false,
"type": "number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Sampling temperature for
transcription (0.0 to 1.0)" },
+ "audioTimestampGranularities": { "index": 10, "kind": "parameter",
"displayName": "Audio Timestamp Granularities", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Comma-separated timestamp granularities:
'word', 'segme [...]
+ "autoToolExecution": { "index": 11, "kind": "parameter", "displayName":
"Auto Tool Execution", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
true, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "When true and MCP servers are configured,
automatically execu [...]
+ "baseUrl": { "index": 12, "kind": "parameter", "displayName": "Base Url",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue":
"https:\/\/api.openai.com\/v1", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Base URL for OpenAI API. Defaults to OpenAI's
of [...]
+ "conversationHistoryProperty": { "index": 13, "kind": "parameter",
"displayName": "Conversation History Property", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "CamelOpenAIConversationHistory", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Excha [...]
+ "conversationMemory": { "index": 14, "kind": "parameter", "displayName":
"Conversation Memory", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Enable conversation memory per Exchange" },
+ "developerMessage": { "index": 15, "kind": "parameter", "displayName":
"Developer Message", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Developer message to
prepend before user messages" },
+ "dimensions": { "index": 16, "kind": "parameter", "displayName":
"Dimensions", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Number of dimensions for
the embedding output. Only supported by text-embedding-3 models. [...]
+ "embeddingModel": { "index": 17, "kind": "parameter", "displayName":
"Embedding Model", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The model to use for
embeddings" },
+ "encodingFormat": { "index": 18, "kind": "parameter", "displayName":
"Encoding Format", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "java.lang.String", "enum": [ "float", "base64" ],
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "base64", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The format for embedding ou [...]
+ "jsonSchema": { "index": 19, "kind": "parameter", "displayName": "Json
Schema", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "supportFileReference": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "JSON schema for
structured output validation" },
+ "maxRetries": { "index": 20, "kind": "parameter", "displayName": "Max
Retries", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 2, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Maximum number of times the OpenAI SDK client
retries failed requests. The SDK retr [...]
+ "maxTokens": { "index": 21, "kind": "parameter", "displayName": "Max
Tokens", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tokens
to generate" },
+ "maxToolIterations": { "index": 22, "kind": "parameter", "displayName":
"Max Tool Iterations", "group": "producer", "label": "", "required": false,
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "defaultValue": 50,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tool
call loop iterations to prevent infinite loops" },
+ "mcpProtocolVersions": { "index": 23, "kind": "parameter", "displayName":
"Mcp Protocol Versions", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Comma-separated list of
MCP protocol versions to advertise when connect [...]
+ "mcpReconnect": { "index": 24, "kind": "parameter", "displayName": "Mcp
Reconnect", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Automatically reconnect
to MCP servers when a tool call fails due to a t [...]
+ "mcpServer": { "index": 25, "kind": "parameter", "displayName": "Mcp
Server", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"mcpServer.", "multiValue": true, "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "MCP (Model Cont [...]
+ "mcpTimeout": { "index": 26, "kind": "parameter", "displayName": "Mcp
Timeout", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 20, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Timeout in seconds for MCP tool call requests.
Applies to all MCP operations inclu [...]
+ "model": { "index": 27, "kind": "parameter", "displayName": "Model",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for chat completion" },
+ "outputClass": { "index": 28, "kind": "parameter", "displayName": "Output
Class", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Fully qualified class name for structured
output using response format" },
+ "requestTimeout": { "index": 29, "kind": "parameter", "displayName":
"Request Timeout", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "long", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 0, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "HTTP request timeout in milliseconds for the
OpenAI SDK client. When 0 or [...]
+ "storeFullResponse": { "index": 30, "kind": "parameter", "displayName":
"Store Full Response", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Store the full response in the exchange
property 'CamelOpenA [...]
+ "streaming": { "index": 31, "kind": "parameter", "displayName":
"Streaming", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Enable streaming
responses" },
+ "stripThinking": { "index": 32, "kind": "parameter", "displayName": "Strip
Thinking", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Strip ... blocks from
model responses (used by reasoning models like [...]
+ "systemMessage": { "index": 33, "kind": "parameter", "displayName":
"System Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "System message to
prepend. When set and conversationMemory is enabled, the conversat [...]
+ "temperature": { "index": 34, "kind": "parameter", "displayName":
"Temperature", "group": "producer", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Temperature for response
generation (0.0 to 2.0)" },
+ "topP": { "index": 35, "kind": "parameter", "displayName": "Top P",
"group": "producer", "label": "", "required": false, "type": "number",
"javaType": "java.lang.Double", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Top P for response generation (0.0 to 1.0)" },
+ "userMessage": { "index": 36, "kind": "parameter", "displayName": "User
Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Default user message
text to use when no prompt is provided" },
+ "lazyStartProducer": { "index": 37, "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": 38, "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.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "OAuth profile name for
obtaining an access token via the OAuth 2.0 Client Cred [...]
+ "sslContextParameters": { "index": 39, "kind": "parameter", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "SSLContextParameters to
use [...]
+ "sslEndpointAlgorithm": { "index": 40, "kind": "parameter", "displayName":
"Ssl Endpoint Algorithm", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "security":
"insecure:ssl", "insecureValue": "none", "defaultValue": "https",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", [...]
+ "sslKeymanagerAlgorithm": { "index": 41, "kind": "parameter",
"displayName": "Ssl Keymanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "SunX509", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the key [...]
+ "sslKeyPassword": { "index": 42, "kind": "parameter", "displayName": "Ssl
Key Password", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password of the private key in the key
store file" },
+ "sslKeystoreLocation": { "index": 43, "kind": "parameter", "displayName":
"Ssl Keystore Location", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The location of the key
store file. This is optional and can be [...]
+ "sslKeystorePassword": { "index": 44, "kind": "parameter", "displayName":
"Ssl Keystore Password", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The store password for the key store file" },
+ "sslKeystoreType": { "index": 45, "kind": "parameter", "displayName": "Ssl
Keystore Type", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the key store file" },
+ "sslProtocol": { "index": 46, "kind": "parameter", "displayName": "Ssl
Protocol", "group": "security", "label": "security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"TLSv1.3", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The SSL protocol used to generate the
SSLContext" },
+ "sslTrustmanagerAlgorithm": { "index": 47, "kind": "parameter",
"displayName": "Ssl Trustmanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "PKIX", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the tru [...]
+ "sslTruststoreLocation": { "index": 48, "kind": "parameter",
"displayName": "Ssl Truststore Location", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The location of the trust store file, used to
validate the [...]
+ "sslTruststorePassword": { "index": 49, "kind": "parameter",
"displayName": "Ssl Truststore Password", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password for the trust store file. [...]
+ "sslTruststoreType": { "index": 50, "kind": "parameter", "displayName":
"Ssl Truststore Type", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the trust store file" }
}
}
diff --git
a/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointConfigurer.java
b/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointConfigurer.java
index d1a7248c90d9..4b16f943cc3a 100644
---
a/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointConfigurer.java
+++
b/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointConfigurer.java
@@ -25,6 +25,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
switch (ignoreCase ? name.toLowerCase() : name) {
case "additionalbodyproperty":
case "additionalBodyProperty":
target.getConfiguration().setAdditionalBodyProperty(property(camelContext,
java.util.Map.class, value)); return true;
+ case "additionalheader":
+ case "additionalHeader":
target.getConfiguration().setAdditionalHeader(property(camelContext,
java.util.Map.class, value)); return true;
case "additionalresponseheader":
case "additionalResponseHeader":
target.getConfiguration().setAdditionalResponseHeader(property(camelContext,
java.util.Map.class, value)); return true;
case "apikey":
@@ -60,6 +62,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
case "jsonSchema":
target.getConfiguration().setJsonSchema(property(camelContext,
java.lang.String.class, value)); return true;
case "lazystartproducer":
case "lazyStartProducer":
target.setLazyStartProducer(property(camelContext, boolean.class, value));
return true;
+ case "maxretries":
+ case "maxRetries":
target.getConfiguration().setMaxRetries(property(camelContext, int.class,
value)); return true;
case "maxtokens":
case "maxTokens":
target.getConfiguration().setMaxTokens(property(camelContext,
java.lang.Integer.class, value)); return true;
case "maxtooliterations":
@@ -77,6 +81,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
case "oauthProfile":
target.getConfiguration().setOauthProfile(property(camelContext,
java.lang.String.class, value)); return true;
case "outputclass":
case "outputClass":
target.getConfiguration().setOutputClass(property(camelContext,
java.lang.String.class, value)); return true;
+ case "requesttimeout":
+ case "requestTimeout":
target.getConfiguration().setRequestTimeout(property(camelContext, long.class,
value)); return true;
case "sslcontextparameters":
case "sslContextParameters":
target.getConfiguration().setSslContextParameters(property(camelContext,
org.apache.camel.support.jsse.SSLContextParameters.class, value)); return true;
case "sslendpointalgorithm":
@@ -122,6 +128,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
switch (ignoreCase ? name.toLowerCase() : name) {
case "additionalbodyproperty":
case "additionalBodyProperty": return java.util.Map.class;
+ case "additionalheader":
+ case "additionalHeader": return java.util.Map.class;
case "additionalresponseheader":
case "additionalResponseHeader": return java.util.Map.class;
case "apikey":
@@ -157,6 +165,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
case "jsonSchema": return java.lang.String.class;
case "lazystartproducer":
case "lazyStartProducer": return boolean.class;
+ case "maxretries":
+ case "maxRetries": return int.class;
case "maxtokens":
case "maxTokens": return java.lang.Integer.class;
case "maxtooliterations":
@@ -174,6 +184,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
case "oauthProfile": return java.lang.String.class;
case "outputclass":
case "outputClass": return java.lang.String.class;
+ case "requesttimeout":
+ case "requestTimeout": return long.class;
case "sslcontextparameters":
case "sslContextParameters": return
org.apache.camel.support.jsse.SSLContextParameters.class;
case "sslendpointalgorithm":
@@ -220,6 +232,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
switch (ignoreCase ? name.toLowerCase() : name) {
case "additionalbodyproperty":
case "additionalBodyProperty": return
target.getConfiguration().getAdditionalBodyProperty();
+ case "additionalheader":
+ case "additionalHeader": return
target.getConfiguration().getAdditionalHeader();
case "additionalresponseheader":
case "additionalResponseHeader": return
target.getConfiguration().getAdditionalResponseHeader();
case "apikey":
@@ -255,6 +269,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
case "jsonSchema": return target.getConfiguration().getJsonSchema();
case "lazystartproducer":
case "lazyStartProducer": return target.isLazyStartProducer();
+ case "maxretries":
+ case "maxRetries": return target.getConfiguration().getMaxRetries();
case "maxtokens":
case "maxTokens": return target.getConfiguration().getMaxTokens();
case "maxtooliterations":
@@ -272,6 +288,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
case "oauthProfile": return
target.getConfiguration().getOauthProfile();
case "outputclass":
case "outputClass": return target.getConfiguration().getOutputClass();
+ case "requesttimeout":
+ case "requestTimeout": return
target.getConfiguration().getRequestTimeout();
case "sslcontextparameters":
case "sslContextParameters": return
target.getConfiguration().getSslContextParameters();
case "sslendpointalgorithm":
@@ -317,6 +335,8 @@ public class OpenAIEndpointConfigurer extends
PropertyConfigurerSupport implemen
switch (ignoreCase ? name.toLowerCase() : name) {
case "additionalbodyproperty":
case "additionalBodyProperty": return java.lang.Object.class;
+ case "additionalheader":
+ case "additionalHeader": return java.lang.Object.class;
case "additionalresponseheader":
case "additionalResponseHeader": return java.lang.Object.class;
case "mcpserver":
diff --git
a/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointUriFactory.java
b/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointUriFactory.java
index e606b91548d8..98171fe606ea 100644
---
a/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointUriFactory.java
+++
b/components/camel-ai/camel-openai/src/generated/java/org/apache/camel/component/openai/OpenAIEndpointUriFactory.java
@@ -24,8 +24,9 @@ public class OpenAIEndpointUriFactory extends
org.apache.camel.support.component
private static final Set<String> ENDPOINT_IDENTITY_PROPERTY_NAMES;
private static final Map<String, String> MULTI_VALUE_PREFIXES;
static {
- Set<String> props = new HashSet<>(48);
+ Set<String> props = new HashSet<>(51);
props.add("additionalBodyProperty");
+ props.add("additionalHeader");
props.add("additionalResponseHeader");
props.add("apiKey");
props.add("audioLanguage");
@@ -44,6 +45,7 @@ public class OpenAIEndpointUriFactory extends
org.apache.camel.support.component
props.add("encodingFormat");
props.add("jsonSchema");
props.add("lazyStartProducer");
+ props.add("maxRetries");
props.add("maxTokens");
props.add("maxToolIterations");
props.add("mcpProtocolVersions");
@@ -54,6 +56,7 @@ public class OpenAIEndpointUriFactory extends
org.apache.camel.support.component
props.add("oauthProfile");
props.add("operation");
props.add("outputClass");
+ props.add("requestTimeout");
props.add("sslContextParameters");
props.add("sslEndpointAlgorithm");
props.add("sslKeyPassword");
@@ -74,15 +77,17 @@ public class OpenAIEndpointUriFactory extends
org.apache.camel.support.component
props.add("topP");
props.add("userMessage");
PROPERTY_NAMES = Collections.unmodifiableSet(props);
- Set<String> secretProps = new HashSet<>(4);
+ Set<String> secretProps = new HashSet<>(5);
+ secretProps.add("additionalHeader");
secretProps.add("apiKey");
secretProps.add("sslKeyPassword");
secretProps.add("sslKeystorePassword");
secretProps.add("sslTruststorePassword");
SECRET_PROPERTY_NAMES = Collections.unmodifiableSet(secretProps);
ENDPOINT_IDENTITY_PROPERTY_NAMES = Collections.emptySet();
- Map<String, String> prefixes = new HashMap<>(3);
+ Map<String, String> prefixes = new HashMap<>(4);
prefixes.put("additionalBodyProperty", "additionalBodyProperty.");
+ prefixes.put("additionalHeader", "additionalHeader.");
prefixes.put("additionalResponseHeader", "additionalResponseHeader.");
prefixes.put("mcpServer", "mcpServer.");
MULTI_VALUE_PREFIXES = Collections.unmodifiableMap(prefixes);
diff --git
a/components/camel-ai/camel-openai/src/generated/resources/META-INF/org/apache/camel/component/openai/openai.json
b/components/camel-ai/camel-openai/src/generated/resources/META-INF/org/apache/camel/component/openai/openai.json
index 6c38a7b582f4..3784ba5f8579 100644
---
a/components/camel-ai/camel-openai/src/generated/resources/META-INF/org/apache/camel/component/openai/openai.json
+++
b/components/camel-ai/camel-openai/src/generated/resources/META-INF/org/apache/camel/component/openai/openai.json
@@ -78,51 +78,54 @@
"properties": {
"operation": { "index": 0, "kind": "path", "displayName": "Operation",
"group": "producer", "label": "", "required": true, "type": "enum", "javaType":
"org.apache.camel.component.openai.OpenAIOperations", "enum": [
"chat-completion", "embeddings", "tool-execution", "audio-transcription" ],
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The operation to perform: 'chat-completion',
'embeddings', 'tool-execution', or 'audio-transcription'" },
"additionalBodyProperty": { "index": 1, "kind": "parameter",
"displayName": "Additional Body Property", "group": "producer", "label": "",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"additionalBodyProperty.", "multiValue": true, "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configur [...]
- "additionalResponseHeader": { "index": 2, "kind": "parameter",
"displayName": "Additional Response Header", "group": "producer", "label": "",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"additionalResponseHeader.", "multiValue": true, "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "co [...]
- "apiKey": { "index": 3, "kind": "parameter", "displayName": "Api Key",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "OpenAI API key. Can also be set via
OPENAI_API_KEY environment variable." },
- "audioLanguage": { "index": 4, "kind": "parameter", "displayName": "Audio
Language", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The language of the
input audio in ISO-639-1 format (e.g., 'en'). Improves accuracy a [...]
- "audioModel": { "index": 5, "kind": "parameter", "displayName": "Audio
Model", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for audio transcription
(e.g., whisper-1, gpt-4o-transcribe)" },
- "audioPrompt": { "index": 6, "kind": "parameter", "displayName": "Audio
Prompt", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Optional text to guide the model's style or
continue a previous audio segment" },
- "audioResponseFormat": { "index": 7, "kind": "parameter", "displayName":
"Audio Response Format", "group": "producer", "label": "", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "json", "text",
"srt", "verbose_json", "vtt" ], "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "json",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "descrip [...]
- "audioTemperature": { "index": 8, "kind": "parameter", "displayName":
"Audio Temperature", "group": "producer", "label": "", "required": false,
"type": "number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Sampling temperature for
transcription (0.0 to 1.0)" },
- "audioTimestampGranularities": { "index": 9, "kind": "parameter",
"displayName": "Audio Timestamp Granularities", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Comma-separated timestamp granularities:
'word', 'segmen [...]
- "autoToolExecution": { "index": 10, "kind": "parameter", "displayName":
"Auto Tool Execution", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
true, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "When true and MCP servers are configured,
automatically execu [...]
- "baseUrl": { "index": 11, "kind": "parameter", "displayName": "Base Url",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue":
"https:\/\/api.openai.com\/v1", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Base URL for OpenAI API. Defaults to OpenAI's
of [...]
- "conversationHistoryProperty": { "index": 12, "kind": "parameter",
"displayName": "Conversation History Property", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "CamelOpenAIConversationHistory", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Excha [...]
- "conversationMemory": { "index": 13, "kind": "parameter", "displayName":
"Conversation Memory", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Enable conversation memory per Exchange" },
- "developerMessage": { "index": 14, "kind": "parameter", "displayName":
"Developer Message", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Developer message to
prepend before user messages" },
- "dimensions": { "index": 15, "kind": "parameter", "displayName":
"Dimensions", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Number of dimensions for
the embedding output. Only supported by text-embedding-3 models. [...]
- "embeddingModel": { "index": 16, "kind": "parameter", "displayName":
"Embedding Model", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The model to use for
embeddings" },
- "encodingFormat": { "index": 17, "kind": "parameter", "displayName":
"Encoding Format", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "java.lang.String", "enum": [ "float", "base64" ],
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "base64", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The format for embedding ou [...]
- "jsonSchema": { "index": 18, "kind": "parameter", "displayName": "Json
Schema", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "supportFileReference": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "JSON schema for
structured output validation" },
- "maxTokens": { "index": 19, "kind": "parameter", "displayName": "Max
Tokens", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tokens
to generate" },
- "maxToolIterations": { "index": 20, "kind": "parameter", "displayName":
"Max Tool Iterations", "group": "producer", "label": "", "required": false,
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "defaultValue": 50,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tool
call loop iterations to prevent infinite loops" },
- "mcpProtocolVersions": { "index": 21, "kind": "parameter", "displayName":
"Mcp Protocol Versions", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Comma-separated list of
MCP protocol versions to advertise when connect [...]
- "mcpReconnect": { "index": 22, "kind": "parameter", "displayName": "Mcp
Reconnect", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Automatically reconnect
to MCP servers when a tool call fails due to a t [...]
- "mcpServer": { "index": 23, "kind": "parameter", "displayName": "Mcp
Server", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"mcpServer.", "multiValue": true, "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "MCP (Model Cont [...]
- "mcpTimeout": { "index": 24, "kind": "parameter", "displayName": "Mcp
Timeout", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 20, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Timeout in seconds for MCP tool call requests.
Applies to all MCP operations inclu [...]
- "model": { "index": 25, "kind": "parameter", "displayName": "Model",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for chat completion" },
- "outputClass": { "index": 26, "kind": "parameter", "displayName": "Output
Class", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Fully qualified class name for structured
output using response format" },
- "storeFullResponse": { "index": 27, "kind": "parameter", "displayName":
"Store Full Response", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Store the full response in the exchange
property 'CamelOpenA [...]
- "streaming": { "index": 28, "kind": "parameter", "displayName":
"Streaming", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Enable streaming
responses" },
- "stripThinking": { "index": 29, "kind": "parameter", "displayName": "Strip
Thinking", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Strip ... blocks from
model responses (used by reasoning models like [...]
- "systemMessage": { "index": 30, "kind": "parameter", "displayName":
"System Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "System message to
prepend. When set and conversationMemory is enabled, the conversat [...]
- "temperature": { "index": 31, "kind": "parameter", "displayName":
"Temperature", "group": "producer", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Temperature for response
generation (0.0 to 2.0)" },
- "topP": { "index": 32, "kind": "parameter", "displayName": "Top P",
"group": "producer", "label": "", "required": false, "type": "number",
"javaType": "java.lang.Double", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Top P for response generation (0.0 to 1.0)" },
- "userMessage": { "index": 33, "kind": "parameter", "displayName": "User
Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Default user message
text to use when no prompt is provided" },
- "lazyStartProducer": { "index": 34, "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": 35, "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.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "OAuth profile name for
obtaining an access token via the OAuth 2.0 Client Cred [...]
- "sslContextParameters": { "index": 36, "kind": "parameter", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "SSLContextParameters to
use [...]
- "sslEndpointAlgorithm": { "index": 37, "kind": "parameter", "displayName":
"Ssl Endpoint Algorithm", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "security":
"insecure:ssl", "insecureValue": "none", "defaultValue": "https",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", [...]
- "sslKeymanagerAlgorithm": { "index": 38, "kind": "parameter",
"displayName": "Ssl Keymanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "SunX509", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the key [...]
- "sslKeyPassword": { "index": 39, "kind": "parameter", "displayName": "Ssl
Key Password", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password of the private key in the key
store file" },
- "sslKeystoreLocation": { "index": 40, "kind": "parameter", "displayName":
"Ssl Keystore Location", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The location of the key
store file. This is optional and can be [...]
- "sslKeystorePassword": { "index": 41, "kind": "parameter", "displayName":
"Ssl Keystore Password", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The store password for the key store file" },
- "sslKeystoreType": { "index": 42, "kind": "parameter", "displayName": "Ssl
Keystore Type", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the key store file" },
- "sslProtocol": { "index": 43, "kind": "parameter", "displayName": "Ssl
Protocol", "group": "security", "label": "security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"TLSv1.3", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The SSL protocol used to generate the
SSLContext" },
- "sslTrustmanagerAlgorithm": { "index": 44, "kind": "parameter",
"displayName": "Ssl Trustmanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "PKIX", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the tru [...]
- "sslTruststoreLocation": { "index": 45, "kind": "parameter",
"displayName": "Ssl Truststore Location", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The location of the trust store file, used to
validate the [...]
- "sslTruststorePassword": { "index": 46, "kind": "parameter",
"displayName": "Ssl Truststore Password", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password for the trust store file. [...]
- "sslTruststoreType": { "index": 47, "kind": "parameter", "displayName":
"Ssl Truststore Type", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the trust store file" }
+ "additionalHeader": { "index": 2, "kind": "parameter", "displayName":
"Additional Header", "group": "producer", "label": "", "required": false,
"type": "object", "javaType": "java.util.Map<java.lang.String,
java.lang.Object>", "prefix": "additionalHeader.", "multiValue": true,
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": true,
"security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"config [...]
+ "additionalResponseHeader": { "index": 3, "kind": "parameter",
"displayName": "Additional Response Header", "group": "producer", "label": "",
"required": false, "type": "object", "javaType":
"java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"additionalResponseHeader.", "multiValue": true, "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "co [...]
+ "apiKey": { "index": 4, "kind": "parameter", "displayName": "Api Key",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "OpenAI API key. Can also be set via
OPENAI_API_KEY environment variable." },
+ "audioLanguage": { "index": 5, "kind": "parameter", "displayName": "Audio
Language", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The language of the
input audio in ISO-639-1 format (e.g., 'en'). Improves accuracy a [...]
+ "audioModel": { "index": 6, "kind": "parameter", "displayName": "Audio
Model", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for audio transcription
(e.g., whisper-1, gpt-4o-transcribe)" },
+ "audioPrompt": { "index": 7, "kind": "parameter", "displayName": "Audio
Prompt", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Optional text to guide the model's style or
continue a previous audio segment" },
+ "audioResponseFormat": { "index": 8, "kind": "parameter", "displayName":
"Audio Response Format", "group": "producer", "label": "", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "json", "text",
"srt", "verbose_json", "vtt" ], "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "json",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "descrip [...]
+ "audioTemperature": { "index": 9, "kind": "parameter", "displayName":
"Audio Temperature", "group": "producer", "label": "", "required": false,
"type": "number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Sampling temperature for
transcription (0.0 to 1.0)" },
+ "audioTimestampGranularities": { "index": 10, "kind": "parameter",
"displayName": "Audio Timestamp Granularities", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Comma-separated timestamp granularities:
'word', 'segme [...]
+ "autoToolExecution": { "index": 11, "kind": "parameter", "displayName":
"Auto Tool Execution", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
true, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "When true and MCP servers are configured,
automatically execu [...]
+ "baseUrl": { "index": 12, "kind": "parameter", "displayName": "Base Url",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue":
"https:\/\/api.openai.com\/v1", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Base URL for OpenAI API. Defaults to OpenAI's
of [...]
+ "conversationHistoryProperty": { "index": 13, "kind": "parameter",
"displayName": "Conversation History Property", "group": "producer", "label":
"", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "CamelOpenAIConversationHistory", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Excha [...]
+ "conversationMemory": { "index": 14, "kind": "parameter", "displayName":
"Conversation Memory", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Enable conversation memory per Exchange" },
+ "developerMessage": { "index": 15, "kind": "parameter", "displayName":
"Developer Message", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Developer message to
prepend before user messages" },
+ "dimensions": { "index": 16, "kind": "parameter", "displayName":
"Dimensions", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Number of dimensions for
the embedding output. Only supported by text-embedding-3 models. [...]
+ "embeddingModel": { "index": 17, "kind": "parameter", "displayName":
"Embedding Model", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The model to use for
embeddings" },
+ "encodingFormat": { "index": 18, "kind": "parameter", "displayName":
"Encoding Format", "group": "producer", "label": "", "required": false, "type":
"enum", "javaType": "java.lang.String", "enum": [ "float", "base64" ],
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "defaultValue": "base64", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The format for embedding ou [...]
+ "jsonSchema": { "index": 19, "kind": "parameter", "displayName": "Json
Schema", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "supportFileReference": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "JSON schema for
structured output validation" },
+ "maxRetries": { "index": 20, "kind": "parameter", "displayName": "Max
Retries", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 2, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Maximum number of times the OpenAI SDK client
retries failed requests. The SDK retr [...]
+ "maxTokens": { "index": 21, "kind": "parameter", "displayName": "Max
Tokens", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tokens
to generate" },
+ "maxToolIterations": { "index": 22, "kind": "parameter", "displayName":
"Max Tool Iterations", "group": "producer", "label": "", "required": false,
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "defaultValue": 50,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Maximum number of tool
call loop iterations to prevent infinite loops" },
+ "mcpProtocolVersions": { "index": 23, "kind": "parameter", "displayName":
"Mcp Protocol Versions", "group": "producer", "label": "", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Comma-separated list of
MCP protocol versions to advertise when connect [...]
+ "mcpReconnect": { "index": 24, "kind": "parameter", "displayName": "Mcp
Reconnect", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": true,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Automatically reconnect
to MCP servers when a tool call fails due to a t [...]
+ "mcpServer": { "index": 25, "kind": "parameter", "displayName": "Mcp
Server", "group": "producer", "label": "", "required": false, "type": "object",
"javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix":
"mcpServer.", "multiValue": true, "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "MCP (Model Cont [...]
+ "mcpTimeout": { "index": 26, "kind": "parameter", "displayName": "Mcp
Timeout", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 20, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Timeout in seconds for MCP tool call requests.
Applies to all MCP operations inclu [...]
+ "model": { "index": 27, "kind": "parameter", "displayName": "Model",
"group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The model to use for chat completion" },
+ "outputClass": { "index": 28, "kind": "parameter", "displayName": "Output
Class", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Fully qualified class name for structured
output using response format" },
+ "requestTimeout": { "index": 29, "kind": "parameter", "displayName":
"Request Timeout", "group": "producer", "label": "", "required": false, "type":
"integer", "javaType": "long", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": 0, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "HTTP request timeout in milliseconds for the
OpenAI SDK client. When 0 or [...]
+ "storeFullResponse": { "index": 30, "kind": "parameter", "displayName":
"Store Full Response", "group": "producer", "label": "", "required": false,
"type": "boolean", "javaType": "boolean", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Store the full response in the exchange
property 'CamelOpenA [...]
+ "streaming": { "index": 31, "kind": "parameter", "displayName":
"Streaming", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Enable streaming
responses" },
+ "stripThinking": { "index": 32, "kind": "parameter", "displayName": "Strip
Thinking", "group": "producer", "label": "", "required": false, "type":
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Strip ... blocks from
model responses (used by reasoning models like [...]
+ "systemMessage": { "index": 33, "kind": "parameter", "displayName":
"System Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "System message to
prepend. When set and conversationMemory is enabled, the conversat [...]
+ "temperature": { "index": 34, "kind": "parameter", "displayName":
"Temperature", "group": "producer", "label": "", "required": false, "type":
"number", "javaType": "java.lang.Double", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Temperature for response
generation (0.0 to 2.0)" },
+ "topP": { "index": 35, "kind": "parameter", "displayName": "Top P",
"group": "producer", "label": "", "required": false, "type": "number",
"javaType": "java.lang.Double", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "Top P for response generation (0.0 to 1.0)" },
+ "userMessage": { "index": 36, "kind": "parameter", "displayName": "User
Message", "group": "producer", "label": "", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "Default user message
text to use when no prompt is provided" },
+ "lazyStartProducer": { "index": 37, "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": 38, "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.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "OAuth profile name for
obtaining an access token via the OAuth 2.0 Client Cred [...]
+ "sslContextParameters": { "index": 39, "kind": "parameter", "displayName":
"Ssl Context Parameters", "group": "security", "label": "security", "required":
false, "type": "object", "javaType":
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "SSLContextParameters to
use [...]
+ "sslEndpointAlgorithm": { "index": 40, "kind": "parameter", "displayName":
"Ssl Endpoint Algorithm", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "security":
"insecure:ssl", "insecureValue": "none", "defaultValue": "https",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", [...]
+ "sslKeymanagerAlgorithm": { "index": 41, "kind": "parameter",
"displayName": "Ssl Keymanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "SunX509", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the key [...]
+ "sslKeyPassword": { "index": 42, "kind": "parameter", "displayName": "Ssl
Key Password", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password of the private key in the key
store file" },
+ "sslKeystoreLocation": { "index": 43, "kind": "parameter", "displayName":
"Ssl Keystore Location", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false,
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The location of the key
store file. This is optional and can be [...]
+ "sslKeystorePassword": { "index": 44, "kind": "parameter", "displayName":
"Ssl Keystore Password", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": true, "security":
"secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The store password for the key store file" },
+ "sslKeystoreType": { "index": 45, "kind": "parameter", "displayName": "Ssl
Keystore Type", "group": "security", "label": "security", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the key store file" },
+ "sslProtocol": { "index": 46, "kind": "parameter", "displayName": "Ssl
Protocol", "group": "security", "label": "security", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"TLSv1.3", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The SSL protocol used to generate the
SSLContext" },
+ "sslTrustmanagerAlgorithm": { "index": 47, "kind": "parameter",
"displayName": "Ssl Trustmanager Algorithm", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "defaultValue": "PKIX", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The algorithm used by the tru [...]
+ "sslTruststoreLocation": { "index": 48, "kind": "parameter",
"displayName": "Ssl Truststore Location", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The location of the trust store file, used to
validate the [...]
+ "sslTruststorePassword": { "index": 49, "kind": "parameter",
"displayName": "Ssl Truststore Password", "group": "security", "label":
"security", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": true, "security": "secret", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The password for the trust store file. [...]
+ "sslTruststoreType": { "index": 50, "kind": "parameter", "displayName":
"Ssl Truststore Type", "group": "security", "label": "security", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "defaultValue":
"JKS", "configurationClass":
"org.apache.camel.component.openai.OpenAIConfiguration", "configurationField":
"configuration", "description": "The file format of the trust store file" }
}
}
diff --git
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConfiguration.java
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConfiguration.java
index b0833d7ccf70..21ca68ffcc4a 100644
---
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConfiguration.java
+++
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConfiguration.java
@@ -47,6 +47,23 @@ public class OpenAIConfiguration implements Cloneable {
defaultValue = ClientOptions.PRODUCTION_URL)
private String baseUrl = ClientOptions.PRODUCTION_URL;
+ @UriParam(defaultValue = "0")
+ @Metadata(description = "HTTP request timeout in milliseconds for the
OpenAI SDK client. "
+ + "When 0 or negative, the SDK default (10
minutes) is used.")
+ private long requestTimeout;
+
+ @UriParam(defaultValue = "2")
+ @Metadata(description = "Maximum number of times the OpenAI SDK client
retries failed requests. "
+ + "The SDK retry is rate-limit aware (honors
Retry-After on 429).")
+ private int maxRetries = 2;
+
+ @UriParam(prefix = "additionalHeader.", multiValue = true)
+ @Metadata(description = "Additional HTTP request headers to send with
every API call "
+ + "(e.g.
additionalHeader.OpenAI-Organization=my-org or
additionalHeader.api-key=secret). "
+ + "Values may contain secrets.",
+ security = "secret")
+ private Map<String, Object> additionalHeader;
+
@UriParam
@Metadata(description = "The model to use for chat completion")
private String model;
@@ -269,6 +286,30 @@ public class OpenAIConfiguration implements Cloneable {
this.baseUrl = baseUrl;
}
+ public long getRequestTimeout() {
+ return requestTimeout;
+ }
+
+ public void setRequestTimeout(long requestTimeout) {
+ this.requestTimeout = requestTimeout;
+ }
+
+ public int getMaxRetries() {
+ return maxRetries;
+ }
+
+ public void setMaxRetries(int maxRetries) {
+ this.maxRetries = maxRetries;
+ }
+
+ public Map<String, Object> getAdditionalHeader() {
+ return additionalHeader;
+ }
+
+ public void setAdditionalHeader(Map<String, Object> additionalHeader) {
+ this.additionalHeader = additionalHeader;
+ }
+
public String getModel() {
return model;
}
diff --git
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEndpoint.java
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEndpoint.java
index cdde01f66b30..182e2a54f9c2 100644
---
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEndpoint.java
+++
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEndpoint.java
@@ -446,11 +446,27 @@ public class OpenAIEndpoint extends DefaultEndpoint {
builder.baseUrl(ObjectHelper.notNullOrEmpty(configuration.getBaseUrl(),
"baseUrl"));
+ configureHttpClient(builder);
configureSsl(builder);
return builder.build();
}
+ private void configureHttpClient(OpenAIOkHttpClient.Builder builder) {
+ if (configuration.getRequestTimeout() > 0) {
+
builder.timeout(Duration.ofMillis(configuration.getRequestTimeout()));
+ }
+ builder.maxRetries(configuration.getMaxRetries());
+ Map<String, Object> additionalHeaders =
configuration.getAdditionalHeader();
+ if (additionalHeaders != null) {
+ additionalHeaders.forEach((name, value) -> {
+ if (value != null) {
+ builder.putHeader(name, value.toString());
+ }
+ });
+ }
+ }
+
private void configureSsl(OpenAIOkHttpClient.Builder builder) throws
Exception {
// SSLContextParameters takes precedence over individual SSL properties
if (configuration.getSslContextParameters() != null) {
diff --git
a/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/OpenAIClientConfigurationTest.java
b/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/OpenAIClientConfigurationTest.java
new file mode 100644
index 000000000000..a213d88e12b8
--- /dev/null
+++
b/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/OpenAIClientConfigurationTest.java
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.openai;
+
+import java.lang.reflect.Field;
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.openai.client.OpenAIClient;
+import com.openai.core.ClientOptions;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.infra.openai.mock.OpenAIMock;
+import org.apache.camel.test.infra.openai.mock.ResponseBuilder;
+import org.apache.camel.test.junit6.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class OpenAIClientConfigurationTest extends CamelTestSupport {
+
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+ private static final ResponseBuilder RESPONSE_BUILDER = new
ResponseBuilder(OBJECT_MAPPER);
+
+ @RegisterExtension
+ public OpenAIMock openAIMock = new OpenAIMock().builder()
+ .when("header-test")
+ .thenRespondWith((exchange, input) -> {
+ assertEquals("my-org",
exchange.getRequestHeaders().getFirst("OpenAI-Organization"));
+ assertEquals("azure-key",
exchange.getRequestHeaders().getFirst("api-key"));
+ try {
+ return RESPONSE_BUILDER.createSimpleTextResponse("header
ok");
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ })
+ .end()
+ .build();
+
+ @Test
+ void clientConfigurationDefaults() {
+ OpenAIConfiguration config = new OpenAIConfiguration();
+
+ assertEquals(0, config.getRequestTimeout());
+ assertEquals(2, config.getMaxRetries());
+ assertNull(config.getAdditionalHeader());
+ }
+
+ @Test
+ void clientConfigurationFromUri() throws Exception {
+ CamelContext camelContext = context();
+ OpenAIEndpoint endpoint = (OpenAIEndpoint) camelContext.getEndpoint(
+ "openai:chat-completion?apiKey=dummy"
+ +
"&requestTimeout=45000"
+ +
"&maxRetries=0"
+ +
"&additionalHeader.OpenAI-Organization=my-org"
+ +
"&additionalHeader.api-key=secret");
+
+ OpenAIConfiguration config = endpoint.getConfiguration();
+
+ assertEquals(45_000, config.getRequestTimeout());
+ assertEquals(0, config.getMaxRetries());
+ assertEquals("my-org",
config.getAdditionalHeader().get("OpenAI-Organization"));
+ assertEquals("secret", config.getAdditionalHeader().get("api-key"));
+ }
+
+ @Test
+ void createClientAppliesRequestTimeout() throws Exception {
+ OpenAIEndpoint endpoint = createEndpoint();
+ endpoint.getConfiguration().setRequestTimeout(30_000);
+
+ OpenAIClient client = endpoint.createClient();
+ try {
+ ClientOptions options = clientOptions(client);
+ assertEquals(Duration.ofMillis(30_000),
options.timeout().request());
+ } finally {
+ client.close();
+ }
+ }
+
+ @Test
+ void createClientUsesSdkDefaultTimeoutWhenUnset() throws Exception {
+ OpenAIEndpoint endpoint = createEndpoint();
+ endpoint.getConfiguration().setRequestTimeout(0);
+
+ OpenAIClient clientWithDefault = endpoint.createClient();
+ try {
+ ClientOptions defaultOptions = clientOptions(clientWithDefault);
+ Duration sdkDefault = defaultOptions.timeout().request();
+
+ endpoint.getConfiguration().setRequestTimeout(15_000);
+ OpenAIClient clientWithCustom = endpoint.createClient();
+ try {
+ ClientOptions customOptions = clientOptions(clientWithCustom);
+ assertEquals(Duration.ofMillis(15_000),
customOptions.timeout().request());
+ assertNotEquals(sdkDefault, customOptions.timeout().request());
+ } finally {
+ clientWithCustom.close();
+ }
+ } finally {
+ clientWithDefault.close();
+ }
+ }
+
+ @Test
+ void createClientAppliesMaxRetries() throws Exception {
+ OpenAIEndpoint endpoint = createEndpoint();
+ endpoint.getConfiguration().setMaxRetries(0);
+
+ OpenAIClient client = endpoint.createClient();
+ try {
+ assertEquals(0, clientOptions(client).maxRetries());
+ } finally {
+ client.close();
+ }
+
+ endpoint.getConfiguration().setMaxRetries(5);
+ client = endpoint.createClient();
+ try {
+ assertEquals(5, clientOptions(client).maxRetries());
+ } finally {
+ client.close();
+ }
+ }
+
+ @Test
+ void createClientAppliesAdditionalHeaders() throws Exception {
+ OpenAIEndpoint endpoint = createEndpoint();
+ endpoint.getConfiguration().setAdditionalHeader(Map.of(
+ "OpenAI-Organization", "org-123",
+ "OpenAI-Project", "proj-456"));
+
+ OpenAIClient client = endpoint.createClient();
+ try {
+ ClientOptions options = clientOptions(client);
+ assertEquals("org-123",
options.headers().values("OpenAI-Organization").get(0));
+ assertEquals("proj-456",
options.headers().values("OpenAI-Project").get(0));
+ } finally {
+ client.close();
+ }
+ }
+
+ @Test
+ void createClientIgnoresNullHeaderValues() throws Exception {
+ OpenAIEndpoint endpoint = createEndpoint();
+ Map<String, Object> headers = new HashMap<>();
+ headers.put("OpenAI-Organization", "org-123");
+ headers.put("OpenAI-Project", null);
+ endpoint.getConfiguration().setAdditionalHeader(headers);
+
+ OpenAIClient client = endpoint.createClient();
+ try {
+ ClientOptions options = clientOptions(client);
+ assertEquals("org-123",
options.headers().values("OpenAI-Organization").get(0));
+ assertTrue(options.headers().values("OpenAI-Project").isEmpty());
+ } finally {
+ client.close();
+ }
+ }
+
+ @Test
+ void additionalHeadersAreSentOnChatCompletionRequest() {
+ Exchange result = template.request("direct:chat-with-headers", e ->
e.getIn().setBody("header-test"));
+ assertEquals("header ok", result.getMessage().getBody(String.class));
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ @Override
+ public void configure() {
+ from("direct:chat-with-headers")
+
.to("openai:chat-completion?model=gpt-5&apiKey=dummy&baseUrl=" +
openAIMock.getBaseUrl()
+ +
"/v1&additionalHeader.OpenAI-Organization=my-org&additionalHeader.api-key=azure-key");
+ }
+ };
+ }
+
+ private OpenAIEndpoint createEndpoint() throws Exception {
+ OpenAIEndpoint endpoint = (OpenAIEndpoint)
context().getEndpoint("openai:chat-completion?apiKey=dummy");
+ endpoint.getConfiguration().setAdditionalHeader(null);
+ return endpoint;
+ }
+
+ /**
+ * Reads the SDK's {@link ClientOptions} via reflection. Coupled to the
OpenAI Java SDK internal field name
+ * {@code clientOptions}; tests may need updating if the SDK renames it.
+ */
+ private static ClientOptions clientOptions(OpenAIClient client) throws
Exception {
+ Field field = client.getClass().getDeclaredField("clientOptions");
+ field.setAccessible(true);
+ return (ClientOptions) field.get(client);
+ }
+}
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpenAIEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpenAIEndpointBuilderFactory.java
index 5d353f4ddde8..fc175c550c1b 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpenAIEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/OpenAIEndpointBuilderFactory.java
@@ -85,6 +85,49 @@ public interface OpenAIEndpointBuilderFactory {
doSetMultiValueProperties("additionalBodyProperty",
"additionalBodyProperty.", values);
return this;
}
+ /**
+ * Additional HTTP request headers to send with every API call (e.g.
+ * additionalHeader.OpenAI-Organization=my-org or
+ * additionalHeader.api-key=secret). Values may contain secrets. This
is
+ * a multi-value option with prefix: additionalHeader.
+ *
+ * The option is a: <code>java.util.Map<java.lang.String,
+ * java.lang.Object></code> type.
+ * The option is multivalued, and you can use the
+ * additionalHeader(String, Object) method to add a value (call the
+ * method multiple times to set more values).
+ *
+ * Group: producer
+ *
+ * @param key the option key
+ * @param value the option value
+ * @return the dsl builder
+ */
+ default OpenAIEndpointBuilder additionalHeader(String key, Object
value) {
+ doSetMultiValueProperty("additionalHeader", "additionalHeader." +
key, value);
+ return this;
+ }
+ /**
+ * Additional HTTP request headers to send with every API call (e.g.
+ * additionalHeader.OpenAI-Organization=my-org or
+ * additionalHeader.api-key=secret). Values may contain secrets. This
is
+ * a multi-value option with prefix: additionalHeader.
+ *
+ * The option is a: <code>java.util.Map<java.lang.String,
+ * java.lang.Object></code> type.
+ * The option is multivalued, and you can use the
+ * additionalHeader(String, Object) method to add a value (call the
+ * method multiple times to set more values).
+ *
+ * Group: producer
+ *
+ * @param values the values
+ * @return the dsl builder
+ */
+ default OpenAIEndpointBuilder additionalHeader(Map values) {
+ doSetMultiValueProperties("additionalHeader", "additionalHeader.",
values);
+ return this;
+ }
/**
* Map additional fields from the response message to Camel headers.
The
* key is the field name in the API response, the value is the Camel
@@ -437,6 +480,40 @@ public interface OpenAIEndpointBuilderFactory {
doSetProperty("jsonSchema", jsonSchema);
return this;
}
+ /**
+ * Maximum number of times the OpenAI SDK client retries failed
+ * requests. The SDK retry is rate-limit aware (honors Retry-After on
+ * 429).
+ *
+ * The option is a: <code>int</code> type.
+ *
+ * Default: 2
+ * Group: producer
+ *
+ * @param maxRetries the value to set
+ * @return the dsl builder
+ */
+ default OpenAIEndpointBuilder maxRetries(int maxRetries) {
+ doSetProperty("maxRetries", maxRetries);
+ return this;
+ }
+ /**
+ * Maximum number of times the OpenAI SDK client retries failed
+ * requests. The SDK retry is rate-limit aware (honors Retry-After on
+ * 429).
+ *
+ * The option will be converted to a <code>int</code> type.
+ *
+ * Default: 2
+ * Group: producer
+ *
+ * @param maxRetries the value to set
+ * @return the dsl builder
+ */
+ default OpenAIEndpointBuilder maxRetries(String maxRetries) {
+ doSetProperty("maxRetries", maxRetries);
+ return this;
+ }
/**
* Maximum number of tokens to generate.
*
@@ -657,6 +734,38 @@ public interface OpenAIEndpointBuilderFactory {
doSetProperty("outputClass", outputClass);
return this;
}
+ /**
+ * HTTP request timeout in milliseconds for the OpenAI SDK client. When
+ * 0 or negative, the SDK default (10 minutes) is used.
+ *
+ * The option is a: <code>long</code> type.
+ *
+ * Default: 0
+ * Group: producer
+ *
+ * @param requestTimeout the value to set
+ * @return the dsl builder
+ */
+ default OpenAIEndpointBuilder requestTimeout(long requestTimeout) {
+ doSetProperty("requestTimeout", requestTimeout);
+ return this;
+ }
+ /**
+ * HTTP request timeout in milliseconds for the OpenAI SDK client. When
+ * 0 or negative, the SDK default (10 minutes) is used.
+ *
+ * The option will be converted to a <code>long</code> type.
+ *
+ * Default: 0
+ * Group: producer
+ *
+ * @param requestTimeout the value to set
+ * @return the dsl builder
+ */
+ default OpenAIEndpointBuilder requestTimeout(String requestTimeout) {
+ doSetProperty("requestTimeout", requestTimeout);
+ return this;
+ }
/**
* Store the full response in the exchange property
* 'CamelOpenAIResponse' in non-streaming mode.