Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
c018480
Implemented Convenience Function
n-o-u-r-h-a-n Nov 6, 2025
817a5e9
Updating release notes + some formatting
n-o-u-r-h-a-n Nov 6, 2025
ca75f86
Updates
n-o-u-r-h-a-n Nov 6, 2025
092c1fc
Merge branch 'main' into translation-module-convenience
n-o-u-r-h-a-n Nov 6, 2025
082ec9a
Merge branch 'main' into translation-module-convenience
n-o-u-r-h-a-n Nov 6, 2025
861df11
formatting
n-o-u-r-h-a-n Nov 6, 2025
ef484ea
Merge remote-tracking branch 'origin/translation-module-convenience' …
n-o-u-r-h-a-n Nov 6, 2025
63dd65f
Formatting
bot-sdk-js Nov 6, 2025
519cd75
check
n-o-u-r-h-a-n Nov 6, 2025
1d13880
Merge remote-tracking branch 'origin/translation-module-convenience' …
n-o-u-r-h-a-n Nov 6, 2025
108730a
Formatting
bot-sdk-js Nov 6, 2025
4b97583
more formatting
n-o-u-r-h-a-n Nov 6, 2025
ae4f5e3
Merge remote-tracking branch 'origin/translation-module-convenience' …
n-o-u-r-h-a-n Nov 6, 2025
7c2a641
Formatting
bot-sdk-js Nov 6, 2025
35e5035
run tests
n-o-u-r-h-a-n Nov 6, 2025
e937917
Merge remote-tracking branch 'origin/translation-module-convenience' …
n-o-u-r-h-a-n Nov 6, 2025
5a9740a
Formatting
bot-sdk-js Nov 6, 2025
e5974e6
run tests
n-o-u-r-h-a-n Nov 6, 2025
64e01b7
Merge remote-tracking branch 'origin/translation-module-convenience' …
n-o-u-r-h-a-n Nov 6, 2025
c85c2ff
fix error1
n-o-u-r-h-a-n Nov 6, 2025
a97bfec
Formatting
bot-sdk-js Nov 6, 2025
7e64b07
Revert generated models to match origin/main
n-o-u-r-h-a-n Nov 6, 2025
964271f
making 2 model classes just like main
n-o-u-r-h-a-n Nov 6, 2025
130f454
chore: retrigger CI
n-o-u-r-h-a-n Nov 6, 2025
0e5a395
checking
n-o-u-r-h-a-n Nov 6, 2025
60b101b
chore: retrigger CI
n-o-u-r-h-a-n Nov 6, 2025
b9baee5
matching the CI
n-o-u-r-h-a-n Nov 6, 2025
7f40361
Formatting
bot-sdk-js Nov 6, 2025
876ea56
chore: retrigger CI
n-o-u-r-h-a-n Nov 6, 2025
18e68ee
matching the CI#2
n-o-u-r-h-a-n Nov 6, 2025
d26b07b
matching the CI#3
n-o-u-r-h-a-n Nov 6, 2025
4cadce0
chore: retrigger CI
n-o-u-r-h-a-n Nov 6, 2025
0908881
reverting
n-o-u-r-h-a-n Nov 7, 2025
321fd62
Updating release notes
n-o-u-r-h-a-n Nov 7, 2025
6affa80
Merge branch 'main' into translation-module-convenience
n-o-u-r-h-a-n Nov 10, 2025
0424e27
Merge remote-tracking branch 'origin/main' into translation-module-co…
rpanackal Nov 10, 2025
3d0d337
fixing unnecessary diffs
rpanackal Nov 10, 2025
af3bba9
Merge branch 'main' into translation-module-convenience
n-o-u-r-h-a-n Nov 20, 2025
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
3 changes: 2 additions & 1 deletion docs/release_notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@

### 📈 Improvements

-
- [Orchestration] Added new API `TranslationConfig#getInputTranslationConfig` to extract input config.
- [Orchestration] Added new API `TranslationConfig#getOutputTranslationConfig` to extract output config.

### 🐛 Fixed Issues

Expand Down
2 changes: 1 addition & 1 deletion orchestration/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
<coverage.instruction>94%</coverage.instruction>
<coverage.branch>75%</coverage.branch>
<coverage.method>93%</coverage.method>
<coverage.class>100%</coverage.class>
<coverage.class>98%</coverage.class>
</properties>

<dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,24 @@ public class OrchestrationModuleConfig {
*/
@Nullable GroundingModuleConfig groundingConfig;

/**
* Configuration for translating input content before processing.
*
* @link <a
* href="https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/enhance-model-consumption-with-translation">
* SAP AI Core: Orchestration - Input Translation</a>
* @since 1.8.0
*/
@Nullable SAPDocumentTranslationInput inputTranslationConfig;

/**
* Configuration for translating output content after processing.
*
* @link <a
* href="https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/enhance-model-consumption-with-output-translation">
* SAP AI Core: Orchestration - Output Translation</a>
* @since 1.8.0
*/
@Nullable SAPDocumentTranslationOutput outputTranslationConfig;

/** Configuration of optional streaming options for output filtering. */
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package com.sap.ai.sdk.orchestration;

import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationInput;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationInputConfig;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationOutput;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationOutputConfig;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationOutputTargetLanguage;
import javax.annotation.Nonnull;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Value;

/**
* Configuration helper for SAP Document Translation.
*
* @link <a
* href="https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/sap-document-translation">SAP
* AI Core: Orchestration - SAP Document Translation</a>
*/
@Value
@Getter(AccessLevel.PACKAGE)
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class TranslationConfig {
@Nonnull SAPDocumentTranslationInput.TypeEnum translationType;

/**
* Create a builder for the SAP_DOCUMENT_TRANSLATION translation provider
*
* @return The Builder instance.
*/
@Nonnull
public static Builder inputTranslation() {
return new TranslationConfig.Builder(
SAPDocumentTranslationInput.TypeEnum.SAP_DOCUMENT_TRANSLATION);
}

/**
* Create a builder for the SAP_DOCUMENT_TRANSLATION translation provider
*
* @return The Builder2 instance.
*/
@Nonnull
public static Builder2 outputTranslation() {
return new TranslationConfig.Builder2(
SAPDocumentTranslationOutput.TypeEnum.SAP_DOCUMENT_TRANSLATION);
}

/** Builder helper class. */
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public static class Builder {

private final SAPDocumentTranslationInput.TypeEnum translationType;

/**
* Get the input translation config with default values.
*
* @return The SAPDocumentTranslationInput instance.
*/
@Nonnull
public SAPDocumentTranslationInput getInputTranslationConfig() {
return SAPDocumentTranslationInput.create()
.type(translationType)
.config(SAPDocumentTranslationInputConfig.create().targetLanguage("en-US").applyTo(null));
}
}

/** Sample builder class */
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public static class Builder2 {
private final SAPDocumentTranslationOutput.TypeEnum translationType;

/**
* Get the output translation config with default values.
*
* @return The SAPDocumentTranslationOutput instance.
*/
@Nonnull
public SAPDocumentTranslationOutput getOutputTranslationConfig() {
return SAPDocumentTranslationOutput.create()
.type(translationType)
.config(
SAPDocumentTranslationOutputConfig.create()
.targetLanguage(SAPDocumentTranslationOutputTargetLanguage.create("de-DE"))
.sourceLanguage("en-US"));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Major)

These arguments need to be configurable fully for the convenience layer.

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,32 @@ void testDpiMaskingRegex() {
.value("**-**-*****"));
}

@Test
void testTranslationConfig() {
var translationConfig = TranslationConfig.inputTranslation().getInputTranslationConfig();
var config =
new OrchestrationModuleConfig()
.withLlmConfig(GPT_4O)
.withInputTranslationConfig(translationConfig);

assertThat(config.getInputTranslationConfig()).isNotNull();
assertThat(config.getInputTranslationConfig().getType()).isEqualTo(translationConfig.getType());
assertThat(config.getInputTranslationConfig().getConfig().getTargetLanguage())
.isEqualTo(translationConfig.getConfig().getTargetLanguage());

var translationConfig2 = TranslationConfig.inputTranslation().getInputTranslationConfig();
var config2 =
new OrchestrationModuleConfig()
.withLlmConfig(GPT_4O)
.withInputTranslationConfig(translationConfig2);

assertThat(config2.getInputTranslationConfig()).isNotNull();
assertThat(config2.getInputTranslationConfig().getType())
.isEqualTo(translationConfig2.getType());
assertThat(config2.getInputTranslationConfig().getConfig().getTargetLanguage())
.isEqualTo(translationConfig2.getConfig().getTargetLanguage());
}

@Test
void testParams() {
// test withParams(Map<String, Object>)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,13 @@
import com.sap.ai.sdk.orchestration.OrchestrationPrompt;
import com.sap.ai.sdk.orchestration.ResponseJsonSchema;
import com.sap.ai.sdk.orchestration.TemplateConfig;
import com.sap.ai.sdk.orchestration.TranslationConfig;
import com.sap.ai.sdk.orchestration.model.DPIEntities;
import com.sap.ai.sdk.orchestration.model.DataRepositoryType;
import com.sap.ai.sdk.orchestration.model.DocumentGroundingFilter;
import com.sap.ai.sdk.orchestration.model.GroundingFilterSearchConfiguration;
import com.sap.ai.sdk.orchestration.model.LlamaGuard38b;
import com.sap.ai.sdk.orchestration.model.ResponseFormatText;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationInput;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationInputConfig;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationOutput;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationOutputConfig;
import com.sap.ai.sdk.orchestration.model.SAPDocumentTranslationOutputTargetLanguage;
import com.sap.ai.sdk.orchestration.model.SearchDocumentKeyValueListPair;
import com.sap.ai.sdk.orchestration.model.SearchSelectOptionEnum;
import com.sap.ai.sdk.orchestration.model.Template;
Expand Down Expand Up @@ -621,20 +617,10 @@ public OrchestrationChatResponse translation() {
val configWithTranslation =
config
.withInputTranslationConfig(
SAPDocumentTranslationInput.create()
.type(SAPDocumentTranslationInput.TypeEnum.SAP_DOCUMENT_TRANSLATION)
.config(
SAPDocumentTranslationInputConfig.create()
.targetLanguage("en-US")
.applyTo(null)))
TranslationConfig.inputTranslation().getInputTranslationConfig())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Minor)

I would expect an overload for .withInputTranslationConfig(..) that expects a convenience class as argument, in parallel to existing generated class SAPDocumentTranslationOutput.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please compare to the other with- methods in OrchestrationModuleConfig, they translate a convenience argument to generated class.

.withOutputTranslationConfig(
SAPDocumentTranslationOutput.create()
.type(SAPDocumentTranslationOutput.TypeEnum.SAP_DOCUMENT_TRANSLATION)
.config(
SAPDocumentTranslationOutputConfig.create()
.targetLanguage(
SAPDocumentTranslationOutputTargetLanguage.create("de-DE"))
.sourceLanguage("en-US"))); // optional source language
TranslationConfig.outputTranslation()
.getOutputTranslationConfig()); // optional source language

return client.chatCompletion(prompt, configWithTranslation);
}
Expand Down