Skip to content

Commit 07c621f

Browse files
committed
Add grounding e2e test.
1 parent e7e1a7b commit 07c621f

File tree

4 files changed

+50
-1
lines changed

4 files changed

+50
-1
lines changed

orchestration/src/main/java/com/sap/ai/sdk/orchestration/ConfigToRequestTransformer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ static ModuleConfigs toModuleConfigs(@Nonnull final OrchestrationModuleConfig co
7070

7171
Option.of(config.getFilteringConfig()).forEach(moduleConfig::filteringModuleConfig);
7272
Option.of(config.getMaskingConfig()).forEach(moduleConfig::maskingModuleConfig);
73+
Option.of(config.getGroundingConfig()).forEach(moduleConfig::groundingModuleConfig);
7374

7475
return moduleConfig;
7576
}

orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationModuleConfig.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.sap.ai.sdk.orchestration.model.MaskingModuleConfig;
77
import com.sap.ai.sdk.orchestration.model.OutputFilteringConfig;
88
import com.sap.ai.sdk.orchestration.model.TemplatingModuleConfig;
9+
import com.sap.ai.sdk.orchestration.model.GroundingModuleConfig;
910
import java.util.ArrayList;
1011
import java.util.Arrays;
1112
import java.util.Objects;
@@ -83,6 +84,14 @@ public class OrchestrationModuleConfig {
8384
*/
8485
@Nullable FilteringModuleConfig filteringConfig;
8586

87+
/**
88+
* A grounding configuration to provide additional context to the AI model.
89+
*
90+
* @link <a href="https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/grounding">SAP
91+
* AI Core: Orchestration - </a>
92+
*/
93+
@Nullable GroundingModuleConfig groundingConfig;
94+
8695
/**
8796
* Creates a new configuration with the given LLM configuration.
8897
*

sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
import com.sap.ai.sdk.orchestration.OrchestrationModuleConfig;
1414
import com.sap.ai.sdk.orchestration.OrchestrationPrompt;
1515
import com.sap.ai.sdk.orchestration.model.DPIEntities;
16+
import com.sap.ai.sdk.orchestration.model.DataRepositoryType;
17+
import com.sap.ai.sdk.orchestration.model.DocumentGroundingFilter;
18+
import com.sap.ai.sdk.orchestration.model.GroundingModuleConfig;
19+
import com.sap.ai.sdk.orchestration.model.GroundingModuleConfigConfig;
1620
import com.sap.ai.sdk.orchestration.model.Template;
1721
import java.util.List;
1822
import java.util.Map;
@@ -207,4 +211,37 @@ OrchestrationChatResponse maskingPseudonymization() {
207211

208212
return client.chatCompletion(prompt, configWithMasking);
209213
}
214+
215+
/**
216+
* Using grounding to provide additional context to the AI model.
217+
*
218+
* @link <a href="https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/grounding">SAP
219+
* AI Core: Orchestration - Grounding</a>
220+
*/
221+
@GetMapping("/grounding")
222+
@Nonnull
223+
OrchestrationChatResponse grounding() {
224+
final var message =
225+
Message.user(
226+
"{{?groundingInput}} Use the following information as additional context: {{?groundingOutput}}");
227+
final var prompt =
228+
new OrchestrationPrompt(
229+
Map.of("groundingInput", "Give the number of letters in the word 'world'."), message);
230+
231+
final var filterInner =
232+
DocumentGroundingFilter.create().id("someID").dataRepositoryType(DataRepositoryType.VECTOR);
233+
final var groundingConfigConfig =
234+
GroundingModuleConfigConfig.create()
235+
.inputParams(List.of("groundingInput"))
236+
.outputParam("groundingOutput");
237+
groundingConfigConfig.setFilters(List.of(filterInner));
238+
final var groundingConfig =
239+
GroundingModuleConfig.create()
240+
.type(GroundingModuleConfig.TypeEnum.DOCUMENT_GROUNDING_SERVICE)
241+
.config(groundingConfigConfig);
242+
final var configWithGrounding = config.withGroundingConfig(groundingConfig);
243+
244+
return client.chatCompletion(prompt, configWithGrounding);
245+
// return client.chatCompletion(prompt, config);
246+
}
210247
}

sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,10 @@ void testMaskingPseudonymization() {
154154
@Test
155155
@DisabledIfSystemProperty(named = "aicore.landscape", matches = "production")
156156
void testGrounding() {
157-
// Placeholder for grounding test
158157
assertThat(System.getProperty("aicore.landscape")).isNotEqualTo("production");
158+
var response = controller.grounding();
159+
assertThat(response).isNotNull();
160+
assertThat(response.getOriginalResponse().getModuleResults().getGrounding()).isNotNull();
159161
}
160162

161163
@Test

0 commit comments

Comments
 (0)