Skip to content

Commit ca85122

Browse files
authored
chore: [Orchestration] Test streaming error handling
Co-authored-by: Jonas Israel <[email protected]>
1 parent ad0d42f commit ca85122

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
package com.sap.ai.sdk.app.controllers;
22

3+
import static com.sap.ai.sdk.orchestration.OrchestrationAiModel.GEMINI_1_5_FLASH;
4+
import static com.sap.ai.sdk.orchestration.OrchestrationAiModel.Parameter.TEMPERATURE;
35
import static com.sap.ai.sdk.orchestration.model.ResponseChatMessage.RoleEnum.ASSISTANT;
46
import static org.assertj.core.api.Assertions.assertThat;
57
import static org.assertj.core.api.Assertions.assertThatThrownBy;
68

79
import com.sap.ai.sdk.app.services.OrchestrationService;
10+
import com.sap.ai.sdk.orchestration.AzureContentFilter;
811
import com.sap.ai.sdk.orchestration.AzureFilterThreshold;
12+
import com.sap.ai.sdk.orchestration.DpiMasking;
13+
import com.sap.ai.sdk.orchestration.Message;
914
import com.sap.ai.sdk.orchestration.OrchestrationClient;
1015
import com.sap.ai.sdk.orchestration.OrchestrationClientException;
16+
import com.sap.ai.sdk.orchestration.OrchestrationModuleConfig;
1117
import com.sap.ai.sdk.orchestration.OrchestrationPrompt;
18+
import com.sap.ai.sdk.orchestration.TemplateConfig;
1219
import com.sap.ai.sdk.orchestration.TextItem;
1320
import com.sap.ai.sdk.orchestration.model.CompletionPostResponse;
1421
import com.sap.ai.sdk.orchestration.model.DPIEntities;
@@ -32,6 +39,9 @@
3239
@Slf4j
3340
class OrchestrationTest {
3441
OrchestrationService service;
42+
private final OrchestrationClient client = new OrchestrationClient();
43+
private final OrchestrationModuleConfig config =
44+
new OrchestrationModuleConfig().withLlmConfig(GEMINI_1_5_FLASH.withParam(TEMPERATURE, 0.0));
3545

3646
@BeforeEach
3747
void setUp() {
@@ -352,4 +362,44 @@ void testLocalPromptTemplate() throws IOException {
352362
final var choices = ((LLMModuleResultSynchronous) result.getOrchestrationResult()).getChoices();
353363
assertThat(choices.get(0).getMessage().getContent()).isNotEmpty();
354364
}
365+
366+
@Test
367+
void testStreamingErrorHandlingTemplate() {
368+
final var template = Message.user("Bad template: {{?language!@#$}}");
369+
final var templatingConfig =
370+
TemplateConfig.create().withTemplate(List.of(template.createChatMessage()));
371+
final var configWithTemplate = config.withTemplateConfig(templatingConfig);
372+
final var inputParams = Map.of("language", "German");
373+
final var prompt = new OrchestrationPrompt(inputParams);
374+
375+
assertThatThrownBy(() -> client.streamChatCompletion(prompt, configWithTemplate))
376+
.isInstanceOf(OrchestrationClientException.class)
377+
.hasMessageContaining("status 400 Bad Request")
378+
.hasMessageContaining("Error processing template:");
379+
}
380+
381+
@Test
382+
void testStreamingErrorHandlingInputFilter() {
383+
final var prompt = new OrchestrationPrompt("Create 5 paraphrases of 'I hate you'.");
384+
final var filterConfig = new AzureContentFilter().hate(AzureFilterThreshold.ALLOW_SAFE);
385+
final var configWithFilter = config.withInputFiltering(filterConfig);
386+
387+
assertThatThrownBy(() -> client.streamChatCompletion(prompt, configWithFilter))
388+
.isInstanceOf(OrchestrationClientException.class)
389+
.hasMessageContaining("status 400 Bad Request")
390+
.hasMessageContaining("Filtering Module - Input Filter");
391+
}
392+
393+
@Test
394+
void testStreamingErrorHandlingMasking() {
395+
final var prompt = new OrchestrationPrompt("Some message.");
396+
final var maskingConfig =
397+
DpiMasking.anonymization().withEntities(DPIEntities.UNKNOWN_DEFAULT_OPEN_API);
398+
final var configWithMasking = config.withMaskingConfig(maskingConfig);
399+
400+
assertThatThrownBy(() -> client.streamChatCompletion(prompt, configWithMasking))
401+
.isInstanceOf(OrchestrationClientException.class)
402+
.hasMessageContaining("status 400 Bad Request")
403+
.hasMessageContaining("'type': 'sap_data_privacy_integration', 'method': 'anonymization'");
404+
}
355405
}

0 commit comments

Comments
 (0)