11package 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 ;
37import com .google .common .annotations .Beta ;
8+ import com .google .common .collect .Iterables ;
49import com .sap .ai .sdk .core .AiCoreService ;
510import com .sap .ai .sdk .prompt .registry .model .PromptTemplateDeleteResponse ;
611import com .sap .ai .sdk .prompt .registry .model .PromptTemplateGetResponse ;
712import com .sap .ai .sdk .prompt .registry .model .PromptTemplateListResponse ;
813import com .sap .ai .sdk .prompt .registry .model .PromptTemplatePostRequest ;
914import com .sap .ai .sdk .prompt .registry .model .PromptTemplatePostResponse ;
15+ import com .sap .ai .sdk .prompt .registry .model .PromptTemplateSpecResponseFormat ;
1016import com .sap .ai .sdk .prompt .registry .model .PromptTemplateSubstitutionRequest ;
1117import com .sap .ai .sdk .prompt .registry .model .PromptTemplateSubstitutionResponse ;
1218import 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 ;
1324import com .sap .cloud .sdk .services .openapi .core .AbstractOpenApiService ;
1425import com .sap .cloud .sdk .services .openapi .core .OpenApiRequestException ;
1526import java .io .File ;
1930import java .util .UUID ;
2031import javax .annotation .Nonnull ;
2132import javax .annotation .Nullable ;
33+ import lombok .AccessLevel ;
34+ import lombok .NoArgsConstructor ;
2235import org .springframework .core .ParameterizedTypeReference ;
2336import org .springframework .core .io .FileSystemResource ;
2437import org .springframework .http .HttpHeaders ;
2538import org .springframework .http .HttpMethod ;
2639import 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 ;
2743import org .springframework .util .LinkedMultiValueMap ;
2844import org .springframework .util .MultiValueMap ;
45+ import org .springframework .web .client .RestTemplate ;
2946import 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 /**
0 commit comments