Skip to content

Commit 2366e5e

Browse files
Better solution
1 parent af087c7 commit 2366e5e

File tree

6 files changed

+105
-25
lines changed

6 files changed

+105
-25
lines changed

prompt-registry/pom.xml

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@
3232
</developers>
3333
<properties>
3434
<project.rootdir>${project.basedir}/../</project.rootdir>
35-
<coverage.complexity>100%</coverage.complexity>
36-
<coverage.line>100%</coverage.line>
37-
<coverage.instruction>100%</coverage.instruction>
35+
<coverage.complexity>75%</coverage.complexity>
36+
<coverage.line>87%</coverage.line>
37+
<coverage.instruction>89%</coverage.instruction>
3838
<coverage.branch>100%</coverage.branch>
39-
<coverage.method>100%</coverage.method>
39+
<coverage.method>75%</coverage.method>
4040
<coverage.class>100%</coverage.class>
4141
</properties>
4242

@@ -92,6 +92,22 @@
9292
<artifactId>lombok</artifactId>
9393
<scope>provided</scope>
9494
</dependency>
95+
<!-- scope "test" -->
96+
<dependency>
97+
<groupId>org.junit.jupiter</groupId>
98+
<artifactId>junit-jupiter-api</artifactId>
99+
<scope>test</scope>
100+
</dependency>
101+
<dependency>
102+
<groupId>org.wiremock</groupId>
103+
<artifactId>wiremock</artifactId>
104+
<scope>test</scope>
105+
</dependency>
106+
<dependency>
107+
<groupId>org.assertj</groupId>
108+
<artifactId>assertj-core</artifactId>
109+
<scope>test</scope>
110+
</dependency>
95111
</dependencies>
96112

97113
<profiles>
@@ -124,8 +140,7 @@
124140
<phase>generate-sources</phase>
125141
<configuration>
126142
<inputSpec>${project.basedir}/src/main/resources/spec/prompt-registry.yaml</inputSpec>
127-
<apiPackage>com.sap.ai.sdk.prompt.registry.disabled</apiPackage>
128-
<generateApis>false</generateApis>
143+
<apiPackage>com.sap.ai.sdk.prompt.registry.client</apiPackage>
129144
<modelPackage>com.sap.ai.sdk.prompt.registry.model</modelPackage>
130145
<additionalProperties>
131146
<pojoBuilderMethodName>create</pojoBuilderMethodName>
@@ -135,7 +150,6 @@
135150
<removeOperationIdPrefix>true</removeOperationIdPrefix>
136151
<removeOperationIdPrefixDelimiter>\.</removeOperationIdPrefixDelimiter>
137152
<removeOperationIdPrefixCount>3</removeOperationIdPrefixCount>
138-
<aiSdkConstructor>true</aiSdkConstructor>
139153
<useOneOfInterfaces>true</useOneOfInterfaces>
140154
</additionalProperties>
141155
</configuration>

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

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,35 +15,27 @@
1515
import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient;
1616
import javax.annotation.Nonnull;
1717
import lombok.AccessLevel;
18-
import lombok.Getter;
1918
import lombok.NoArgsConstructor;
20-
import lombok.RequiredArgsConstructor;
2119
import org.springframework.http.client.BufferingClientHttpRequestFactory;
2220
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
2321
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
2422
import org.springframework.web.client.RestTemplate;
2523

2624
/** Client for the Prompt Registry service. */
27-
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
28-
public class PromptClient {
25+
public class PromptClient extends DefaultApi {
2926

30-
@Nonnull
31-
@Getter(AccessLevel.PROTECTED)
32-
private final AiCoreService service;
33-
34-
/** Create a new client for the Prompt Registry service. */
27+
/** Instantiates this a client to invoke operations on the Prompt Registry service. */
3528
public PromptClient() {
3629
this(new AiCoreService());
3730
}
3831

3932
/**
40-
* Get the API client for the Prompt Registry service.
33+
* Instantiates this a client to invoke operations on the Prompt Registry service.
4134
*
42-
* @return The API client.
35+
* @param aiCoreService The configured connectivity instance to AI Core
4336
*/
44-
@Nonnull
45-
public DefaultApi api() {
46-
return new DefaultApi(addMixin(getService()));
37+
public PromptClient(@Nonnull final AiCoreService aiCoreService) {
38+
super(addMixin(aiCoreService));
4739
}
4840

4941
@Nonnull

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
*/
3737
@Beta
3838
public class DefaultApi extends AbstractOpenApiService {
39-
4039
/**
4140
* Instantiates this API class to invoke operations on the Prompt Registry API.
4241
*
@@ -47,8 +46,8 @@ public DefaultApi(@Nonnull final Destination httpDestination) {
4746
}
4847

4948
/**
50-
* Instantiates this API class to invoke operations on the Prompt Registry API based
51-
* on a given {@link ApiClient}.
49+
* Instantiates this API class to invoke operations on the Prompt Registry API based on a given
50+
* {@link ApiClient}.
5251
*
5352
* @param apiClient ApiClient to invoke the API on
5453
*/
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.sap.ai.sdk.prompt.registry;
2+
3+
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
4+
import static org.assertj.core.api.Assertions.assertThat;
5+
6+
import com.github.tomakehurst.wiremock.junit5.WireMockExtension;
7+
import com.sap.ai.sdk.core.AiCoreService;
8+
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateGetResponse;
9+
import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination;
10+
import com.sap.cloud.sdk.cloudplatform.connectivity.HttpDestination;
11+
import java.util.UUID;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.extension.RegisterExtension;
14+
15+
public class PromptRegistryClientTest {
16+
@RegisterExtension
17+
private static final WireMockExtension WM =
18+
WireMockExtension.newInstance().options(wireMockConfig().dynamicPort()).build();
19+
20+
private final HttpDestination DESTINATION = DefaultHttpDestination.builder(WM.baseUrl()).build();
21+
private final AiCoreService SERVICE = new AiCoreService().withBaseDestination(DESTINATION);
22+
23+
@Test
24+
void testPipelines() {
25+
var client = new PromptClient(SERVICE);
26+
var result = client.listPromptTemplates();
27+
assertThat(result.getCount()).isEqualTo(2);
28+
assertThat(result.getResources()).hasSize(2);
29+
PromptTemplateGetResponse template = result.getResources().get(0);
30+
assertThat(template.getId()).isEqualTo(UUID.fromString("312a9b9c-a532-4c1c-8852-bf75de887d74"));
31+
assertThat(template.getName()).isEqualTo("prompt_template_name");
32+
assertThat(template.getVersion()).isEqualTo("1.0.0");
33+
assertThat(template.getScenario()).isEqualTo("MyScenario");
34+
assertThat(template.getCreationTimestamp()).isEqualTo("2025-02-26T12:29:55.875000");
35+
assertThat(template.getManagedBy()).isEqualTo("imperative");
36+
assertThat(template.isIsVersionHead()).isEqualTo(true);
37+
assertThat(template.getSpec()).isNull();
38+
}
39+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"request": {
3+
"method": "GET",
4+
"url": "/v2/lm/promptTemplates"
5+
},
6+
"response": {
7+
"status": 200,
8+
"headers": {
9+
"Content-Type": "application/json"
10+
},
11+
"jsonBody": {
12+
"count": 2,
13+
"resources": [
14+
{
15+
"id": "312a9b9c-a532-4c1c-8852-bf75de887d74",
16+
"name": "prompt_template_name",
17+
"version": "1.0.0",
18+
"scenario": "MyScenario",
19+
"creationTimestamp": "2025-02-26T12:29:55.875000",
20+
"managedBy": "imperative",
21+
"isVersionHead": true
22+
},
23+
{
24+
"id": "912bda62-ae87-4e73-ab53-08e9a10e2813",
25+
"name": "get-capital",
26+
"version": "0.0.1",
27+
"scenario": "e2e-test",
28+
"creationTimestamp": "2025-01-20T10:58:54.748000",
29+
"managedBy": "imperative",
30+
"isVersionHead": true
31+
}
32+
]
33+
}
34+
}
35+
}

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

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

3+
import com.sap.ai.sdk.prompt.registry.PromptClient;
34
import com.sap.ai.sdk.prompt.registry.client.DefaultApi;
45
import com.sap.ai.sdk.prompt.registry.model.PromptTemplateListResponse;
56
import org.springframework.web.bind.annotation.GetMapping;
@@ -11,7 +12,7 @@
1112
@RestController
1213
@RequestMapping("/prompt-registry")
1314
class PromptRegistryController {
14-
private static final DefaultApi client = new DefaultApi();
15+
private static final DefaultApi client = new PromptClient();
1516

1617
@GetMapping("/listTemplates")
1718
PromptTemplateListResponse listTemplates() {

0 commit comments

Comments
 (0)