From 9b4f24c7d233a9699b2be51d202614bf31323368 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Fri, 11 Sep 2026 16:17:26 +0200 Subject: [PATCH 01/27] wip --- .../prompt/registry/OrchestrationConfigClient.java | 2 +- .../java/com/sap/ai/sdk/core/AiCoreService.java | 2 +- .../ai/sdk/core/common/ClientResponseHandler.java | 2 +- .../ai/sdk/core/common/ClientStreamingHandler.java | 2 +- .../openai/AiCoreOpenAiClient.java | 2 +- .../foundationmodels/openai/OpenAiBatchInput.java | 2 +- .../sdk/foundationmodels/openai/OpenAiClient.java | 4 ++-- .../openai/OpenAiClientException.java | 2 +- .../foundationmodels/openai/TextInputChannel.java | 2 +- .../openai/realtime/AudioInputChannel.java | 2 +- .../openai/realtime/AudioOutputChannel.java | 4 ++-- .../openai/realtime/OpenAiRealtimeClient.java | 8 ++++---- .../openai/realtime/RealtimeParam.java | 2 +- .../openai/realtime/RealtimeParamSystemPrompt.java | 10 ++++------ .../realtime/RealtimeParamTurnDetection.java | 12 +++++------- .../openai/realtime/RealtimeParamVoice.java | 14 ++++++-------- .../sap/ai/sdk/foundationmodels/rpt/RptClient.java | 4 ++-- .../sap/ai/sdk/orchestration/ContentFilter.java | 4 ++-- .../sdk/orchestration/EmbeddingDeserializer.java | 2 +- .../com/sap/ai/sdk/orchestration/Grounding.java | 2 +- .../ai/sdk/orchestration/OrchestrationClient.java | 2 +- .../OrchestrationClientException.java | 4 ++-- .../PolymorphicFallbackDeserializer.java | 2 +- 23 files changed, 43 insertions(+), 49 deletions(-) diff --git a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java index 5a9d1096b..6833b1d43 100644 --- a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java +++ b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java @@ -23,7 +23,7 @@ * * @since 1.15.0 */ -@Beta +// @Beta public class OrchestrationConfigClient extends OrchestrationConfigsApi { /** diff --git a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java index d567ca1ef..b91326053 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java +++ b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java @@ -139,7 +139,7 @@ protected String buildDeploymentPath(@Nonnull final String deploymentId) { * * @param resourceGroup the resource group of the deleted deployment, usually "default". */ - @Beta + // @Beta public void reloadCachedDeployments(@Nonnull final String resourceGroup) { deploymentResolver.reloadDeployments(resourceGroup); } diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java index 1f0bef1b4..359e95d78 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java @@ -49,7 +49,7 @@ public class ClientResponseHandler objectMapper(@Nonnull final ObjectMapper jackson) { objectMapper = jackson; diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java index 79fde4402..45a8ea6fe 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java @@ -30,7 +30,7 @@ public class ClientStreamingHandler< * @return the current instance of {@link ClientStreamingHandler} with the changed object mapper */ @Nonnull - @Beta + // @Beta public ClientStreamingHandler objectMapper(@Nonnull final ObjectMapper jackson) { super.objectMapper(jackson); return this; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java index 826695f68..dad2b3ec2 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java @@ -24,7 +24,7 @@ */ @Slf4j @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -@Beta +// @Beta public class AiCoreOpenAiClient { private final HttpDestination destination; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java index c98c425bb..67049fa71 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java @@ -37,7 +37,7 @@ public class OpenAiBatchInput { * * @param chatCompletionRequests the list of chat completion requests to include in the batch */ - @Beta + // @Beta public OpenAiBatchInput(@Nonnull final OpenAiChatCompletionRequest... chatCompletionRequests) { for (int i = 0; i < chatCompletionRequests.length; i++) { val request = chatCompletionRequests[i]; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index bd3b4176a..78936124e 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -82,7 +82,7 @@ public static OpenAiClient forModel(@Nonnull final OpenAiModel foundationModel) * * @return created client */ - @Beta + // @Beta @Nonnull public static OpenAiRealtimeClient realtimeClient() { final var withResolvedDestination = OpenAiClient.forModel(OpenAiModel.GPT_REALTIME); @@ -95,7 +95,7 @@ public static OpenAiRealtimeClient realtimeClient() { * @param apiVersion the API version to target. * @return a new client. */ - @Beta + // @Beta @Nonnull public OpenAiClient withApiVersion(@Nonnull final String apiVersion) { final var newDestination = diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java index 2042c18f9..126ab8661 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java @@ -22,7 +22,7 @@ public class OpenAiClientException extends ClientException { * * @return The {@link ErrorResponse} object, or {@code null} if not available. */ - @Beta + // @Beta @Nullable public ErrorResponse getErrorResponse() { final var clientError = super.getClientError(); diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java index bbd78c40a..80ec4bf78 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java @@ -7,7 +7,7 @@ * Allows to input (send) text to the open channel, must be closed when not needed anymore (e.g. * try-with-resources) */ -@Beta +// @Beta public interface TextInputChannel extends AutoCloseable { /** diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java index af37b6b43..8ee9e8cc5 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java @@ -7,7 +7,7 @@ * *

Should be closed by application (try-with-resources) when not needed anymore */ -@Beta +// @Beta public interface AudioInputChannel extends AutoCloseable { /** diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java index 1d8733184..4e42a6437 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java @@ -3,7 +3,7 @@ import com.google.common.annotations.Beta; /** Functional interface representing audio output channel (audio data consumer) */ -@Beta +// @Beta public interface AudioOutputChannel { /** @@ -16,6 +16,6 @@ public interface AudioOutputChannel { * single logical entity (e.g. gets called at the end when all byte parts of a single message * get passed) */ - @Beta + // @Beta void outputAudio(byte[] rawBytesChunk, boolean isLast); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java index 98ce597ac..39dfbce37 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java @@ -12,7 +12,7 @@ * OpenAI client implementation of Realtime API. Abstracts technical implementation, transport and * threading and exposes business-level operations (high level interface) */ -@Beta +// @Beta public class OpenAiRealtimeClient { static final int PATH_BUFFER_SIZE = @@ -25,7 +25,7 @@ public class OpenAiRealtimeClient { * * @param destination - destination to use */ - @Beta + // @Beta public OpenAiRealtimeClient(@Nonnull final Destination destination) { this.destination = destination; } @@ -58,7 +58,7 @@ public OpenAiRealtimeClient(@Nonnull final Destination destination) { * @return input channel, allowing for text input */ @Nonnull - @Beta + // @Beta public TextInputChannel textToSpeech( @Nonnull final AudioOutputChannel audioOutputConsumer, @Nonnull final RealtimeParam... params) { @@ -94,7 +94,7 @@ public TextInputChannel textToSpeech( * bit) */ @Nonnull - @Beta + // @Beta public AudioInputChannel speechToSpeech( @Nonnull final AudioOutputChannel audioOutputConsumer, @Nonnull final RealtimeParam... params) { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index 26214db7b..13567b841 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -4,7 +4,7 @@ import javax.annotation.Nonnull; /** Represents possible configuration params of realtime client */ -@Beta +// @Beta public interface RealtimeParam { /** Represents configurable options */ enum ParamName { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index 10ec75d3a..29da8344b 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -6,7 +6,7 @@ import javax.annotation.Nullable; /** Allows to configure model system prompt */ -@Beta +// @Beta public final class RealtimeParamSystemPrompt implements RealtimeParam { private final String systemPrompt; @@ -16,25 +16,24 @@ public final class RealtimeParamSystemPrompt implements RealtimeParam { * * @param systemPrompt system prompt to use */ - @Beta + // @Beta public RealtimeParamSystemPrompt(@Nonnull final String systemPrompt) { this.systemPrompt = systemPrompt; } @Override - @Beta + // @Beta public @Nonnull ParamName getParamName() { return ParamName.SYSTEM_PROMPT; } @Override - @Beta + // @Beta public @Nonnull String getValueAsString() { return systemPrompt; } @Override - @Beta public boolean equals(@Nullable final Object o) { if (o == null || getClass() != o.getClass()) { return false; @@ -44,7 +43,6 @@ public boolean equals(@Nullable final Object o) { } @Override - @Beta public int hashCode() { return Objects.hashCode(systemPrompt); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index cb087bca2..cdb0afffa 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -6,11 +6,11 @@ import javax.annotation.Nullable; /** Allows to configure turn detection (how model responds). */ -@Beta +// @Beta public final class RealtimeParamTurnDetection implements RealtimeParam { /** Model tries to recognize if/when it should respond automatically */ - @Beta + // @Beta public static final RealtimeParamTurnDetection BY_MODEL_AUTO = new RealtimeParamTurnDetection("BY_MODEL_AUTO"); @@ -19,7 +19,7 @@ public final class RealtimeParamTurnDetection implements RealtimeParam { * Less convenient than the automatic option but may give lower latency in some cases (model does * not need to perform additional turn detection analysis). */ - @Beta + // @Beta public static final RealtimeParamTurnDetection EACH_CALL_IS_A_TURN = new RealtimeParamTurnDetection("EACH_CALL_IS_A_TURN"); @@ -30,19 +30,18 @@ public final class RealtimeParamTurnDetection implements RealtimeParam { } @Override - @Beta + // @Beta public @Nonnull ParamName getParamName() { return ParamName.TURN_DETECTION; } @Override - @Beta + // @Beta public @Nonnull String getValueAsString() { return turnDetectionKind; } @Override - @Beta public boolean equals(@Nullable final Object o) { if (o == null || getClass() != o.getClass()) { return false; @@ -52,7 +51,6 @@ public boolean equals(@Nullable final Object o) { } @Override - @Beta public int hashCode() { return Objects.hashCode(turnDetectionKind); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index e5ff23f0b..33a01bbfe 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -6,14 +6,14 @@ import javax.annotation.Nullable; /** Allows to configure model output voice */ -@Beta +// @Beta public final class RealtimeParamVoice implements RealtimeParam { /** Standard voice 1 */ - @Beta public static final RealtimeParamVoice DEFAULT_1 = new RealtimeParamVoice("DEFAULT_1"); + /*@Beta*/ public static final RealtimeParamVoice DEFAULT_1 = new RealtimeParamVoice("DEFAULT_1"); /** Standard voice 2 */ - @Beta public static final RealtimeParamVoice DEFAULT_2 = new RealtimeParamVoice("DEFAULT_2"); + /*@Beta*/ public static final RealtimeParamVoice DEFAULT_2 = new RealtimeParamVoice("DEFAULT_2"); private final String voice; @@ -31,25 +31,24 @@ public final class RealtimeParamVoice implements RealtimeParam { * @return typed voice client configuration param */ @Nonnull - @Beta + // @Beta public static RealtimeParamVoice withExplicitVoice(@Nonnull final String voiceName) { return new RealtimeParamVoice(voiceName); } @Override - @Beta + // @Beta public @Nonnull ParamName getParamName() { return ParamName.OUTPUT_VOICE; } @Override - @Beta + // @Beta public @Nonnull String getValueAsString() { return voice; } @Override - @Beta public boolean equals(@Nullable final Object o) { if (o == null || getClass() != o.getClass()) { return false; @@ -59,7 +58,6 @@ public boolean equals(@Nullable final Object o) { } @Override - @Beta public int hashCode() { return Objects.hashCode(voice); } diff --git a/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java b/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java index 7a1fca93f..028a98cb9 100644 --- a/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java +++ b/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java @@ -87,7 +87,7 @@ static RptClient forDestination( * embedded {@link com.sap.ai.sdk.foundationmodels.rpt.generated.model.PredictionConfig} is * set to {@code null} on the passed-in object as a side effect. */ - @Beta + // @Beta @Nonnull public PredictResponsePayload tableCompletion(@Nonnull final PredictRequestPayload requestBody) { if (!contextModePossible) { @@ -132,7 +132,7 @@ private static PredictionConfig configFrom(@Nonnull final PredictRequestPayload * set to {@code null} as a side effect. * @since 1.16.0 */ - @Beta + // @Beta @Nonnull public PredictResponsePayload tableCompletion( @Nonnull final File parquetFile, @Nonnull final PredictionConfig predictionConfig) { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java index 4e63cbcd2..c41a30540 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java @@ -23,7 +23,7 @@ public interface ContentFilter { * * @return the corresponding {@link InputFilterConfig} object. */ - @Beta + // @Beta @Nonnull InputFilterConfig createInputFilterConfig(); @@ -33,7 +33,7 @@ public interface ContentFilter { * * @return the corresponding {@link OutputFilterConfig} object. */ - @Beta + // @Beta @Nonnull OutputFilterConfig createOutputFilterConfig(); } diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java index 452f04e6b..d61d3d0d6 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java @@ -15,7 +15,7 @@ * {@code @JsonCreator} annotations by intelligently detecting the JSON structure and choosing the * appropriate implementation. */ -@Beta +// @Beta class EmbeddingDeserializer extends JsonDeserializer { /** diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java index a03d22cd0..6db86b85f 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java @@ -33,7 +33,7 @@ public class Grounding implements GroundingProvider { @Nullable private List metadataParams = null; - @Setter(onMethod_ = {@Nonnull, @Beta}) + @Setter(onMethod_ = {@Nonnull /*, @Beta*/}) private TypeEnum documentGroundingService = TypeEnum.DOCUMENT_GROUNDING_SERVICE; /** diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java index 955a04def..b6af3c7f6 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java @@ -205,7 +205,7 @@ public OrchestrationChatResponse chatCompletionUsingReference( * @return The completion response. * @throws OrchestrationClientException If the request fails. */ - @Beta + // @Beta @Nonnull public OrchestrationChatResponse executeRequestFromJsonModuleConfig( @Nonnull final OrchestrationPrompt prompt, @Nonnull final String moduleConfig) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java index 5c136bea6..a74d9bcef 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java @@ -125,7 +125,7 @@ public OrchestrationError getClientError() { * @return The {@link ErrorResponse} object, or {@code null} if not available. * @since 1.10.0 */ - @Beta + // @Beta @Nullable public ErrorResponse getErrorResponse() { if (getClientError() instanceof OrchestrationError.Synchronous orchestrationError) { @@ -143,7 +143,7 @@ public ErrorResponse getErrorResponse() { * @return The {@link ErrorResponseStreaming} object, or {@code null} if not available. * @since 1.10.0 */ - @Beta + // @Beta @Nullable public ErrorResponseStreaming getErrorResponseStreaming() { if (getClientError() instanceof OrchestrationError.Streaming orchestrationError) { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java index 4279995b8..21744af0a 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java @@ -24,7 +24,7 @@ * @since 1.2.0 * @param The base type for deserialization. */ -@Beta +// @Beta @AllArgsConstructor(access = AccessLevel.PROTECTED) class PolymorphicFallbackDeserializer extends JsonDeserializer { From 269ffa9b9813ae260bc35be7e10cc3644eefe55a Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Fri, 11 Sep 2026 14:19:22 +0000 Subject: [PATCH 02/27] Formatting --- .../sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java | 1 - core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java | 1 - .../java/com/sap/ai/sdk/core/common/ClientResponseHandler.java | 1 - .../java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java | 1 - .../sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java | 1 - .../sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java | 1 - .../com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java | 1 - .../foundationmodels/openai/realtime/AudioOutputChannel.java | 2 -- .../foundationmodels/openai/realtime/OpenAiRealtimeClient.java | 1 - .../ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java | 1 - .../openai/realtime/RealtimeParamSystemPrompt.java | 1 - .../openai/realtime/RealtimeParamTurnDetection.java | 1 - .../foundationmodels/openai/realtime/RealtimeParamVoice.java | 1 - .../main/java/com/sap/ai/sdk/orchestration/ContentFilter.java | 1 - .../com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java | 1 - .../src/main/java/com/sap/ai/sdk/orchestration/Grounding.java | 1 - .../java/com/sap/ai/sdk/orchestration/OrchestrationClient.java | 1 - .../ai/sdk/orchestration/PolymorphicFallbackDeserializer.java | 1 - 18 files changed, 19 deletions(-) diff --git a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java index 6833b1d43..dc9ff9b34 100644 --- a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java +++ b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.prompt.registry.client.OrchestrationConfigsApi; import com.sap.ai.sdk.prompt.registry.model.AzureContentSafetyInputFilterConfig; diff --git a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java index b91326053..a33814185 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java +++ b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java @@ -3,7 +3,6 @@ import static com.sap.ai.sdk.core.JacksonConfiguration.getDefaultObjectMapper; import com.fasterxml.jackson.databind.json.JsonMapper; -import com.google.common.annotations.Beta; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.HttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.exception.DestinationAccessException; diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java index 359e95d78..05df53d9a 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.annotations.Beta; import io.vavr.control.Try; import java.nio.charset.StandardCharsets; import java.util.Optional; diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java index 45a8ea6fe..232d782d3 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java @@ -3,7 +3,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.annotations.Beta; import java.io.IOException; import java.util.stream.Stream; import javax.annotation.Nonnull; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java index dad2b3ec2..c8828a0f2 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai; -import com.google.common.annotations.Beta; import com.openai.core.ClientOptions; import com.openai.services.async.ResponseServiceAsync; import com.openai.services.async.ResponseServiceAsyncImpl; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java index 67049fa71..6b6709eaa 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.foundationmodels.openai.generated.model.CreateChatCompletionRequest; import java.io.IOException; import java.util.ArrayList; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index 78936124e..3d1660bf9 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.core.DeploymentResolutionException; import com.sap.ai.sdk.core.common.ClientResponseHandler; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java index 4e42a6437..dd63259a0 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java @@ -1,7 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; - /** Functional interface representing audio output channel (audio data consumer) */ // @Beta public interface AudioOutputChannel { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java index 39dfbce37..791e45ec1 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.foundationmodels.openai.TextInputChannel; import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; import com.sap.cloud.sdk.cloudplatform.connectivity.Header; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index 13567b841..e53d70a18 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import javax.annotation.Nonnull; /** Represents possible configuration params of realtime client */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index 29da8344b..879308eaf 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index cdb0afffa..a7d50b30d 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index 33a01bbfe..f0226c45e 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java index c41a30540..490cbc607 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.orchestration; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.orchestration.model.InputFilterConfig; import com.sap.ai.sdk.orchestration.model.OutputFilterConfig; import javax.annotation.Nonnull; diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java index d61d3d0d6..a3d6569cb 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonMappingException; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.orchestration.model.Embedding; import com.sap.ai.sdk.orchestration.model.EmbeddingMultiFormat; import java.io.IOException; diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java index 6db86b85f..01cfba06d 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.orchestration; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.orchestration.model.DataRepositoryType; import com.sap.ai.sdk.orchestration.model.DocumentGroundingFilter; import com.sap.ai.sdk.orchestration.model.GroundingModuleConfig; diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java index b6af3c7f6..157097a6d 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java @@ -6,7 +6,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.orchestration.model.CompletionPostRequest; import com.sap.ai.sdk.orchestration.model.CompletionPostResponse; diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java index 21744af0a..e49223f32 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonMappingException; -import com.google.common.annotations.Beta; import java.io.IOException; import java.util.ArrayList; import java.util.List; From acc1719b2c2ef71b4fb2b075ddd9c76837fc9f6a Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Tue, 15 Sep 2026 17:25:32 +0200 Subject: [PATCH 03/27] wip --- core-services/prompt-registry/pom.xml | 4 ---- core/pom.xml | 4 ---- foundation-models/sap-rpt/pom.xml | 4 ---- 3 files changed, 12 deletions(-) diff --git a/core-services/prompt-registry/pom.xml b/core-services/prompt-registry/pom.xml index e7880ee9d..7b826fcc8 100644 --- a/core-services/prompt-registry/pom.xml +++ b/core-services/prompt-registry/pom.xml @@ -73,10 +73,6 @@ com.fasterxml.jackson.core jackson-core - - com.google.guava - guava - com.fasterxml.jackson.core jackson-annotations diff --git a/core/pom.xml b/core/pom.xml index 7df195f49..cebd81148 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -89,10 +89,6 @@ com.fasterxml.jackson.module jackson-module-parameter-names - - com.google.guava - guava - org.slf4j slf4j-api diff --git a/foundation-models/sap-rpt/pom.xml b/foundation-models/sap-rpt/pom.xml index 920e16877..215b91a1b 100644 --- a/foundation-models/sap-rpt/pom.xml +++ b/foundation-models/sap-rpt/pom.xml @@ -76,10 +76,6 @@ com.google.code.findbugs jsr305 - - com.google.guava - guava - org.projectlombok From 91834ff6739f56674969db12046c8667810efae1 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 11:51:49 +0200 Subject: [PATCH 04/27] actualize @beta annotations --- .../prompt/registry/OrchestrationConfigClient.java | 1 - .../ai/sdk/core/common/ClientResponseHandler.java | 1 - .../openai/AiCoreOpenAiClient.java | 3 ++- .../foundationmodels/openai/OpenAiBatchInput.java | 3 ++- .../sdk/foundationmodels/openai/OpenAiClient.java | 3 ++- .../openai/OpenAiClientException.java | 2 +- .../foundationmodels/openai/TextInputChannel.java | 2 +- .../openai/realtime/AudioInputChannel.java | 4 ++-- .../openai/realtime/AudioOutputChannel.java | 6 ++++-- .../openai/realtime/OpenAiRealtimeClient.java | 9 +++++---- .../openai/realtime/RealtimeParam.java | 4 +++- .../openai/realtime/RealtimeParamSystemPrompt.java | 10 ++++++---- .../realtime/RealtimeParamTurnDetection.java | 12 +++++++----- .../openai/realtime/RealtimeParamVoice.java | 14 ++++++++------ .../sap/ai/sdk/foundationmodels/rpt/RptClient.java | 4 ++-- .../OrchestrationClientException.java | 4 ++-- .../PolymorphicFallbackDeserializer.java | 1 - 17 files changed, 47 insertions(+), 36 deletions(-) diff --git a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java index dc9ff9b34..62eb6f662 100644 --- a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java +++ b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigClient.java @@ -22,7 +22,6 @@ * * @since 1.15.0 */ -// @Beta public class OrchestrationConfigClient extends OrchestrationConfigsApi { /** diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java index 05df53d9a..f31abfe2c 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java @@ -48,7 +48,6 @@ public class ClientResponseHandler objectMapper(@Nonnull final ObjectMapper jackson) { objectMapper = jackson; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java index c8828a0f2..826695f68 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java @@ -1,5 +1,6 @@ package com.sap.ai.sdk.foundationmodels.openai; +import com.google.common.annotations.Beta; import com.openai.core.ClientOptions; import com.openai.services.async.ResponseServiceAsync; import com.openai.services.async.ResponseServiceAsyncImpl; @@ -23,7 +24,7 @@ */ @Slf4j @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -// @Beta +@Beta public class AiCoreOpenAiClient { private final HttpDestination destination; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java index 6b6709eaa..c98c425bb 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.annotations.Beta; import com.sap.ai.sdk.foundationmodels.openai.generated.model.CreateChatCompletionRequest; import java.io.IOException; import java.util.ArrayList; @@ -36,7 +37,7 @@ public class OpenAiBatchInput { * * @param chatCompletionRequests the list of chat completion requests to include in the batch */ - // @Beta + @Beta public OpenAiBatchInput(@Nonnull final OpenAiChatCompletionRequest... chatCompletionRequests) { for (int i = 0; i < chatCompletionRequests.length; i++) { val request = chatCompletionRequests[i]; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index 3d1660bf9..c9b745c3b 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.core.DeploymentResolutionException; import com.sap.ai.sdk.core.common.ClientResponseHandler; @@ -81,7 +82,7 @@ public static OpenAiClient forModel(@Nonnull final OpenAiModel foundationModel) * * @return created client */ - // @Beta + @Beta @Nonnull public static OpenAiRealtimeClient realtimeClient() { final var withResolvedDestination = OpenAiClient.forModel(OpenAiModel.GPT_REALTIME); diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java index 126ab8661..2042c18f9 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java @@ -22,7 +22,7 @@ public class OpenAiClientException extends ClientException { * * @return The {@link ErrorResponse} object, or {@code null} if not available. */ - // @Beta + @Beta @Nullable public ErrorResponse getErrorResponse() { final var clientError = super.getClientError(); diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java index 80ec4bf78..bbd78c40a 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java @@ -7,7 +7,7 @@ * Allows to input (send) text to the open channel, must be closed when not needed anymore (e.g. * try-with-resources) */ -// @Beta +@Beta public interface TextInputChannel extends AutoCloseable { /** diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java index 8ee9e8cc5..69ca70ec1 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java @@ -7,7 +7,7 @@ * *

Should be closed by application (try-with-resources) when not needed anymore */ -// @Beta +@Beta public interface AudioInputChannel extends AutoCloseable { /** @@ -16,7 +16,7 @@ public interface AudioInputChannel extends AutoCloseable { * context * * @param rawBytesChunk binary data in the depending on the use case format - */ + */§§ @Beta void inputAudio(byte[] rawBytesChunk); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java index dd63259a0..1d8733184 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java @@ -1,7 +1,9 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; +import com.google.common.annotations.Beta; + /** Functional interface representing audio output channel (audio data consumer) */ -// @Beta +@Beta public interface AudioOutputChannel { /** @@ -14,6 +16,6 @@ public interface AudioOutputChannel { * single logical entity (e.g. gets called at the end when all byte parts of a single message * get passed) */ - // @Beta + @Beta void outputAudio(byte[] rawBytesChunk, boolean isLast); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java index 791e45ec1..98ce597ac 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java @@ -1,5 +1,6 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; +import com.google.common.annotations.Beta; import com.sap.ai.sdk.foundationmodels.openai.TextInputChannel; import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; import com.sap.cloud.sdk.cloudplatform.connectivity.Header; @@ -11,7 +12,7 @@ * OpenAI client implementation of Realtime API. Abstracts technical implementation, transport and * threading and exposes business-level operations (high level interface) */ -// @Beta +@Beta public class OpenAiRealtimeClient { static final int PATH_BUFFER_SIZE = @@ -24,7 +25,7 @@ public class OpenAiRealtimeClient { * * @param destination - destination to use */ - // @Beta + @Beta public OpenAiRealtimeClient(@Nonnull final Destination destination) { this.destination = destination; } @@ -57,7 +58,7 @@ public OpenAiRealtimeClient(@Nonnull final Destination destination) { * @return input channel, allowing for text input */ @Nonnull - // @Beta + @Beta public TextInputChannel textToSpeech( @Nonnull final AudioOutputChannel audioOutputConsumer, @Nonnull final RealtimeParam... params) { @@ -93,7 +94,7 @@ public TextInputChannel textToSpeech( * bit) */ @Nonnull - // @Beta + @Beta public AudioInputChannel speechToSpeech( @Nonnull final AudioOutputChannel audioOutputConsumer, @Nonnull final RealtimeParam... params) { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index e53d70a18..2909271ab 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -1,9 +1,11 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; +import com.google.common.annotations.Beta; + import javax.annotation.Nonnull; /** Represents possible configuration params of realtime client */ -// @Beta +@Beta public interface RealtimeParam { /** Represents configurable options */ enum ParamName { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index 879308eaf..bc0531e8b 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -1,11 +1,13 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; +import com.google.common.annotations.Beta; + import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; /** Allows to configure model system prompt */ -// @Beta +@Beta public final class RealtimeParamSystemPrompt implements RealtimeParam { private final String systemPrompt; @@ -15,19 +17,19 @@ public final class RealtimeParamSystemPrompt implements RealtimeParam { * * @param systemPrompt system prompt to use */ - // @Beta + @Beta public RealtimeParamSystemPrompt(@Nonnull final String systemPrompt) { this.systemPrompt = systemPrompt; } @Override - // @Beta + @Beta public @Nonnull ParamName getParamName() { return ParamName.SYSTEM_PROMPT; } @Override - // @Beta + @Beta public @Nonnull String getValueAsString() { return systemPrompt; } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index a7d50b30d..a4dc54cca 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -1,15 +1,17 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; +import com.google.common.annotations.Beta; + import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; /** Allows to configure turn detection (how model responds). */ -// @Beta +@Beta public final class RealtimeParamTurnDetection implements RealtimeParam { /** Model tries to recognize if/when it should respond automatically */ - // @Beta + @Beta public static final RealtimeParamTurnDetection BY_MODEL_AUTO = new RealtimeParamTurnDetection("BY_MODEL_AUTO"); @@ -18,7 +20,7 @@ public final class RealtimeParamTurnDetection implements RealtimeParam { * Less convenient than the automatic option but may give lower latency in some cases (model does * not need to perform additional turn detection analysis). */ - // @Beta + @Beta public static final RealtimeParamTurnDetection EACH_CALL_IS_A_TURN = new RealtimeParamTurnDetection("EACH_CALL_IS_A_TURN"); @@ -29,13 +31,13 @@ public final class RealtimeParamTurnDetection implements RealtimeParam { } @Override - // @Beta + @Beta public @Nonnull ParamName getParamName() { return ParamName.TURN_DETECTION; } @Override - // @Beta + @Beta public @Nonnull String getValueAsString() { return turnDetectionKind; } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index f0226c45e..5422b57eb 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -1,18 +1,20 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; +import com.google.common.annotations.Beta; + import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; /** Allows to configure model output voice */ -// @Beta +@Beta public final class RealtimeParamVoice implements RealtimeParam { /** Standard voice 1 */ - /*@Beta*/ public static final RealtimeParamVoice DEFAULT_1 = new RealtimeParamVoice("DEFAULT_1"); + @Beta public static final RealtimeParamVoice DEFAULT_1 = new RealtimeParamVoice("DEFAULT_1"); /** Standard voice 2 */ - /*@Beta*/ public static final RealtimeParamVoice DEFAULT_2 = new RealtimeParamVoice("DEFAULT_2"); + @Beta public static final RealtimeParamVoice DEFAULT_2 = new RealtimeParamVoice("DEFAULT_2"); private final String voice; @@ -30,19 +32,19 @@ public final class RealtimeParamVoice implements RealtimeParam { * @return typed voice client configuration param */ @Nonnull - // @Beta + @Beta public static RealtimeParamVoice withExplicitVoice(@Nonnull final String voiceName) { return new RealtimeParamVoice(voiceName); } @Override - // @Beta + @Beta public @Nonnull ParamName getParamName() { return ParamName.OUTPUT_VOICE; } @Override - // @Beta + @Beta public @Nonnull String getValueAsString() { return voice; } diff --git a/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java b/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java index 028a98cb9..7a1fca93f 100644 --- a/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java +++ b/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java @@ -87,7 +87,7 @@ static RptClient forDestination( * embedded {@link com.sap.ai.sdk.foundationmodels.rpt.generated.model.PredictionConfig} is * set to {@code null} on the passed-in object as a side effect. */ - // @Beta + @Beta @Nonnull public PredictResponsePayload tableCompletion(@Nonnull final PredictRequestPayload requestBody) { if (!contextModePossible) { @@ -132,7 +132,7 @@ private static PredictionConfig configFrom(@Nonnull final PredictRequestPayload * set to {@code null} as a side effect. * @since 1.16.0 */ - // @Beta + @Beta @Nonnull public PredictResponsePayload tableCompletion( @Nonnull final File parquetFile, @Nonnull final PredictionConfig predictionConfig) { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java index a74d9bcef..5c136bea6 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java @@ -125,7 +125,7 @@ public OrchestrationError getClientError() { * @return The {@link ErrorResponse} object, or {@code null} if not available. * @since 1.10.0 */ - // @Beta + @Beta @Nullable public ErrorResponse getErrorResponse() { if (getClientError() instanceof OrchestrationError.Synchronous orchestrationError) { @@ -143,7 +143,7 @@ public ErrorResponse getErrorResponse() { * @return The {@link ErrorResponseStreaming} object, or {@code null} if not available. * @since 1.10.0 */ - // @Beta + @Beta @Nullable public ErrorResponseStreaming getErrorResponseStreaming() { if (getClientError() instanceof OrchestrationError.Streaming orchestrationError) { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java index e49223f32..5d948d3be 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/PolymorphicFallbackDeserializer.java @@ -23,7 +23,6 @@ * @since 1.2.0 * @param The base type for deserialization. */ -// @Beta @AllArgsConstructor(access = AccessLevel.PROTECTED) class PolymorphicFallbackDeserializer extends JsonDeserializer { From 0936310cab32d9138ccac3cb7647ddc0d15c4c1d Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 13:07:06 +0200 Subject: [PATCH 05/27] actualize @beta annotations --- .../com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java | 1 - .../sdk/foundationmodels/openai/realtime/AudioInputChannel.java | 2 +- .../ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java | 1 - .../openai/realtime/RealtimeParamSystemPrompt.java | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index c9b745c3b..e2c766017 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -95,7 +95,6 @@ public static OpenAiRealtimeClient realtimeClient() { * @param apiVersion the API version to target. * @return a new client. */ - // @Beta @Nonnull public OpenAiClient withApiVersion(@Nonnull final String apiVersion) { final var newDestination = diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java index 69ca70ec1..af37b6b43 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java @@ -16,7 +16,7 @@ public interface AudioInputChannel extends AutoCloseable { * context * * @param rawBytesChunk binary data in the depending on the use case format - */§§ + */ @Beta void inputAudio(byte[] rawBytesChunk); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index 2909271ab..26214db7b 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -1,7 +1,6 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; import com.google.common.annotations.Beta; - import javax.annotation.Nonnull; /** Represents possible configuration params of realtime client */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index bc0531e8b..4ca416c2b 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -1,7 +1,6 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; import com.google.common.annotations.Beta; - import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; From 7b731eaa5253736ce4c6f2eb153f2e26646e4b85 Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Thu, 17 Sep 2026 11:07:49 +0000 Subject: [PATCH 06/27] Formatting --- .../openai/realtime/RealtimeParamTurnDetection.java | 1 - .../sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java | 1 - 2 files changed, 2 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index a4dc54cca..23884d8e2 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -1,7 +1,6 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; import com.google.common.annotations.Beta; - import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index 5422b57eb..8b7858dd9 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -1,7 +1,6 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; import com.google.common.annotations.Beta; - import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; From 5232ea5150e8ac6918d34cce954da396d24ae754 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 13:11:35 +0200 Subject: [PATCH 07/27] actualize @beta annotations --- .../java/com/sap/ai/sdk/orchestration/ContentFilter.java | 5 +++-- .../com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java index 490cbc607..4e63cbcd2 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java @@ -1,5 +1,6 @@ package com.sap.ai.sdk.orchestration; +import com.google.common.annotations.Beta; import com.sap.ai.sdk.orchestration.model.InputFilterConfig; import com.sap.ai.sdk.orchestration.model.OutputFilterConfig; import javax.annotation.Nonnull; @@ -22,7 +23,7 @@ public interface ContentFilter { * * @return the corresponding {@link InputFilterConfig} object. */ - // @Beta + @Beta @Nonnull InputFilterConfig createInputFilterConfig(); @@ -32,7 +33,7 @@ public interface ContentFilter { * * @return the corresponding {@link OutputFilterConfig} object. */ - // @Beta + @Beta @Nonnull OutputFilterConfig createOutputFilterConfig(); } diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java index a3d6569cb..8b7d472b5 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/EmbeddingDeserializer.java @@ -14,7 +14,6 @@ * {@code @JsonCreator} annotations by intelligently detecting the JSON structure and choosing the * appropriate implementation. */ -// @Beta class EmbeddingDeserializer extends JsonDeserializer { /** From 077f104e267eb4303ed4fc2ced8a13af0cfe2615 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 13:47:37 +0200 Subject: [PATCH 08/27] actualize @beta annotations --- foundation-models/sap-rpt/pom.xml | 4 ++++ .../src/main/java/com/sap/ai/sdk/orchestration/Grounding.java | 4 +++- .../com/sap/ai/sdk/orchestration/OrchestrationClient.java | 1 - 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/foundation-models/sap-rpt/pom.xml b/foundation-models/sap-rpt/pom.xml index 215b91a1b..920e16877 100644 --- a/foundation-models/sap-rpt/pom.xml +++ b/foundation-models/sap-rpt/pom.xml @@ -76,6 +76,10 @@ com.google.code.findbugs jsr305 + + com.google.guava + guava + org.projectlombok diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java index 01cfba06d..bdf9af314 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java @@ -1,5 +1,6 @@ package com.sap.ai.sdk.orchestration; +import com.google.common.annotations.Beta; import com.sap.ai.sdk.orchestration.model.DataRepositoryType; import com.sap.ai.sdk.orchestration.model.DocumentGroundingFilter; import com.sap.ai.sdk.orchestration.model.GroundingModuleConfig; @@ -11,6 +12,7 @@ import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.Nullable; + import lombok.Setter; import lombok.experimental.Accessors; import lombok.val; @@ -32,7 +34,7 @@ public class Grounding implements GroundingProvider { @Nullable private List metadataParams = null; - @Setter(onMethod_ = {@Nonnull /*, @Beta*/}) + @Setter(onMethod_ = {@Nonnull, @Beta}) private TypeEnum documentGroundingService = TypeEnum.DOCUMENT_GROUNDING_SERVICE; /** diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java index 157097a6d..3de42e925 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java @@ -204,7 +204,6 @@ public OrchestrationChatResponse chatCompletionUsingReference( * @return The completion response. * @throws OrchestrationClientException If the request fails. */ - // @Beta @Nonnull public OrchestrationChatResponse executeRequestFromJsonModuleConfig( @Nonnull final OrchestrationPrompt prompt, @Nonnull final String moduleConfig) From aeff862e30d53348956ff3b8c46ab53a74c4a1db Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Thu, 17 Sep 2026 11:48:33 +0000 Subject: [PATCH 09/27] Formatting --- .../src/main/java/com/sap/ai/sdk/orchestration/Grounding.java | 1 - 1 file changed, 1 deletion(-) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java index bdf9af314..a03d22cd0 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java @@ -12,7 +12,6 @@ import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.Nullable; - import lombok.Setter; import lombok.experimental.Accessors; import lombok.val; From d8e6b790026e1d7dc9a076e933e22fa2f3af88f2 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 13:52:37 +0200 Subject: [PATCH 10/27] actualize @beta annotations --- core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java index a33814185..471923a06 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java +++ b/core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java @@ -138,7 +138,6 @@ protected String buildDeploymentPath(@Nonnull final String deploymentId) { * * @param resourceGroup the resource group of the deleted deployment, usually "default". */ - // @Beta public void reloadCachedDeployments(@Nonnull final String resourceGroup) { deploymentResolver.reloadDeployments(resourceGroup); } From 1275fe221283f8741994599e3a5257b99b7a3dd4 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 13:56:11 +0200 Subject: [PATCH 11/27] actualize @beta annotations --- .../java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java index 232d782d3..31df6c182 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java @@ -29,7 +29,6 @@ public class ClientStreamingHandler< * @return the current instance of {@link ClientStreamingHandler} with the changed object mapper */ @Nonnull - // @Beta public ClientStreamingHandler objectMapper(@Nonnull final ObjectMapper jackson) { super.objectMapper(jackson); return this; From ab421b13339e9abe1f44d061370c35d315e21ee9 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 14:33:05 +0200 Subject: [PATCH 12/27] actualize @beta annotations --- .../ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java | 1 - .../sap/ai/sdk/foundationmodels/openai/OpenAiClient.java | 3 +++ .../ai/sdk/foundationmodels/openai/TextInputChannel.java | 2 ++ .../foundationmodels/openai/realtime/AudioInputChannel.java | 3 +++ .../openai/realtime/AudioOutputChannel.java | 4 +++- .../openai/realtime/OpenAiRealtimeClient.java | 3 +++ .../sdk/foundationmodels/openai/realtime/RealtimeParam.java | 4 +++- .../openai/realtime/RealtimeParamSystemPrompt.java | 4 +++- .../openai/realtime/RealtimeParamTurnDetection.java | 4 +++- .../openai/realtime/RealtimeParamVoice.java | 6 +++++- .../java/com/sap/ai/sdk/orchestration/ContentFilter.java | 5 +++++ 11 files changed, 33 insertions(+), 6 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java index 826695f68..01cef7f3e 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java @@ -24,7 +24,6 @@ */ @Slf4j @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -@Beta public class AiCoreOpenAiClient { private final HttpDestination destination; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index e2c766017..ce5f9af91 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -80,6 +80,9 @@ public static OpenAiClient forModel(@Nonnull final OpenAiModel foundationModel) /** * Creates and configures OpenAI Realtime API client * + *

Note: This method is marked as {@link Beta} because it represents + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + * * @return created client */ @Beta diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java index bbd78c40a..2bf1cf57a 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java @@ -6,6 +6,8 @@ /** * Allows to input (send) text to the open channel, must be closed when not needed anymore (e.g. * try-with-resources) + *

Note: This class is marked as {@link Beta} because it represents + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes */ @Beta public interface TextInputChannel extends AutoCloseable { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java index af37b6b43..85a569f30 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java @@ -5,6 +5,9 @@ /** * Functional interface representing audio input channel (used by audio data producer) * + *

Note: This class is marked as {@link Beta} because it represents + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + * *

Should be closed by application (try-with-resources) when not needed anymore */ @Beta diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java index 1d8733184..1393e2c07 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java @@ -2,7 +2,9 @@ import com.google.common.annotations.Beta; -/** Functional interface representing audio output channel (audio data consumer) */ +/** Functional interface representing audio output channel (audio data consumer) + *

Note: This class is marked as {@link Beta} because it represents + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ @Beta public interface AudioOutputChannel { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java index 98ce597ac..9b0b0c67a 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java @@ -11,6 +11,9 @@ /** * OpenAI client implementation of Realtime API. Abstracts technical implementation, transport and * threading and exposes business-level operations (high level interface) + * + *

Note: This class and multiple its methods are marked as {@link Beta} because they represent + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes */ @Beta public class OpenAiRealtimeClient { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index 26214db7b..d5d5fc92e 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -3,7 +3,9 @@ import com.google.common.annotations.Beta; import javax.annotation.Nonnull; -/** Represents possible configuration params of realtime client */ +/** Represents possible configuration params of realtime client + *

Note: This class and multiple its methods are marked as {@link Beta} because they represent + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ @Beta public interface RealtimeParam { /** Represents configurable options */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index 4ca416c2b..2f610d862 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -5,7 +5,9 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure model system prompt */ +/** Allows to configure model system prompt + *

Note: This class and multiple its methods are marked as {@link Beta} because they represent + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ @Beta public final class RealtimeParamSystemPrompt implements RealtimeParam { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index 23884d8e2..e61d8a786 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -5,7 +5,9 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure turn detection (how model responds). */ +/** Allows to configure turn detection (how model responds). + *

Note: This class and multiple its methods are marked as {@link Beta} because they represent + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes */ @Beta public final class RealtimeParamTurnDetection implements RealtimeParam { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index 8b7858dd9..9ed7b9077 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -5,7 +5,11 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure model output voice */ +/** Allows to configure model output voice + * + *

Note: This class and multiple its methods are marked as {@link Beta} because they represent + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + * */ @Beta public final class RealtimeParamVoice implements RealtimeParam { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java index 4e63cbcd2..489f23293 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java @@ -20,6 +20,8 @@ public interface ContentFilter { /** * A method that produces the serializable equivalent {@link InputFilterConfig} object from data * encapsulated in the {@link ContentFilter} object. + *

Note: This method is marked as {@link Beta} because it uses generated API types in its + * public signature. * * @return the corresponding {@link InputFilterConfig} object. */ @@ -31,6 +33,9 @@ public interface ContentFilter { * A method that produces the serializable equivalent {@link OutputFilterConfig} object from data * encapsulated in the {@link ContentFilter} object. * + *

Note: This method is marked as {@link Beta} because it uses generated API types in its + * public signature. + * * @return the corresponding {@link OutputFilterConfig} object. */ @Beta From ced75767e39e40b09dd2c8e1614d51db0b6efe65 Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Thu, 17 Sep 2026 12:34:04 +0000 Subject: [PATCH 13/27] Formatting --- .../sdk/foundationmodels/openai/AiCoreOpenAiClient.java | 1 - .../sap/ai/sdk/foundationmodels/openai/OpenAiClient.java | 4 ++-- .../ai/sdk/foundationmodels/openai/TextInputChannel.java | 5 +++-- .../openai/realtime/AudioInputChannel.java | 4 ++-- .../openai/realtime/AudioOutputChannel.java | 9 ++++++--- .../openai/realtime/OpenAiRealtimeClient.java | 3 ++- .../foundationmodels/openai/realtime/RealtimeParam.java | 8 ++++++-- .../openai/realtime/RealtimeParamSystemPrompt.java | 8 ++++++-- .../openai/realtime/RealtimeParamTurnDetection.java | 8 ++++++-- .../openai/realtime/RealtimeParamVoice.java | 8 +++++--- .../java/com/sap/ai/sdk/orchestration/ContentFilter.java | 1 + 11 files changed, 39 insertions(+), 20 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java index 01cef7f3e..39ddc0c96 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai; -import com.google.common.annotations.Beta; import com.openai.core.ClientOptions; import com.openai.services.async.ResponseServiceAsync; import com.openai.services.async.ResponseServiceAsyncImpl; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index ce5f9af91..df7382408 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -80,8 +80,8 @@ public static OpenAiClient forModel(@Nonnull final OpenAiModel foundationModel) /** * Creates and configures OpenAI Realtime API client * - *

Note: This method is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + *

Note: This method is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes * * @return created client */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java index 2bf1cf57a..1af1c66a8 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java @@ -6,8 +6,9 @@ /** * Allows to input (send) text to the open channel, must be closed when not needed anymore (e.g. * try-with-resources) - *

Note: This class is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + * + *

Note: This class is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes */ @Beta public interface TextInputChannel extends AutoCloseable { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java index 85a569f30..76a534623 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java @@ -5,8 +5,8 @@ /** * Functional interface representing audio input channel (used by audio data producer) * - *

Note: This class is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + *

Note: This class is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes * *

Should be closed by application (try-with-resources) when not needed anymore */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java index 1393e2c07..ba2a2b1b4 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java @@ -2,9 +2,12 @@ import com.google.common.annotations.Beta; -/** Functional interface representing audio output channel (audio data consumer) - *

Note: This class is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ +/** + * Functional interface representing audio output channel (audio data consumer) + * + *

Note: This class is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes + */ @Beta public interface AudioOutputChannel { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java index 9b0b0c67a..23118c314 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java @@ -13,7 +13,8 @@ * threading and exposes business-level operations (high level interface) * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes */ @Beta public class OpenAiRealtimeClient { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index d5d5fc92e..d8f54d926 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -3,9 +3,13 @@ import com.google.common.annotations.Beta; import javax.annotation.Nonnull; -/** Represents possible configuration params of realtime client +/** + * Represents possible configuration params of realtime client + * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public interface RealtimeParam { /** Represents configurable options */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index 2f610d862..af427e884 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -5,9 +5,13 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure model system prompt +/** + * Allows to configure model system prompt + * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public final class RealtimeParamSystemPrompt implements RealtimeParam { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index e61d8a786..c1ed1638a 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -5,9 +5,13 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure turn detection (how model responds). +/** + * Allows to configure turn detection (how model responds). + * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes */ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public final class RealtimeParamTurnDetection implements RealtimeParam { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index 9ed7b9077..5bb5e4342 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -5,11 +5,13 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure model output voice +/** + * Allows to configure model output voice * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes - * */ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public final class RealtimeParamVoice implements RealtimeParam { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java index 489f23293..174726015 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java @@ -20,6 +20,7 @@ public interface ContentFilter { /** * A method that produces the serializable equivalent {@link InputFilterConfig} object from data * encapsulated in the {@link ContentFilter} object. + * *

Note: This method is marked as {@link Beta} because it uses generated API types in its * public signature. * From 94176b7176e3d2e24975fd35a31adc543a403cac Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 17 Sep 2026 16:57:52 +0200 Subject: [PATCH 14/27] actualize @beta annotations --- .../sdk/foundationmodels/openai/AiCoreOpenAiClient.java | 1 - .../sap/ai/sdk/foundationmodels/openai/OpenAiClient.java | 4 ++-- .../ai/sdk/foundationmodels/openai/TextInputChannel.java | 5 +++-- .../openai/realtime/AudioInputChannel.java | 4 ++-- .../openai/realtime/AudioOutputChannel.java | 9 ++++++--- .../openai/realtime/OpenAiRealtimeClient.java | 3 ++- .../foundationmodels/openai/realtime/RealtimeParam.java | 8 ++++++-- .../openai/realtime/RealtimeParamSystemPrompt.java | 8 ++++++-- .../openai/realtime/RealtimeParamTurnDetection.java | 8 ++++++-- .../openai/realtime/RealtimeParamVoice.java | 8 +++++--- .../java/com/sap/ai/sdk/orchestration/ContentFilter.java | 1 + 11 files changed, 39 insertions(+), 20 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java index 01cef7f3e..39ddc0c96 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/AiCoreOpenAiClient.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai; -import com.google.common.annotations.Beta; import com.openai.core.ClientOptions; import com.openai.services.async.ResponseServiceAsync; import com.openai.services.async.ResponseServiceAsyncImpl; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index ce5f9af91..df7382408 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -80,8 +80,8 @@ public static OpenAiClient forModel(@Nonnull final OpenAiModel foundationModel) /** * Creates and configures OpenAI Realtime API client * - *

Note: This method is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + *

Note: This method is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes * * @return created client */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java index 2bf1cf57a..1af1c66a8 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java @@ -6,8 +6,9 @@ /** * Allows to input (send) text to the open channel, must be closed when not needed anymore (e.g. * try-with-resources) - *

Note: This class is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + * + *

Note: This class is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes */ @Beta public interface TextInputChannel extends AutoCloseable { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java index 85a569f30..76a534623 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java @@ -5,8 +5,8 @@ /** * Functional interface representing audio input channel (used by audio data producer) * - *

Note: This class is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + *

Note: This class is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes * *

Should be closed by application (try-with-resources) when not needed anymore */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java index 1393e2c07..ba2a2b1b4 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java @@ -2,9 +2,12 @@ import com.google.common.annotations.Beta; -/** Functional interface representing audio output channel (audio data consumer) - *

Note: This class is marked as {@link Beta} because it represents - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ +/** + * Functional interface representing audio output channel (audio data consumer) + * + *

Note: This class is marked as {@link Beta} because it represents newly introduced API which + * has not yet been sufficiently stabilized and has significant risk of changes + */ @Beta public interface AudioOutputChannel { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java index 9b0b0c67a..23118c314 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java @@ -13,7 +13,8 @@ * threading and exposes business-level operations (high level interface) * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes */ @Beta public class OpenAiRealtimeClient { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index d5d5fc92e..d8f54d926 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -3,9 +3,13 @@ import com.google.common.annotations.Beta; import javax.annotation.Nonnull; -/** Represents possible configuration params of realtime client +/** + * Represents possible configuration params of realtime client + * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public interface RealtimeParam { /** Represents configurable options */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index 2f610d862..af427e884 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -5,9 +5,13 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure model system prompt +/** + * Allows to configure model system prompt + * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes*/ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public final class RealtimeParamSystemPrompt implements RealtimeParam { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index e61d8a786..c1ed1638a 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -5,9 +5,13 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure turn detection (how model responds). +/** + * Allows to configure turn detection (how model responds). + * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes */ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public final class RealtimeParamTurnDetection implements RealtimeParam { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index 9ed7b9077..5bb5e4342 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -5,11 +5,13 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** Allows to configure model output voice +/** + * Allows to configure model output voice * *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of changes - * */ + * newly introduced API which has not yet been sufficiently stabilized and has significant risk of + * changes + */ @Beta public final class RealtimeParamVoice implements RealtimeParam { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java index 489f23293..174726015 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java @@ -20,6 +20,7 @@ public interface ContentFilter { /** * A method that produces the serializable equivalent {@link InputFilterConfig} object from data * encapsulated in the {@link ContentFilter} object. + * *

Note: This method is marked as {@link Beta} because it uses generated API types in its * public signature. * From 7cfe08665867b9bec6d45eb520dd01e23d25e48d Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Fri, 18 Sep 2026 08:37:37 +0000 Subject: [PATCH 15/27] Formatting --- .../com/sap/ai/sdk/prompt/registry/OrchestrationConfigMixin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigMixin.java b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigMixin.java index efd0736a6..ebbc56d65 100644 --- a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigMixin.java +++ b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/OrchestrationConfigMixin.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.prompt.registry.model.AzureContentSafetyInputFilterConfig; import com.sap.ai.sdk.prompt.registry.model.AzureContentSafetyOutputFilterConfig; From 0b30a7126ee1452f831a4da458af64bcf3b3397c Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Wed, 23 Sep 2026 16:57:25 +0200 Subject: [PATCH 16/27] address pr feedback and implement agreed refactoring changes --- .../core/common/ClientResponseHandler.java | 12 ++-- .../core/common/ClientStreamingHandler.java | 11 ++-- .../openai/OpenAiBatchInput.java | 2 - .../foundationmodels/openai/OpenAiClient.java | 5 -- .../openai/OpenAiClientException.java | 5 -- .../openai/realtime/OpenAiRealtimeClient.java | 9 --- .../openai/realtime/RealtimeParam.java | 19 +++--- .../realtime/RealtimeParamSystemPrompt.java | 21 ++----- .../realtime/RealtimeParamTurnDetection.java | 22 ++----- .../openai/realtime/RealtimeParamVoice.java | 23 +++----- foundation-models/sap-rpt/pom.xml | 4 -- .../sdk/foundationmodels/rpt/RptClient.java | 11 +--- .../sdk/orchestration/AzureContentFilter.java | 6 +- .../ai/sdk/orchestration/ContentFilter.java | 27 +++------ .../sap/ai/sdk/orchestration/Grounding.java | 3 +- .../sdk/orchestration/LlamaGuardFilter.java | 6 +- .../orchestration/OrchestrationClient.java | 45 -------------- .../OrchestrationClientException.java | 9 --- .../orchestration/OrchestrationUnitTest.java | 59 ------------------- 19 files changed, 58 insertions(+), 241 deletions(-) diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java index f31abfe2c..1026423df 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientResponseHandler.java @@ -19,7 +19,7 @@ import org.apache.hc.core5.http.io.entity.EntityUtils; /** - * Parse incoming JSON responses and handles any errors. For internal use only. + * For internal SDK use only. Parse incoming JSON responses and handles any errors. * * @param The type of the successful response. * @param The type of the exception to throw. @@ -43,7 +43,7 @@ public class ClientResponseHandler objectMapper(@Nonnull final ObjectMapper j } /** - * Processes a {@link ClassicHttpResponse} and returns some value corresponding to that response. + * Internal SDK usage only. Processes a {@link ClassicHttpResponse} and returns some value + * corresponding to that response. * * @param response The response to process * @return A model class instantiated from the response @@ -99,7 +100,7 @@ private Try tryGetContent(@Nonnull final HttpEntity entity) { } /** - * Process the error response and throw an exception. + * For internal SDK usage only. Process the error response and throw an exception. * * @param httpResponse The response to process * @throws ClientException if the response is an error (4xx/5xx) @@ -140,7 +141,8 @@ protected void buildAndThrowException(@Nonnull final ClassicHttpResponse httpRes } /** - * Parses the JSON content of an error response and throws a module specific exception. + * For internal SDK usage only. Parses the JSON content of an error response and throws a module + * specific exception. * * @param content The JSON content of the error response. * @param httpResponse The HTTP response that contains the error. diff --git a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java index 31df6c182..e7680d555 100644 --- a/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java +++ b/core/src/main/java/com/sap/ai/sdk/core/common/ClientStreamingHandler.java @@ -10,7 +10,8 @@ import org.apache.hc.core5.http.ClassicHttpResponse; /** - * Parse incoming JSON responses and handles any errors. For internal use only. + * For internal SDK usage only. Parse incoming JSON responses and handles any errors. For internal + * use only. * * @param The type of the response. * @param The type of the exception to throw. @@ -23,7 +24,7 @@ public class ClientStreamingHandler< extends ClientResponseHandler { /** - * Set the {@link ObjectMapper} to use for parsing JSON responses. + * For internal SDK usage only. Set the {@link ObjectMapper} to use for parsing JSON responses. * * @param jackson The {@link ObjectMapper} to use * @return the current instance of {@link ClientStreamingHandler} with the changed object mapper @@ -35,7 +36,7 @@ public ClientStreamingHandler objectMapper(@Nonnull final ObjectMapper } /** - * Creates a new instance of the {@link ClientStreamingHandler}. + * For internal SDK usage only. Creates a new instance of the {@link ClientStreamingHandler}. * * @param deltaType The type of the response. * @param errorType The type of the error. @@ -49,8 +50,8 @@ public ClientStreamingHandler( } /** - * Processes a {@link ClassicHttpResponse} and returns a {@link Stream} of deltas corresponding to - * that response. + * For internal SDK usage only. Processes a {@link ClassicHttpResponse} and returns a {@link + * Stream} of deltas corresponding to that response. * * @param response The response to process * @return A {@link Stream} of a model class instantiated from the response diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java index c98c425bb..9bbc53909 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiBatchInput.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.foundationmodels.openai.generated.model.CreateChatCompletionRequest; import java.io.IOException; import java.util.ArrayList; @@ -37,7 +36,6 @@ public class OpenAiBatchInput { * * @param chatCompletionRequests the list of chat completion requests to include in the batch */ - @Beta public OpenAiBatchInput(@Nonnull final OpenAiChatCompletionRequest... chatCompletionRequests) { for (int i = 0; i < chatCompletionRequests.length; i++) { val request = chatCompletionRequests[i]; diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index df7382408..2175bd4ff 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -8,7 +8,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.core.DeploymentResolutionException; import com.sap.ai.sdk.core.common.ClientResponseHandler; @@ -80,12 +79,8 @@ public static OpenAiClient forModel(@Nonnull final OpenAiModel foundationModel) /** * Creates and configures OpenAI Realtime API client * - *

Note: This method is marked as {@link Beta} because it represents newly introduced API which - * has not yet been sufficiently stabilized and has significant risk of changes - * * @return created client */ - @Beta @Nonnull public static OpenAiRealtimeClient realtimeClient() { final var withResolvedDestination = OpenAiClient.forModel(OpenAiModel.GPT_REALTIME); diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java index 2042c18f9..d9fb196d1 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientException.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.common.ClientException; import com.sap.ai.sdk.core.common.ClientExceptionFactory; import com.sap.ai.sdk.foundationmodels.openai.generated.model.ErrorResponse; @@ -17,12 +16,8 @@ public class OpenAiClientException extends ClientException { /** * Retrieves the {@link ErrorResponse} from the OpenAI service, if available. * - *

Note: This method is marked as {@link Beta} because it uses generated API types in its - * public signature. - * * @return The {@link ErrorResponse} object, or {@code null} if not available. */ - @Beta @Nullable public ErrorResponse getErrorResponse() { final var clientError = super.getClientError(); diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java index 23118c314..116a52827 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/OpenAiRealtimeClient.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.foundationmodels.openai.TextInputChannel; import com.sap.cloud.sdk.cloudplatform.connectivity.Destination; import com.sap.cloud.sdk.cloudplatform.connectivity.Header; @@ -11,12 +10,7 @@ /** * OpenAI client implementation of Realtime API. Abstracts technical implementation, transport and * threading and exposes business-level operations (high level interface) - * - *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of - * changes */ -@Beta public class OpenAiRealtimeClient { static final int PATH_BUFFER_SIZE = @@ -29,7 +23,6 @@ public class OpenAiRealtimeClient { * * @param destination - destination to use */ - @Beta public OpenAiRealtimeClient(@Nonnull final Destination destination) { this.destination = destination; } @@ -62,7 +55,6 @@ public OpenAiRealtimeClient(@Nonnull final Destination destination) { * @return input channel, allowing for text input */ @Nonnull - @Beta public TextInputChannel textToSpeech( @Nonnull final AudioOutputChannel audioOutputConsumer, @Nonnull final RealtimeParam... params) { @@ -98,7 +90,6 @@ public TextInputChannel textToSpeech( * bit) */ @Nonnull - @Beta public AudioInputChannel speechToSpeech( @Nonnull final AudioOutputChannel audioOutputConsumer, @Nonnull final RealtimeParam... params) { diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java index d8f54d926..f1ad5a6cd 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParam.java @@ -1,17 +1,9 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import javax.annotation.Nonnull; -/** - * Represents possible configuration params of realtime client - * - *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of - * changes - */ -@Beta -public interface RealtimeParam { +/** Represents possible configuration params of realtime client Internal sdk usage only */ +public abstract class RealtimeParam { /** Represents configurable options */ enum ParamName { /** Voice name to use to produce sound */ @@ -25,13 +17,16 @@ enum ParamName { SYSTEM_PROMPT, } + /** Internal use only. Can only be extended or constructed in the same package. */ + RealtimeParam() {} + /** * Returns param name * * @return name */ @Nonnull - ParamName getParamName(); + abstract ParamName getParamName(); /** * Returns string value representation of the param @@ -39,5 +34,5 @@ enum ParamName { * @return string value */ @Nonnull - String getValueAsString(); + abstract String getValueAsString(); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java index af427e884..b505b6483 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamSystemPrompt.java @@ -1,19 +1,11 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** - * Allows to configure model system prompt - * - *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of - * changes - */ -@Beta -public final class RealtimeParamSystemPrompt implements RealtimeParam { +/** Allows to configure model system prompt */ +public final class RealtimeParamSystemPrompt extends RealtimeParam { private final String systemPrompt; @@ -22,20 +14,19 @@ public final class RealtimeParamSystemPrompt implements RealtimeParam { * * @param systemPrompt system prompt to use */ - @Beta public RealtimeParamSystemPrompt(@Nonnull final String systemPrompt) { this.systemPrompt = systemPrompt; } @Override - @Beta - public @Nonnull ParamName getParamName() { + @Nonnull + ParamName getParamName() { return ParamName.SYSTEM_PROMPT; } @Override - @Beta - public @Nonnull String getValueAsString() { + @Nonnull + String getValueAsString() { return systemPrompt; } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java index c1ed1638a..f1c8433da 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamTurnDetection.java @@ -1,22 +1,13 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** - * Allows to configure turn detection (how model responds). - * - *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of - * changes - */ -@Beta -public final class RealtimeParamTurnDetection implements RealtimeParam { +/** Allows to configure turn detection (how model responds). */ +public final class RealtimeParamTurnDetection extends RealtimeParam { /** Model tries to recognize if/when it should respond automatically */ - @Beta public static final RealtimeParamTurnDetection BY_MODEL_AUTO = new RealtimeParamTurnDetection("BY_MODEL_AUTO"); @@ -25,7 +16,6 @@ public final class RealtimeParamTurnDetection implements RealtimeParam { * Less convenient than the automatic option but may give lower latency in some cases (model does * not need to perform additional turn detection analysis). */ - @Beta public static final RealtimeParamTurnDetection EACH_CALL_IS_A_TURN = new RealtimeParamTurnDetection("EACH_CALL_IS_A_TURN"); @@ -36,14 +26,14 @@ public final class RealtimeParamTurnDetection implements RealtimeParam { } @Override - @Beta - public @Nonnull ParamName getParamName() { + @Nonnull + ParamName getParamName() { return ParamName.TURN_DETECTION; } @Override - @Beta - public @Nonnull String getValueAsString() { + @Nonnull + String getValueAsString() { return turnDetectionKind; } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java index 5bb5e4342..eb7464550 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/RealtimeParamVoice.java @@ -5,21 +5,14 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -/** - * Allows to configure model output voice - * - *

Note: This class and multiple its methods are marked as {@link Beta} because they represent - * newly introduced API which has not yet been sufficiently stabilized and has significant risk of - * changes - */ -@Beta -public final class RealtimeParamVoice implements RealtimeParam { +/** Allows to configure model output voice */ +public final class RealtimeParamVoice extends RealtimeParam { /** Standard voice 1 */ - @Beta public static final RealtimeParamVoice DEFAULT_1 = new RealtimeParamVoice("DEFAULT_1"); + public static final RealtimeParamVoice DEFAULT_1 = new RealtimeParamVoice("DEFAULT_1"); /** Standard voice 2 */ - @Beta public static final RealtimeParamVoice DEFAULT_2 = new RealtimeParamVoice("DEFAULT_2"); + public static final RealtimeParamVoice DEFAULT_2 = new RealtimeParamVoice("DEFAULT_2"); private final String voice; @@ -43,14 +36,14 @@ public static RealtimeParamVoice withExplicitVoice(@Nonnull final String voiceNa } @Override - @Beta - public @Nonnull ParamName getParamName() { + @Nonnull + ParamName getParamName() { return ParamName.OUTPUT_VOICE; } @Override - @Beta - public @Nonnull String getValueAsString() { + @Nonnull + String getValueAsString() { return voice; } diff --git a/foundation-models/sap-rpt/pom.xml b/foundation-models/sap-rpt/pom.xml index 920e16877..215b91a1b 100644 --- a/foundation-models/sap-rpt/pom.xml +++ b/foundation-models/sap-rpt/pom.xml @@ -76,10 +76,6 @@ com.google.code.findbugs jsr305 - - com.google.guava - guava - org.projectlombok diff --git a/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java b/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java index 7a1fca93f..66e2e6e2a 100644 --- a/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java +++ b/foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundationmodels/rpt/RptClient.java @@ -4,7 +4,6 @@ import static com.sap.ai.sdk.foundationmodels.rpt.RptModel.SAP_RPT_1_6_LARGE; import com.fasterxml.jackson.core.JsonProcessingException; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.core.DeploymentResolutionException; import com.sap.ai.sdk.core.JacksonConfiguration; @@ -68,9 +67,6 @@ static RptClient forDestination( /** * Predict targets using SAP RPT model with structured data. * - *

Note: This method is marked as {@link Beta} because it uses generated API types in its - * public signature. - * *

200 - Successful Prediction * *

400 - Bad Request - Invalid input data @@ -87,8 +83,8 @@ static RptClient forDestination( * embedded {@link com.sap.ai.sdk.foundationmodels.rpt.generated.model.PredictionConfig} is * set to {@code null} on the passed-in object as a side effect. */ - @Beta @Nonnull + @SuppressWarnings("PMD.PublicApiExposesModelType") // we consider model class stable public PredictResponsePayload tableCompletion(@Nonnull final PredictRequestPayload requestBody) { if (!contextModePossible) { configFrom(requestBody).setContextMode(null); @@ -111,9 +107,6 @@ private static PredictionConfig configFrom(@Nonnull final PredictRequestPayload * Make in-context predictions for specified target columns based on provided table data Parquet * file. * - *

Note: This method is marked as {@link Beta} because it uses generated API types in its - * public signature. - * *

200 - Successful Prediction * *

400 - Bad Request - Invalid input data @@ -132,7 +125,7 @@ private static PredictionConfig configFrom(@Nonnull final PredictRequestPayload * set to {@code null} as a side effect. * @since 1.16.0 */ - @Beta + @SuppressWarnings("PMD.PublicApiExposesModelType") // we consider model class stable @Nonnull public PredictResponsePayload tableCompletion( @Nonnull final File parquetFile, @Nonnull final PredictionConfig predictionConfig) { diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AzureContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AzureContentFilter.java index 93792bbc1..e54be8c08 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AzureContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AzureContentFilter.java @@ -33,7 +33,7 @@ @Setter @NoArgsConstructor @Accessors(fluent = true) -public class AzureContentFilter implements ContentFilter { +public class AzureContentFilter extends ContentFilter { /** The filter category for hate content. */ @Nullable AzureFilterThreshold hate; @@ -66,7 +66,7 @@ public class AzureContentFilter implements ContentFilter { */ @Override @Nonnull - public AzureContentSafetyInputFilterConfig createInputFilterConfig() { + AzureContentSafetyInputFilterConfig createInputFilterConfig() { if (hate == null && selfHarm == null && sexual == null && violence == null) { throw new IllegalArgumentException("At least one filter category must be set"); } @@ -91,7 +91,7 @@ public AzureContentSafetyInputFilterConfig createInputFilterConfig() { */ @Override @Nonnull - public AzureContentSafetyOutputFilterConfig createOutputFilterConfig() { + AzureContentSafetyOutputFilterConfig createOutputFilterConfig() { if (hate == null && selfHarm == null && sexual == null diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java index 174726015..817dfdc35 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ContentFilter.java @@ -1,13 +1,12 @@ package com.sap.ai.sdk.orchestration; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.orchestration.model.InputFilterConfig; import com.sap.ai.sdk.orchestration.model.OutputFilterConfig; import javax.annotation.Nonnull; /** - * Interface representing convenience wrappers of serializable content filter that defines - * thresholds for different content categories. + * For internal SDK usage only. Class representing convenience wrappers of serializable content + * filter that defines thresholds for different content categories. * *

SAP * AI Core: Orchestration - Input Filtering @@ -15,31 +14,23 @@ *

SAP * AI Core: Orchestration - Output Filtering */ -public interface ContentFilter { +public abstract class ContentFilter { /** - * A method that produces the serializable equivalent {@link InputFilterConfig} object from data - * encapsulated in the {@link ContentFilter} object. - * - *

Note: This method is marked as {@link Beta} because it uses generated API types in its - * public signature. + * For internal SDK usage only. A method that produces the serializable equivalent {@link + * InputFilterConfig} object from data encapsulated in the {@link ContentFilter} object. * * @return the corresponding {@link InputFilterConfig} object. */ - @Beta @Nonnull - InputFilterConfig createInputFilterConfig(); + abstract InputFilterConfig createInputFilterConfig(); /** - * A method that produces the serializable equivalent {@link OutputFilterConfig} object from data - * encapsulated in the {@link ContentFilter} object. - * - *

Note: This method is marked as {@link Beta} because it uses generated API types in its - * public signature. + * For internal SDK usage only. A method that produces the serializable equivalent {@link + * OutputFilterConfig} object from data encapsulated in the {@link ContentFilter} object. * * @return the corresponding {@link OutputFilterConfig} object. */ - @Beta @Nonnull - OutputFilterConfig createOutputFilterConfig(); + abstract OutputFilterConfig createOutputFilterConfig(); } diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java index a03d22cd0..caa46b228 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java @@ -1,6 +1,5 @@ package com.sap.ai.sdk.orchestration; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.orchestration.model.DataRepositoryType; import com.sap.ai.sdk.orchestration.model.DocumentGroundingFilter; import com.sap.ai.sdk.orchestration.model.GroundingModuleConfig; @@ -33,7 +32,7 @@ public class Grounding implements GroundingProvider { @Nullable private List metadataParams = null; - @Setter(onMethod_ = {@Nonnull, @Beta}) + @Setter(onMethod_ = {@Nonnull}) private TypeEnum documentGroundingService = TypeEnum.DOCUMENT_GROUNDING_SERVICE; /** diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/LlamaGuardFilter.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/LlamaGuardFilter.java index b312d882c..89e941a6b 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/LlamaGuardFilter.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/LlamaGuardFilter.java @@ -33,20 +33,20 @@ */ @Accessors(fluent = true) @Setter -public class LlamaGuardFilter implements ContentFilter { +public class LlamaGuardFilter extends ContentFilter { @SuppressWarnings("PMD.LombokGetterSetterExposesModelType") private LlamaGuard38b config = LlamaGuard38b.create(); @Nonnull @Override - public LlamaGuard38bFilterConfig createInputFilterConfig() { + LlamaGuard38bFilterConfig createInputFilterConfig() { return LlamaGuard38bFilterConfig.create().type(LLAMA_GUARD_3_8B).config(config); } @Nonnull @Override - public LlamaGuard38bFilterConfig createOutputFilterConfig() { + LlamaGuard38bFilterConfig createOutputFilterConfig() { return createInputFilterConfig(); } } diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java index 3de42e925..a450a092f 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClient.java @@ -2,10 +2,7 @@ import static com.sap.ai.sdk.orchestration.OrchestrationJacksonConfiguration.getOrchestrationObjectMapper; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.sap.ai.sdk.core.AiCoreService; import com.sap.ai.sdk.orchestration.model.CompletionPostRequest; import com.sap.ai.sdk.orchestration.model.CompletionPostResponse; @@ -191,48 +188,6 @@ public OrchestrationChatResponse chatCompletionUsingReference( return new OrchestrationChatResponse(response); } - /** - * Perform a request to the orchestration service using a module configuration provided as JSON - * string. This can be useful when building a configuration in the AI Launchpad UI and exporting - * it as JSON. Furthermore, this allows for using features that are not yet supported natively by - * the API. - * - *

NOTE: This method does not support streaming. - * - * @param prompt The input parameters and optionally message history to use for prompt execution. - * @param moduleConfig The module configuration in JSON format. - * @return The completion response. - * @throws OrchestrationClientException If the request fails. - */ - @Nonnull - public OrchestrationChatResponse executeRequestFromJsonModuleConfig( - @Nonnull final OrchestrationPrompt prompt, @Nonnull final String moduleConfig) - throws OrchestrationClientException { - if (!prompt.getMessages().isEmpty()) { - throw new IllegalArgumentException( - "Prompt must not contain any messages when using a JSON module configuration, as the template is already defined in the JSON."); - } - - final ObjectNode requestJson = JACKSON.createObjectNode(); - final var chatMessageHistory = - prompt.getMessagesHistory().stream().map(Message::createChatMessage).toList(); - requestJson.set("messages_history", JACKSON.valueToTree(chatMessageHistory)); - requestJson.set("input_params", JACKSON.valueToTree(prompt.getTemplateParameters())); - - final JsonNode moduleConfigJson; - try { - moduleConfigJson = JACKSON.readTree(moduleConfig); - } catch (JsonProcessingException e) { - throw new IllegalArgumentException( - "The provided module configuration is not valid JSON: " + moduleConfig, e); - } - requestJson.set("orchestration_config", moduleConfigJson); - - return new OrchestrationChatResponse( - executor.execute( - COMPLETION_ENDPOINT, requestJson, CompletionPostResponse.class, customHeaders)); - } - /** * Generate a completion for the given request object. * diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java index 5c136bea6..0c16152c6 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationClientException.java @@ -2,7 +2,6 @@ import static java.util.Locale.ROOT; -import com.google.common.annotations.Beta; import com.sap.ai.sdk.core.common.ClientException; import com.sap.ai.sdk.core.common.ClientExceptionFactory; import com.sap.ai.sdk.orchestration.OrchestrationFilterException.Input; @@ -119,13 +118,9 @@ public OrchestrationError getClientError() { /** * Retrieves the {@link ErrorResponse} from the orchestration service, if available. * - *

Note: This method is marked as {@link Beta} because it uses generated API types in its - * public signature. - * * @return The {@link ErrorResponse} object, or {@code null} if not available. * @since 1.10.0 */ - @Beta @Nullable public ErrorResponse getErrorResponse() { if (getClientError() instanceof OrchestrationError.Synchronous orchestrationError) { @@ -137,13 +132,9 @@ public ErrorResponse getErrorResponse() { /** * Retrieves the {@link ErrorResponseStreaming} from the orchestration service, if available. * - *

Note: This method is marked as {@link Beta} because it uses generated API types in its - * public signature. - * * @return The {@link ErrorResponseStreaming} object, or {@code null} if not available. * @since 1.10.0 */ - @Beta @Nullable public ErrorResponseStreaming getErrorResponseStreaming() { if (getClientError() instanceof OrchestrationError.Streaming orchestrationError) { diff --git a/orchestration/src/test/java/com/sap/ai/sdk/orchestration/OrchestrationUnitTest.java b/orchestration/src/test/java/com/sap/ai/sdk/orchestration/OrchestrationUnitTest.java index 1ee70d47b..cc7c2055d 100644 --- a/orchestration/src/test/java/com/sap/ai/sdk/orchestration/OrchestrationUnitTest.java +++ b/orchestration/src/test/java/com/sap/ai/sdk/orchestration/OrchestrationUnitTest.java @@ -8,7 +8,6 @@ import static com.github.tomakehurst.wiremock.client.WireMock.equalToJson; import static com.github.tomakehurst.wiremock.client.WireMock.jsonResponse; import static com.github.tomakehurst.wiremock.client.WireMock.noContent; -import static com.github.tomakehurst.wiremock.client.WireMock.okJson; import static com.github.tomakehurst.wiremock.client.WireMock.okXml; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; @@ -829,64 +828,6 @@ void testErrorHandling(@Nonnull final Runnable request) { softly.assertAll(); } - @Test - void testExecuteRequestFromJson() { - stubFor(post(anyUrl()).willReturn(okJson("{}"))); - - prompt = - new OrchestrationPrompt(Map.of("foo", "bar")) - .messageHistory(List.of(new UserMessage("Hello World!"))); - final var configJson = - """ - { - "module_configurations": { - "llm_module_config": { - "model_name": "mistralai--mistral-large-instruct", - "model_params": {} - } - } - } - """; - - final var expectedJson = - """ - { - "messages_history": [{ - "role" : "user", - "content" : "Hello World!" - }], - "input_params": { - "foo" : "bar" - }, - "orchestration_config": { - "module_configurations": { - "llm_module_config": { - "model_name": "mistralai--mistral-large-instruct", - "model_params": {} - } - } - } - } - """; - - var result = client.executeRequestFromJsonModuleConfig(prompt, configJson); - assertThat(result).isNotNull(); - - verify(postRequestedFor(anyUrl()).withRequestBody(equalToJson(expectedJson))); - } - - @Test - void testExecuteRequestFromJsonThrows() { - assertThatThrownBy(() -> client.executeRequestFromJsonModuleConfig(prompt, "{}")) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("messages"); - - prompt = new OrchestrationPrompt(Map.of()); - assertThatThrownBy(() -> client.executeRequestFromJsonModuleConfig(prompt, "{ foo")) - .isInstanceOf(IllegalArgumentException.class) - .hasMessageContaining("not valid JSON"); - } - @Test void testThrowsOnContentFilter() { var mock = mock(OrchestrationClient.class); From d9aa679d5565869e2dfbb5ab766c1ee00b1b61ac Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 24 Sep 2026 13:15:51 +0200 Subject: [PATCH 17/27] address pr feedback, update release notes, remove few more @beta annotations and methods --- docs/release_notes.md | 5 +++++ .../ai/sdk/foundationmodels/openai/OpenAiClient.java | 3 ++- .../sdk/foundationmodels/openai/TextInputChannel.java | 6 ------ .../openai/realtime/AudioInputChannel.java | 7 ------- .../openai/realtime/AudioOutputChannel.java | 11 +---------- .../openai/OpenAiClientGeneratedTest.java | 8 -------- 6 files changed, 8 insertions(+), 32 deletions(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index 120f51b39..943eb60c5 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -12,6 +12,11 @@ - [Orchestration] Spring AI support was upgraded to version `2.0.1` - [Prompt Registry] `OrchestrationConfigClient` and `PromptClient` were reworked into unified `PromptRegistryClient`, see migration guide below for additional information +- [Orchestration] `OrchestrationClient.executeRequestFromJsonModuleConfig` method was removed from SDK due to + obsolescence and issues of the implementation +- [OpenAi] Potentially breaking change: `OpenAi.withApiVersion` was removed from public API and deprecated +- [Orchestration] Internal AI SDK methods `createInputFilterConfig` and `createOutputFilterConfig` were removed + from public API scope visibility (not designed for external usage, were exposed accidentally) #### Prompt registry client Migration Guide diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java index 2175bd4ff..056c8f6ed 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClient.java @@ -93,8 +93,9 @@ public static OpenAiRealtimeClient realtimeClient() { * @param apiVersion the API version to target. * @return a new client. */ + @Deprecated // does not align with the target state of the SDK, is planned for removal @Nonnull - public OpenAiClient withApiVersion(@Nonnull final String apiVersion) { + private OpenAiClient withApiVersion(@Nonnull final String apiVersion) { final var newDestination = DefaultHttpDestination.fromDestination(this.destination) // set the API version as URL query parameter diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java index 1af1c66a8..f1d2dadd2 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/TextInputChannel.java @@ -1,16 +1,11 @@ package com.sap.ai.sdk.foundationmodels.openai; -import com.google.common.annotations.Beta; import javax.annotation.Nonnull; /** * Allows to input (send) text to the open channel, must be closed when not needed anymore (e.g. * try-with-resources) - * - *

Note: This class is marked as {@link Beta} because it represents newly introduced API which - * has not yet been sufficiently stabilized and has significant risk of changes */ -@Beta public interface TextInputChannel extends AutoCloseable { /** @@ -18,6 +13,5 @@ public interface TextInputChannel extends AutoCloseable { * * @param text text to send */ - @Beta void sendText(@Nonnull final String text); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java index 76a534623..2f017c041 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioInputChannel.java @@ -1,16 +1,10 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; - /** * Functional interface representing audio input channel (used by audio data producer) * - *

Note: This class is marked as {@link Beta} because it represents newly introduced API which - * has not yet been sufficiently stabilized and has significant risk of changes - * *

Should be closed by application (try-with-resources) when not needed anymore */ -@Beta public interface AudioInputChannel extends AutoCloseable { /** @@ -20,6 +14,5 @@ public interface AudioInputChannel extends AutoCloseable { * * @param rawBytesChunk binary data in the depending on the use case format */ - @Beta void inputAudio(byte[] rawBytesChunk); } diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java index ba2a2b1b4..4271e3f1a 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/AudioOutputChannel.java @@ -1,14 +1,6 @@ package com.sap.ai.sdk.foundationmodels.openai.realtime; -import com.google.common.annotations.Beta; - -/** - * Functional interface representing audio output channel (audio data consumer) - * - *

Note: This class is marked as {@link Beta} because it represents newly introduced API which - * has not yet been sufficiently stabilized and has significant risk of changes - */ -@Beta +/** Functional interface representing audio output channel (audio data consumer) */ public interface AudioOutputChannel { /** @@ -21,6 +13,5 @@ public interface AudioOutputChannel { * single logical entity (e.g. gets called at the end when all byte parts of a single message * get passed) */ - @Beta void outputAudio(byte[] rawBytesChunk, boolean isLast); } diff --git a/foundation-models/openai/src/test/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientGeneratedTest.java b/foundation-models/openai/src/test/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientGeneratedTest.java index 3a213116e..9a64ee972 100644 --- a/foundation-models/openai/src/test/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientGeneratedTest.java +++ b/foundation-models/openai/src/test/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiClientGeneratedTest.java @@ -88,14 +88,6 @@ void apiVersion() { exactly(1), postRequestedFor(anyUrl()).withQueryParam("api-version", equalTo("2024-02-01"))); - Try.of( - () -> client.withApiVersion("fooBar").chatCompletion(new OpenAiChatCompletionRequest(""))); - verify(exactly(1), postRequestedFor(anyUrl()).withQueryParam("api-version", equalTo("fooBar"))); - - assertThat(client) - .describedAs( - "withApiVersion should return a new object, the sut object should remain unchanged") - .isNotSameAs(client.withApiVersion("fooBar")); Try.of(() -> client.chatCompletion(new OpenAiChatCompletionRequest(""))); verify( exactly(2), From 81b5442f2ed39592d6b5c2aa6e8f647a981837f8 Mon Sep 17 00:00:00 2001 From: I538344 Date: Thu, 24 Sep 2026 13:20:15 +0200 Subject: [PATCH 18/27] chore: [Orchestration] Remove deprecated API --- .../java/com/sap/ai/sdk/orchestration/AssistantMessage.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java index 29e83c5bb..14cddc8bf 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java @@ -65,10 +65,8 @@ public AssistantMessage(@Nonnull final String singleMessage) { * Creates a new assistant message with the given tool calls. * * @param toolCalls list of tool call objects - * @deprecated Please use {@link #withToolCalls(List)} instead. */ - @Deprecated - public AssistantMessage(@Nonnull final List toolCalls) { + AssistantMessage(@Nonnull final List toolCalls) { content = new MessageContent(List.of()); this.toolCalls = toolCalls; reasoningContent = null; From 91cf7727d12e31e6ae1ca379c23b69c4211edbf6 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 24 Sep 2026 14:09:05 +0200 Subject: [PATCH 19/27] update release notes --- docs/release_notes.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index 943eb60c5..9fc2a8b44 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -12,11 +12,10 @@ - [Orchestration] Spring AI support was upgraded to version `2.0.1` - [Prompt Registry] `OrchestrationConfigClient` and `PromptClient` were reworked into unified `PromptRegistryClient`, see migration guide below for additional information -- [Orchestration] `OrchestrationClient.executeRequestFromJsonModuleConfig` method was removed from SDK due to - obsolescence and issues of the implementation -- [OpenAi] Potentially breaking change: `OpenAi.withApiVersion` was removed from public API and deprecated +- [Orchestration] `OrchestrationClient.executeRequestFromJsonModuleConfig` method was removed from SDK without a replacement +- [OpenAi] `OpenAi.withApiVersion` was removed from public API and deprecated - [Orchestration] Internal AI SDK methods `createInputFilterConfig` and `createOutputFilterConfig` were removed - from public API scope visibility (not designed for external usage, were exposed accidentally) + from public API #### Prompt registry client Migration Guide From dc4fa2e880905a7921a4d64d8b5491614c81dc76 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 24 Sep 2026 15:05:24 +0200 Subject: [PATCH 20/27] improve code style --- docs/release_notes.md | 1 + .../com/sap/ai/sdk/orchestration/DpiMasking.java | 6 ++++-- .../com/sap/ai/sdk/orchestration/Grounding.java | 4 ++-- .../sap/ai/sdk/orchestration/GroundingProvider.java | 13 +++++++++---- .../sap/ai/sdk/orchestration/MaskingProvider.java | 10 ++++++++-- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index 9fc2a8b44..1c0a1e146 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -16,6 +16,7 @@ - [OpenAi] `OpenAi.withApiVersion` was removed from public API and deprecated - [Orchestration] Internal AI SDK methods `createInputFilterConfig` and `createOutputFilterConfig` were removed from public API +- [Orchestration] Internal AI SDK methods `createConfig` were removed from `GroundingProvider` and `MaskingProvider` #### Prompt registry client Migration Guide diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/DpiMasking.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/DpiMasking.java index 181a6c335..d6b72eded 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/DpiMasking.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/DpiMasking.java @@ -16,6 +16,7 @@ import java.util.stream.Stream; import javax.annotation.Nonnull; import lombok.AccessLevel; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Value; @@ -30,9 +31,10 @@ * Core: Orchestration - Data Masking */ @Value +@EqualsAndHashCode(callSuper = true) @Getter(AccessLevel.PACKAGE) @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -public class DpiMasking implements MaskingProvider { +public class DpiMasking extends MaskingProvider { @Nonnull DPIConfig.MethodEnum maskingMethod; @Nonnull List entitiesConfig; @With boolean maskGroundingInput; @@ -140,7 +142,7 @@ public DpiMasking withAllowList(@Nonnull final List allowList) { @Nonnull @Override - public DPIConfig createConfig() { + DPIConfig createConfig() { return DPIConfig.create() .type(SAP_DATA_PRIVACY_INTEGRATION) .method(maskingMethod) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java index caa46b228..04aea5d8c 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Grounding.java @@ -24,7 +24,7 @@ * Core: Orchestration - Grounding */ @Accessors(fluent = true) -public class Grounding implements GroundingProvider { +public class Grounding extends GroundingProvider { @Nonnull private List filters = @@ -94,7 +94,7 @@ public OrchestrationPrompt createGroundingPrompt(@Nonnull final String message) @Nonnull @Override - public GroundingModuleConfig createConfig() { + GroundingModuleConfig createConfig() { val groundingConfigConfig = GroundingModuleConfigConfig.create() .placeholders( diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/GroundingProvider.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/GroundingProvider.java index 31df0e818..cf0b45d7b 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/GroundingProvider.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/GroundingProvider.java @@ -4,13 +4,18 @@ import javax.annotation.Nonnull; /** - * Interface for grounding configurations. + * API Contract for grounding configurations. * *

SAP AI * Core: Orchestration - Grounding */ -@FunctionalInterface -public interface GroundingProvider { +public abstract class GroundingProvider { + + /** + * Internal class. Package-local inheritance only. Not supposed to be implemented outside of AI + * SDK. + */ + GroundingProvider() {} /** * Create a grounding configuration. @@ -18,5 +23,5 @@ public interface GroundingProvider { * @return the grounding configuration */ @Nonnull - GroundingModuleConfig createConfig(); + abstract GroundingModuleConfig createConfig(); } diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/MaskingProvider.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/MaskingProvider.java index 804aff91d..10e5d52aa 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/MaskingProvider.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/MaskingProvider.java @@ -9,7 +9,13 @@ *

SAP AI * Core: Orchestration - Data Masking */ -public interface MaskingProvider { +public abstract class MaskingProvider { + + /** + * Internal class. Package-local inheritance only. Not supposed to be implemented outside of AI + * SDK. + */ + MaskingProvider() {} /** * Create a masking configuration. @@ -17,5 +23,5 @@ public interface MaskingProvider { * @return the masking configuration */ @Nonnull - DPIConfig createConfig(); + abstract DPIConfig createConfig(); } From b6c1bc03ba8a5b200fec1fe41eeea6e1a2c54be7 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 24 Sep 2026 15:44:33 +0200 Subject: [PATCH 21/27] remove message internal methods from public api --- docs/release_notes.md | 2 ++ .../sdk/orchestration/AssistantMessage.java | 17 ++-------- .../com/sap/ai/sdk/orchestration/Message.java | 33 ++++++++++++------- .../OrchestrationChatResponse.java | 5 ++- .../ai/sdk/orchestration/SystemMessage.java | 4 ++- .../sap/ai/sdk/orchestration/ToolMessage.java | 2 +- .../sap/ai/sdk/orchestration/UserMessage.java | 4 ++- .../app/controllers/OrchestrationTest.java | 4 --- 8 files changed, 37 insertions(+), 34 deletions(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index 1c0a1e146..5e03e6619 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -17,6 +17,8 @@ - [Orchestration] Internal AI SDK methods `createInputFilterConfig` and `createOutputFilterConfig` were removed from public API - [Orchestration] Internal AI SDK methods `createConfig` were removed from `GroundingProvider` and `MaskingProvider` +- [Orchestration] Internal AI SDK methods `role`, `createChatMessage` and `content` were removed from public API + of `Message` class. #### Prompt registry client Migration Guide diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java index 29e83c5bb..e568a52dc 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java @@ -13,6 +13,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import lombok.AccessLevel; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Value; @@ -21,9 +22,10 @@ /** Represents a chat message as 'assistant' to the orchestration service. */ @Value +@EqualsAndHashCode(callSuper = true) @Accessors(fluent = true) @RequiredArgsConstructor(access = AccessLevel.PRIVATE) -public class AssistantMessage implements Message { +public class AssistantMessage extends Message { /** The role of the assistant. */ @Nonnull String role = "assistant"; @@ -61,19 +63,6 @@ public AssistantMessage(@Nonnull final String singleMessage) { reasoningContent = null; } - /** - * Creates a new assistant message with the given tool calls. - * - * @param toolCalls list of tool call objects - * @deprecated Please use {@link #withToolCalls(List)} instead. - */ - @Deprecated - public AssistantMessage(@Nonnull final List toolCalls) { - content = new MessageContent(List.of()); - this.toolCalls = toolCalls; - reasoningContent = null; - } - /** * Returns a new AssistantMessage instance with the provided tool calls added to the existing * ones. diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java index 89e667c6c..e5829f6c7 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java @@ -5,9 +5,18 @@ import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import lombok.EqualsAndHashCode; -/** Interface representing convenience wrappers of chat message to the orchestration service. */ -public sealed interface Message permits AssistantMessage, SystemMessage, ToolMessage, UserMessage { +/** + * Contract-representing class for convenience wrappers of chat message to the orchestration + * service. + */ +@EqualsAndHashCode +public abstract class Message { + + /** Internal SDK usage only. Limit inheritance visibility to package-local scope */ + Message() {} + ; /** * A convenience method to create a user message from a string. @@ -16,7 +25,7 @@ public sealed interface Message permits AssistantMessage, SystemMessage, ToolMes * @return the user message. */ @Nonnull - static UserMessage user(@Nonnull final String message) { + public static UserMessage user(@Nonnull final String message) { return user(message, null); } @@ -29,7 +38,7 @@ static UserMessage user(@Nonnull final String message) { * @return the user message. */ @Nonnull - static UserMessage user( + public static UserMessage user( @Nonnull final String message, @Nullable final CacheControl cacheControl) { return new UserMessage(message, cacheControl); } @@ -42,7 +51,7 @@ static UserMessage user( * @since 1.3.0 */ @Nonnull - static UserMessage user(@Nonnull final ImageItem imageItem) { + public static UserMessage user(@Nonnull final ImageItem imageItem) { return new UserMessage(new MessageContent(List.of(imageItem))); } @@ -54,7 +63,7 @@ static UserMessage user(@Nonnull final ImageItem imageItem) { * @since 1.18.0 */ @Nonnull - static UserMessage user(@Nonnull final Path filePath) { + public static UserMessage user(@Nonnull final Path filePath) { return new UserMessage(new MessageContent(List.of())).withFile(filePath); } @@ -65,7 +74,7 @@ static UserMessage user(@Nonnull final Path filePath) { * @return the assistant message. */ @Nonnull - static AssistantMessage assistant(@Nonnull final String message) { + public static AssistantMessage assistant(@Nonnull final String message) { return new AssistantMessage(message); } @@ -76,7 +85,7 @@ static AssistantMessage assistant(@Nonnull final String message) { * @return the system message. */ @Nonnull - static SystemMessage system(@Nonnull final String message) { + public static SystemMessage system(@Nonnull final String message) { return system(message, null); } @@ -90,7 +99,7 @@ static SystemMessage system(@Nonnull final String message) { * @return the system message */ @Nonnull - static SystemMessage system( + public static SystemMessage system( @Nonnull final String message, @Nullable final CacheControl cacheControl) { return new SystemMessage(message, cacheControl); } @@ -101,7 +110,7 @@ static SystemMessage system( * @return the corresponding {@code ChatMessage} object. */ @Nonnull - ChatMessage createChatMessage(); + abstract ChatMessage createChatMessage(); /** * Returns the role of the assistant. @@ -109,7 +118,7 @@ static SystemMessage system( * @return the role. */ @Nonnull - String role(); + abstract String role(); /** * Returns the content of the message. @@ -117,5 +126,5 @@ static SystemMessage system( * @return the content. */ @Nonnull - MessageContent content(); + abstract MessageContent content(); } diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java index a6c67efc2..dd7e8e760 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java @@ -99,7 +99,10 @@ public List getAllMessages() throws IllegalArgumentException { val toolCalls = assistantChatMessage.getToolCalls(); AssistantMessage assistantMessage; if (!toolCalls.isEmpty()) { - assistantMessage = new AssistantMessage(toolCalls); + assistantMessage = + new AssistantMessage( + MessageContent.fromChatMessageContent(assistantChatMessage.getContent())) + .withToolCalls(toolCalls); } else { assistantMessage = new AssistantMessage( diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/SystemMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/SystemMessage.java index ab0a8c190..e2cbc8f0f 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/SystemMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/SystemMessage.java @@ -13,6 +13,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import lombok.AccessLevel; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Value; @@ -21,10 +22,11 @@ import lombok.val; /** Represents a chat message as 'system' to the orchestration service. */ +@EqualsAndHashCode(callSuper = true) @Value @Accessors(fluent = true) @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class SystemMessage implements Message { +public class SystemMessage extends Message { /** The role of the assistant. */ @Nonnull String role = "system"; diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ToolMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ToolMessage.java index eba89f6e9..385244892 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ToolMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/ToolMessage.java @@ -21,7 +21,7 @@ @AllArgsConstructor @Getter @Accessors(fluent = true) -public final class ToolMessage implements Message { +public final class ToolMessage extends Message { /** The role of the assistant. */ @Nonnull final String role = "tool"; diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/UserMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/UserMessage.java index 33e4077f8..ec9a8b0c3 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/UserMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/UserMessage.java @@ -23,6 +23,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import lombok.AccessLevel; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Value; @@ -31,11 +32,12 @@ import lombok.extern.slf4j.Slf4j; /** Represents a chat message as 'user' to the orchestration service. */ +@EqualsAndHashCode(callSuper = true) @Slf4j @Value @Accessors(fluent = true) @RequiredArgsConstructor(access = AccessLevel.PACKAGE) -public class UserMessage implements Message { +public class UserMessage extends Message { private static final String PDF_DATA_URI_PREFIX = "data:application/pdf;base64,"; /** The role of the assistant. */ diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java index 3333ef8cc..4e358323a 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java @@ -28,7 +28,6 @@ import com.sap.ai.sdk.orchestration.ReasoningEffort; import com.sap.ai.sdk.orchestration.SystemMessage; import com.sap.ai.sdk.orchestration.TemplateConfig; -import com.sap.ai.sdk.orchestration.TextItem; import com.sap.ai.sdk.orchestration.UserMessage; import com.sap.ai.sdk.orchestration.model.DPIEntities; import com.sap.ai.sdk.orchestration.model.InputTranslationModuleResult; @@ -189,9 +188,6 @@ void testTemplate() { val response = result.getOriginalResponse(); assertThat(response.getRequestId()).isNotEmpty(); - assertThat(((TextItem) result.getAllMessages().get(0).content().items().get(0)).text()) - .isEqualTo("Reply with 'Orchestration Service is working!' in German"); - assertThat(result.getAllMessages().get(0).role()).isEqualTo("user"); var llm = response.getIntermediateResults().getLlm(); assertThat(llm.getId()).isEmpty(); assertThat(llm.getObject()).isEqualTo("chat.completion"); From fc7d6fa6296efa5f08b1bc642f806a29621bfa8d Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 24 Sep 2026 16:04:26 +0200 Subject: [PATCH 22/27] revert deprecated constructor removal --- .../com/sap/ai/sdk/orchestration/AssistantMessage.java | 7 +++++++ .../ai/sdk/orchestration/OrchestrationChatResponse.java | 5 +---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java index e568a52dc..42e040c54 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java @@ -41,6 +41,13 @@ public class AssistantMessage extends Message { @Nullable List reasoningContent; + @Deprecated + public AssistantMessage(@Nonnull final List toolCalls) { + content = new MessageContent(List.of()); + this.toolCalls = toolCalls; + reasoningContent = null; + } + /** * Creates a new assistant message with the given single message. * diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java index dd7e8e760..a6c67efc2 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationChatResponse.java @@ -99,10 +99,7 @@ public List getAllMessages() throws IllegalArgumentException { val toolCalls = assistantChatMessage.getToolCalls(); AssistantMessage assistantMessage; if (!toolCalls.isEmpty()) { - assistantMessage = - new AssistantMessage( - MessageContent.fromChatMessageContent(assistantChatMessage.getContent())) - .withToolCalls(toolCalls); + assistantMessage = new AssistantMessage(toolCalls); } else { assistantMessage = new AssistantMessage( From 7f77230085687a704c88c122042204c80acc2477 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 24 Sep 2026 16:08:46 +0200 Subject: [PATCH 23/27] polish the api --- docs/release_notes.md | 2 +- .../src/main/java/com/sap/ai/sdk/orchestration/Message.java | 4 ++-- .../com/sap/ai/sdk/app/controllers/OrchestrationTest.java | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index 5e03e6619..77110ff37 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -17,7 +17,7 @@ - [Orchestration] Internal AI SDK methods `createInputFilterConfig` and `createOutputFilterConfig` were removed from public API - [Orchestration] Internal AI SDK methods `createConfig` were removed from `GroundingProvider` and `MaskingProvider` -- [Orchestration] Internal AI SDK methods `role`, `createChatMessage` and `content` were removed from public API +- [Orchestration] Internal AI SDK method `content` was removed from public API of `Message` class. #### Prompt registry client Migration Guide diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java index e5829f6c7..ae3f37548 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/Message.java @@ -118,7 +118,7 @@ public static SystemMessage system( * @return the role. */ @Nonnull - abstract String role(); + public abstract String role(); /** * Returns the content of the message. @@ -126,5 +126,5 @@ public static SystemMessage system( * @return the content. */ @Nonnull - abstract MessageContent content(); + public abstract MessageContent content(); } diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java index 4e358323a..f83e86fc7 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java @@ -28,6 +28,7 @@ import com.sap.ai.sdk.orchestration.ReasoningEffort; import com.sap.ai.sdk.orchestration.SystemMessage; import com.sap.ai.sdk.orchestration.TemplateConfig; +import com.sap.ai.sdk.orchestration.TextItem; import com.sap.ai.sdk.orchestration.UserMessage; import com.sap.ai.sdk.orchestration.model.DPIEntities; import com.sap.ai.sdk.orchestration.model.InputTranslationModuleResult; @@ -188,6 +189,9 @@ void testTemplate() { val response = result.getOriginalResponse(); assertThat(response.getRequestId()).isNotEmpty(); + assertThat(((TextItem) result.getAllMessages().get(0).content().items().get(0)).text()) + .isEqualTo("Reply with 'Orchestration Service is working!' in German"); + assertThat(result.getAllMessages().get(0).role()).isEqualTo("user"); var llm = response.getIntermediateResults().getLlm(); assertThat(llm.getId()).isEmpty(); assertThat(llm.getObject()).isEqualTo("chat.completion"); From ee6533995511fd29ee4d8e4c269ae61968b88bc8 Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Thu, 24 Sep 2026 14:09:44 +0000 Subject: [PATCH 24/27] Formatting --- .../java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java index f83e86fc7..3333ef8cc 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java @@ -190,7 +190,7 @@ void testTemplate() { assertThat(response.getRequestId()).isNotEmpty(); assertThat(((TextItem) result.getAllMessages().get(0).content().items().get(0)).text()) - .isEqualTo("Reply with 'Orchestration Service is working!' in German"); + .isEqualTo("Reply with 'Orchestration Service is working!' in German"); assertThat(result.getAllMessages().get(0).role()).isEqualTo("user"); var llm = response.getIntermediateResults().getLlm(); assertThat(llm.getId()).isEmpty(); From de6ea3466feeedffc0d0a5640210c3382412607f Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Thu, 24 Sep 2026 16:11:23 +0200 Subject: [PATCH 25/27] fix checkstyle issue --- .../java/com/sap/ai/sdk/orchestration/AssistantMessage.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java index 42e040c54..120ef2ce3 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java @@ -41,6 +41,12 @@ public class AssistantMessage extends Message { @Nullable List reasoningContent; + /** + * Creates a new assistant message with the given tool calls. + * + * @param toolCalls list of tool call objects + * @deprecated Please use {@link #withToolCalls(List)} instead. + */ @Deprecated public AssistantMessage(@Nonnull final List toolCalls) { content = new MessageContent(List.of()); From ef5e8226fa92ca8d370899efae4790527117c468 Mon Sep 17 00:00:00 2001 From: Charles Dubois <103174266+CharlesDuboisSAP@users.noreply.github.com> Date: Fri, 25 Sep 2026 08:13:56 +0200 Subject: [PATCH 26/27] Update AssistantMessage.java --- .../sap/ai/sdk/orchestration/AssistantMessage.java | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java index 57f46dd8b..7b556d47f 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/AssistantMessage.java @@ -47,8 +47,7 @@ public class AssistantMessage extends Message { * @param toolCalls list of tool call objects * @deprecated Please use {@link #withToolCalls(List)} instead. */ - @Deprecated - public AssistantMessage(@Nonnull final List toolCalls) { + AssistantMessage(@Nonnull final List toolCalls) { content = new MessageContent(List.of()); this.toolCalls = toolCalls; reasoningContent = null; @@ -76,17 +75,6 @@ public AssistantMessage(@Nonnull final String singleMessage) { reasoningContent = null; } - /** - * Creates a new assistant message with the given tool calls. - * - * @param toolCalls list of tool call objects - */ - AssistantMessage(@Nonnull final List toolCalls) { - content = new MessageContent(List.of()); - this.toolCalls = toolCalls; - reasoningContent = null; - } - /** * Returns a new AssistantMessage instance with the provided tool calls added to the existing * ones. From 157002fd6be2f147feb2ab068f505ba68fe51b21 Mon Sep 17 00:00:00 2001 From: I538344 Date: Fri, 25 Sep 2026 11:44:08 +0200 Subject: [PATCH 27/27] release notes --- docs/release_notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/release_notes.md b/docs/release_notes.md index b5c8a8214..11fee6cf2 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -18,6 +18,7 @@ from public API - [Orchestration] Internal AI SDK methods `createConfig` were removed from `GroundingProvider` and `MaskingProvider` - [Orchestration] Internal AI SDK method `createMessage` was removed from `Message` class. +- [Orchestration] Removed internal `AssistantMessage(List toolCalls)` please use `AssistantMessage.withToolCalls(List)` instead. - [Orchestration] Removed deprecated models: - `OrchestrationAiModel.IBM_GRANITE_13B_CHAT` - `OrchestrationAiModel.MISTRAL_LARGE_INSTRUCT`