From d0009b16b9447b3edeee093ecbad360830555d64 Mon Sep 17 00:00:00 2001 From: Jonas Israel Date: Tue, 15 Sep 2026 11:34:47 +0200 Subject: [PATCH 1/2] fix: [DevOps] Fix e2e-test set up --- .github/workflows/e2e-test.yaml | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/.github/workflows/e2e-test.yaml b/.github/workflows/e2e-test.yaml index 222a16570..9b23eeca2 100644 --- a/.github/workflows/e2e-test.yaml +++ b/.github/workflows/e2e-test.yaml @@ -13,10 +13,6 @@ jobs: end-to-end-tests: permissions: contents: read - if: | - github.event_name != 'schedule' || - (matrix.branch == 'main' && github.event.schedule == '15 1 * * MON-FRI') || - (matrix.branch == 'v2' && github.event.schedule == '15 2 * * MON-FRI') strategy: fail-fast: false matrix: @@ -31,12 +27,30 @@ jobs: runs-on: ubuntu-latest steps: + - name: "Check schedule filter" + id: filter + run: | + if [ "${{ github.event_name }}" = "schedule" ]; then + if [ "${{ matrix.branch }}" = "main" ] && [ "${{ github.event.schedule }}" = "15 1 * * MON-FRI" ]; then + echo "run=true" >> $GITHUB_OUTPUT + elif [ "${{ matrix.branch }}" = "v2" ] && [ "${{ github.event.schedule }}" = "15 2 * * MON-FRI" ]; then + echo "run=true" >> $GITHUB_OUTPUT + else + echo "run=false" >> $GITHUB_OUTPUT + echo "Skipping: branch '${{ matrix.branch }}' does not match schedule '${{ github.event.schedule }}'" + fi + else + echo "run=true" >> $GITHUB_OUTPUT + fi + - name: "Checkout repository" + if: steps.filter.outputs.run == 'true' uses: actions/checkout@v7 with: ref: ${{ matrix.branch }} - name: "Setup java" + if: steps.filter.outputs.run == 'true' uses: actions/setup-java@v6.0.0 with: distribution: "sapmachine" @@ -44,11 +58,13 @@ jobs: cache: 'maven' - name: "Build SDK" + if: steps.filter.outputs.run == 'true' run: | MVN_ARGS="${{ env.MVN_MULTI_THREADED_ARGS }} clean install -DskipTests -DskipFormatting" mvn $MVN_ARGS - name: "Run tests" + if: steps.filter.outputs.run == 'true' id: run_tests run: | if [ "${{ matrix.environment }}" = "canary" ]; then @@ -85,6 +101,7 @@ jobs: AI_CORE_CANARY: ${{ secrets.canary }} - name: "Start Application Locally" + if: steps.filter.outputs.run == 'true' run: | if [ "${{ matrix.environment }}" = "canary" ]; then export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_CANARY }}' @@ -109,11 +126,12 @@ jobs: AI_CORE_CANARY: ${{ secrets.canary }} - name: "Health Check" + if: steps.filter.outputs.run == 'true' # print response body with headers to stdout. q:body only O:print -:stdout S:headers run: wget -qO- -S localhost:8080 - name: "Slack Notification" - if: failure() + if: failure() && steps.filter.outputs.run == 'true' uses: slackapi/slack-github-action@v4.0.0 with: webhook: ${{ secrets.SLACK_WEBHOOK }} From e2c2830bb8ee87beb822170e6aff9702823221aa Mon Sep 17 00:00:00 2001 From: Jonas Israel Date: Tue, 15 Sep 2026 13:20:37 +0200 Subject: [PATCH 2/2] fix: [DevOps] Fix e2e-tests --- docs/release_notes.md | 3 ++- .../sap/ai/sdk/foundationmodels/openai/OpenAiModel.java | 3 +++ .../com/sap/ai/sdk/orchestration/OrchestrationAiModel.java | 7 +++++++ .../ai/sdk/app/services/SpringAiOrchestrationService.java | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index 35655f140..caa26c1d3 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -12,7 +12,8 @@ ### ✨ New Functionality -- +- [Orchestration] Added `GEMINI_3_8_FLASH` and `GPT_51` to model list in `OrchestrationAiModel`. +- [OpenAI] Added `GPT_51` to model list in `OpenAiModel`. ### 📈 Improvements diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiModel.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiModel.java index 58657b2d6..6f9fb8166 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiModel.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/OpenAiModel.java @@ -121,6 +121,9 @@ public record OpenAiModel(@Nonnull String name, @Nullable String version) implem /** Azure OpenAI GPT-5-nano model */ public static final OpenAiModel GPT_5_NANO = new OpenAiModel("gpt-5-nano", null); + /** Azure OpenAI GPT-5.1 model */ + public static final OpenAiModel GPT_51 = new OpenAiModel("gpt-5.1", null); + /** Azure OpenAI GPT-realtime model */ public static final OpenAiModel GPT_REALTIME = new OpenAiModel("gpt-realtime", null); diff --git a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationAiModel.java b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationAiModel.java index 9aafa9025..2448f7920 100644 --- a/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationAiModel.java +++ b/orchestration/src/main/java/com/sap/ai/sdk/orchestration/OrchestrationAiModel.java @@ -348,6 +348,9 @@ public class OrchestrationAiModel { /** Azure OpenAI GPT-5-nano model */ public static final OrchestrationAiModel GPT_5_NANO = new OrchestrationAiModel("gpt-5-nano"); + /** Azure OpenAI GPT-5.1 model */ + public static final OrchestrationAiModel GPT_51 = new OrchestrationAiModel("gpt-5.1"); + /** Azure OpenAI GPT-5.2 model */ public static final OrchestrationAiModel GPT_52 = new OrchestrationAiModel("gpt-5.2"); @@ -453,6 +456,10 @@ public class OrchestrationAiModel { public static final OrchestrationAiModel GEMINI_3_6_FLASH = new OrchestrationAiModel("gemini-3.6-flash"); + /** Google Cloud Platform Gemini 3.8 Flash model */ + public static final OrchestrationAiModel GEMINI_3_8_FLASH = + new OrchestrationAiModel("gemini-3.8-flash"); + /** * Alephalpha-pharia-1-7b-control model * diff --git a/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/SpringAiOrchestrationService.java b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/SpringAiOrchestrationService.java index 62c9cdc8a..1d9105ee5 100644 --- a/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/SpringAiOrchestrationService.java +++ b/sample-code/spring-app/src/main/java/com/sap/ai/sdk/app/services/SpringAiOrchestrationService.java @@ -160,7 +160,7 @@ public ChatResponse outputFiltering(@Nonnull final AzureFilterThreshold policy) val prompt = new Prompt( - "Please rephrase the following sentence for me: 'We shall spill blood tonight', said the operator in-charge.", + "Please rephrase the following sentence for me: We shall destroy them all tonight and there will be blood!", opts); return client.call(prompt);