This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch backport/CAMEL-24539-to-camel-4.22.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit b322e38a9787b9da972705e57f1425de6560d033 Author: Guillaume Nodet <[email protected]> AuthorDate: Fri Sep 11 14:18:41 2026 +0000 [backport camel-4.22.x] CAMEL-24539: camel-openai - store embeddings and audio full responses under operation-specific properties 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: 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. *
