diff --git a/.github/workflows/e2e-test.yaml b/.github/workflows/e2e-test.yaml index 272f0a63..e023eb2e 100644 --- a/.github/workflows/e2e-test.yaml +++ b/.github/workflows/e2e-test.yaml @@ -32,7 +32,7 @@ jobs: - name: "Run tests" run: | - MVN_ARGS="${{ env.MVN_MULTI_THREADED_ARGS }} surefire:test -pl :e2e-test-app -DskipTests=false" + MVN_ARGS="${{ env.MVN_MULTI_THREADED_ARGS }} surefire:test -pl :spring-app -DskipTests=false" mvn $MVN_ARGS env: # See "End-to-end test application instructions" on the README.md to update the secret @@ -40,7 +40,7 @@ jobs: - name: "Start Application Locally" run: | - cd e2e-test-app + cd sample-code/spring-app mvn spring-boot:run & timeout=15 while ! nc -z localhost 8080; do diff --git a/README.md b/README.md index 4fcd7227..3e6c130f 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ We maintain [a list of currently available and tested AI Core APIs](docs/list-of - Java 17 or higher - Maven 3.9 or higher - if Spring Boot is used, then minimum version 3 -- [Set the AI Core credentials as an environment variable for local testing](#set-ai-core-credentials-as-environment-variable) +- [Set the AI Core credentials as an environment variable for local testing](#set-credentials-as-dedicated-environment-variable) ### Maven dependencies @@ -67,7 +67,7 @@ Add the following dependencies to your `pom.xml` file: ``` -See [an example pom in our Spring Boot application](e2e-test-app/pom.xml) +See [an example pom in our Spring Boot application](sample-code/spring-app/pom.xml) ### Create a Deployment @@ -88,7 +88,7 @@ public AiDeploymentCreationResponse createDeployment() { } ``` -See [an example in our Spring Boot application](e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java) +See [an example in our Spring Boot application](sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java) ### Delete a Deployment @@ -110,7 +110,7 @@ public AiDeploymentDeletionResponse deleteDeployment(AiDeploymentCreationRespons } ``` -See [an example in our Spring Boot application](e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java) +See [an example in our Spring Boot application](sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java) ## OpenAI chat completion @@ -161,7 +161,7 @@ See [an example in our Spring Boot application](e2e-test-app/src/main/java/com/s - Java 17 or higher - Maven 3.9 or higher - if Spring Boot is used, then minimum version 3 -- [Set the AI Core credentials as an environment variable for local testing](#set-ai-core-credentials-as-environment-variable) +- [Set the AI Core credentials as an environment variable for local testing](#set-credentials-as-dedicated-environment-variable) ### Maven dependencies @@ -177,7 +177,7 @@ Add the following dependencies to your `pom.xml` file: ``` -See [an example pom in our Spring Boot application](e2e-test-app/pom.xml) +See [an example pom in our Spring Boot application](sample-code/spring-app/pom.xml) ### Simple chat completion @@ -206,7 +206,7 @@ final OpenAiChatCompletionOutput result = final String resultMessage = result.getContent(); ``` -See [an example in our Spring Boot application](e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java) +See [an example in our Spring Boot application](sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java) ### Chat completion with a model not defined in `OpenAiModel` @@ -273,7 +273,7 @@ System.out.println("Tokens: " + tokens); #### Spring Boot example -Please find [an example in our Spring Boot application](e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java). +Please find [an example in our Spring Boot application](sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java). It shows the usage of Spring Boot's `ResponseBodyEmitter` to stream the chat completion delta messages to the frontend in real-time. ## Orchestration chat completion @@ -309,7 +309,7 @@ It shows the usage of Spring Boot's `ResponseBodyEmitter` to stream the chat com - Java 17 or higher - Maven 3.9 or higher - if Spring Boot is used, then minimum version 3 -- [Set the AI Core credentials as an environment variable for local testing](#set-ai-core-credentials-as-environment-variable) +- [Set the AI Core credentials as an environment variable for local testing](#set-credentials-as-dedicated-environment-variable) ### Maven dependencies @@ -325,7 +325,7 @@ Add the following dependencies to your `pom.xml` file: ``` -See [an example pom in our Spring Boot application](e2e-test-app/pom.xml) +See [an example pom in our Spring Boot application](sample-code/spring-app/pom.xml) ### Chat completion template @@ -355,7 +355,7 @@ final String messageResult = result.getOrchestrationResult().getChoices().get(0).getMessage().getContent(); ``` -See [an example in our Spring Boot application](e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java) +See [an example in our Spring Boot application](sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java) ### Messages history @@ -390,7 +390,7 @@ final String messageResult = result.getOrchestrationResult().getChoices().get(0).getMessage().getContent(); ``` -See [an example in our Spring Boot application](e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java) +See [an example in our Spring Boot application](sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java) ### Chat completion filter @@ -454,7 +454,7 @@ final String messageResult = result.getOrchestrationResult().getChoices().get(0).getMessage().getContent(); ``` -See [an example in our Spring Boot application](e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java) +See [an example in our Spring Boot application](sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java) ### Set model parameters @@ -571,7 +571,7 @@ export AICORE_SERVICE_KEY='{ "serviceurls": { "AI_API_URL": ...' ### Run the Spring Boot test application ```shell -cd e2e-test-app +cd sample-code/spring-app mvn spring-boot:run ``` diff --git a/pom.xml b/pom.xml index 6fd85817..fcf6bae5 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ core orchestration foundation-models/openai - e2e-test-app + sample-code/spring-app @@ -133,7 +133,7 @@ com.sap.ai.sdk.app - e2e-test-app + spring-app ${project.version} diff --git a/sample-code/spring-app/README.md b/sample-code/spring-app/README.md new file mode 100644 index 00000000..6704991d --- /dev/null +++ b/sample-code/spring-app/README.md @@ -0,0 +1,20 @@ +# Sample Code and E2E Test + +![e2e-test](https://github.com/SAP/ai-sdk-java/actions/workflows/e2e-test.yaml/badge.svg) + +Sample code to demonstrate the usage of the SAP AI SDK. +Also used as basis for running E2E tests. + +## Build, Run, Deploy Locally + +Build the project with: + +1. `mvn compile` +2. [Download a service key for your AI Core service instance](../../README.md#set-credentials-as-dedicated-environment-variable) +3. Create the environment variable `AICORE_SERVICE_KEY` +4. Run the application with `mvn spring-boot:run` +5. [See all available endpoints](localhost:8080) + +## Run the E2E Test + +Trigger the [GitHub Action](https://github.com/SAP/ai-sdk-java/actions/workflows/e2e-test.yml). diff --git a/e2e-test-app/manifest.yml b/sample-code/spring-app/manifest.yml similarity index 85% rename from e2e-test-app/manifest.yml rename to sample-code/spring-app/manifest.yml index d80c70a1..d4ce12ac 100644 --- a/e2e-test-app/manifest.yml +++ b/sample-code/spring-app/manifest.yml @@ -1,7 +1,7 @@ applications: - name: e2e-app-java random-route: true - path: target/e2e-test-app.jar + path: target/spring-app.jar env: JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 21.+ } }' buildpacks: diff --git a/e2e-test-app/pom.xml b/sample-code/spring-app/pom.xml similarity index 98% rename from e2e-test-app/pom.xml rename to sample-code/spring-app/pom.xml index 1a0a56b8..ed9c2608 100644 --- a/e2e-test-app/pom.xml +++ b/sample-code/spring-app/pom.xml @@ -5,9 +5,10 @@ com.sap.ai.sdk sdk-parent 0.1.0-SNAPSHOT + ../../pom.xml com.sap.ai.sdk.app - e2e-test-app + spring-app End-to-end test application Spring Boot application that tests AI clients when deployed in BTP. diff --git a/e2e-test-app/src/main/java/com/sap/ai/sdk/app/Application.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/Application.java similarity index 100% rename from e2e-test-app/src/main/java/com/sap/ai/sdk/app/Application.java rename to sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/Application.java diff --git a/e2e-test-app/src/main/java/com/sap/ai/sdk/app/AsynchronousConfiguration.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/AsynchronousConfiguration.java similarity index 100% rename from e2e-test-app/src/main/java/com/sap/ai/sdk/app/AsynchronousConfiguration.java rename to sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/AsynchronousConfiguration.java diff --git a/e2e-test-app/src/main/java/com/sap/ai/sdk/app/ControllerExceptionHandler.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/ControllerExceptionHandler.java similarity index 100% rename from e2e-test-app/src/main/java/com/sap/ai/sdk/app/ControllerExceptionHandler.java rename to sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/ControllerExceptionHandler.java diff --git a/e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java similarity index 100% rename from e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java rename to sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/DeploymentController.java diff --git a/e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java similarity index 100% rename from e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java rename to sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OpenAiController.java diff --git a/e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java similarity index 100% rename from e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java rename to sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/OrchestrationController.java diff --git a/e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/ScenarioController.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/ScenarioController.java similarity index 100% rename from e2e-test-app/src/main/java/com/sap/ai/sdk/app/controllers/ScenarioController.java rename to sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/controllers/ScenarioController.java diff --git a/e2e-test-app/src/main/resources/logback-spring.xml b/sample-code/spring-app/src/main/resources/logback-spring.xml similarity index 100% rename from e2e-test-app/src/main/resources/logback-spring.xml rename to sample-code/spring-app/src/main/resources/logback-spring.xml diff --git a/e2e-test-app/src/main/resources/static/index.html b/sample-code/spring-app/src/main/resources/static/index.html similarity index 100% rename from e2e-test-app/src/main/resources/static/index.html rename to sample-code/spring-app/src/main/resources/static/index.html diff --git a/e2e-test-app/src/test/java/com/sap/ai/sdk/app/controllers/DeploymentTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/DeploymentTest.java similarity index 100% rename from e2e-test-app/src/test/java/com/sap/ai/sdk/app/controllers/DeploymentTest.java rename to sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/DeploymentTest.java diff --git a/e2e-test-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java similarity index 100% rename from e2e-test-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java rename to sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OpenAiTest.java diff --git a/e2e-test-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java similarity index 100% rename from e2e-test-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java rename to sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/OrchestrationTest.java