33import static org .assertj .core .api .Assertions .assertThat ;
44
55import com .sap .ai .sdk .core .model .AiModelBaseData ;
6+ import com .sap .ai .sdk .core .model .AiModelVersion ;
67import com .sap .ai .sdk .foundationmodels .openai .OpenAiModel ;
78import java .lang .reflect .Field ;
89import java .util .ArrayList ;
10+ import java .util .HashMap ;
911import java .util .List ;
12+ import java .util .Optional ;
13+
1014import lombok .SneakyThrows ;
1115import org .junit .jupiter .api .DisplayName ;
1216import org .junit .jupiter .api .Test ;
17+ import org .junit .jupiter .api .condition .DisabledIfSystemProperty ;
1318
1419class 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