diff --git a/core-services/prompt-registry/pom.xml b/core-services/prompt-registry/pom.xml index c6ebefe49..d59fff0b2 100644 --- a/core-services/prompt-registry/pom.xml +++ b/core-services/prompt-registry/pom.xml @@ -152,7 +152,11 @@ ${project.basedir}/src/main/resources/spec/prompt-registry.yaml com.sap.ai.sdk.prompt.registry.client com.sap.ai.sdk.prompt.registry.model + + File=byte[] + + true create protected diff --git a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/OrchestrationConfigsApi.java b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/OrchestrationConfigsApi.java index 80b71f022..32332e70f 100644 --- a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/OrchestrationConfigsApi.java +++ b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/OrchestrationConfigsApi.java @@ -10,7 +10,6 @@ import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient; import com.sap.cloud.sdk.services.openapi.core.AbstractOpenApiService; import com.sap.cloud.sdk.services.openapi.core.OpenApiRequestException; -import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -18,7 +17,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; @@ -238,11 +236,11 @@ public OrchestrationConfigDeleteResponse deleteOrchestrationConfig( * * @param orchestrationConfigId (required) The value for the parameter orchestrationConfigId * @param aiResourceGroup (optional) Specify a resource group id to use - * @return File + * @return byte[] * @throws OpenApiRequestException if an error occurs while attempting to invoke the API */ @Nonnull - public File exportOrchestrationConfig( + public byte[] exportOrchestrationConfig( @Nonnull final UUID orchestrationConfigId, @Nullable final String aiResourceGroup) throws OpenApiRequestException { final Object localVarPostBody = null; @@ -278,8 +276,8 @@ public File exportOrchestrationConfig( final String[] localVarAuthNames = new String[] {}; - final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + final ParameterizedTypeReference localVarReturnType = + new ParameterizedTypeReference() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -303,11 +301,11 @@ public File exportOrchestrationConfig( *

0 - Common Error * * @param orchestrationConfigId The value for the parameter orchestrationConfigId - * @return File + * @return byte[] * @throws OpenApiRequestException if an error occurs while attempting to invoke the API */ @Nonnull - public File exportOrchestrationConfig(@Nonnull final UUID orchestrationConfigId) + public byte[] exportOrchestrationConfig(@Nonnull final UUID orchestrationConfigId) throws OpenApiRequestException { return exportOrchestrationConfig(orchestrationConfigId, null); } @@ -423,7 +421,8 @@ public OrchestrationConfigGetResponse getOrchestrationConfigByUuid( */ @Nonnull public OrchestrationConfigPostResponse importOrchestrationConfig( - @Nullable final String aiResourceGroup, @Nullable final File _file) + @Nullable final String aiResourceGroup, + @Nullable final org.springframework.core.io.Resource _file) throws OpenApiRequestException { final Object localVarPostBody = null; @@ -441,7 +440,7 @@ public OrchestrationConfigPostResponse importOrchestrationConfig( if (aiResourceGroup != null) localVarHeaderParams.add("AI-Resource-Group", apiClient.parameterToString(aiResourceGroup)); - if (_file != null) localVarFormParams.add("file", new FileSystemResource(_file)); + if (_file != null) localVarFormParams.add("file", _file); final String[] localVarAccepts = {"application/json"}; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); diff --git a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/PromptTemplatesApi.java b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/PromptTemplatesApi.java index 93d4aca31..b39598e62 100644 --- a/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/PromptTemplatesApi.java +++ b/core-services/prompt-registry/src/main/java/com/sap/ai/sdk/prompt/registry/client/PromptTemplatesApi.java @@ -12,7 +12,6 @@ import com.sap.cloud.sdk.services.openapi.apiclient.ApiClient; import com.sap.cloud.sdk.services.openapi.core.AbstractOpenApiService; import com.sap.cloud.sdk.services.openapi.core.OpenApiRequestException; -import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -20,7 +19,6 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; @@ -251,11 +249,11 @@ public PromptTemplateDeleteResponse deletePromptTemplate(@Nonnull final UUID pro * @param promptTemplateId (required) The value for the parameter promptTemplateId * @param aiResourceGroup (optional) Specify a resource group id to use * @param aiResourceGroupScope (optional) Specify whether the resource group scope is to be used - * @return File + * @return byte[] * @throws OpenApiRequestException if an error occurs while attempting to invoke the API */ @Nonnull - public File exportPromptTemplate( + public byte[] exportPromptTemplate( @Nonnull final UUID promptTemplateId, @Nullable final String aiResourceGroup, @Nullable final String aiResourceGroupScope) @@ -295,8 +293,8 @@ public File exportPromptTemplate( final String[] localVarAuthNames = new String[] {}; - final ParameterizedTypeReference localVarReturnType = - new ParameterizedTypeReference() {}; + final ParameterizedTypeReference localVarReturnType = + new ParameterizedTypeReference() {}; return apiClient.invokeAPI( localVarPath, HttpMethod.GET, @@ -320,11 +318,11 @@ public File exportPromptTemplate( *

0 - Common Error * * @param promptTemplateId The value for the parameter promptTemplateId - * @return File + * @return byte[] * @throws OpenApiRequestException if an error occurs while attempting to invoke the API */ @Nonnull - public File exportPromptTemplate(@Nonnull final UUID promptTemplateId) + public byte[] exportPromptTemplate(@Nonnull final UUID promptTemplateId) throws OpenApiRequestException { return exportPromptTemplate(promptTemplateId, null, null); } @@ -442,7 +440,7 @@ public PromptTemplateGetResponse getPromptTemplateByUuid(@Nonnull final UUID pro public PromptTemplatePostResponse importPromptTemplate( @Nullable final String aiResourceGroup, @Nullable final String aiResourceGroupScope, - @Nullable final File _file) + @Nullable final org.springframework.core.io.Resource _file) throws OpenApiRequestException { final Object localVarPostBody = null; @@ -461,7 +459,7 @@ public PromptTemplatePostResponse importPromptTemplate( localVarHeaderParams.add( "AI-Resource-Group-Scope", apiClient.parameterToString(aiResourceGroupScope)); - if (_file != null) localVarFormParams.add("file", new FileSystemResource(_file)); + if (_file != null) localVarFormParams.add("file", _file); final String[] localVarAccepts = {"application/json"}; final List localVarAccept = apiClient.selectHeaderAccept(localVarAccepts); diff --git a/sample-code/spring-app/pom.xml b/sample-code/spring-app/pom.xml index c82279d6c..85a11e90f 100644 --- a/sample-code/spring-app/pom.xml +++ b/sample-code/spring-app/pom.xml @@ -232,6 +232,11 @@ assertj-core test + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + test + diff --git a/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/PromptRegistryController.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/PromptRegistryController.java index 4018b94bd..b2c79d0fc 100644 --- a/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/PromptRegistryController.java +++ b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/PromptRegistryController.java @@ -13,7 +13,6 @@ import com.sap.ai.sdk.prompt.registry.model.PromptTemplateSubstitutionResponse; import com.sap.ai.sdk.prompt.registry.model.SingleChatTemplate; import com.sap.ai.sdk.prompt.registry.spring.SpringAiConverter; -import java.io.File; import java.io.IOException; import java.util.List; import java.util.Map; @@ -82,11 +81,11 @@ PromptTemplateListResponse history() { @GetMapping("/importTemplate") PromptTemplatePostResponse importTemplate() throws IOException { final Resource template = new ClassPathResource("prompt-template.yaml"); - return client.importPromptTemplate("default", null, template.getFile()); + return client.importPromptTemplate("default", null, template); } @GetMapping("/exportTemplate") - File exportTemplate() throws IOException { + byte[] exportTemplate() throws IOException { final var template = importTemplate(); return client.exportPromptTemplate(template.getId()); } diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/PromptRegistryTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/PromptRegistryTest.java index e52422d4b..94ef5a107 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/PromptRegistryTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/PromptRegistryTest.java @@ -2,6 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.sap.ai.sdk.prompt.registry.model.PromptTemplate; import com.sap.ai.sdk.prompt.registry.model.PromptTemplateDeleteResponse; import com.sap.ai.sdk.prompt.registry.model.PromptTemplateListResponse; @@ -11,9 +13,12 @@ import java.io.IOException; import java.util.List; import org.junit.jupiter.api.Test; +import org.springframework.core.io.ClassPathResource; public class PromptRegistryTest { + static final ObjectMapper YAML_MAPPER = new ObjectMapper(new YAMLFactory()); + @Test void listTemplates() { var controller = new PromptRegistryController(); @@ -53,10 +58,15 @@ void importExportTemplate() throws IOException { controller.deleteTemplate(); // import - PromptTemplatePostResponse template = controller.importTemplate(); - assertThat(template.getMessage()).contains("successful"); + var importResult = controller.importTemplate(); + assertThat(importResult.getMessage()).contains("successful"); + + // export + var exportedTemplate = controller.exportTemplate(); - // export TODO: NOT WORKING + var importedTemplate = new ClassPathResource("prompt-template.yaml"); + var expectedYaml = YAML_MAPPER.readTree(importedTemplate.getContentAsByteArray()); + assertThat(YAML_MAPPER.readTree(exportedTemplate)).isEqualTo(expectedYaml); // cleanup List deletedTemplate = controller.deleteTemplate();