Skip to content

Commit ddc4b21

Browse files
committed
Improve docs and confirm checkstyle
1 parent 13b7780 commit ddc4b21

File tree

3 files changed

+56
-8
lines changed

3 files changed

+56
-8
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,17 @@
2626
@NoArgsConstructor
2727
@Accessors(fluent = true)
2828
public class AzureContentFilter implements ContentFilter {
29+
30+
/* The moderation policy for hate content. */
2931
@Nullable AzureModerationPolicy hate;
32+
33+
/* The moderation policy for self-harm content. */
3034
@Nullable AzureModerationPolicy selfHarm;
35+
36+
/* The moderation policy for sexual content. */
3137
@Nullable AzureModerationPolicy sexual;
38+
39+
/* The moderation policy for violence content. */
3240
@Nullable AzureModerationPolicy violence;
3341

3442
/**

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

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.sap.ai.sdk.orchestration.client.model.MaskingModuleConfig;
77
import com.sap.ai.sdk.orchestration.client.model.OutputFilteringConfig;
88
import com.sap.ai.sdk.orchestration.client.model.TemplatingModuleConfig;
9+
import java.util.ArrayList;
910
import java.util.Arrays;
11+
import java.util.Objects;
1012
import javax.annotation.Nonnull;
1113
import javax.annotation.Nullable;
1214
import lombok.AccessLevel;
@@ -98,13 +100,18 @@ public OrchestrationModuleConfig withMaskingConfig(
98100
*/
99101
@Nonnull
100102
public OrchestrationModuleConfig withInputFiltering(
101-
@Nonnull final ContentFilter... contentFilters) {
103+
@Nonnull final ContentFilter contentFilter, @Nonnull final ContentFilter... contentFilters) {
102104

103-
var filterConfigs = Arrays.stream(contentFilters).map(ContentFilter::createConfig).toList();
105+
final var allFilters = new ArrayList<ContentFilter>();
106+
allFilters.add(contentFilter);
107+
allFilters.addAll(Arrays.asList(contentFilters));
104108

105-
var inputFilter = new InputFilteringConfig().filters(filterConfigs);
109+
final var filterConfigs =
110+
allFilters.stream().filter(Objects::nonNull).map(ContentFilter::createConfig).toList();
106111

107-
var newFilteringConfig =
112+
final var inputFilter = new InputFilteringConfig().filters(filterConfigs);
113+
114+
final var newFilteringConfig =
108115
new FilteringModuleConfig()
109116
.input(inputFilter)
110117
.output(this.filteringConfig != null ? this.filteringConfig.getOutput() : null);
@@ -124,12 +131,18 @@ public OrchestrationModuleConfig withInputFiltering(
124131
*/
125132
@Nonnull
126133
public OrchestrationModuleConfig withOutputFiltering(
127-
@Nonnull final ContentFilter... contentFilters) {
134+
@Nonnull final ContentFilter contentFilter, @Nonnull final ContentFilter... contentFilters) {
135+
136+
final var allFilters = new ArrayList<ContentFilter>();
137+
allFilters.add(contentFilter);
138+
allFilters.addAll(Arrays.asList(contentFilters));
139+
140+
final var filterConfigs =
141+
allFilters.stream().filter(Objects::nonNull).map(ContentFilter::createConfig).toList();
128142

129-
var filterConfigs = Arrays.stream(contentFilters).map(ContentFilter::createConfig).toList();
130-
var outputFilter = new OutputFilteringConfig().filters(filterConfigs);
143+
final var outputFilter = new OutputFilteringConfig().filters(filterConfigs);
131144

132-
var newFilteringConfig =
145+
final var newFilteringConfig =
133146
new FilteringModuleConfig()
134147
.output(outputFilter)
135148
.input(this.filteringConfig != null ? this.filteringConfig.getInput() : null);

orchestration/src/test/java/com/sap/ai/sdk/orchestration/OrchestrationUnitTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,4 +393,31 @@ void testEmptyChoicesResponse() {
393393

394394
assertThat(result.getContent()).isEmpty();
395395
}
396+
397+
@Test
398+
void testStackingInputAndOutputFilter() {
399+
final var filter =
400+
new AzureContentFilter()
401+
.hate(ALLOW_SAFE_LOW_MEDIUM)
402+
.selfHarm(ALLOW_SAFE_LOW_MEDIUM)
403+
.sexual(ALLOW_SAFE_LOW_MEDIUM)
404+
.violence(ALLOW_SAFE_LOW_MEDIUM);
405+
406+
final var configWithInputFirst = config.withInputFiltering(filter).withOutputFiltering(filter);
407+
assertThat(configWithInputFirst.getFilteringConfig()).isNotNull();
408+
assertThat(configWithInputFirst.getFilteringConfig().getInput()).isNotNull();
409+
410+
final var configWithOutputFirst = config.withOutputFiltering(filter).withInputFiltering(filter);
411+
assertThat(configWithOutputFirst.getFilteringConfig()).isNotNull();
412+
assertThat(configWithOutputFirst.getFilteringConfig().getOutput()).isNotNull();
413+
}
414+
415+
@Test
416+
void testThrowOnEmptyFilterConfig() {
417+
final var filter = new AzureContentFilter();
418+
419+
assertThatThrownBy(filter::createConfig)
420+
.isInstanceOf(IllegalArgumentException.class)
421+
.hasMessage("At least one filter moderation policy must be set");
422+
}
396423
}

0 commit comments

Comments
 (0)