Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
7fb8e3d
chore: [DevOps] bump the production-minor-patch group with 2 updates …
dependabot[bot] Sep 10, 2026
d208f72
chore: [DevOps] bump the test group with 4 updates (#1042)
dependabot[bot] Sep 10, 2026
6390a58
chore: [DevOps] bump the plugins group across 1 directory with 3 upda…
dependabot[bot] Sep 11, 2026
e0d5377
chore: [DevOps] Separate main and v2 e2e test runs by one hour (#1044)
CharlesDuboisSAP Sep 11, 2026
2fdf698
fix: [DevOps] Fix e2e-test set up (#1048)
Jonas-Isr Sep 15, 2026
a72ac74
feat: [Orchestration] Add fallback configs to Spring AI integration (…
Jonas-Isr Sep 15, 2026
12cab70
fix: [DevOps] Fix e2e-tests (#1049)
Jonas-Isr Sep 16, 2026
e4027a3
chore: [DevOps] bump org.apache.maven.plugins:maven-deploy-plugin (#1…
dependabot[bot] Sep 18, 2026
381cdbd
chore: [DevOps] bump org.apache.maven.plugins:maven-install-plugin (#…
dependabot[bot] Sep 18, 2026
d8c10d1
chore: [DevOps] bump the production-minor-patch group with 4 updates …
dependabot[bot] Sep 18, 2026
4bcb86c
fix: [DevOps] Fix CVE-2026-71889 and CVE-2026-18040 (#1057)
CharlesDuboisSAP Sep 18, 2026
bba1841
fix: [DevOps] Fix CVE-2026-71889 and CVE-2026-18040 properly (#1061)
CharlesDuboisSAP Sep 21, 2026
4d1d377
fix: fix e2e tests (#1064)
vladimir-a-sap Sep 22, 2026
d00c353
chore: [DevOps] fix CVE-2026-71889 bouncycastle (#1066)
CharlesDuboisSAP Sep 22, 2026
554fcd6
chore: [DevOps] ignore CVE-2026-59318, AI SDK 2.0.0-ALPHA will contai…
CharlesDuboisSAP Sep 23, 2026
8d1fe7f
chore: [DevOps] Fix CVE-2026-89407 and CVE-2026-89425 (#1070)
CharlesDuboisSAP Sep 24, 2026
ab919d3
chore: harmonize javadocs (#1075)
SoleilHoffmann Sep 25, 2026
64eca69
chore: [DevOps] bump org.apache.httpcomponents.core5:httpcore5 (#1079)
dependabot[bot] Sep 25, 2026
e0e7b23
chore: [DevOps] bump the production-minor-patch group with 2 updates …
dependabot[bot] Sep 25, 2026
88cd9a7
Merge branch 'main' into v2
CharlesDuboisSAP Sep 25, 2026
efb7c1f
chore: [DevOps] merge main
CharlesDuboisSAP Sep 25, 2026
1bc868a
remove spring dependency-check-suppression.xml
CharlesDuboisSAP Sep 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion .pipeline/checkstyle.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,17 @@
<!--<module name="JavadocContentLocation" />-->

<module name="SummaryJavadoc">
<property name="period" value=""/>
<property name="period" value="."/>
<property name="severity" value="info"/>
</module>
<module name="AtclauseOrder">
<property name="tagOrder" value="@param, @return, @throws, @see, @since, @deprecated"/>
<property name="severity" value="info"/>
</module>
<module name="NonEmptyAtclauseDescription">
<property name="severity" value="info"/>
</module>
<module name="JavadocParagraph">
<property name="severity" value="info"/>
</module>
<module name="MissingJavadocMethod">
Expand Down
8 changes: 0 additions & 8 deletions .pipeline/dependency-check-suppression.xml
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
<suppress>
<notes><![CDATA[(flase alarm) We do not have spring-ai-transformers in our dep tree. Should be fixed after ai v2 migration.]]></notes>
<cve>CVE-2026-47852</cve>
</suppress>
<suppress>
<notes><![CDATA[(false alarm) We do not have spring-ai-prd-reader in our dep tree. Should be fixed after ai v2 migration.]]></notes>
<cve>CVE-2026-47851</cve>
</suppress>
<suppress>
<notes><![CDATA[This is a JS dependency.]]></notes>
<cve>CVE-2021-41251</cve>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public GroundingClient() {
/**
* Constructor with custom AI Core service instance.
*
* @param service The instance of AI Core service
* @param service the instance of AI Core service.
*/
public GroundingClient(final @Nonnull AiCoreService service) {
this(service, DEFAULT_BASE_PATH);
Expand All @@ -48,7 +48,7 @@ public GroundingClient(final @Nonnull AiCoreService service) {
/**
* Get the Pipelines API.
*
* @return The Pipelines API.
* @return the Pipelines API.
*/
@Nonnull
public PipelinesApi pipelines() {
Expand All @@ -58,7 +58,7 @@ public PipelinesApi pipelines() {
/**
* Get the Vector API.
*
* @return The Vector API.
* @return the Vector API.
*/
@Nonnull
public VectorApi vector() {
Expand All @@ -68,18 +68,18 @@ public VectorApi vector() {
/**
* Get the Retrieval API.
*
* @return The Retrieval API.
* @return the Retrieval API.
*/
@Nonnull
public RetrievalApi retrieval() {
return new RetrievalApi(getClient());
}

/**
* Create a new OpenAI client with a custom header added to every call made with this client
* Create a new OpenAI client with a custom header added to every call made with this client.
*
* @param key the key of the custom header to add
* @param value the value of the custom header to add
* @param key the key of the custom header to add.
* @param value the value of the custom header to add.
* @return a new client.
* @since 1.17.0
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,42 +6,42 @@
import javax.annotation.Nonnull;

/**
* Unified client to use Prompt Registry API
* Unified client to use Prompt Registry API.
*
* @since 2.0
*/
public class PromptRegistryClient {

private final AiCoreService aiCoreService;

/** Constructs default PromptRegistryClient */
/** Constructs default PromptRegistryClient. */
public PromptRegistryClient() {
this(new AiCoreService());
}

/**
* Constructs PromptRegistryClient with customized AiCoreService
* Constructs PromptRegistryClient with customized AiCoreService.
*
* @param service customized AiCoreService
* @param service customized AiCoreService.
*/
public PromptRegistryClient(@Nonnull final AiCoreService service) {
aiCoreService = service;
}

/**
* Get the prompt templates client
* Get the prompt templates' client.
*
* @return the client
* @return the client.
*/
@Nonnull
public PromptTemplatesApi prompt() {
return new PromptTemplatesApi(PromptClientMixin.addMixin(aiCoreService));
}

/**
* Get the orchestration configs client
* Get the orchestration configs client.
*
* @return the client
* @return the client.
*/
@Nonnull
public OrchestrationConfigsApi orchestrationConfig() {
Expand Down
46 changes: 23 additions & 23 deletions core/src/main/java/com/sap/ai/sdk/core/AiCoreService.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ public AiCoreService() {
* base path set. But for special cases a different base path may be required (e.g. when consuming
* AI Core via some proxy that expects a different base path).
*
* @param destination The base destination to be used for AI Core service calls.
* @return A new AI Core Service object using the provided destination as basis.
* @param destination the base destination to be used for AI Core service calls.
* @return a new AI Core Service object using the provided destination as basis.
*/
@Nonnull
public AiCoreService withBaseDestination(@Nonnull final HttpDestination destination) {
Expand All @@ -64,10 +64,10 @@ public AiCoreService withBaseDestination(@Nonnull final HttpDestination destinat
* Get the base destination for AI Core service calls. This destination won't have any resource
* group set.
*
* @return The base destination.
* @throws DestinationAccessException If there was an issue creating the base destination, e.g. in
* @return the base destination.
* @throws DestinationAccessException if there was an issue creating the base destination, e.g. in
* case of invalid credentials.
* @throws DestinationNotFoundException If there was an issue creating the base destination, e.g.
* @throws DestinationNotFoundException if there was an issue creating the base destination, e.g.
* in case of missing credentials.
* @see #withBaseDestination(HttpDestination)
*/
Expand All @@ -81,10 +81,10 @@ public HttpDestination getBaseDestination()
* Get a destination to perform inference calls against a deployment under the default resource
* group on AI Core.
*
* @return The destination pointing to the specific deployment ID.
* @throws DestinationAccessException If there was an issue creating the base destination, e.g. in
* @return the destination pointing to the specific deployment ID.
* @throws DestinationAccessException if there was an issue creating the base destination, e.g. in
* case of invalid credentials.
* @throws DestinationNotFoundException If there was an issue creating the base destination, e.g.
* @throws DestinationNotFoundException if there was an issue creating the base destination, e.g.
* in case of missing credentials.
* @see #getInferenceDestination(String) for specifying a custom resource group.
*/
Expand All @@ -98,8 +98,8 @@ public InferenceDestinationBuilder getInferenceDestination()
* Get a destination to perform inference calls against a deployment for the given resource group
* on AI Core.
*
* @param resourceGroup The resource group to be used for the new endpoint.
* @return The destination pointing to the specific deployment ID.
* @param resourceGroup the resource group to be used for the new endpoint.
* @return the destination pointing to the specific deployment ID.
* @see #getInferenceDestination() for using the default resource group.
*/
@Nonnull
Expand All @@ -111,7 +111,7 @@ public InferenceDestinationBuilder getInferenceDestination(@Nonnull final String
* Get an {@link ApiClient} to execute requests based on clients generated from OpenAPI
* specifications.
*
* @return A new client object based on {@link #getBaseDestination()}.
* @return a new client object based on {@link #getBaseDestination()}.
*/
@Nonnull
public ApiClient getApiClient() {
Expand All @@ -123,8 +123,8 @@ public ApiClient getApiClient() {
* The result of this together with the base path defined on the destination will be used for
* inference calls towards this deployment.
*
* @param deploymentId The deployment ID to be used for the path.
* @return The path to the deployment.
* @param deploymentId the deployment ID to be used for the path.
* @return the path to the deployment.
*/
@Nonnull
protected String buildDeploymentPath(@Nonnull final String deploymentId) {
Expand All @@ -150,11 +150,11 @@ public class InferenceDestinationBuilder {
/**
* Use a fixed deployment ID to identify the deployment.
*
* @param deploymentId The ID of the deployment to target.
* @return A new destination targeting the specified deployment.
* @throws DestinationAccessException If there was an issue creating the base destination, e.g.
* @param deploymentId the ID of the deployment to target.
* @return a new destination targeting the specified deployment.
* @throws DestinationAccessException if there was an issue creating the base destination, e.g.
* in case of invalid credentials.
* @throws DestinationNotFoundException If there was an issue creating the base destination,
* @throws DestinationNotFoundException if there was an issue creating the base destination,
* e.g. in case of missing credentials.
* @see #forModel(AiModel)
* @see #forScenario(String)
Expand All @@ -169,9 +169,9 @@ public HttpDestination usingDeploymentId(@Nonnull final String deploymentId)
* Lookup a deployment based on the given {@link AiModel}. If there are multiple deployments for
* the given model, the first one is returned.
*
* @param model The model to be used for inference calls.
* @return A new destination targeting a deployment for the given model.
* @throws DeploymentResolutionException If no running deployment is found for the model.
* @param model the model to be used for inference calls.
* @return a new destination targeting a deployment for the given model.
* @throws DeploymentResolutionException if no running deployment is found for the model.
* @see #forScenario(String)
* @see #usingDeploymentId(String)
*/
Expand All @@ -186,9 +186,9 @@ public HttpDestination forModel(@Nonnull final AiModel model)
* Lookup a deployment based on the given scenario. If there are multiple deployments within the
* same scenario, the first one is returned.
*
* @param scenarioId The scenario to discover deployments for.
* @return A new destination targeting a deployment within the given scenario.
* @throws DeploymentResolutionException If no running deployment is found within the scenario.
* @param scenarioId the scenario to discover deployments for.
* @return a new destination targeting a deployment within the given scenario.
* @throws DeploymentResolutionException if no running deployment is found within the scenario.
* @see #forModel(AiModel)
* @see #usingDeploymentId(String)
*/
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/java/com/sap/ai/sdk/core/AiModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ public interface AiModel {
/**
* Get the model's name.
*
* @return The name of the model.
* @return the name of the model.
*/
@Nonnull
String name();

/**
* Get the model's version.
*
* @return The version of the model, or null if not specified.
* @return the version of the model, or null if not specified.
*/
@Nullable
String version();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,10 +133,10 @@ private Optional<String> getCachedDeployment(
}

/**
* This exists because getBackendDetails() is broken
* This exists because getBackendDetails() is broken.
*
* @param targetModel The target model object.
* @param deployment The deployment.
* @param targetModel the target model object.
* @param deployment the deployment.
* @return true if the deployment is of the model.
*/
protected static boolean isDeploymentOfModel(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@
public final class JacksonConfiguration {

/**
* Default object mapper used for JSON de-/serialization. <b>Only intended for internal usage
* within this SDK</b>. Largely follows the defaults set by Spring.
* Default object mapper used for JSON de-/serialization. Largely follows the defaults set by
* Spring.
*
* @return A new object mapper with the default configuration.
* <p>For internal use only.
*
* @return a new object mapper with the default configuration.
* @see <a
* href="https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/converter/json/Jackson2ObjectMapperBuilder.html">Jackson2ObjectMapperBuilder</a>
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public interface ClientError {
/**
* Get the error message.
*
* @return The error message
* @return the error message.
*/
@Nullable
String getMessage();
Expand Down
20 changes: 10 additions & 10 deletions core/src/main/java/com/sap/ai/sdk/core/common/ClientException.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ public class ClientException extends RuntimeException {
*
* @param clientError the original structured error payload received from the remote service, can
* be null if not available.
* @return the current instance of {@link ClientException} with the changed ClientError data
* @param <T> the type of the exception, typically a subclass of {@link ClientException}
* @param <T> the type of the exception, typically a subclass of {@link ClientException}.
* @return the current instance of {@link ClientException} with the changed ClientError data.
*/
@SuppressWarnings("unchecked")
@Nonnull
Expand All @@ -62,10 +62,10 @@ public <T extends ClientException> T setClientError(@Nullable final ClientError
/**
* Sets the original HTTP request that caused this exception.
*
* @param httpResponse the original HTTP response that caused this exception, can be null if not
* available.
* @return the current instance of {@link ClientException} with the changed HTTP response
* @param <T> the type of the exception, typically a subclass of {@link ClientException}
* @param httpResponse the original HTTP response that caused this exception. Can be {@code null}
* if not available.
* @param <T> the type of the exception, typically a subclass of {@link ClientException}.
* @return the current instance of {@link ClientException} with the changed HTTP response.
*/
@SuppressWarnings("unchecked")
@Nonnull
Expand All @@ -78,10 +78,10 @@ public <T extends ClientException> T setHttpResponse(
/**
* Sets the original HTTP request that caused this exception.
*
* @param httpRequest the original HTTP request that caused this exception, can be null if not
* available.
* @return the current instance of {@link ClientException} with the changed HTTP request
* @param <T> the type of the exception, typically a subclass of {@link ClientException}
* @param httpRequest the original HTTP request that caused this exception. Can be {@code null} if
* not available.
* @param <T> the type of the exception, typically a subclass of {@link ClientException}.
* @return the current instance of {@link ClientException} with the changed HTTP request.
*/
@SuppressWarnings("unchecked")
@Nonnull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@
* A factory whose implementations can provide customized exception types and error mapping logic
* for different service clients or error scenarios.
*
* @param <E> The subtype of {@link ClientException} to be created by this factory.
* @param <R> The subtype of {@link ClientError} payload that can be processed by this factory.
* @param <E> the subtype of {@link ClientException} to be created by this factory.
* @param <R> the subtype of {@link ClientError} payload that can be processed by this factory.
*/
@FunctionalInterface
public interface ClientExceptionFactory<E extends ClientException, R extends ClientError> {

/**
* Creates an exception with a message and optional cause.
*
* @param message A descriptive message for the exception.
* @param cause An optional cause of the exception, can be null if not applicable.
* @return An instance of the specified {@link ClientException} type
* @param message a descriptive message for the exception.
* @param cause an optional cause of the exception. Can be {@code null} if not applicable.
* @return an instance of the specified {@link ClientException} type.
*/
@Nonnull
default E build(@Nonnull final String message, @Nullable final Throwable cause) {
Expand All @@ -28,8 +28,8 @@ default E build(@Nonnull final String message, @Nullable final Throwable cause)
/**
* Creates an exception with a message and optional cause.
*
* @param message A descriptive message for the exception.
* @return An instance of the specified {@link ClientException} type
* @param message a descriptive message for the exception.
* @return an instance of the specified {@link ClientException} type.
*/
@Nonnull
default E build(@Nonnull final String message) {
Expand All @@ -40,11 +40,11 @@ default E build(@Nonnull final String message) {
* Creates an exception from a given message and an HTTP error response that has been successfully
* deserialized into a {@link ClientError} object.
*
* @param message A descriptive message for the exception.
* @param clientError The structured {@link ClientError} object deserialized from the response,
* @param message a descriptive message for the exception.
* @param clientError the structured {@link ClientError} object deserialized from the response,
* null if not exist.
* @param cause An optional cause of the exception, can be null if not applicable.
* @return An instance of the specified {@link ClientException} type
* @param cause an optional cause of the exception. Can be {@code null} if not applicable.
* @return an instance of the specified {@link ClientException} type.
*/
@Nonnull
E build(
Expand Down
Loading
Loading