From 9f91bfa8943dfeda327cacbe6d6fc94398514505 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 18:04:04 +0200 Subject: [PATCH 01/10] debug e2e tests --- .github/workflows/e2e-test.yaml | 109 ++++-------------- .../sdk/app/controllers/RealtimeApiTest.java | 4 +- .../test/resources/fixtures/question111.pcm | Bin 0 -> 97200 bytes 3 files changed, 23 insertions(+), 90 deletions(-) create mode 100644 sample-code/spring-app/src/test/resources/fixtures/question111.pcm diff --git a/.github/workflows/e2e-test.yaml b/.github/workflows/e2e-test.yaml index 60592c9ae..68d9b8832 100644 --- a/.github/workflows/e2e-test.yaml +++ b/.github/workflows/e2e-test.yaml @@ -1,6 +1,11 @@ name: "End-to-end Tests" on: workflow_dispatch: + inputs: + realtime_flakiness_runs: + description: "Repeat RealtimeApiTest#testSpeechToSpeech N times (0 = skip)" + required: false + default: "0" schedule: - cron: 15 2 * * MON-FRI @@ -12,16 +17,6 @@ jobs: end-to-end-tests: permissions: contents: read - strategy: - fail-fast: false - matrix: - environment: [ canary, production ] - exclude: - - environment: production - # secret-name: AI_CORE_PRODUCTION - include: - - environment: canary - secret-name: AI_CORE_CANARY runs-on: ubuntu-latest steps: @@ -36,87 +31,23 @@ jobs: cache: 'maven' - name: "Build SDK" - run: | - MVN_ARGS="${{ env.MVN_MULTI_THREADED_ARGS }} clean install -DskipTests -DskipFormatting" - mvn $MVN_ARGS - - - name: "Run tests" - id: run_tests - run: | - if [ "${{ matrix.environment }}" = "canary" ]; then - export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_CANARY }}' - else - export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_PRODUCTION }}' - fi - - MVN_ARGS="${{ env.MVN_MULTI_THREADED_ARGS }} surefire:test -pl :spring-app -DskipTests=false" - mvn $MVN_ARGS "-Daicore.landscape=${{ matrix.environment }}" 2>&1 | tee mvn_output.log # tee writes to both the console and a file + run: mvn ${{ env.MVN_MULTI_THREADED_ARGS }} clean install -DskipTests -DskipFormatting - ERROR_MSG=$(grep -E '^\[ERROR\] +[A-Za-z][A-Za-z0-9_]*\.[a-zA-Z][a-zA-Z0-9_]*(:[0-9]+| ยป)' mvn_output.log | sed $'s/\\[ERROR\\] */\\\n ๐Ÿ”ด /' || true) - echo "$ERROR_MSG" - # Escape newlines so the value is safe to embed in a YAML/JSON string - ERROR_MSG_ESCAPED=$(printf '%s' "$ERROR_MSG" | sed ':a;N;$!ba;s/\n/\\n/g') - { - echo "error_message<> $GITHUB_OUTPUT - - if grep -q "BUILD FAILURE" mvn_output.log; then - echo "Maven build failed." - exit 1 - elif grep -q "BUILD SUCCESS" mvn_output.log; then - echo "Maven build succeeded." - else - echo "Maven build status unknown." - exit 1 - fi + - name: "Run RealtimeApiTest#testSpeechToSpeech (100x)" env: - # See "End-to-end test application instructions" on the README.md to update the secret - AI_CORE_PRODUCTION: ${{ secrets.production }} - AI_CORE_CANARY: ${{ secrets.canary }} - - - name: "Start Application Locally" + AICORE_SERVICE_KEY: ${{ secrets.AI_CORE_CANARY }} run: | - if [ "${{ matrix.environment }}" = "canary" ]; then - export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_CANARY }}' - else - export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_PRODUCTION }}' - fi - - cd sample-code/spring-app - mvn spring-boot:run & - timeout=15 - while ! nc -z localhost 8080; do - sleep 1 - timeout=$((timeout - 1)) - if [ $timeout -le 0 ]; then - echo "Server did not start within 15 seconds." - exit 1 + failures=0 + for i in $(seq 1 100); do + echo "--- Run $i / 100 ---" + if ! mvn --batch-mode --no-transfer-progress surefire:test \ + -pl :spring-app \ + -DskipTests=false \ + "-Dtest=com.sap.ai.sdk.app.controllers.RealtimeApiTest#testSpeechToSpeech" \ + "-Daicore.landscape=canary"; then + failures=$((failures + 1)) + echo "Run $i FAILED" fi done - env: - # See "End-to-end test application instructions" on the README.md to update the secret - AI_CORE_PRODUCTION: ${{ secrets.production }} - AI_CORE_CANARY: ${{ secrets.canary }} - - - name: "Health Check" - # 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() - uses: slackapi/slack-github-action@v4.0.0 - with: - webhook: ${{ secrets.SLACK_WEBHOOK }} - webhook-type: incoming-webhook - payload: | - blocks: - - type: "section" - text: - type: "mrkdwn" - text: "โš ๏ธ End-to-end tests failed! ๐Ÿ˜ฌ Please inspect & fix by clicking " - - type: "section" - text: - type: "mrkdwn" - text: "${{ steps.run_tests.outputs.error_message }} " + echo "Failures: $failures / 100" + [ $failures -eq 0 ] diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java index 7830670f0..7368f1691 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java @@ -15,6 +15,7 @@ import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; @@ -29,7 +30,7 @@ public class RealtimeApiTest { @BeforeAll public static void setUp() { - try (var fis = new FileInputStream("src/test/resources/fixtures/hello.pcm")) { + try (var fis = new FileInputStream("src/test/resources/fixtures/question111.pcm")) { HELLO_FIXTURE_PCM = fis.readAllBytes(); } catch (IOException e) { fail(e.getMessage()); @@ -73,6 +74,7 @@ void testTextToSpeech() { @Test @Timeout(value = 60, unit = TimeUnit.SECONDS) + //@RepeatedTest(100) void testSpeechToSpeech() { var outputBuffer = new ByteArrayOutputStream(600000); var monitor = new CountDownLatch(1); diff --git a/sample-code/spring-app/src/test/resources/fixtures/question111.pcm b/sample-code/spring-app/src/test/resources/fixtures/question111.pcm new file mode 100644 index 0000000000000000000000000000000000000000..d0707295bf8098bee8e97e78b77d3ac79a22629b GIT binary patch literal 97200 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 literal 0 HcmV?d00001 From fe14a3dbd70ffa444fbff553ca1283eb550badbd Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 18:16:37 +0200 Subject: [PATCH 02/10] debug e2e tests --- .github/workflows/e2e-test.yaml | 12 +++++------- .../openai/realtime/WSOpenAiRealtimeClient.java | 5 +++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/e2e-test.yaml b/.github/workflows/e2e-test.yaml index 68d9b8832..07978cf25 100644 --- a/.github/workflows/e2e-test.yaml +++ b/.github/workflows/e2e-test.yaml @@ -5,9 +5,7 @@ on: realtime_flakiness_runs: description: "Repeat RealtimeApiTest#testSpeechToSpeech N times (0 = skip)" required: false - default: "0" - schedule: - - cron: 15 2 * * MON-FRI + default: "100" env: MVN_MULTI_THREADED_ARGS: --batch-mode --no-transfer-progress --fail-at-end --show-version --threads 1C @@ -33,13 +31,13 @@ jobs: - name: "Build SDK" run: mvn ${{ env.MVN_MULTI_THREADED_ARGS }} clean install -DskipTests -DskipFormatting - - name: "Run RealtimeApiTest#testSpeechToSpeech (100x)" + - name: "Run RealtimeApiTest#testSpeechToSpeech (${{ inputs.realtime_flakiness_runs }}x)" env: AICORE_SERVICE_KEY: ${{ secrets.AI_CORE_CANARY }} run: | failures=0 - for i in $(seq 1 100); do - echo "--- Run $i / 100 ---" + for i in $(seq 1 ${{ inputs.realtime_flakiness_runs }}); do + echo "--- Run $i / ${{ inputs.realtime_flakiness_runs }} ---" if ! mvn --batch-mode --no-transfer-progress surefire:test \ -pl :spring-app \ -DskipTests=false \ @@ -49,5 +47,5 @@ jobs: echo "Run $i FAILED" fi done - echo "Failures: $failures / 100" + echo "Failures: $failures / ${{ inputs.realtime_flakiness_runs }}" [ $failures -eq 0 ] diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java index a5c44e4f4..20f4a9bc3 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java @@ -165,8 +165,9 @@ protected synchronized void sendPing(@Nonnull final WebSocket ws) { if (ws.isInputClosed()) { return; } - ws.sendPing(ByteBuffer.wrap("ping".getBytes(StandardCharsets.UTF_8))).join(); - ws.request(1); + log.info("Skipping sending ping"); + //ws.sendPing(ByteBuffer.wrap("ping".getBytes(StandardCharsets.UTF_8))).join(); + //ws.request(1); } private void configureSession(@Nonnull final WebSocket ws) { From d9f8d41a28cd9674e7749de34d4f586f536da539 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 18:27:42 +0200 Subject: [PATCH 03/10] debug e2e tests --- .../openai/realtime/ToAudioRealtimeClient.java | 3 +++ .../openai/realtime/WSOpenAiRealtimeClient.java | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java index b318e3983..883a99614 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java @@ -18,7 +18,10 @@ import java.util.Set; import java.util.Timer; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; import javax.annotation.Nonnull; + +import com.sap.ai.sdk.core.common.ClientException; import lombok.extern.slf4j.Slf4j; /** Implements common functionality for realtime api clients that output audio */ diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java index 20f4a9bc3..7963692e5 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java @@ -158,16 +158,16 @@ protected void onText(@Nonnull final WebSocket webSocket, @Nonnull final CharSeq log.trace("Unhandled event type: {}", eventType); } - webSocket.request(1); + webSocket.request(2); // TODO: this is wrong and for debug only, decrease to 1 } protected synchronized void sendPing(@Nonnull final WebSocket ws) { if (ws.isInputClosed()) { return; } - log.info("Skipping sending ping"); - //ws.sendPing(ByteBuffer.wrap("ping".getBytes(StandardCharsets.UTF_8))).join(); - //ws.request(1); + log.info("Sending wss ping"); + ws.sendPing(ByteBuffer.wrap("ping".getBytes(StandardCharsets.UTF_8))).join(); + ws.request(1); } private void configureSession(@Nonnull final WebSocket ws) { From 4ca0b080c102a5c567de8fbd425fee9a6e6ae618 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 18:33:17 +0200 Subject: [PATCH 04/10] debug e2e tests --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index cf299ec22..49e039ed7 100644 --- a/pom.xml +++ b/pom.xml @@ -716,13 +716,13 @@ - + + ${project.rootdir}/.pipeline/checkstyle-suppressions.xml false true @@ -744,7 +744,7 @@ verify - + org.apache.maven.plugins maven-pmd-plugin From 546ad0e78831c55ff7f3cde001fc3063f88c33b0 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 18:40:18 +0200 Subject: [PATCH 05/10] debug e2e tests --- .../openai/realtime/WSOpenAiRealtimeClient.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java index 7963692e5..a25daded1 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java @@ -130,7 +130,7 @@ protected void sendMessage(@Nonnull final Object message) { } synchronized (this) { try { - ws.sendText(JACKSON.writeValueAsString(message), true); + ws.sendText(JACKSON.writeValueAsString(message), true).join(); ws.request(1); } catch (final JsonProcessingException e) { throw new ClientException("Failed to serialize message", e); @@ -158,7 +158,7 @@ protected void onText(@Nonnull final WebSocket webSocket, @Nonnull final CharSeq log.trace("Unhandled event type: {}", eventType); } - webSocket.request(2); // TODO: this is wrong and for debug only, decrease to 1 + webSocket.request(1); } protected synchronized void sendPing(@Nonnull final WebSocket ws) { From 11489b826626b3da7672cea7a2fa939834fd12f7 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 19:11:58 +0200 Subject: [PATCH 06/10] debug e2e tests --- .github/workflows/e2e-test.yaml | 111 ++++++++++++++---- .../realtime/WSOpenAiRealtimeClient.java | 2 +- pom.xml | 6 +- .../sdk/app/controllers/RealtimeApiTest.java | 10 +- .../src/test/resources/fixtures/hello.pcm | Bin 62400 -> 0 bytes ...> what-is-the-german-word-for-chicken.pcm} | Bin 6 files changed, 99 insertions(+), 30 deletions(-) delete mode 100644 sample-code/spring-app/src/test/resources/fixtures/hello.pcm rename sample-code/spring-app/src/test/resources/fixtures/{question111.pcm => what-is-the-german-word-for-chicken.pcm} (100%) diff --git a/.github/workflows/e2e-test.yaml b/.github/workflows/e2e-test.yaml index 07978cf25..1bb68d9d4 100644 --- a/.github/workflows/e2e-test.yaml +++ b/.github/workflows/e2e-test.yaml @@ -1,11 +1,8 @@ name: "End-to-end Tests" on: workflow_dispatch: - inputs: - realtime_flakiness_runs: - description: "Repeat RealtimeApiTest#testSpeechToSpeech N times (0 = skip)" - required: false - default: "100" + schedule: + - cron: 15 2 * * MON-FRI env: MVN_MULTI_THREADED_ARGS: --batch-mode --no-transfer-progress --fail-at-end --show-version --threads 1C @@ -15,6 +12,16 @@ jobs: end-to-end-tests: permissions: contents: read + strategy: + fail-fast: false + matrix: + environment: [ canary, production ] + exclude: + - environment: production + # secret-name: AI_CORE_PRODUCTION + include: + - environment: canary + secret-name: AI_CORE_CANARY runs-on: ubuntu-latest steps: @@ -29,23 +36,87 @@ jobs: cache: 'maven' - name: "Build SDK" - run: mvn ${{ env.MVN_MULTI_THREADED_ARGS }} clean install -DskipTests -DskipFormatting + run: | + MVN_ARGS="${{ env.MVN_MULTI_THREADED_ARGS }} clean install -DskipTests -DskipFormatting" + mvn $MVN_ARGS + + - name: "Run tests" + id: run_tests + run: | + if [ "${{ matrix.environment }}" = "canary" ]; then + export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_CANARY }}' + else + export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_PRODUCTION }}' + fi + + MVN_ARGS="${{ env.MVN_MULTI_THREADED_ARGS }} surefire:test -pl :spring-app -DskipTests=false" + mvn $MVN_ARGS "-Daicore.landscape=${{ matrix.environment }}" 2>&1 | tee mvn_output.log # tee writes to both the console and a file - - name: "Run RealtimeApiTest#testSpeechToSpeech (${{ inputs.realtime_flakiness_runs }}x)" + ERROR_MSG=$(grep -E '^\[ERROR\] +[A-Za-z][A-Za-z0-9_]*\.[a-zA-Z][a-zA-Z0-9_]*(:[0-9]+| ยป)' mvn_output.log | sed $'s/\\[ERROR\\] */\\\n ๐Ÿ”ด /' || true) + echo "$ERROR_MSG" + # Escape newlines so the value is safe to embed in a YAML/JSON string + ERROR_MSG_ESCAPED=$(printf '%s' "$ERROR_MSG" | sed ':a;N;$!ba;s/\n/\\n/g') + { + echo "error_message<> $GITHUB_OUTPUT + + if grep -q "BUILD FAILURE" mvn_output.log; then + echo "Maven build failed." + exit 1 + elif grep -q "BUILD SUCCESS" mvn_output.log; then + echo "Maven build succeeded." + else + echo "Maven build status unknown." + exit 1 + fi env: - AICORE_SERVICE_KEY: ${{ secrets.AI_CORE_CANARY }} + # See "End-to-end test application instructions" on the README.md to update the secret + AI_CORE_PRODUCTION: ${{ secrets.production }} + AI_CORE_CANARY: ${{ secrets.canary }} + + - name: "Start Application Locally" run: | - failures=0 - for i in $(seq 1 ${{ inputs.realtime_flakiness_runs }}); do - echo "--- Run $i / ${{ inputs.realtime_flakiness_runs }} ---" - if ! mvn --batch-mode --no-transfer-progress surefire:test \ - -pl :spring-app \ - -DskipTests=false \ - "-Dtest=com.sap.ai.sdk.app.controllers.RealtimeApiTest#testSpeechToSpeech" \ - "-Daicore.landscape=canary"; then - failures=$((failures + 1)) - echo "Run $i FAILED" + if [ "${{ matrix.environment }}" = "canary" ]; then + export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_CANARY }}' + else + export AICORE_SERVICE_KEY='${{ secrets.AI_CORE_PRODUCTION }}' + fi + + cd sample-code/spring-app + mvn spring-boot:run & + timeout=15 + while ! nc -z localhost 8080; do + sleep 1 + timeout=$((timeout - 1)) + if [ $timeout -le 0 ]; then + echo "Server did not start within 15 seconds." + exit 1 fi done - echo "Failures: $failures / ${{ inputs.realtime_flakiness_runs }}" - [ $failures -eq 0 ] + env: + # See "End-to-end test application instructions" on the README.md to update the secret + AI_CORE_PRODUCTION: ${{ secrets.production }} + AI_CORE_CANARY: ${{ secrets.canary }} + + - name: "Health Check" + # 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: false # failure() + uses: slackapi/slack-github-action@v4.0.0 + with: + webhook: ${{ secrets.SLACK_WEBHOOK }} + webhook-type: incoming-webhook + payload: | + blocks: + - type: "section" + text: + type: "mrkdwn" + text: "โš ๏ธ End-to-end tests failed! ๐Ÿ˜ฌ Please inspect & fix by clicking " + - type: "section" + text: + type: "mrkdwn" + text: "${{ steps.run_tests.outputs.error_message }} " diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java index a25daded1..1e590fd18 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/WSOpenAiRealtimeClient.java @@ -165,7 +165,7 @@ protected synchronized void sendPing(@Nonnull final WebSocket ws) { if (ws.isInputClosed()) { return; } - log.info("Sending wss ping"); + log.trace("Sending wss ping"); ws.sendPing(ByteBuffer.wrap("ping".getBytes(StandardCharsets.UTF_8))).join(); ws.request(1); } diff --git a/pom.xml b/pom.xml index 49e039ed7..cf299ec22 100644 --- a/pom.xml +++ b/pom.xml @@ -716,13 +716,13 @@ - ${project.rootdir}/.pipeline/checkstyle-suppressions.xml false true @@ -744,7 +744,7 @@ verify - + org.apache.maven.plugins maven-pmd-plugin diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java index 7368f1691..0de718b5a 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java @@ -15,7 +15,6 @@ import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; @@ -24,14 +23,14 @@ public class RealtimeApiTest { private static final double LOG_2 = Math.log(2.0); - private static byte[] HELLO_FIXTURE_PCM; + private static byte[] QUESTION_FIXTURE_PCM; private final OpenAiService service = new OpenAiService(); @BeforeAll public static void setUp() { - try (var fis = new FileInputStream("src/test/resources/fixtures/question111.pcm")) { - HELLO_FIXTURE_PCM = fis.readAllBytes(); + try (var fis = new FileInputStream("src/test/resources/fixtures/what-is-the-german-word-for-chicken.pcm")) { + QUESTION_FIXTURE_PCM = fis.readAllBytes(); } catch (IOException e) { fail(e.getMessage()); } @@ -74,7 +73,6 @@ void testTextToSpeech() { @Test @Timeout(value = 60, unit = TimeUnit.SECONDS) - //@RepeatedTest(100) void testSpeechToSpeech() { var outputBuffer = new ByteArrayOutputStream(600000); var monitor = new CountDownLatch(1); @@ -92,7 +90,7 @@ void testSpeechToSpeech() { }, RealtimeParamTurnDetection.EACH_CALL_IS_A_TURN, systemPrompt)) { - input.inputAudio(HELLO_FIXTURE_PCM); + input.inputAudio(QUESTION_FIXTURE_PCM); completed = monitor.await(55, TimeUnit.SECONDS); } catch (Exception e) { if (!(e instanceof InterruptedException)) { diff --git a/sample-code/spring-app/src/test/resources/fixtures/hello.pcm b/sample-code/spring-app/src/test/resources/fixtures/hello.pcm deleted file mode 100644 index 7aa7f9435dabc33fed25fe5adeed22245d0cc9c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62400 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 z 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 UjIz}go|BOjDN2Xt+vrUH3&TAw-2eap diff --git a/sample-code/spring-app/src/test/resources/fixtures/question111.pcm b/sample-code/spring-app/src/test/resources/fixtures/what-is-the-german-word-for-chicken.pcm similarity index 100% rename from sample-code/spring-app/src/test/resources/fixtures/question111.pcm rename to sample-code/spring-app/src/test/resources/fixtures/what-is-the-german-word-for-chicken.pcm From 8cff52d09b0e4d3f24a25d00c02cc92dc199b95c Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Mon, 31 Aug 2026 17:17:38 +0000 Subject: [PATCH 07/10] Formatting --- .../openai/realtime/ToAudioRealtimeClient.java | 3 --- .../java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java | 4 +++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java index 883a99614..b318e3983 100644 --- a/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java +++ b/foundation-models/openai/src/main/java/com/sap/ai/sdk/foundationmodels/openai/realtime/ToAudioRealtimeClient.java @@ -18,10 +18,7 @@ import java.util.Set; import java.util.Timer; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionException; import javax.annotation.Nonnull; - -import com.sap.ai.sdk.core.common.ClientException; import lombok.extern.slf4j.Slf4j; /** Implements common functionality for realtime api clients that output audio */ diff --git a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java index 0de718b5a..f5f7d014f 100644 --- a/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java +++ b/sample-code/spring-app/src/test/java/com/sap/ai/sdk/app/controllers/RealtimeApiTest.java @@ -29,7 +29,9 @@ public class RealtimeApiTest { @BeforeAll public static void setUp() { - try (var fis = new FileInputStream("src/test/resources/fixtures/what-is-the-german-word-for-chicken.pcm")) { + try (var fis = + new FileInputStream( + "src/test/resources/fixtures/what-is-the-german-word-for-chicken.pcm")) { QUESTION_FIXTURE_PCM = fis.readAllBytes(); } catch (IOException e) { fail(e.getMessage()); From dfd3f063f38223c5895e9ac7d588aae408b6a2b9 Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 19:18:45 +0200 Subject: [PATCH 08/10] debug e2e tests --- .github/workflows/e2e-test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-test.yaml b/.github/workflows/e2e-test.yaml index 1bb68d9d4..60592c9ae 100644 --- a/.github/workflows/e2e-test.yaml +++ b/.github/workflows/e2e-test.yaml @@ -105,7 +105,7 @@ jobs: run: wget -qO- -S localhost:8080 - name: "Slack Notification" - if: false # failure() + if: failure() uses: slackapi/slack-github-action@v4.0.0 with: webhook: ${{ secrets.SLACK_WEBHOOK }} From bc4d84dfc2606cfedd594b5797791451de94a29a Mon Sep 17 00:00:00 2001 From: Vladimir Aseev Date: Mon, 31 Aug 2026 19:20:44 +0200 Subject: [PATCH 09/10] debug e2e tests --- docs/release_notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index c4e5c55a9..de0543092 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -20,4 +20,4 @@ ### ๐Ÿ› Fixed Issues -- +- [Foundation models] Fixed possible race condition in Realtime API implementation From 1fe33cc19d9639478bb9f60d40257b66bb7c7d3e Mon Sep 17 00:00:00 2001 From: vladimir-a-sap Date: Tue, 1 Sep 2026 10:12:11 +0200 Subject: [PATCH 10/10] Update docs/release_notes.md Co-authored-by: Charles Dubois <103174266+CharlesDuboisSAP@users.noreply.github.com> --- docs/release_notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release_notes.md b/docs/release_notes.md index de0543092..b60c091dc 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -20,4 +20,4 @@ ### ๐Ÿ› Fixed Issues -- [Foundation models] Fixed possible race condition in Realtime API implementation +- [Realtime] Fixed possible race condition in Realtime API implementation