Skip to content

Commit 29d3f39

Browse files
Working
1 parent cd404dc commit 29d3f39

File tree

5 files changed

+76
-4
lines changed

5 files changed

+76
-4
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,7 @@ https://gitbox.apache.org/repos/asf?p=maven-pmd-plugin.git;a=blob_plain;f=src/ma
766766
</activation>
767767
<modules>
768768
<module>sample-code/spring-app</module>
769+
<module>prompt-registry</module>
769770
</modules>
770771
</profile>
771772
<profile>

prompt-registry/pom.xml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@
5858
<groupId>org.springframework</groupId>
5959
<artifactId>spring-web</artifactId>
6060
</dependency>
61+
<dependency>
62+
<groupId>com.sap.cloud.sdk.cloudplatform</groupId>
63+
<artifactId>cloudplatform-connectivity</artifactId>
64+
</dependency>
65+
<dependency>
66+
<groupId>com.sap.cloud.sdk.cloudplatform</groupId>
67+
<artifactId>connectivity-apache-httpclient5</artifactId>
68+
</dependency>
69+
<dependency>
70+
<groupId>org.apache.httpcomponents.client5</groupId>
71+
<artifactId>httpclient5</artifactId>
72+
</dependency>
73+
<dependency>
74+
<groupId>com.fasterxml.jackson.core</groupId>
75+
<artifactId>jackson-databind</artifactId>
76+
</dependency>
6177
<dependency>
6278
<groupId>com.google.guava</groupId>
6379
<artifactId>guava</artifactId>
@@ -70,6 +86,12 @@
7086
<groupId>com.google.code.findbugs</groupId>
7187
<artifactId>jsr305</artifactId>
7288
</dependency>
89+
<!-- scope "provided" -->
90+
<dependency>
91+
<groupId>org.projectlombok</groupId>
92+
<artifactId>lombok</artifactId>
93+
<scope>provided</scope>
94+
</dependency>
7395
</dependencies>
7496

7597
<profiles>

prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/DefaultApi.java

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
package com.sap.ai.sdk.prompt.registry.client;
22

3+
import static com.sap.ai.sdk.core.JacksonConfiguration.getDefaultObjectMapper;
4+
5+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
6+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
37
import com.google.common.annotations.Beta;
8+
import com.google.common.collect.Iterables;
49
import com.sap.ai.sdk.core.AiCoreService;
510
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateDeleteResponse;
611
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateGetResponse;
712
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateListResponse;
813
import com.sap.ai.sdk.prompt.registry.model.PromptTemplatePostRequest;
914
import com.sap.ai.sdk.prompt.registry.model.PromptTemplatePostResponse;
15+
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSpecResponseFormat;
1016
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSubstitutionRequest;
1117
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSubstitutionResponse;
1218
import com.sap.ai.sdk.prompt.registry.model.ProvisioningResponse;
19+
import com.sap.ai.sdk.prompt.registry.model.ResponseFormatText;
20+
import com.sap.ai.sdk.prompt.registry.model.SingleChatTemplate;
21+
import com.sap.ai.sdk.prompt.registry.model.Template;
22+
import com.sap.cloud.sdk.cloudplatform.connectivity.ApacheHttpClient5Accessor;
23+
import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient;
1324
import com.sap.cloud.sdk.services.openapi.core.AbstractOpenApiService;
1425
import com.sap.cloud.sdk.services.openapi.core.OpenApiRequestException;
1526
import java.io.File;
@@ -19,13 +30,19 @@
1930
import java.util.UUID;
2031
import javax.annotation.Nonnull;
2132
import javax.annotation.Nullable;
33+
import lombok.AccessLevel;
34+
import lombok.NoArgsConstructor;
2235
import org.springframework.core.ParameterizedTypeReference;
2336
import org.springframework.core.io.FileSystemResource;
2437
import org.springframework.http.HttpHeaders;
2538
import org.springframework.http.HttpMethod;
2639
import org.springframework.http.MediaType;
40+
import org.springframework.http.client.BufferingClientHttpRequestFactory;
41+
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
42+
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
2743
import org.springframework.util.LinkedMultiValueMap;
2844
import org.springframework.util.MultiValueMap;
45+
import org.springframework.web.client.RestTemplate;
2946
import org.springframework.web.util.UriComponentsBuilder;
3047

3148
/**
@@ -38,7 +55,39 @@ public class DefaultApi extends AbstractOpenApiService {
3855

3956
/** Instantiates this API class to invoke operations on the Prompt Registry API */
4057
public DefaultApi() {
41-
super(new AiCoreService().getApiClient());
58+
super(addMixin(new AiCoreService()));
59+
}
60+
61+
private static ApiClient addMixin(AiCoreService service) {
62+
var destination = service.getBaseDestination();
63+
var httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
64+
httpRequestFactory.setHttpClient(ApacheHttpClient5Accessor.getHttpClient(destination));
65+
66+
var rt = new RestTemplate();
67+
Iterables.filter(rt.getMessageConverters(), MappingJackson2HttpMessageConverter.class)
68+
.forEach(
69+
converter ->
70+
converter.setObjectMapper(
71+
getDefaultObjectMapper()
72+
.addMixIn(Template.class, JacksonMixin.TemplateMixIn.class)
73+
.addMixIn(
74+
PromptTemplateSpecResponseFormat.class,
75+
JacksonMixin.ResponseFormat.class)));
76+
77+
rt.setRequestFactory(new BufferingClientHttpRequestFactory(httpRequestFactory));
78+
79+
return new ApiClient(rt).setBasePath(destination.asHttp().getUri().toString());
80+
}
81+
82+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
83+
private static class JacksonMixin {
84+
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
85+
@JsonDeserialize(as = SingleChatTemplate.class)
86+
interface TemplateMixIn {}
87+
88+
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
89+
@JsonDeserialize(as = ResponseFormatText.class)
90+
interface ResponseFormat {}
4291
}
4392

4493
/**

sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/PromptRegistryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class PromptRegistryController {
1414
private static final DefaultApi client = new DefaultApi();
1515

1616
@GetMapping("/listTemplates")
17-
public PromptTemplateListResponse listTemplates() {
17+
PromptTemplateListResponse listTemplates() {
1818
return client.listPromptTemplates();
1919
}
2020
}

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

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

3-
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
4-
53
import org.junit.jupiter.api.Test;
64

5+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
6+
77
public class PromptRegistryTest {
88

99
@Test

0 commit comments

Comments
 (0)