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

gnodet pushed a commit to branch backport/26110-to-camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 181478d364d1f57e852a6028dcf29ad494108da2
Author: Guillaume Nodet <[email protected]>
AuthorDate: Fri Sep 11 14:19:41 2026 +0000

    [backport camel-4.18.x] CAMEL-24539: camel-openai - store embeddings and 
audio full responses under operation-specific properties
---
 .../apache/camel/catalog/components/openai.json    | 19 +++++++++---------
 .../org/apache/camel/component/openai/openai.json  | 19 +++++++++---------
 .../component/openai/OpenAIConfiguration.java      |  4 +++-
 .../camel/component/openai/OpenAIConstants.java    |  4 ++++
 .../component/openai/OpenAIEmbeddingsProducer.java |  4 ++++
 .../component/openai/OpenAIEmbeddingsMockTest.java | 23 ++++++++++++++++++++++
 .../endpoint/dsl/OpenAIEndpointBuilderFactory.java | 23 ++++++++++++++++++----
 7 files changed, 73 insertions(+), 23 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 793961a58f98..4518978e84fa 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
@@ -50,14 +50,15 @@
     "CamelOpenAICompletionTokens": { "index": 15, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The number of tokens used in the 
completion", "constantName": 
"org.apache.camel.component.openai.OpenAIConstants#COMPLETION_TOKENS" },
     "CamelOpenAITotalTokens": { "index": 16, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The total number of tokens used (prompt completion)", 
"constantName": 
"org.apache.camel.component.openai.OpenAIConstants#TOTAL_TOKENS" },
     "CamelOpenAIResponse": { "index": 17, "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": 
"com.openai.models.ChatCompletion", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The complete OpenAI 
response object", "constantName": 
"org.apache.camel.component.openai.OpenAIConstants#RESPONSE" },
-    "CamelOpenAIEmbeddingModel": { "index": 18, "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": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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" }
+    "CamelOpenAIEmbeddingsResponse": { "index": 18, "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" },
+    "CamelOpenAIEmbeddingModel": { "index": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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": 26, "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" }
   },
   "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" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The operation to perform: 
'chat-completion' or 'embeddings'" },
@@ -74,7 +75,7 @@
     "maxTokens": { "index": 11, "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" },
     "model": { "index": 12, "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": 13, "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": 14, "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 [...]
+    "storeFullResponse": { "index": 14, "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": 15, "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" },
     "systemMessage": { "index": 16, "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": 17, "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)" },
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 793961a58f98..4518978e84fa 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
@@ -50,14 +50,15 @@
     "CamelOpenAICompletionTokens": { "index": 15, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The number of tokens used in the 
completion", "constantName": 
"org.apache.camel.component.openai.OpenAIConstants#COMPLETION_TOKENS" },
     "CamelOpenAITotalTokens": { "index": 16, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The total number of tokens used (prompt completion)", 
"constantName": 
"org.apache.camel.component.openai.OpenAIConstants#TOTAL_TOKENS" },
     "CamelOpenAIResponse": { "index": 17, "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": 
"com.openai.models.ChatCompletion", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The complete OpenAI 
response object", "constantName": 
"org.apache.camel.component.openai.OpenAIConstants#RESPONSE" },
-    "CamelOpenAIEmbeddingModel": { "index": 18, "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": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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" }
+    "CamelOpenAIEmbeddingsResponse": { "index": 18, "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" },
+    "CamelOpenAIEmbeddingModel": { "index": 19, "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": 20, "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": 21, "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": 22, "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": 23, "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": 24, "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": 25, "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": 26, "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" }
   },
   "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" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The operation to perform: 
'chat-completion' or 'embeddings'" },
@@ -74,7 +75,7 @@
     "maxTokens": { "index": 11, "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" },
     "model": { "index": 12, "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": 13, "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": 14, "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 [...]
+    "storeFullResponse": { "index": 14, "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": 15, "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" },
     "systemMessage": { "index": 16, "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": 17, "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)" },
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 6d588fb12d0e..bc7fdaedcaaa 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
@@ -89,7 +89,9 @@ public class OpenAIConfiguration implements Cloneable {
     private String developerMessage;
 
     @UriParam(defaultValue = "false")
-    @Metadata(description = "Store the full response in the exchange property 
'CamelOpenAIResponse' in non-streaming mode")
+    @Metadata(description = "Store the full SDK response in non-streaming 
mode: chat-completion uses exchange property "
+                            + "'CamelOpenAIResponse'; "
+                            + "embeddings uses 
'CamelOpenAIEmbeddingsResponse'")
     private boolean storeFullResponse = false;
 
     @UriParam(prefix = "additionalBodyProperty.", multiValue = true)
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 090d58ccab9c..33a567ffcb10 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
@@ -70,6 +70,10 @@ public final class OpenAIConstants {
     @Metadata(description = "The complete OpenAI response object", javaType = 
"com.openai.models.ChatCompletion")
     public static final String RESPONSE = "CamelOpenAIResponse";
 
+    @Metadata(description = "The complete OpenAI embeddings response object",
+              javaType = 
"com.openai.models.embeddings.CreateEmbeddingResponse")
+    public static final String EMBEDDINGS_RESPONSE = 
"CamelOpenAIEmbeddingsResponse";
+
     // Embeddings Input Headers
     @Metadata(description = "The model to use for embeddings", javaType = 
"String")
     public static final String EMBEDDING_MODEL = "CamelOpenAIEmbeddingModel";
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 26488e697f06..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
@@ -103,6 +103,10 @@ public class OpenAIEmbeddingsProducer extends 
DefaultAsyncProducer {
         CreateEmbeddingResponse response = getEndpoint().getClient()
                 .embeddings().create(params);
 
+        if (config.isStoreFullResponse()) {
+            exchange.setProperty(OpenAIConstants.EMBEDDINGS_RESPONSE, 
response);
+        }
+
         // Extract embeddings
         List<List<Float>> embeddings = new ArrayList<>();
         for (Embedding embedding : response.data()) {
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 b337388f8cc1..ec6513875ba9 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
@@ -57,6 +57,9 @@ public class OpenAIEmbeddingsMockTest extends 
CamelTestSupport {
                 from("direct:embedding")
                         
.to("openai:embeddings?embeddingModel=text-embedding-ada-002&apiKey=dummy&baseUrl="
                             + openAIMock.getBaseUrl() + "/v1");
+                from("direct:embedding-store-response")
+                        
.to("openai:embeddings?embeddingModel=text-embedding-ada-002&apiKey=dummy&storeFullResponse=true&baseUrl="
+                            + openAIMock.getBaseUrl() + "/v1");
             }
         };
     }
@@ -173,4 +176,24 @@ public class OpenAIEmbeddingsMockTest extends 
CamelTestSupport {
         
assertTrue(result.getMessage().getHeader(OpenAIConstants.PROMPT_TOKENS, 
Integer.class) > 0);
         assertTrue(result.getMessage().getHeader(OpenAIConstants.TOTAL_TOKENS, 
Integer.class) > 0);
     }
+
+    @Test
+    void storeFullResponseStoresEmbeddingResponse() {
+        Exchange result = template.request("direct:embedding-store-response",
+                e -> e.getIn().setBody("What is Apache Camel?"));
+
+        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
+    void storeFullResponseDefaultDoesNotStoreResponse() {
+        Exchange result = template.request("direct:embedding",
+                e -> e.getIn().setBody("What is Apache Camel?"));
+
+        assertNull(result.getProperty(OpenAIConstants.EMBEDDINGS_RESPONSE),
+                "storeFullResponse defaults to false, so 
CamelOpenAIEmbeddingsResponse should not be set");
+    }
 }
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 a133e09f7937..e28c48a3d987 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
@@ -314,8 +314,9 @@ public interface OpenAIEndpointBuilderFactory {
             return this;
         }
         /**
-         * Store the full response in the exchange property
-         * 'CamelOpenAIResponse' in non-streaming mode.
+         * Store the full SDK response in non-streaming mode: chat-completion
+         * uses exchange property 'CamelOpenAIResponse'; embeddings uses
+         * 'CamelOpenAIEmbeddingsResponse'.
          * 
          * The option is a: <code>boolean</code> type.
          * 
@@ -330,8 +331,9 @@ public interface OpenAIEndpointBuilderFactory {
             return this;
         }
         /**
-         * Store the full response in the exchange property
-         * 'CamelOpenAIResponse' in non-streaming mode.
+         * Store the full SDK response in non-streaming mode: chat-completion
+         * uses exchange property 'CamelOpenAIResponse'; embeddings uses
+         * 'CamelOpenAIEmbeddingsResponse'.
          * 
          * The option will be converted to a <code>boolean</code> type.
          * 
@@ -815,6 +817,19 @@ public interface OpenAIEndpointBuilderFactory {
         public String openAIResponse() {
             return "CamelOpenAIResponse";
         }
+        /**
+         * 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 model to use for embeddings.
          * 

Reply via email to