Skip to content

Commit 5936c26

Browse files
committed
Extend ScenarioTest
1 parent 416e869 commit 5936c26

File tree

1 file changed

+34
-7
lines changed

1 file changed

+34
-7
lines changed

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

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@
33
import static org.assertj.core.api.Assertions.assertThat;
44

55
import com.sap.ai.sdk.core.model.AiModelBaseData;
6+
import com.sap.ai.sdk.core.model.AiModelVersion;
67
import com.sap.ai.sdk.foundationmodels.openai.OpenAiModel;
78
import java.lang.reflect.Field;
89
import java.util.ArrayList;
10+
import java.util.HashMap;
911
import java.util.List;
12+
import java.util.Optional;
13+
1014
import lombok.SneakyThrows;
1115
import org.junit.jupiter.api.DisplayName;
1216
import org.junit.jupiter.api.Test;
17+
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
1318

1419
class ScenarioTest {
1520

1621
@Test
1722
@DisplayName("Declared OpenAI models must match AI Core's available OpenAI models")
23+
@DisabledIfSystemProperty(named = "aicore.landscape", matches = "canary")
1824
@SneakyThrows
1925
void openAiModelAvailability() {
2026

@@ -24,22 +30,43 @@ void openAiModelAvailability() {
2430
final var availableOpenAiModels =
2531
aiModelList.stream()
2632
.filter(model -> model.getExecutableId().equals("azure-openai"))
27-
.map(AiModelBaseData::getModel)
28-
.toList();
33+
.collect(
34+
() -> new HashMap<String, Boolean>(),
35+
(list, model) -> {
36+
list.put(model.getModel(), isDeprecated(model));
37+
},
38+
HashMap::putAll);
2939

3040
// Gather our declared OpenAI models
3141
Field[] declaredFields = OpenAiModel.class.getFields();
3242

3343
// get the models from the OpenAiModel class
34-
List<String> declaredOpenAiModelList = new ArrayList<>();
44+
HashMap<String, Boolean> declaredOpenAiModelList = new HashMap<>();
3545
for (Field field : declaredFields) {
36-
if (field.getType().equals(OpenAiModel.class)
37-
&& !field.isAnnotationPresent(Deprecated.class)) {
38-
declaredOpenAiModelList.add(((OpenAiModel) field.get(null)).name());
46+
if (field.getType().equals(OpenAiModel.class)) {
47+
declaredOpenAiModelList.put(
48+
((OpenAiModel) field.get(null)).name(), field.isAnnotationPresent(Deprecated.class));
3949
}
4050
}
4151

4252
// Assert that the declared OpenAI models match the expected list
43-
assertThat(declaredOpenAiModelList).hasSameElementsAs(availableOpenAiModels);
53+
// assertThat(declaredOpenAiModelList.keySet()).containsAll(availableOpenAiModels.keySet());
54+
for (var model : availableOpenAiModels.entrySet()) {
55+
Boolean declaredDeprecated = declaredOpenAiModelList.get(model.getKey());
56+
assertThat(declaredDeprecated)
57+
.withFailMessage(
58+
"%s is deprecated:%s on AI Core but deprecated:%s in AI SDK",
59+
model.getKey(), model.getValue(), declaredDeprecated)
60+
.isEqualTo(model.getValue());
61+
}
62+
}
63+
64+
private static boolean isDeprecated(AiModelBaseData model) {
65+
Optional<AiModelVersion> version =
66+
model.getVersions().stream().filter(AiModelVersion::isIsLatest).findFirst();
67+
if (version.isEmpty()) {
68+
throw new RuntimeException();
69+
}
70+
return version.get().isDeprecated();
4471
}
4572
}

0 commit comments

Comments
 (0)