Skip to content

Commit 689fd64

Browse files
committed
WiP (fixed Scenario and Config endpoints)
1 parent fcab936 commit 689fd64

File tree

2 files changed

+90
-6
lines changed

2 files changed

+90
-6
lines changed
Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
package com.sap.ai.sdk.app.controllers;
22

3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.PropertyAccessor;
5+
import com.fasterxml.jackson.core.JsonProcessingException;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
// import com.fasterxml.jackson.datatype.*;
8+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
39
import com.sap.ai.sdk.core.client.ConfigurationApi;
410
import com.sap.ai.sdk.core.model.AiConfigurationList;
11+
import org.springframework.http.MediaType;
12+
import org.springframework.http.ResponseEntity;
513
import org.springframework.web.bind.annotation.GetMapping;
14+
import org.springframework.web.bind.annotation.RequestHeader;
615
import org.springframework.web.bind.annotation.RestController;
716

817
/** Endpoint for Configuration operations */
@@ -11,14 +20,35 @@
1120
class ConfigurationController {
1221

1322
private static final ConfigurationApi CLIENT = new ConfigurationApi();
23+
private final ObjectMapper mapper =
24+
new ObjectMapper()
25+
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
26+
.registerModule(new JavaTimeModule());
1427

1528
/**
1629
* Get the list of configurations.
1730
*
1831
* @return the list of configurations
1932
*/
2033
@GetMapping("/configurations")
21-
AiConfigurationList getConfigurations() {
22-
return CLIENT.query("default");
34+
ResponseEntity<String> getConfigurations(
35+
@RequestHeader(value = "accept", required = false) final String accept)
36+
throws JsonProcessingException {
37+
var configList = CLIENT.query("default");
38+
if ("application/json".equals(accept)) {
39+
return ResponseEntity.ok()
40+
.contentType(MediaType.APPLICATION_JSON)
41+
.body(mapper.writeValueAsString(configList));
42+
}
43+
return ResponseEntity.ok(buildMessage(configList));
44+
}
45+
46+
String buildMessage(AiConfigurationList configList) {
47+
var message = new StringBuilder("The following configurations are available: ");
48+
for (var resource : configList.getResources()) {
49+
message.append(resource.getName()).append(", ");
50+
}
51+
message.setCharAt(message.length() - 2, '.');
52+
return message.toString();
2353
}
2454
}
Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,33 @@
11
package com.sap.ai.sdk.app.controllers;
22

3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.PropertyAccessor;
5+
import com.fasterxml.jackson.core.JsonProcessingException;
6+
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
38
import com.sap.ai.sdk.core.client.ScenarioApi;
49
import com.sap.ai.sdk.core.model.AiModelList;
510
import com.sap.ai.sdk.core.model.AiScenarioList;
611
import javax.annotation.Nonnull;
12+
13+
import org.springframework.http.MediaType;
14+
import org.springframework.http.ResponseEntity;
715
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.RequestHeader;
817
import org.springframework.web.bind.annotation.RestController;
918

1019
/** Endpoint for Scenario operations */
1120
@RestController
1221
@SuppressWarnings("unused") // debug method that doesn't need to be tested
1322
class ScenarioController {
1423

24+
// TODO: Fix javadocs
25+
1526
private static final ScenarioApi CLIENT = new ScenarioApi();
27+
private final ObjectMapper mapper =
28+
new ObjectMapper()
29+
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
30+
.registerModule(new JavaTimeModule());
1631

1732
/**
1833
* Get the list of available scenarios
@@ -21,8 +36,21 @@ class ScenarioController {
2136
*/
2237
@GetMapping("/scenarios")
2338
@Nonnull
24-
AiScenarioList getScenarios() {
25-
return CLIENT.query("default");
39+
ResponseEntity<String> getScenarios(
40+
@RequestHeader(value = "accept", required = false) final String accept)
41+
throws JsonProcessingException {
42+
var scenarioList = CLIENT.query("default");
43+
if ("application/json".equals(accept)) {
44+
return ResponseEntity.ok()
45+
.contentType(MediaType.APPLICATION_JSON)
46+
.body(mapper.writeValueAsString(scenarioList));
47+
}
48+
return ResponseEntity.ok(buildScenarioMessage(scenarioList));
49+
}
50+
51+
@Nonnull
52+
AiModelList getModels() {
53+
return CLIENT.queryModels("foundation-models", "default");
2654
}
2755

2856
/**
@@ -32,7 +60,33 @@ AiScenarioList getScenarios() {
3260
*/
3361
@GetMapping("/models")
3462
@Nonnull
35-
AiModelList getModels() {
36-
return CLIENT.queryModels("foundation-models", "default");
63+
ResponseEntity<String> getModels(
64+
@RequestHeader(value = "accept", required = false) final String accept)
65+
throws JsonProcessingException {
66+
var modelList = CLIENT.queryModels("foundation-models", "default");
67+
if ("application/json".equals(accept)) {
68+
return ResponseEntity.ok()
69+
.contentType(MediaType.APPLICATION_JSON)
70+
.body(mapper.writeValueAsString(modelList));
71+
}
72+
return ResponseEntity.ok(buildModelMessage(modelList));
73+
}
74+
75+
String buildScenarioMessage(AiScenarioList scenarioList) {
76+
var message = new StringBuilder("The following scenarios are available: ");
77+
for (var resource : scenarioList.getResources()) {
78+
message.append(resource.getName()).append(", ");
79+
}
80+
message.setCharAt(message.length() - 2, '.');
81+
return message.toString();
82+
}
83+
84+
String buildModelMessage(AiModelList modelList) {
85+
var message = new StringBuilder("The following models are available: ");
86+
for (var resource : modelList.getResources()) {
87+
message.append(resource.getModel()).append(", ");
88+
}
89+
message.setCharAt(message.length() - 2, '.');
90+
return message.toString();
3791
}
3892
}

0 commit comments

Comments
 (0)