This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.22.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.22.x by this push:
new e2841522c033 [backport camel-4.22.x] CAMEL-24539: camel-openai - store
embeddings and audio full responses under operation-specific properties (#26347)
e2841522c033 is described below
commit e2841522c03381f4d06d8e10d10ae043f98a0f51
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Sep 12 09:20:22 2026 +0200
[backport camel-4.22.x] CAMEL-24539: camel-openai - store embeddings and
audio full responses under operation-specific properties (#26347)
Backport of #26110 (cherry picked from commit
bd89b383fe41441f0165cc7d228da011c34eaf5a).
Supersedes #26337, whose automatic conflict resolution left a stray
duplicate
`/**` in the generated OpenAIEndpointBuilderFactory, so the "uncommitted
changes"
CI check failed after regeneration. The generated sources here match `mvn
-Pregen`
output (verified by rebuilding camel-openai, camel-catalog and
camel-endpointdsl).
The upgrade-guide note is added to camel-4x-upgrade-guide-4_22.adoc, since
4.22.1
is the first release on this line to carry the change.
Signed-off-by: Claus Ibsen <[email protected]>
Co-authored-by: Guillaume Nodet <[email protected]>
Co-authored-by: Claude Opus 5 (1M context) <[email protected]>
---
.../apache/camel/catalog/components/openai.json | 47 ++++++++++---------
.../org/apache/camel/component/openai/openai.json | 47 ++++++++++---------
.../openai/OpenAIAudioTranscriptionProducer.java | 2 +-
.../openai/OpenAIAudioTranslationProducer.java | 2 +-
.../component/openai/OpenAIConfiguration.java | 5 ++-
.../camel/component/openai/OpenAIConstants.java | 9 ++++
.../component/openai/OpenAIEmbeddingsProducer.java | 2 +-
.../component/openai/OpenAIEmbeddingsMockTest.java | 10 +++--
.../ROOT/pages/camel-4x-upgrade-guide-4_22.adoc | 14 ++++++
.../endpoint/dsl/OpenAIEndpointBuilderFactory.java | 52 +++++++++++++++++++++-
10 files changed, 136 insertions(+), 54 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 bfc0bfb36215..a853775d3c12 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
@@ -63,27 +63,30 @@
"CamelOpenAIAgenticTotalTokens": { "index": 26, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Cumulative total tokens consumed across
all agentic loop iterations", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AGENTIC_TOTAL_TOKENS" },
"CamelOpenAIResponse": { "index": 27, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType":
"com.openai.models.chat.completions.ChatCompletion", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "The
complete OpenAI chat completion response object", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#RESPONSE" },
"CamelOpenAIResponsesResponse": { "index": 28, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.openai.models.responses.Response", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "The
complete OpenAI Responses API response object", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#RESPONSES_RESPONSE" },
- "CamelOpenAIEmbeddingModel": { "index": 29, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The model to use for embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_MODEL" },
- "CamelOpenAIEmbeddingDimensions": { "index": 30, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of output dimensions",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_DIMENSIONS" },
- "CamelOpenAIEmbeddingResponseModel": { "index": 31, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The embedding model used in the
response", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_RESPONSE_MODEL" },
- "CamelOpenAIEmbeddingCount": { "index": 32, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of embeddings returned",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_COUNT" },
- "CamelOpenAIEmbeddingVectorSize": { "index": 33, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Vector dimensions of the embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_VECTOR_SIZE" },
- "CamelOpenAIReferenceEmbedding": { "index": 34, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "List<Float>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "Reference embedding vector
for similarity comparison", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#REFERENCE_EMBEDDING" },
- "CamelOpenAISimilarityScore": { "index": 35, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Calculated cosine similarity score (0.0
to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SIMILARITY_SCORE" },
- "CamelOpenAIOriginalText": { "index": 36, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String or
List<String>", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Original text content when embeddings
operation is used", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#ORIGINAL_TEXT" },
- "CamelOpenAIAudioModel": { "index": 37, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for audio transcription",
"constantName": "org.apache.camel.component.openai.OpenAIConstants#AUDIO_MODEL"
},
- "CamelOpenAIAudioLanguage": { "index": 38, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The language of the input audio
(ISO-639-1)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_LANGUAGE" },
- "CamelOpenAIAudioResponseFormat": { "index": 39, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The response format for audio
transcription (json, text, srt, verbose_json, vtt)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_RESPONSE_FORMAT" },
- "CamelOpenAIAudioTemperature": { "index": 40, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Sampling temperature for audio
transcription (0.0 to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TEMPERATURE" },
- "CamelOpenAIAudioPrompt": { "index": 41, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Optional text to guide the model's style or continue a
previous audio segment", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_PROMPT" },
- "CamelOpenAIAudioTimestampGranularities": { "index": 42, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Comma-separated timestamp
granularities: word, segment, or word,segment (verbose_json only)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TIMESTAMP_GRANULARITIES"
},
- "CamelOpenAIAudioDuration": { "index": 43, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Duration of the audio in seconds
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DURATION" },
- "CamelOpenAIAudioDetectedLanguage": { "index": 44, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Language detected in the audio
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DETECTED_LANGUAGE" },
- "CamelOpenAISpeechModel": { "index": 45, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for text-to-speech (e.g.,
gpt-4o-mini-tts, tts-1, tts-1-hd)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_MODEL" },
- "CamelOpenAISpeechVoice": { "index": 46, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The voice to use for the generated audio (e.g., alloy,
echo, fable, onyx, nova, shimmer)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_VOICE" },
- "CamelOpenAISpeechResponseFormat": { "index": 47, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The audio format for text-to-speech
output (mp3, opus, aac, flac, wav, pcm)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_RESPONSE_FORMAT" },
- "CamelOpenAISpeechSpeed": { "index": 48, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "Double",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The speed of the generated audio (0.25 to 4.0, where 1.0
is normal speed)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_SPEED" },
- "CamelOpenAISpeechInstructions": { "index": 49, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Optional instructions to control the
voice of the generated audio (does not work with tts-1 or tts-1-hd)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_INSTRUCTIONS" }
+ "CamelOpenAIEmbeddingsResponse": { "index": 29, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.openai.models.embeddings.CreateEmbeddingResponse",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The complete OpenAI embeddings response object",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDINGS_RESPONSE" },
+ "CamelOpenAIAudioTranscriptionResponse": { "index": 30, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType":
"com.openai.models.audio.transcriptions.TranscriptionCreateResponse",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The complete OpenAI audio transcription response
object", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TRANSCRIPTION_RESPONSE"
},
+ "CamelOpenAIAudioTranslationResponse": { "index": 31, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.openai.models.audio.translations.TranslationCreateResponse",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The complete OpenAI audio translation response object",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TRANSLATION_RESPONSE"
},
+ "CamelOpenAIEmbeddingModel": { "index": 32, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The model to use for embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_MODEL" },
+ "CamelOpenAIEmbeddingDimensions": { "index": 33, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of output dimensions",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_DIMENSIONS" },
+ "CamelOpenAIEmbeddingResponseModel": { "index": 34, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The embedding model used in the
response", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_RESPONSE_MODEL" },
+ "CamelOpenAIEmbeddingCount": { "index": 35, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of embeddings returned",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_COUNT" },
+ "CamelOpenAIEmbeddingVectorSize": { "index": 36, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Vector dimensions of the embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_VECTOR_SIZE" },
+ "CamelOpenAIReferenceEmbedding": { "index": 37, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "List<Float>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "Reference embedding vector
for similarity comparison", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#REFERENCE_EMBEDDING" },
+ "CamelOpenAISimilarityScore": { "index": 38, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Calculated cosine similarity score (0.0
to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SIMILARITY_SCORE" },
+ "CamelOpenAIOriginalText": { "index": 39, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String or
List<String>", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Original text content when embeddings
operation is used", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#ORIGINAL_TEXT" },
+ "CamelOpenAIAudioModel": { "index": 40, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for audio transcription",
"constantName": "org.apache.camel.component.openai.OpenAIConstants#AUDIO_MODEL"
},
+ "CamelOpenAIAudioLanguage": { "index": 41, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The language of the input audio
(ISO-639-1)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_LANGUAGE" },
+ "CamelOpenAIAudioResponseFormat": { "index": 42, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The response format for audio
transcription (json, text, srt, verbose_json, vtt)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_RESPONSE_FORMAT" },
+ "CamelOpenAIAudioTemperature": { "index": 43, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Sampling temperature for audio
transcription (0.0 to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TEMPERATURE" },
+ "CamelOpenAIAudioPrompt": { "index": 44, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Optional text to guide the model's style or continue a
previous audio segment", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_PROMPT" },
+ "CamelOpenAIAudioTimestampGranularities": { "index": 45, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Comma-separated timestamp
granularities: word, segment, or word,segment (verbose_json only)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TIMESTAMP_GRANULARITIES"
},
+ "CamelOpenAIAudioDuration": { "index": 46, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Duration of the audio in seconds
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DURATION" },
+ "CamelOpenAIAudioDetectedLanguage": { "index": 47, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Language detected in the audio
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DETECTED_LANGUAGE" },
+ "CamelOpenAISpeechModel": { "index": 48, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for text-to-speech (e.g.,
gpt-4o-mini-tts, tts-1, tts-1-hd)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_MODEL" },
+ "CamelOpenAISpeechVoice": { "index": 49, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The voice to use for the generated audio (e.g., alloy,
echo, fable, onyx, nova, shimmer)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_VOICE" },
+ "CamelOpenAISpeechResponseFormat": { "index": 50, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The audio format for text-to-speech
output (mp3, opus, aac, flac, wav, pcm)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_RESPONSE_FORMAT" },
+ "CamelOpenAISpeechSpeed": { "index": 51, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "Double",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The speed of the generated audio (0.25 to 4.0, where 1.0
is normal speed)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_SPEED" },
+ "CamelOpenAISpeechInstructions": { "index": 52, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Optional instructions to control the
voice of the generated audio (does not work with tts-1 or tts-1-hd)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_INSTRUCTIONS" }
},
"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", "responses", "embeddings", "tool-execution",
"audio-transcription", "audio-translation", "audio-speech" ], "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The operation to perform: 'chat-completion', 'resp [...]
@@ -132,7 +135,7 @@
"speechResponseFormat": { "index": 43, "kind": "parameter", "displayName":
"Speech Response Format", "group": "producer", "label": "", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "mp3", "opus", "aac",
"flac", "wav", "pcm" ], "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "mp3",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "descrip [...]
"speechSpeed": { "index": 44, "kind": "parameter", "displayName": "Speech
Speed", "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": "The speed of the generated audio, from 0.25 to
4.0 where 1.0 is normal speed" },
"speechVoice": { "index": 45, "kind": "parameter", "displayName": "Speech
Voice", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "alloy",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The voice to use for
text-to-speech (e.g., alloy, echo, fable, [...]
- "storeFullResponse": { "index": 46, "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 SDK response in non-streaming
mode: chat-comp [...]
+ "storeFullResponse": { "index": 46, "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 SDK response in non-streaming
mode: chat-comp [...]
"streaming": { "index": 47, "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": 48, "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": 49, "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 [...]
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 bfc0bfb36215..a853775d3c12 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
@@ -63,27 +63,30 @@
"CamelOpenAIAgenticTotalTokens": { "index": 26, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Cumulative total tokens consumed across
all agentic loop iterations", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AGENTIC_TOTAL_TOKENS" },
"CamelOpenAIResponse": { "index": 27, "kind": "header", "displayName": "",
"group": "producer", "label": "", "required": false, "javaType":
"com.openai.models.chat.completions.ChatCompletion", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "The
complete OpenAI chat completion response object", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#RESPONSE" },
"CamelOpenAIResponsesResponse": { "index": 28, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.openai.models.responses.Response", "deprecated": false,
"deprecationNote": "", "autowired": false, "secret": false, "description": "The
complete OpenAI Responses API response object", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#RESPONSES_RESPONSE" },
- "CamelOpenAIEmbeddingModel": { "index": 29, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The model to use for embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_MODEL" },
- "CamelOpenAIEmbeddingDimensions": { "index": 30, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of output dimensions",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_DIMENSIONS" },
- "CamelOpenAIEmbeddingResponseModel": { "index": 31, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The embedding model used in the
response", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_RESPONSE_MODEL" },
- "CamelOpenAIEmbeddingCount": { "index": 32, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of embeddings returned",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_COUNT" },
- "CamelOpenAIEmbeddingVectorSize": { "index": 33, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Vector dimensions of the embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_VECTOR_SIZE" },
- "CamelOpenAIReferenceEmbedding": { "index": 34, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "List<Float>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "Reference embedding vector
for similarity comparison", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#REFERENCE_EMBEDDING" },
- "CamelOpenAISimilarityScore": { "index": 35, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Calculated cosine similarity score (0.0
to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SIMILARITY_SCORE" },
- "CamelOpenAIOriginalText": { "index": 36, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String or
List<String>", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Original text content when embeddings
operation is used", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#ORIGINAL_TEXT" },
- "CamelOpenAIAudioModel": { "index": 37, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for audio transcription",
"constantName": "org.apache.camel.component.openai.OpenAIConstants#AUDIO_MODEL"
},
- "CamelOpenAIAudioLanguage": { "index": 38, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The language of the input audio
(ISO-639-1)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_LANGUAGE" },
- "CamelOpenAIAudioResponseFormat": { "index": 39, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The response format for audio
transcription (json, text, srt, verbose_json, vtt)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_RESPONSE_FORMAT" },
- "CamelOpenAIAudioTemperature": { "index": 40, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Sampling temperature for audio
transcription (0.0 to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TEMPERATURE" },
- "CamelOpenAIAudioPrompt": { "index": 41, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Optional text to guide the model's style or continue a
previous audio segment", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_PROMPT" },
- "CamelOpenAIAudioTimestampGranularities": { "index": 42, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Comma-separated timestamp
granularities: word, segment, or word,segment (verbose_json only)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TIMESTAMP_GRANULARITIES"
},
- "CamelOpenAIAudioDuration": { "index": 43, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Duration of the audio in seconds
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DURATION" },
- "CamelOpenAIAudioDetectedLanguage": { "index": 44, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Language detected in the audio
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DETECTED_LANGUAGE" },
- "CamelOpenAISpeechModel": { "index": 45, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for text-to-speech (e.g.,
gpt-4o-mini-tts, tts-1, tts-1-hd)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_MODEL" },
- "CamelOpenAISpeechVoice": { "index": 46, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The voice to use for the generated audio (e.g., alloy,
echo, fable, onyx, nova, shimmer)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_VOICE" },
- "CamelOpenAISpeechResponseFormat": { "index": 47, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The audio format for text-to-speech
output (mp3, opus, aac, flac, wav, pcm)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_RESPONSE_FORMAT" },
- "CamelOpenAISpeechSpeed": { "index": 48, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "Double",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The speed of the generated audio (0.25 to 4.0, where 1.0
is normal speed)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_SPEED" },
- "CamelOpenAISpeechInstructions": { "index": 49, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Optional instructions to control the
voice of the generated audio (does not work with tts-1 or tts-1-hd)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_INSTRUCTIONS" }
+ "CamelOpenAIEmbeddingsResponse": { "index": 29, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.openai.models.embeddings.CreateEmbeddingResponse",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The complete OpenAI embeddings response object",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDINGS_RESPONSE" },
+ "CamelOpenAIAudioTranscriptionResponse": { "index": 30, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType":
"com.openai.models.audio.transcriptions.TranscriptionCreateResponse",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The complete OpenAI audio transcription response
object", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TRANSCRIPTION_RESPONSE"
},
+ "CamelOpenAIAudioTranslationResponse": { "index": 31, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "com.openai.models.audio.translations.TranslationCreateResponse",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The complete OpenAI audio translation response object",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TRANSLATION_RESPONSE"
},
+ "CamelOpenAIEmbeddingModel": { "index": 32, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The model to use for embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_MODEL" },
+ "CamelOpenAIEmbeddingDimensions": { "index": 33, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of output dimensions",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_DIMENSIONS" },
+ "CamelOpenAIEmbeddingResponseModel": { "index": 34, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The embedding model used in the
response", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_RESPONSE_MODEL" },
+ "CamelOpenAIEmbeddingCount": { "index": 35, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Number of embeddings returned",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_COUNT" },
+ "CamelOpenAIEmbeddingVectorSize": { "index": 36, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Vector dimensions of the embeddings",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#EMBEDDING_VECTOR_SIZE" },
+ "CamelOpenAIReferenceEmbedding": { "index": 37, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "List<Float>", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "description": "Reference embedding vector
for similarity comparison", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#REFERENCE_EMBEDDING" },
+ "CamelOpenAISimilarityScore": { "index": 38, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Calculated cosine similarity score (0.0
to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SIMILARITY_SCORE" },
+ "CamelOpenAIOriginalText": { "index": 39, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String or
List<String>", "deprecated": false, "deprecationNote": "", "autowired": false,
"secret": false, "description": "Original text content when embeddings
operation is used", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#ORIGINAL_TEXT" },
+ "CamelOpenAIAudioModel": { "index": 40, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for audio transcription",
"constantName": "org.apache.camel.component.openai.OpenAIConstants#AUDIO_MODEL"
},
+ "CamelOpenAIAudioLanguage": { "index": 41, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The language of the input audio
(ISO-639-1)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_LANGUAGE" },
+ "CamelOpenAIAudioResponseFormat": { "index": 42, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The response format for audio
transcription (json, text, srt, verbose_json, vtt)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_RESPONSE_FORMAT" },
+ "CamelOpenAIAudioTemperature": { "index": 43, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Sampling temperature for audio
transcription (0.0 to 1.0)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TEMPERATURE" },
+ "CamelOpenAIAudioPrompt": { "index": 44, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "Optional text to guide the model's style or continue a
previous audio segment", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_PROMPT" },
+ "CamelOpenAIAudioTimestampGranularities": { "index": 45, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Comma-separated timestamp
granularities: word, segment, or word,segment (verbose_json only)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_TIMESTAMP_GRANULARITIES"
},
+ "CamelOpenAIAudioDuration": { "index": 46, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Duration of the audio in seconds
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DURATION" },
+ "CamelOpenAIAudioDetectedLanguage": { "index": 47, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Language detected in the audio
(verbose_json only)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#AUDIO_DETECTED_LANGUAGE" },
+ "CamelOpenAISpeechModel": { "index": 48, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The model to use for text-to-speech (e.g.,
gpt-4o-mini-tts, tts-1, tts-1-hd)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_MODEL" },
+ "CamelOpenAISpeechVoice": { "index": 49, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The voice to use for the generated audio (e.g., alloy,
echo, fable, onyx, nova, shimmer)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_VOICE" },
+ "CamelOpenAISpeechResponseFormat": { "index": 50, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The audio format for text-to-speech
output (mp3, opus, aac, flac, wav, pcm)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_RESPONSE_FORMAT" },
+ "CamelOpenAISpeechSpeed": { "index": 51, "kind": "header", "displayName":
"", "group": "producer", "label": "", "required": false, "javaType": "Double",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The speed of the generated audio (0.25 to 4.0, where 1.0
is normal speed)", "constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_SPEED" },
+ "CamelOpenAISpeechInstructions": { "index": 52, "kind": "header",
"displayName": "", "group": "producer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "Optional instructions to control the
voice of the generated audio (does not work with tts-1 or tts-1-hd)",
"constantName":
"org.apache.camel.component.openai.OpenAIConstants#SPEECH_INSTRUCTIONS" }
},
"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", "responses", "embeddings", "tool-execution",
"audio-transcription", "audio-translation", "audio-speech" ], "deprecated":
false, "deprecationNote": "", "autowired": false, "secret": false,
"description": "The operation to perform: 'chat-completion', 'resp [...]
@@ -132,7 +135,7 @@
"speechResponseFormat": { "index": 43, "kind": "parameter", "displayName":
"Speech Response Format", "group": "producer", "label": "", "required": false,
"type": "enum", "javaType": "java.lang.String", "enum": [ "mp3", "opus", "aac",
"flac", "wav", "pcm" ], "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "mp3",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "descrip [...]
"speechSpeed": { "index": 44, "kind": "parameter", "displayName": "Speech
Speed", "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": "The speed of the generated audio, from 0.25 to
4.0 where 1.0 is normal speed" },
"speechVoice": { "index": 45, "kind": "parameter", "displayName": "Speech
Voice", "group": "producer", "label": "", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "",
"autowired": false, "secret": false, "defaultValue": "alloy",
"configurationClass": "org.apache.camel.component.openai.OpenAIConfiguration",
"configurationField": "configuration", "description": "The voice to use for
text-to-speech (e.g., alloy, echo, fable, [...]
- "storeFullResponse": { "index": 46, "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 SDK response in non-streaming
mode: chat-comp [...]
+ "storeFullResponse": { "index": 46, "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 SDK response in non-streaming
mode: chat-comp [...]
"streaming": { "index": 47, "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": 48, "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": 49, "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 [...]
diff --git
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranscriptionProducer.java
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranscriptionProducer.java
index ff379f212567..c4a22873ebb4 100644
---
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranscriptionProducer.java
+++
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranscriptionProducer.java
@@ -113,7 +113,7 @@ public class OpenAIAudioTranscriptionProducer extends
DefaultProducer {
}
if (config.isStoreFullResponse()) {
- exchange.setProperty(OpenAIConstants.RESPONSE, response);
+ exchange.setProperty(OpenAIConstants.AUDIO_TRANSCRIPTION_RESPONSE,
response);
}
}
}
diff --git
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranslationProducer.java
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranslationProducer.java
index a5398ca2bcd3..df18e7285c13 100644
---
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranslationProducer.java
+++
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIAudioTranslationProducer.java
@@ -90,7 +90,7 @@ public class OpenAIAudioTranslationProducer extends
DefaultProducer {
}
if (config.isStoreFullResponse()) {
- exchange.setProperty(OpenAIConstants.RESPONSE, response);
+ exchange.setProperty(OpenAIConstants.AUDIO_TRANSLATION_RESPONSE,
response);
}
}
}
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 f7006e33ae40..e684fec93f1b 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
@@ -149,7 +149,10 @@ public class OpenAIConfiguration implements Cloneable {
@UriParam(defaultValue = "false")
@Metadata(description = "Store the full SDK response in non-streaming
mode: chat-completion uses exchange property "
- + "'CamelOpenAIResponse'; responses uses
'CamelOpenAIResponsesResponse'")
+ + "'CamelOpenAIResponse'; responses uses
'CamelOpenAIResponsesResponse'; "
+ + "embeddings uses
'CamelOpenAIEmbeddingsResponse'; "
+ + "audio transcription uses
'CamelOpenAIAudioTranscriptionResponse'; "
+ + "audio translation uses
'CamelOpenAIAudioTranslationResponse'")
private boolean storeFullResponse = false;
@UriParam(defaultValue = "false")
diff --git
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConstants.java
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConstants.java
index 414a8ce4def0..076caf43b138 100644
---
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConstants.java
+++
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIConstants.java
@@ -101,6 +101,15 @@ public final class OpenAIConstants {
@Metadata(description = "The complete OpenAI Responses API response
object",
javaType = "com.openai.models.responses.Response")
public static final String RESPONSES_RESPONSE =
"CamelOpenAIResponsesResponse";
+ @Metadata(description = "The complete OpenAI embeddings response object",
+ javaType =
"com.openai.models.embeddings.CreateEmbeddingResponse")
+ public static final String EMBEDDINGS_RESPONSE =
"CamelOpenAIEmbeddingsResponse";
+ @Metadata(description = "The complete OpenAI audio transcription response
object",
+ javaType =
"com.openai.models.audio.transcriptions.TranscriptionCreateResponse")
+ public static final String AUDIO_TRANSCRIPTION_RESPONSE =
"CamelOpenAIAudioTranscriptionResponse";
+ @Metadata(description = "The complete OpenAI audio translation response
object",
+ javaType =
"com.openai.models.audio.translations.TranslationCreateResponse")
+ public static final String AUDIO_TRANSLATION_RESPONSE =
"CamelOpenAIAudioTranslationResponse";
// Embeddings Input Headers
@Metadata(description = "The model to use for embeddings", javaType =
"String")
diff --git
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEmbeddingsProducer.java
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEmbeddingsProducer.java
index 08035cae875f..4a917a86cbd4 100644
---
a/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEmbeddingsProducer.java
+++
b/components/camel-ai/camel-openai/src/main/java/org/apache/camel/component/openai/OpenAIEmbeddingsProducer.java
@@ -104,7 +104,7 @@ public class OpenAIEmbeddingsProducer extends
DefaultAsyncProducer {
.embeddings().create(params);
if (config.isStoreFullResponse()) {
- exchange.setProperty(OpenAIConstants.RESPONSE, response);
+ exchange.setProperty(OpenAIConstants.EMBEDDINGS_RESPONSE,
response);
}
// Extract embeddings
diff --git
a/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/OpenAIEmbeddingsMockTest.java
b/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/OpenAIEmbeddingsMockTest.java
index 2624517f3f2e..9c466a0061a3 100644
---
a/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/OpenAIEmbeddingsMockTest.java
+++
b/components/camel-ai/camel-openai/src/test/java/org/apache/camel/component/openai/OpenAIEmbeddingsMockTest.java
@@ -184,8 +184,10 @@ public class OpenAIEmbeddingsMockTest extends
CamelTestSupport {
Exchange result = template.request("direct:embedding-store-response",
e -> e.getIn().setBody("What is Apache Camel?"));
- assertNotNull(result.getProperty(OpenAIConstants.RESPONSE),
- "storeFullResponse=true must store the full response in the
CamelOpenAIResponse exchange property");
+ assertNotNull(result.getProperty(OpenAIConstants.EMBEDDINGS_RESPONSE),
+ "storeFullResponse=true must store the full embeddings
response in the CamelOpenAIEmbeddingsResponse property");
+ assertNull(result.getProperty(OpenAIConstants.RESPONSE),
+ "the embeddings response must not be stored under the
chat-completion CamelOpenAIResponse property");
}
@Test
@@ -193,7 +195,7 @@ public class OpenAIEmbeddingsMockTest extends
CamelTestSupport {
Exchange result = template.request("direct:embedding",
e -> e.getIn().setBody("What is Apache Camel?"));
- assertNull(result.getProperty(OpenAIConstants.RESPONSE),
- "storeFullResponse defaults to false, so CamelOpenAIResponse
should not be set");
+ assertNull(result.getProperty(OpenAIConstants.EMBEDDINGS_RESPONSE),
+ "storeFullResponse defaults to false, so
CamelOpenAIEmbeddingsResponse should not be set");
}
}
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
index d4009b3bce27..c5283cf95027 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_22.adoc
@@ -1926,3 +1926,17 @@ as a header cannot take effect. A route that set either
header was silently igno
Configure the `target` and `credentials` endpoint options instead, or route to
a different endpoint
with `toD` when the destination varies per message. The constants remain in
place for backwards
compatibility and are now marked deprecated in the component metadata.
+
+=== camel-openai
+
+When `storeFullResponse=true`, the embeddings and audio operations now store
their full SDK response
+under an operation-specific exchange property instead of the chat-completion
property `CamelOpenAIResponse`.
+That property is typed as the chat-completion response
(`com.openai.models.chat.completions.ChatCompletion`),
+so a downstream reader that expected that type received an incompatible object.
+
+* embeddings now use `CamelOpenAIEmbeddingsResponse`
(`com.openai.models.embeddings.CreateEmbeddingResponse`).
+* audio transcription now uses `CamelOpenAIAudioTranscriptionResponse`
(`com.openai.models.audio.transcriptions.TranscriptionCreateResponse`).
+* audio translation now uses `CamelOpenAIAudioTranslationResponse`
(`com.openai.models.audio.translations.TranslationCreateResponse`).
+
+A route that reads the full embeddings or audio response from
`CamelOpenAIResponse` must switch to the
+matching property. The chat-completion and responses operations are unchanged.
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 6cb8599d24f7..b1f93e8dac5a 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
@@ -1210,7 +1210,10 @@ public interface OpenAIEndpointBuilderFactory {
/**
* Store the full SDK response in non-streaming mode: chat-completion
* uses exchange property 'CamelOpenAIResponse'; responses uses
- * 'CamelOpenAIResponsesResponse'.
+ * 'CamelOpenAIResponsesResponse'; embeddings uses
+ * 'CamelOpenAIEmbeddingsResponse'; audio transcription uses
+ * 'CamelOpenAIAudioTranscriptionResponse'; audio translation uses
+ * 'CamelOpenAIAudioTranslationResponse'.
*
* The option is a: <code>boolean</code> type.
*
@@ -1227,7 +1230,10 @@ public interface OpenAIEndpointBuilderFactory {
/**
* Store the full SDK response in non-streaming mode: chat-completion
* uses exchange property 'CamelOpenAIResponse'; responses uses
- * 'CamelOpenAIResponsesResponse'.
+ * 'CamelOpenAIResponsesResponse'; embeddings uses
+ * 'CamelOpenAIEmbeddingsResponse'; audio transcription uses
+ * 'CamelOpenAIAudioTranscriptionResponse'; audio translation uses
+ * 'CamelOpenAIAudioTranslationResponse'.
*
* The option will be converted to a <code>boolean</code> type.
*
@@ -2175,6 +2181,48 @@ public interface OpenAIEndpointBuilderFactory {
public String openAIResponsesResponse() {
return "CamelOpenAIResponsesResponse";
}
+ /**
+ * The complete OpenAI embeddings response object.
+ *
+ * The option is a: {@code
+ * com.openai.models.embeddings.CreateEmbeddingResponse} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code OpenAIEmbeddingsResponse}.
+ */
+ public String openAIEmbeddingsResponse() {
+ return "CamelOpenAIEmbeddingsResponse";
+ }
+ /**
+ * The complete OpenAI audio transcription response object.
+ *
+ * The option is a: {@code
+ * com.openai.models.audio.transcriptions.TranscriptionCreateResponse}
+ * type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code
+ * OpenAIAudioTranscriptionResponse}.
+ */
+ public String openAIAudioTranscriptionResponse() {
+ return "CamelOpenAIAudioTranscriptionResponse";
+ }
+ /**
+ * The complete OpenAI audio translation response object.
+ *
+ * The option is a: {@code
+ * com.openai.models.audio.translations.TranslationCreateResponse}
type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code
+ * OpenAIAudioTranslationResponse}.
+ */
+ public String openAIAudioTranslationResponse() {
+ return "CamelOpenAIAudioTranslationResponse";
+ }
/**
* The model to use for embeddings.
*