Skip to content

Commit af087c7

Browse files
Merge remote-tracking branch 'origin/prompt-registry-client' into chore/prompt-registry-code-gen
2 parents 5421958 + cae3df2 commit af087c7

File tree

2 files changed

+95
-56
lines changed

2 files changed

+95
-56
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.sap.ai.sdk.prompt.registry;
2+
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;
7+
import com.google.common.collect.Iterables;
8+
import com.sap.ai.sdk.core.AiCoreService;
9+
import com.sap.ai.sdk.prompt.registry.client.DefaultApi;
10+
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSpecResponseFormat;
11+
import com.sap.ai.sdk.prompt.registry.model.ResponseFormatText;
12+
import com.sap.ai.sdk.prompt.registry.model.SingleChatTemplate;
13+
import com.sap.ai.sdk.prompt.registry.model.Template;
14+
import com.sap.cloud.sdk.cloudplatform.connectivity.ApacheHttpClient5Accessor;
15+
import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient;
16+
import javax.annotation.Nonnull;
17+
import lombok.AccessLevel;
18+
import lombok.Getter;
19+
import lombok.NoArgsConstructor;
20+
import lombok.RequiredArgsConstructor;
21+
import org.springframework.http.client.BufferingClientHttpRequestFactory;
22+
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
23+
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
24+
import org.springframework.web.client.RestTemplate;
25+
26+
/** Client for the Prompt Registry service. */
27+
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
28+
public class PromptClient {
29+
30+
@Nonnull
31+
@Getter(AccessLevel.PROTECTED)
32+
private final AiCoreService service;
33+
34+
/** Create a new client for the Prompt Registry service. */
35+
public PromptClient() {
36+
this(new AiCoreService());
37+
}
38+
39+
/**
40+
* Get the API client for the Prompt Registry service.
41+
*
42+
* @return The API client.
43+
*/
44+
@Nonnull
45+
public DefaultApi api() {
46+
return new DefaultApi(addMixin(getService()));
47+
}
48+
49+
@Nonnull
50+
private static ApiClient addMixin(@Nonnull final AiCoreService service) {
51+
final var destination = service.getBaseDestination();
52+
final var httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
53+
httpRequestFactory.setHttpClient(ApacheHttpClient5Accessor.getHttpClient(destination));
54+
55+
final var rt = new RestTemplate();
56+
Iterables.filter(rt.getMessageConverters(), MappingJackson2HttpMessageConverter.class)
57+
.forEach(
58+
converter ->
59+
converter.setObjectMapper(
60+
getDefaultObjectMapper()
61+
.addMixIn(Template.class, JacksonMixin.TemplateMixIn.class)
62+
.addMixIn(
63+
PromptTemplateSpecResponseFormat.class,
64+
JacksonMixin.ResponseFormat.class)));
65+
66+
rt.setRequestFactory(new BufferingClientHttpRequestFactory(httpRequestFactory));
67+
68+
return new ApiClient(rt).setBasePath(destination.asHttp().getUri().toString());
69+
}
70+
71+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
72+
private static class JacksonMixin {
73+
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
74+
@JsonDeserialize(as = SingleChatTemplate.class)
75+
interface TemplateMixIn {}
76+
77+
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
78+
@JsonDeserialize(as = ResponseFormatText.class)
79+
interface ResponseFormat {}
80+
}
81+
}

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

Lines changed: 14 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
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;
73
import com.google.common.annotations.Beta;
8-
import com.google.common.collect.Iterables;
9-
import com.sap.ai.sdk.core.AiCoreService;
104
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateDeleteResponse;
115
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateGetResponse;
126
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateListResponse;
137
import com.sap.ai.sdk.prompt.registry.model.PromptTemplatePostRequest;
148
import com.sap.ai.sdk.prompt.registry.model.PromptTemplatePostResponse;
15-
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSpecResponseFormat;
169
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSubstitutionRequest;
1710
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSubstitutionResponse;
1811
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;
12+
import com.sap.cloud.sdk.cloudplatform.connectivity.Destination;
2313
import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient;
2414
import com.sap.cloud.sdk.services.openapi.core.AbstractOpenApiService;
2515
import com.sap.cloud.sdk.services.openapi.core.OpenApiRequestException;
@@ -30,19 +20,13 @@
3020
import java.util.UUID;
3121
import javax.annotation.Nonnull;
3222
import javax.annotation.Nullable;
33-
import lombok.AccessLevel;
34-
import lombok.NoArgsConstructor;
3523
import org.springframework.core.ParameterizedTypeReference;
3624
import org.springframework.core.io.FileSystemResource;
3725
import org.springframework.http.HttpHeaders;
3826
import org.springframework.http.HttpMethod;
3927
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;
4328
import org.springframework.util.LinkedMultiValueMap;
4429
import org.springframework.util.MultiValueMap;
45-
import org.springframework.web.client.RestTemplate;
4630
import org.springframework.web.util.UriComponentsBuilder;
4731

4832
/**
@@ -53,50 +37,24 @@
5337
@Beta
5438
public class DefaultApi extends AbstractOpenApiService {
5539

56-
/** Instantiates this API class to invoke operations on the Prompt Registry API */
57-
public DefaultApi() {
58-
super(addMixin(new AiCoreService()));
59-
}
60-
6140
/**
62-
* Instantiates this API class to invoke operations on the Prompt Registry API
41+
* Instantiates this API class to invoke operations on the Prompt Registry API.
6342
*
64-
* @param aiCoreService The configured connectivity instance to AI Core
43+
* @param httpDestination The destination that API should be used with
6544
*/
66-
public DefaultApi(@Nonnull final AiCoreService aiCoreService) {
67-
super(addMixin(aiCoreService));
68-
}
69-
70-
private static ApiClient addMixin(AiCoreService service) {
71-
var destination = service.getBaseDestination();
72-
var httpRequestFactory = new HttpComponentsClientHttpRequestFactory();
73-
httpRequestFactory.setHttpClient(ApacheHttpClient5Accessor.getHttpClient(destination));
74-
75-
var rt = new RestTemplate();
76-
Iterables.filter(rt.getMessageConverters(), MappingJackson2HttpMessageConverter.class)
77-
.forEach(
78-
converter ->
79-
converter.setObjectMapper(
80-
getDefaultObjectMapper()
81-
.addMixIn(Template.class, JacksonMixin.TemplateMixIn.class)
82-
.addMixIn(
83-
PromptTemplateSpecResponseFormat.class,
84-
JacksonMixin.ResponseFormat.class)));
85-
86-
rt.setRequestFactory(new BufferingClientHttpRequestFactory(httpRequestFactory));
87-
88-
return new ApiClient(rt).setBasePath(destination.asHttp().getUri().toString());
45+
public DefaultApi(@Nonnull final Destination httpDestination) {
46+
super(httpDestination);
8947
}
9048

91-
@NoArgsConstructor(access = AccessLevel.PRIVATE)
92-
private static class JacksonMixin {
93-
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
94-
@JsonDeserialize(as = SingleChatTemplate.class)
95-
interface TemplateMixIn {}
96-
97-
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
98-
@JsonDeserialize(as = ResponseFormatText.class)
99-
interface ResponseFormat {}
49+
/**
50+
* Instantiates this API class to invoke operations on the Prompt Registry API based
51+
* on a given {@link ApiClient}.
52+
*
53+
* @param apiClient ApiClient to invoke the API on
54+
*/
55+
@Beta
56+
public DefaultApi(@Nonnull final ApiClient apiClient) {
57+
super(apiClient);
10058
}
10159

10260
/**

0 commit comments

Comments
 (0)