Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
6500610
WiP
CharlesDuboisSAP Aug 5, 2026
3d6f23b
remove try
CharlesDuboisSAP Aug 6, 2026
50d9b9c
add 1.5 model
CharlesDuboisSAP Aug 6, 2026
206f7e8
fix unit tests
CharlesDuboisSAP Aug 6, 2026
8072c02
Merge branch 'main' into rpt1.5
CharlesDuboisSAP Aug 6, 2026
048f2aa
regenerate
CharlesDuboisSAP Aug 6, 2026
3a0e1c1
move rpt-1.5 to a dedicated package, fix tests
vladimir-a-sap Aug 18, 2026
672ef24
recover older rpt-1.0 client we need to support
vladimir-a-sap Aug 18, 2026
fff7aa6
Merge branch 'main' into rpt1.5
vladimir-a-sap Aug 18, 2026
a70c5f6
preserve only new RPT client
vladimir-a-sap Aug 24, 2026
f298ce4
Merge branch 'main' into rpt1.5
vladimir-a-sap Aug 24, 2026
8681ceb
add release note
vladimir-a-sap Aug 24, 2026
1f475c1
fixed everything
CharlesDuboisSAP Aug 25, 2026
f43c2c6
Merge branch 'refs/heads/main' into rpt1.5
CharlesDuboisSAP Aug 26, 2026
eaad8c0
release notes
CharlesDuboisSAP Aug 26, 2026
6a8a732
release notes
CharlesDuboisSAP Aug 26, 2026
e17f58c
wip
CharlesDuboisSAP Aug 26, 2026
0a97ef6
Merge branch 'main' into rpt1.5
CharlesDuboisSAP Aug 26, 2026
9d123e7
re-add rpt 1.0 models and better release notes and fix Spring app web…
CharlesDuboisSAP Aug 26, 2026
ce1441a
revert unit test
CharlesDuboisSAP Aug 26, 2026
86e78fe
dependency conflict resolution
CharlesDuboisSAP Aug 27, 2026
118a3d6
PMD
CharlesDuboisSAP Aug 27, 2026
d1fed4d
Update foundation-models/sap-rpt/src/main/java/com/sap/ai/sdk/foundat…
CharlesDuboisSAP Aug 27, 2026
dad7346
Merge branch 'refs/heads/main' into rpt1.5
CharlesDuboisSAP Aug 27, 2026
7806b74
Javadoc SAP Relational Pre-trained Transformer
CharlesDuboisSAP Aug 27, 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
6 changes: 3 additions & 3 deletions .github/workflows/spec-update.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,9 @@ jobs:
FILE_PATH='core-services/prompt-registry/src/main/resources/spec/prompt-registry.yaml'
MODULE_PATH='core-services/prompt-registry'
;;
sap-rpt) # https://github.tools.sap/DL-COE/sap-rpt-1-public-content
API_URL="$API_BASE_URL/DL-COE/sap-rpt-1-public-content/contents/sap-rpt-1_openapi.json?ref=$REF"
FILE_PATH='foundation-models/sap-rpt/src/main/resources/spec/sap-rpt-1_openapi.json'
sap-rpt) # https://github.tools.sap/DL-COE/sap-rpt-resources
API_URL="$API_BASE_URL/DL-COE/sap-rpt-resources/contents/sap-rpt-1.6_openapi.json?ref=$REF"
FILE_PATH='foundation-models/sap-rpt/src/main/resources/spec/sap-rpt_openapi.json'
MODULE_PATH='foundation-models/sap-rpt'
;;
batch)
Expand Down
1 change: 1 addition & 0 deletions .pipeline/spotbugs-exclusions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<Package name="com.sap.ai.sdk.grounding.client"/>
<Package name="com.sap.ai.sdk.grounding.model"/>
<Package name="com.sap.ai.sdk.foundationmodels.openai.generated.model"/>
<Package name="com.sap.ai.sdk.foundationmodels.rpt.generated.model"/>
<Package name="com.sap.ai.sdk.prompt.registry.model"/>
<Package name="com.sap.ai.sdk.prompt.registry.client"/>
</Or>
Expand Down
11 changes: 9 additions & 2 deletions docs/release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,22 @@

### 🔧 Compatibility Notes

-
- [RPT] Updated SAP RPT tabular data prediction model client to version 1.5:

| Aspect | Before | After |
|-------------------|---------------------------------------------------------------------|---------------------------------------------------------------------------|
| Row prediction | `PredictRequestPayload.create().predictionConfig().xxx().rows()` | `PredictRequestPayloadOneOf.create().predictionConfig().rows().xxx()` |
| Column prediction | `PredictRequestPayload.create().predictionConfig().xxx().columns()` | `PredictRequestPayloadOneOf1.create().predictionConfig().columns().xxx()` |

### ✨ New Functionality

-[Orchestration] Added `GEMINI_3_5_FLASH_LITE` and `GEMINI_3_6_FLASH` to model list in `OrchestrationAiModel`.

### 📈 Improvements

-
- [RPT] Updated SAP RPT tabular data prediction model client to version 1.5:
- Added new `RptModel`, `SAP_RPT_1_5` and `SAP_RPT_1_5_LARGE`
- Added `explanation` parameter to `PredictionConfig`.

### 🐛 Fixed Issues

Expand Down
2 changes: 1 addition & 1 deletion foundation-models/sap-rpt/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@
</goals>
<phase>generate-sources</phase>
<configuration>
<inputSpec>${project.basedir}/src/main/resources/spec/sap-rpt-1_openapi.json</inputSpec>
<inputSpec>${project.basedir}/src/main/resources/spec/sap-rpt_openapi.json</inputSpec>
<modelPackage>com.sap.ai.sdk.foundationmodels.rpt.generated.model</modelPackage>
<apiPackage>com.sap.ai.sdk.foundationmodels.rpt.generated.client</apiPackage>
<additionalProperties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,26 @@
import javax.annotation.Nullable;

/**
* Represents an SAP RPT foundation model.
* Represents an SAP Relational Pre-trained Transformer foundation model.
*
* @param name The name of the model.
* @param version The version of the model (optional).
* @since 1.16.0
*/
public record RptModel(@Nonnull String name, @Nullable String version) implements AiModel {

/** SAP RPT 1 Small model. */
/** SAP Relational Pre-trained Transformer 1 Small model. */
public static final RptModel SAP_RPT_1_SMALL = new RptModel("sap-rpt-1-small", null);

/** SAP RPT 1 Large model. */
/** SAP Relational Pre-trained Transformer 1 Large model. */
public static final RptModel SAP_RPT_1_LARGE = new RptModel("sap-rpt-1-large", null);

/** SAP Relational Pre-trained Transformer 1.5 model. */
Comment thread
CharlesDuboisSAP marked this conversation as resolved.
public static final RptModel SAP_RPT_1_5 = new RptModel("sap-rpt-1.5", null);

/** SAP Relational Pre-trained Transformer 1.5 Large model. */
public static final RptModel SAP_RPT_1_5_LARGE = new RptModel("sap-rpt-1.5-large", null);

/**
* Create a new instance of RptModel with the provided version.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
import javax.annotation.Nullable;

/**
* SAP-RPT-1 Tabular AI in version 0.1.0.
* SAP RPT in version 1.5.0.
*
* <p>A REST API for in-context learning with the SAP-RPT-1 model.
* <p>A REST API for in-context learning with SAP RPT models.
*/
public class DefaultApi extends BaseApi {

/**
* Instantiates this API class to invoke operations on the SAP-RPT-1 Tabular AI.
* Instantiates this API class to invoke operations on the SAP RPT.
*
* @param httpDestination The destination that API should be used with
*/
Expand All @@ -34,8 +34,8 @@ public DefaultApi(@Nonnull final Destination httpDestination) {
}

/**
* Instantiates this API class to invoke operations on the SAP-RPT-1 Tabular AI based on a given
* {@link ApiClient}.
* Instantiates this API class to invoke operations on the SAP RPT based on a given {@link
* ApiClient}.
*
* @param apiClient ApiClient to invoke the API on
*/
Expand All @@ -57,13 +57,53 @@ public DefaultApi withDefaultHeaders(@Nonnull final Map<String, String> defaultH
}

/**
* Make in-context predictions for specified target columns based on provided table data JSON
* (optionally gzip-compressed).
* Health Check
*
* <p>Make in-context predictions for specified target columns. Either \&quot;rows\&quot; or
* \&quot;columns\&quot; must be provided and must contain both context and query rows. You can
* optionally send gzip-compressed JSON payloads and set a \&quot;Content-Encoding: gzip\&quot;
* header.
* <p>
*
* <p><b>200</b> - Successful Response
*
* @return Object
* @throws OpenApiRequestException if an error occurs while attempting to invoke the API
*/
@Nonnull
public Object health() throws OpenApiRequestException {

// create path and map variables
final String localVarPath = "/health";

final StringJoiner localVarQueryStringJoiner = new StringJoiner("&");
final List<Pair> localVarQueryParams = new ArrayList<Pair>();
final List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
final Map<String, String> localVarHeaderParams = new HashMap<String, String>(defaultHeaders);
final Map<String, Object> localVarFormParams = new HashMap<String, Object>();

final String[] localVarAccepts = {"application/json"};
final String localVarAccept = ApiClient.selectHeaderAccept(localVarAccepts);
final String[] localVarContentTypes = {};

final String localVarContentType = ApiClient.selectHeaderContentType(localVarContentTypes);

final TypeReference<Object> localVarReturnType = new TypeReference<Object>() {};

return apiClient.invokeAPI(
localVarPath,
"GET",
localVarQueryParams,
localVarCollectionQueryParams,
localVarQueryStringJoiner.toString(),
null,
localVarHeaderParams,
localVarFormParams,
localVarAccept,
localVarContentType,
localVarReturnType);
}

/**
* Make predictions from JSON (optionally gzip-compressed).
*
* <p>
*
* <p><b>200</b> - Successful Prediction
*
Expand All @@ -75,12 +115,18 @@ public DefaultApi withDefaultHeaders(@Nonnull final Map<String, String> defaultH
*
* <p><b>500</b> - Internal Server Error
*
* @param predictRequestPayload The value for the parameter predictRequestPayload
* <p><b>503</b> - Service Unavailable
*
* @param predictRequestPayload (required) The value for the parameter predictRequestPayload
* @param contentEncoding (optional) Content encoding of the request body. Use &#39;gzip&#39; for
* gzip-compressed payloads. Use compression level 1.
* @return PredictResponsePayload
* @throws OpenApiRequestException if an error occurs while attempting to invoke the API
*/
@Nonnull
public PredictResponsePayload predict(@Nonnull final PredictRequestPayload predictRequestPayload)
public PredictResponsePayload predict(
@Nonnull final PredictRequestPayload predictRequestPayload,
@Nullable final String contentEncoding)
throws OpenApiRequestException {

// verify the required parameter 'predictRequestPayload' is set
Expand All @@ -99,6 +145,9 @@ public PredictResponsePayload predict(@Nonnull final PredictRequestPayload predi
final Map<String, String> localVarHeaderParams = new HashMap<String, String>(defaultHeaders);
final Map<String, Object> localVarFormParams = new HashMap<String, Object>();

if (contentEncoding != null)
localVarHeaderParams.put("Content-Encoding", ApiClient.parameterToString(contentEncoding));

final String[] localVarAccepts = {"application/json"};
final String localVarAccept = ApiClient.selectHeaderAccept(localVarAccepts);
final String[] localVarContentTypes = {"application/json"};
Expand All @@ -122,11 +171,36 @@ public PredictResponsePayload predict(@Nonnull final PredictRequestPayload predi
}

/**
* Make in-context predictions for specified target columns based on provided table data Parquet
* file.
* Make predictions from JSON (optionally gzip-compressed).
*
* <p>
*
* <p><b>200</b> - Successful Prediction
*
* <p><b>400</b> - Bad Request - Invalid input data
*
* <p><b>413</b> - Payload Too Large
*
* <p><b>422</b> - Validation Error
*
* <p><b>500</b> - Internal Server Error
*
* <p><b>503</b> - Service Unavailable
*
* @param predictRequestPayload The value for the parameter predictRequestPayload
* @return PredictResponsePayload
* @throws OpenApiRequestException if an error occurs while attempting to invoke the API
*/
@Nonnull
public PredictResponsePayload predict(@Nonnull final PredictRequestPayload predictRequestPayload)
throws OpenApiRequestException {
return predict(predictRequestPayload, null);
}

/**
* Make predictions from Parquet file
*
* <p>Make in-context predictions for specified target columns based on provided table data
* Parquet file.
* <p>
*
* <p><b>200</b> - Successful Prediction
*
Expand All @@ -138,10 +212,13 @@ public PredictResponsePayload predict(@Nonnull final PredictRequestPayload predi
*
* <p><b>500</b> - Internal Server Error
*
* @param _file (required) Parquet file containing the data
* @param predictionConfig (required) JSON string for prediction_config
* @param indexColumn (optional) Optional index column name
* @param parseDataTypes (optional, default to true) Whether to parse data types
* <p><b>503</b> - Service Unavailable
*
* @param _file (required) The value for the parameter _file
* @param predictionConfig (required) JSON string containing the prediction configuration (see
* PredictionConfig schema).
* @param indexColumn (optional) The value for the parameter indexColumn
* @param parseDataTypes (optional, default to false) The value for the parameter parseDataTypes
* @return PredictResponsePayload
* @throws OpenApiRequestException if an error occurs while attempting to invoke the API
*/
Expand Down Expand Up @@ -204,11 +281,9 @@ public PredictResponsePayload predictParquet(
}

/**
* Make in-context predictions for specified target columns based on provided table data Parquet
* file.
* Make predictions from Parquet file
*
* <p>Make in-context predictions for specified target columns based on provided table data
* Parquet file.
* <p>
*
* <p><b>200</b> - Successful Prediction
*
Expand All @@ -220,8 +295,11 @@ public PredictResponsePayload predictParquet(
*
* <p><b>500</b> - Internal Server Error
*
* @param _file Parquet file containing the data
* @param predictionConfig JSON string for prediction_config
* <p><b>503</b> - Service Unavailable
*
* @param _file The value for the parameter _file
* @param predictionConfig JSON string containing the prediction configuration (see
* PredictionConfig schema).
* @return PredictResponsePayload
* @throws OpenApiRequestException if an error occurs while attempting to invoke the API
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* SAP-RPT-1 Tabular AI
* A REST API for in-context learning with the SAP-RPT-1 model.
* SAP RPT
* A REST API for in-context learning with SAP RPT models.
*
*
*
Expand All @@ -15,14 +15,45 @@
import com.fasterxml.jackson.annotation.JsonValue;
import javax.annotation.Nonnull;

/** Gets or Sets ColumnType */
/**
* Supported column data types for the data schema. Includes base types (string, numeric, date) and
* additional types derived from SAP CDS (https://cap.cloud.sap/docs/cds/types#core-built-in-types).
* Additional types are mapped to the corresponding base type internally. All values are lowercase
* for case-insensitive matching.
*/
public enum ColumnType {
STRING("string"),

NUMERIC("numeric"),

DATE("date"),

BOOLEAN("boolean"),

LARGESTRING("largestring"),

UUID("uuid"),

INTEGER("integer"),

INT16("int16"),

INT32("int32"),

INT64("int64"),

UINT8("uint8"),

DECIMAL("decimal"),

DOUBLE("double"),

TIME("time"),

DATETIME("datetime"),

TIMESTAMP("timestamp"),

UNKNOWN_DEFAULT_OPEN_API("unknown_default_open_api");

private final String value;
Expand Down
Loading