From 65d29b63fab721a78b3c1f75ac3d3e156cdd9c48 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 12 Dec 2025 15:07:59 +0200 Subject: [PATCH 01/19] Introduce CI Actions for Quarkus-LangChain4j integration tests with GPULlama3. --- .../quarkus-langchain4j-integration.yml | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 .github/workflows/quarkus-langchain4j-integration.yml diff --git a/.github/workflows/quarkus-langchain4j-integration.yml b/.github/workflows/quarkus-langchain4j-integration.yml new file mode 100644 index 00000000..177b299f --- /dev/null +++ b/.github/workflows/quarkus-langchain4j-integration.yml @@ -0,0 +1,155 @@ +name: Quarkus LangChain4j Integration Tests + +on: + # Temporarily disabled - manual trigger only + push: + branches: [ main, ci/quarkus-langchain4j-IT ] + # pull_request: + # branches: [ main ] + # types: [opened, synchronize, reopened] + # schedule: + # # Run daily at 02:30 UTC to catch dependency breakages + # - cron: '30 2 * * *' + workflow_dispatch: + inputs: + quarkus_langchain4j_version: + description: 'Quarkus LangChain4j version to test against' + required: false + type: string + quarkus_version: + description: 'Quarkus platform version to test against' + required: false + type: string + +env: + JAVA_HOME: /opt/jenkins/jdks/graal-23.1.0/jdk-21.0.3 + MODELS_DIR: /opt/models + +jobs: + quarkus-integration-test: + if: github.repository == 'beehive-lab/GPULlama3.java' + runs-on: [self-hosted] + timeout-minutes: 30 + strategy: + fail-fast: false + matrix: + backend: + - name: opencl + - name: ptx + + steps: + - name: Checkout GPULlama3 + uses: actions/checkout@v4 + + # Step 1: Install TornadoVM + - name: Install TornadoVM + run: | + cd ${{ github.workspace }} + + wget https://github.com/beehive-lab/TornadoVM/releases/download/v2.1.0/tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip + unzip tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip + + TORNADO_SDK="${{ github.workspace }}/tornadovm-2.1.0-${{ matrix.backend.name }}" + PATH=$TORNADO_SDK/bin:$PATH + echo "TORNADO_SDK=$TORNADO_SDK" >> $GITHUB_ENV + echo "PATH=$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" >> $GITHUB_ENV + + tornado --devices + tornado --version + + if [ $? -eq 0 ]; then + echo "✅ TornadoVM installed" + else + echo "❌ TornadoVM installation check failed" + exit 1 + fi + + # Step 2: Clone Quarkus LangChain4j + - name: Clone Quarkus LangChain4j + run: | + cd ${{ github.workspace }} + git clone https://github.com/quarkiverse/quarkus-langchain4j.git + echo "✅ Quarkus LangChain4j cloned" + + # Step 3: Build Quarkus LangChain4j (optimized) + - name: Build Quarkus LangChain4j + run: | + cd ${{ github.workspace }}/quarkus-langchain4j + export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + + # Use reactor to build GPULlama3 integration test + dependencies + # This recompiles everything with the same Java version, avoiding compatibility issues + # The -Dtornado flag activates the TornadoVM profile which includes gpu-llama3 module + mvn clean install -pl integration-tests/gpu-llama3 -am -DskipTests -Dtornado + + echo "✅ Quarkus LangChain4j built (GPULlama3 integration test + dependencies)" + + # Step 4: Run Integration Test + - name: Run Integration Test + run: | + cd ${{ github.workspace }}/quarkus-langchain4j/integration-tests/gpu-llama3 + export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + + # Set model path + MODEL_PATH="${MODELS_DIR}/Llama-3.2-1B-Instruct-F16.gguf" + export MODEL_PATH + + echo "Running Quarkus-Langchain4j integration test with model: $MODEL_PATH" + + # Start the application in the background + java "@$TORNADO_SDK/tornado-argfile" -jar target/quarkus-app/quarkus-run.jar & + APP_PID=$! + + # Wait for the application to start + echo "Waiting for application to start..." + for i in {1..30}; do + if curl -s http://localhost:8080/q/health > /dev/null 2>&1; then + echo "✅ Application started successfully" + break + elif [ $i -eq 30 ]; then + echo "❌ Application failed to start within 30 seconds" + kill $APP_PID || true + exit 1 + else + sleep 1 + fi + done + + # Test that GPULlama3 integration is working + echo "Testing GPULlama3 integration..." + + # Test the blocking chat endpoint + echo "Testing blocking chat endpoint..." + BLOCKING_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:8080/chat/blocking) + HTTP_CODE="${BLOCKING_RESPONSE: -3}" + + if [ "$HTTP_CODE" = "200" ]; then + RESPONSE_BODY="${BLOCKING_RESPONSE%???}" + if [ ${#RESPONSE_BODY} -gt 10 ]; then + echo "✅ Blocking chat endpoint working - received response: ${RESPONSE_BODY:0:50}..." + else + echo "⚠️ Blocking chat endpoint returned short response: $RESPONSE_BODY" + fi + else + echo "❌ Blocking chat endpoint failed with HTTP code: $HTTP_CODE" + echo "Response: ${BLOCKING_RESPONSE%???}" + fi + + # Test the streaming chat endpoint (just check it responds) + echo "Testing streaming chat endpoint..." + STREAMING_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:8080/chat/streaming) + STREAMING_HTTP_CODE="${STREAMING_RESPONSE: -3}" + + if [ "$STREAMING_HTTP_CODE" = "200" ]; then + echo "✅ Streaming chat endpoint responding" + else + echo "⚠️ Streaming chat endpoint returned HTTP code: $STREAMING_HTTP_CODE" + fi + + echo "✅ GPULlama3 integration test completed" + + # Clean shutdown + kill $APP_PID || true + wait $APP_PID 2>/dev/null || true + + echo "✅ Integration test completed successfully" From 0644b5cfc76ffdc59e2052bc37dd3d035f0592c1 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 12 Dec 2025 16:14:07 +0200 Subject: [PATCH 02/19] Introduce CI Actions for Quarkus-LangChain4j integration tests with GPULlama3. --- .../quarkus-langchain4j-integration.yml | 141 ++++++++++-------- 1 file changed, 79 insertions(+), 62 deletions(-) diff --git a/.github/workflows/quarkus-langchain4j-integration.yml b/.github/workflows/quarkus-langchain4j-integration.yml index 177b299f..409ee8a5 100644 --- a/.github/workflows/quarkus-langchain4j-integration.yml +++ b/.github/workflows/quarkus-langchain4j-integration.yml @@ -23,7 +23,9 @@ on: env: JAVA_HOME: /opt/jenkins/jdks/graal-23.1.0/jdk-21.0.3 - MODELS_DIR: /opt/models + TORNADO_ROOT: ${{ github.workspace }}/GPULlama3.java/external/tornadovm + GRAAL_JARS: /opt/graalJars + QUARKUS_PORT: 8081 jobs: quarkus-integration-test: @@ -35,34 +37,76 @@ jobs: matrix: backend: - name: opencl - - name: ptx + #- name: ptx steps: - name: Checkout GPULlama3 uses: actions/checkout@v4 - # Step 1: Install TornadoVM - - name: Install TornadoVM +# # Step 1: Install TornadoVM +# - name: Install TornadoVM +# run: | +# cd ${{ github.workspace }} +# +# wget https://github.com/beehive-lab/TornadoVM/releases/download/v2.1.0/tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip +# unzip tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip +# +# # Export environment for the current shell +# export TORNADO_SDK="${{ github.workspace }}/tornadovm-2.1.0-${{ matrix.backend.name }}" +# export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" +# +# # Save to GitHub Actions environment for future steps +# echo "TORNADO_SDK=$TORNADO_SDK" >> $GITHUB_ENV +# echo "PATH=$PATH" >> $GITHUB_ENV +# +# # Check TornadoVM installation +# if tornado --devices && tornado --version; then +# echo "✅ TornadoVM installed" +# else +# echo "❌ TornadoVM installation check failed" +# exit 1 +# fi + # Step 1: Clone and build TornadoVM + - name: Clone TornadoVM master run: | - cd ${{ github.workspace }} - - wget https://github.com/beehive-lab/TornadoVM/releases/download/v2.1.0/tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip - unzip tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip - - TORNADO_SDK="${{ github.workspace }}/tornadovm-2.1.0-${{ matrix.backend.name }}" - PATH=$TORNADO_SDK/bin:$PATH - echo "TORNADO_SDK=$TORNADO_SDK" >> $GITHUB_ENV - echo "PATH=$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" >> $GITHUB_ENV - - tornado --devices - tornado --version - - if [ $? -eq 0 ]; then - echo "✅ TornadoVM installed" - else - echo "❌ TornadoVM installation check failed" - exit 1 + git clone --depth 1 --branch master \ + https://github.com/beehive-lab/TornadoVM.git \ + $TORNADO_ROOT + - name: Set up Python venv for TornadoVM + run: | + python3 -m venv $TORNADO_ROOT/venv + source $TORNADO_ROOT/venv/bin/activate + python --version + - name: Build TornadoVM + run: | + cd $TORNADO_ROOT + mkdir -p graalJars && cp $GRAAL_JARS/* graalJars/ + source venv/bin/activate + echo "=== Building TornadoVM ===" + + make BACKEND=${{ matrix.backend.name }} + + echo "=== Searching for TornadoVM SDK directory ===" + SDK_DIR=$(find dist -type d -maxdepth 3 -path "*/tornadovm-*-${{ matrix.backend.name }}" | head -n 1) + if [ -z "$SDK_DIR" ]; then + echo "::error::Could not locate TornadoVM SDK directory!" + find dist -maxdepth 5 -type d + exit 1 fi + FULL_SDK="${PWD}/${SDK_DIR}" + echo "Detected TornadoVM SDK: $FULL_SDK" + + # Export for current shell session + export TORNADO_SDK="$FULL_SDK" + export PATH="$FULL_SDK/bin:$JAVA_HOME/bin:$PATH" + + # Save for subsequent steps + echo "TORNADO_SDK=$FULL_SDK" >> $GITHUB_ENV + echo "PATH=$PATH" >> $GITHUB_ENV + + echo "=== Checking tornado CLI ===" + which tornado || { echo "::error::tornado not in PATH"; exit 1; } + tornado --devices # Step 2: Clone Quarkus LangChain4j - name: Clone Quarkus LangChain4j @@ -90,20 +134,19 @@ jobs: cd ${{ github.workspace }}/quarkus-langchain4j/integration-tests/gpu-llama3 export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" - # Set model path - MODEL_PATH="${MODELS_DIR}/Llama-3.2-1B-Instruct-F16.gguf" - export MODEL_PATH + echo "Running Quarkus-Langchain4j integration test on port $QUARKUS_PORT" - echo "Running Quarkus-Langchain4j integration test with model: $MODEL_PATH" - - # Start the application in the background - java "@$TORNADO_SDK/tornado-argfile" -jar target/quarkus-app/quarkus-run.jar & + # Start the Quarkus application in the background + java @"$TORNADO_SDK/tornado-argfile" \ + -Dtornado.device.memory=8GB + -Dquarkus.http.port=$QUARKUS_PORT \ + -jar target/quarkus-app/quarkus-run.jar & APP_PID=$! # Wait for the application to start - echo "Waiting for application to start..." + echo "Starting Quarkus application on port $QUARKUS_PORT..." for i in {1..30}; do - if curl -s http://localhost:8080/q/health > /dev/null 2>&1; then + if curl -s http://localhost:$QUARKUS_PORT/q/health > /dev/null 2>&1; then echo "✅ Application started successfully" break elif [ $i -eq 30 ]; then @@ -115,38 +158,12 @@ jobs: fi done - # Test that GPULlama3 integration is working - echo "Testing GPULlama3 integration..." - - # Test the blocking chat endpoint - echo "Testing blocking chat endpoint..." - BLOCKING_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:8080/chat/blocking) - HTTP_CODE="${BLOCKING_RESPONSE: -3}" - - if [ "$HTTP_CODE" = "200" ]; then - RESPONSE_BODY="${BLOCKING_RESPONSE%???}" - if [ ${#RESPONSE_BODY} -gt 10 ]; then - echo "✅ Blocking chat endpoint working - received response: ${RESPONSE_BODY:0:50}..." - else - echo "⚠️ Blocking chat endpoint returned short response: $RESPONSE_BODY" - fi - else - echo "❌ Blocking chat endpoint failed with HTTP code: $HTTP_CODE" - echo "Response: ${BLOCKING_RESPONSE%???}" - fi - - # Test the streaming chat endpoint (just check it responds) - echo "Testing streaming chat endpoint..." - STREAMING_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:8080/chat/streaming) - STREAMING_HTTP_CODE="${STREAMING_RESPONSE: -3}" - - if [ "$STREAMING_HTTP_CODE" = "200" ]; then - echo "✅ Streaming chat endpoint responding" - else - echo "⚠️ Streaming chat endpoint returned HTTP code: $STREAMING_HTTP_CODE" - fi + # Trigger endpoints + BLOCKING_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/blocking) + STREAMING_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/streaming) - echo "✅ GPULlama3 integration test completed" + echo "Blocking endpoint HTTP code: ${BLOCKING_RESPONSE: -3}" + echo "Streaming endpoint HTTP code: ${STREAMING_RESPONSE: -3}" # Clean shutdown kill $APP_PID || true From 6001328a03d25e63d9b2a6e235d9e385712baca7 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 12 Dec 2025 19:04:25 +0200 Subject: [PATCH 03/19] Introduce CI Actions for Quarkus-LangChain4j integration tests with GPULlama3. --- .github/workflows/quarkus-langchain4j-integration.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/quarkus-langchain4j-integration.yml b/.github/workflows/quarkus-langchain4j-integration.yml index 409ee8a5..5dd53d65 100644 --- a/.github/workflows/quarkus-langchain4j-integration.yml +++ b/.github/workflows/quarkus-langchain4j-integration.yml @@ -138,7 +138,7 @@ jobs: # Start the Quarkus application in the background java @"$TORNADO_SDK/tornado-argfile" \ - -Dtornado.device.memory=8GB + -Dtornado.device.memory=8GB \ -Dquarkus.http.port=$QUARKUS_PORT \ -jar target/quarkus-app/quarkus-run.jar & APP_PID=$! From b17419755b262588f5ac6ed77426fe6f977b020d Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 11:24:06 +0200 Subject: [PATCH 04/19] Create dedicated directory for integrations in ci workflows and move quarkus-langchain4j there --- .../{ => integrations}/quarkus-langchain4j-integration.yml | 2 ++ 1 file changed, 2 insertions(+) rename .github/workflows/{ => integrations}/quarkus-langchain4j-integration.yml (98%) diff --git a/.github/workflows/quarkus-langchain4j-integration.yml b/.github/workflows/integrations/quarkus-langchain4j-integration.yml similarity index 98% rename from .github/workflows/quarkus-langchain4j-integration.yml rename to .github/workflows/integrations/quarkus-langchain4j-integration.yml index 5dd53d65..0a32921c 100644 --- a/.github/workflows/quarkus-langchain4j-integration.yml +++ b/.github/workflows/integrations/quarkus-langchain4j-integration.yml @@ -4,6 +4,8 @@ on: # Temporarily disabled - manual trigger only push: branches: [ main, ci/quarkus-langchain4j-IT ] + paths: + - '.github/workflows/integrations/quarkus-langchain4j.yml' # Add this # pull_request: # branches: [ main ] # types: [opened, synchronize, reopened] From e64caaf8ae0a2a1e76874b9bccac47134c43c7e1 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 11:24:46 +0200 Subject: [PATCH 05/19] Rename Quarkus-LangChain4j integration workflow file --- ...uarkus-langchain4j-integration.yml => quarkus-langchain4j.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/integrations/{quarkus-langchain4j-integration.yml => quarkus-langchain4j.yml} (100%) diff --git a/.github/workflows/integrations/quarkus-langchain4j-integration.yml b/.github/workflows/integrations/quarkus-langchain4j.yml similarity index 100% rename from .github/workflows/integrations/quarkus-langchain4j-integration.yml rename to .github/workflows/integrations/quarkus-langchain4j.yml From a2352503b713edb65b75c34552b5714f2f821555 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 11:25:42 +0200 Subject: [PATCH 06/19] Update Quarkus-LangChain4j workflow name --- .github/workflows/integrations/quarkus-langchain4j.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integrations/quarkus-langchain4j.yml b/.github/workflows/integrations/quarkus-langchain4j.yml index 0a32921c..6db29ed2 100644 --- a/.github/workflows/integrations/quarkus-langchain4j.yml +++ b/.github/workflows/integrations/quarkus-langchain4j.yml @@ -1,4 +1,4 @@ -name: Quarkus LangChain4j Integration Tests +name: [Integration] Quarkus-LangChain4j on: # Temporarily disabled - manual trigger only From 5c71ce7784e1adafb074a876e1e4160265404e95 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 12:30:05 +0200 Subject: [PATCH 07/19] Split steps Quarkus-LangChain4j workflow and add validate results --- .../integrations/quarkus-langchain4j.yml | 67 ++++++++++++++----- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/.github/workflows/integrations/quarkus-langchain4j.yml b/.github/workflows/integrations/quarkus-langchain4j.yml index 6db29ed2..ce9aadab 100644 --- a/.github/workflows/integrations/quarkus-langchain4j.yml +++ b/.github/workflows/integrations/quarkus-langchain4j.yml @@ -115,7 +115,6 @@ jobs: run: | cd ${{ github.workspace }} git clone https://github.com/quarkiverse/quarkus-langchain4j.git - echo "✅ Quarkus LangChain4j cloned" # Step 3: Build Quarkus LangChain4j (optimized) - name: Build Quarkus LangChain4j @@ -127,16 +126,14 @@ jobs: # This recompiles everything with the same Java version, avoiding compatibility issues # The -Dtornado flag activates the TornadoVM profile which includes gpu-llama3 module mvn clean install -pl integration-tests/gpu-llama3 -am -DskipTests -Dtornado - - echo "✅ Quarkus LangChain4j built (GPULlama3 integration test + dependencies)" - # Step 4: Run Integration Test - - name: Run Integration Test + # Step 4: Start Quarkus Application and Wait for Startup + - name: Start Quarkus Application and Wait for Startup run: | cd ${{ github.workspace }}/quarkus-langchain4j/integration-tests/gpu-llama3 export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" - echo "Running Quarkus-Langchain4j integration test on port $QUARKUS_PORT" + echo "Starting Quarkus application on port $QUARKUS_PORT..." # Start the Quarkus application in the background java @"$TORNADO_SDK/tornado-argfile" \ @@ -145,30 +142,66 @@ jobs: -jar target/quarkus-app/quarkus-run.jar & APP_PID=$! - # Wait for the application to start - echo "Starting Quarkus application on port $QUARKUS_PORT..." + if [ -z "$APP_PID" ]; then + echo "ERROR: Failed to start Quarkus application" + exit 1 + fi + + echo "Waiting for Quarkus application to start..." + + # Wait for application to be ready for i in {1..30}; do if curl -s http://localhost:$QUARKUS_PORT/q/health > /dev/null 2>&1; then - echo "✅ Application started successfully" + echo "Application ready after ${i} seconds" + echo "Health endpoint: http://localhost:$QUARKUS_PORT/q/health" break elif [ $i -eq 30 ]; then - echo "❌ Application failed to start within 30 seconds" + echo "ERROR: Application failed to start within 30 seconds" + echo "Debugging info:" + echo "- Port: $QUARKUS_PORT" + echo "- Process ID: $APP_PID" + echo "- Health URL: http://localhost:$QUARKUS_PORT/q/health" kill $APP_PID || true exit 1 else + [ $((i % 5)) -eq 0 ] && echo "Still waiting... (${i}s)" sleep 1 fi done - - # Trigger endpoints + + # Step 5: Run test 1 + - name: Trigger Blocking Endpoint + run: | + # Trigger endpoint BLOCKING_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/blocking) - STREAMING_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/streaming) + BLOCKING_HTTP_RESPONSE_CODE="${BLOCKING_RESPONSE: -3}" - echo "Blocking endpoint HTTP code: ${BLOCKING_RESPONSE: -3}" - echo "Streaming endpoint HTTP code: ${STREAMING_RESPONSE: -3}" + # Check response code + if [ "$BLOCKING_HTTP_RESPONSE_CODE" != "200" ]; then + echo "ERROR: Blocking endpoint returned HTTP code $BLOCKING_HTTP_RESPONSE_CODE" + exit 1 + else + echo "Blocking endpoint HTTP code: ${BLOCKING_RESPONSE: -3}" + fi + + # Step 6: Run test 2 + - name: Trigger Streaming Endpoint + run: | + # Trigger endpoint + STREAMING_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/streaming) + STREAMING_HTTP_RESPONSE_CODE="${STREAMING_RESPONSE: -3}" + # Check response code + if [ "STREAMING_HTTP_RESPONSE_CODE" != "200" ]; then + echo "ERROR: Streaming endpoint returned HTTP code STREAMING_HTTP_RESPONSE_CODE" + exit 1 + else + echo "Streaming endpoint HTTP code: ${STREAMING_RESPONSE: -3}" + fi + + # Step 7: Cleanup & Shutdown + - name: Cleanup & Shutdown + run: | # Clean shutdown kill $APP_PID || true wait $APP_PID 2>/dev/null || true - - echo "✅ Integration test completed successfully" From 5a22cac2f22a0653e1803b022a5aac88c7c4ba21 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 12:47:58 +0200 Subject: [PATCH 08/19] Fix yaml syntax Move Quarkus-LangChain4j workflow Simplify Quarkus-LangChain4j workflow name formatting --- ...angchain4j.yml => integration-quarkus-langchain4j.yml} | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) rename .github/workflows/{integrations/quarkus-langchain4j.yml => integration-quarkus-langchain4j.yml} (96%) diff --git a/.github/workflows/integrations/quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml similarity index 96% rename from .github/workflows/integrations/quarkus-langchain4j.yml rename to .github/workflows/integration-quarkus-langchain4j.yml index ce9aadab..13044acf 100644 --- a/.github/workflows/integrations/quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -1,11 +1,9 @@ -name: [Integration] Quarkus-LangChain4j +name: Integration Quarkus-LangChain4j on: # Temporarily disabled - manual trigger only push: branches: [ main, ci/quarkus-langchain4j-IT ] - paths: - - '.github/workflows/integrations/quarkus-langchain4j.yml' # Add this # pull_request: # branches: [ main ] # types: [opened, synchronize, reopened] @@ -192,8 +190,8 @@ jobs: STREAMING_HTTP_RESPONSE_CODE="${STREAMING_RESPONSE: -3}" # Check response code - if [ "STREAMING_HTTP_RESPONSE_CODE" != "200" ]; then - echo "ERROR: Streaming endpoint returned HTTP code STREAMING_HTTP_RESPONSE_CODE" + if [ "$STREAMING_HTTP_RESPONSE_CODE" != "200" ]; then + echo "ERROR: Streaming endpoint returned HTTP code $STREAMING_HTTP_RESPONSE_CODE" exit 1 else echo "Streaming endpoint HTTP code: ${STREAMING_RESPONSE: -3}" From c764752437ecc870d52a8dc813886e27d5b4c55b Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 13:52:33 +0200 Subject: [PATCH 09/19] Replace `TORNADO_SDK` with `TORNADOVM_HOME` --- .../integration-quarkus-langchain4j.yml | 33 +++---------------- 1 file changed, 5 insertions(+), 28 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index 13044acf..8d8b7c24 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -43,29 +43,6 @@ jobs: - name: Checkout GPULlama3 uses: actions/checkout@v4 -# # Step 1: Install TornadoVM -# - name: Install TornadoVM -# run: | -# cd ${{ github.workspace }} -# -# wget https://github.com/beehive-lab/TornadoVM/releases/download/v2.1.0/tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip -# unzip tornadovm-2.1.0-${{ matrix.backend.name }}-linux-amd64.zip -# -# # Export environment for the current shell -# export TORNADO_SDK="${{ github.workspace }}/tornadovm-2.1.0-${{ matrix.backend.name }}" -# export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" -# -# # Save to GitHub Actions environment for future steps -# echo "TORNADO_SDK=$TORNADO_SDK" >> $GITHUB_ENV -# echo "PATH=$PATH" >> $GITHUB_ENV -# -# # Check TornadoVM installation -# if tornado --devices && tornado --version; then -# echo "✅ TornadoVM installed" -# else -# echo "❌ TornadoVM installation check failed" -# exit 1 -# fi # Step 1: Clone and build TornadoVM - name: Clone TornadoVM master run: | @@ -97,11 +74,11 @@ jobs: echo "Detected TornadoVM SDK: $FULL_SDK" # Export for current shell session - export TORNADO_SDK="$FULL_SDK" + export TORNADOVM_HOME="$FULL_SDK" export PATH="$FULL_SDK/bin:$JAVA_HOME/bin:$PATH" # Save for subsequent steps - echo "TORNADO_SDK=$FULL_SDK" >> $GITHUB_ENV + echo "TORNADOVM_HOME=$FULL_SDK" >> $GITHUB_ENV echo "PATH=$PATH" >> $GITHUB_ENV echo "=== Checking tornado CLI ===" @@ -118,7 +95,7 @@ jobs: - name: Build Quarkus LangChain4j run: | cd ${{ github.workspace }}/quarkus-langchain4j - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" # Use reactor to build GPULlama3 integration test + dependencies # This recompiles everything with the same Java version, avoiding compatibility issues @@ -129,12 +106,12 @@ jobs: - name: Start Quarkus Application and Wait for Startup run: | cd ${{ github.workspace }}/quarkus-langchain4j/integration-tests/gpu-llama3 - export PATH="$TORNADO_SDK/bin:$JAVA_HOME/bin:$PATH" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" echo "Starting Quarkus application on port $QUARKUS_PORT..." # Start the Quarkus application in the background - java @"$TORNADO_SDK/tornado-argfile" \ + java @"$TORNADOVM_HOME/tornado-argfile" \ -Dtornado.device.memory=8GB \ -Dquarkus.http.port=$QUARKUS_PORT \ -jar target/quarkus-app/quarkus-run.jar & From 2bc2bd12dcae3abcfc3818573db8f7744f4c286d Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 20:17:14 +0200 Subject: [PATCH 10/19] Temp quarkus-langchain4j checkout from hotfix branch --- .github/workflows/integration-quarkus-langchain4j.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index 8d8b7c24..e07560df 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -89,7 +89,9 @@ jobs: - name: Clone Quarkus LangChain4j run: | cd ${{ github.workspace }} - git clone https://github.com/quarkiverse/quarkus-langchain4j.git + # git clone https://github.com/quarkiverse/quarkus-langchain4j.git + git clone --branch fix/gpu-llama3-config-registration \ + https://github.com/orionpapadakis/quarkus-langchain4j.git # Step 3: Build Quarkus LangChain4j (optimized) - name: Build Quarkus LangChain4j From 9b6fb41b388bef0779b044fb74bee365783156e5 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 20:33:41 +0200 Subject: [PATCH 11/19] Enable fail-fast and testing on `ptx` backend --- .github/workflows/integration-quarkus-langchain4j.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index e07560df..6690c998 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -33,11 +33,11 @@ jobs: runs-on: [self-hosted] timeout-minutes: 30 strategy: - fail-fast: false + fail-fast: true matrix: backend: - name: opencl - #- name: ptx + - name: ptx steps: - name: Checkout GPULlama3 From 5a0b5540787ff2eb1505dfce5c2d4de50393e7a6 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 20:41:52 +0200 Subject: [PATCH 12/19] Enable scheduled runs and restore pull_request triggers for Quarkus-LangChain4j workflow --- .../integration-quarkus-langchain4j.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index 6690c998..3011d016 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -1,15 +1,14 @@ name: Integration Quarkus-LangChain4j on: - # Temporarily disabled - manual trigger only push: - branches: [ main, ci/quarkus-langchain4j-IT ] - # pull_request: - # branches: [ main ] - # types: [opened, synchronize, reopened] - # schedule: - # # Run daily at 02:30 UTC to catch dependency breakages - # - cron: '30 2 * * *' + branches: [ main ] + pull_request: + branches: [ main ] + types: [opened, synchronize, reopened] + schedule: + # Run every Saturday at 02:30 UTC to catch dependency breakages + - cron: '30 2 * * 6' workflow_dispatch: inputs: quarkus_langchain4j_version: @@ -93,13 +92,13 @@ jobs: git clone --branch fix/gpu-llama3-config-registration \ https://github.com/orionpapadakis/quarkus-langchain4j.git - # Step 3: Build Quarkus LangChain4j (optimized) + # Step 3: Build Quarkus LangChain4j - name: Build Quarkus LangChain4j run: | cd ${{ github.workspace }}/quarkus-langchain4j export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" - # Use reactor to build GPULlama3 integration test + dependencies + # Use reactor to build *only *GPULlama3 integration test + dependencies # This recompiles everything with the same Java version, avoiding compatibility issues # The -Dtornado flag activates the TornadoVM profile which includes gpu-llama3 module mvn clean install -pl integration-tests/gpu-llama3 -am -DskipTests -Dtornado From 218a596aa72bf75973b457622f30ae8cbae37653 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 20:51:52 +0200 Subject: [PATCH 13/19] Improve Quarkus-LangChain4j workflow by adding response body logging and unifying variable names. --- .../integration-quarkus-langchain4j.yml | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index 3011d016..fe9f638e 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -149,30 +149,34 @@ jobs: - name: Trigger Blocking Endpoint run: | # Trigger endpoint - BLOCKING_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/blocking) - BLOCKING_HTTP_RESPONSE_CODE="${BLOCKING_RESPONSE: -3}" + HTTP_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/blocking) + HTTP_RESPONSE_CODE="${HTTP_RESPONSE: -3}" + HTTP_RESPONSE_BODY="$HTTP_RESPONSE%???}" # Check response code - if [ "$BLOCKING_HTTP_RESPONSE_CODE" != "200" ]; then - echo "ERROR: Blocking endpoint returned HTTP code $BLOCKING_HTTP_RESPONSE_CODE" + if [ "$HTTP_RESPONSE_CODE" != "200" ]; then + echo "ERROR: Blocking endpoint returned HTTP code $HTTP_RESPONSE_CODE" exit 1 else - echo "Blocking endpoint HTTP code: ${BLOCKING_RESPONSE: -3}" + echo "SUCCESS: Blocking endpoint returned HTTP code: ${HTTP_RESPONSE: -3}" + echo "HTTP Response body: $HTTP_RESPONSE_BODY" fi # Step 6: Run test 2 - name: Trigger Streaming Endpoint run: | # Trigger endpoint - STREAMING_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/streaming) - STREAMING_HTTP_RESPONSE_CODE="${STREAMING_RESPONSE: -3}" + HTTP_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/streaming) + HTTP_RESPONSE_CODE="${HTTP_RESPONSE: -3}" + HTTP_RESPONSE_BODY="$HTTP_RESPONSE%???}" # Check response code - if [ "$STREAMING_HTTP_RESPONSE_CODE" != "200" ]; then - echo "ERROR: Streaming endpoint returned HTTP code $STREAMING_HTTP_RESPONSE_CODE" + if [ "$HTTP_RESPONSE_CODE" != "200" ]; then + echo "ERROR: Streaming endpoint returned HTTP code $HTTP_RESPONSE_CODE" exit 1 else - echo "Streaming endpoint HTTP code: ${STREAMING_RESPONSE: -3}" + echo "SUCCESS: Streaming endpoint returned HTTP code: ${HTTP_RESPONSE: -3}" + echo "HTTP Response body: $HTTP_RESPONSE_BODY" fi # Step 7: Cleanup & Shutdown From 52b69790e8bb3c648b807c396b38f6b6cd1d1000 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Thu, 18 Dec 2025 20:52:51 +0200 Subject: [PATCH 14/19] Switch to cloning the main Quarkus-LangChain4j repository in the workflow. --- .github/workflows/integration-quarkus-langchain4j.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index fe9f638e..601b61db 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -88,9 +88,7 @@ jobs: - name: Clone Quarkus LangChain4j run: | cd ${{ github.workspace }} - # git clone https://github.com/quarkiverse/quarkus-langchain4j.git - git clone --branch fix/gpu-llama3-config-registration \ - https://github.com/orionpapadakis/quarkus-langchain4j.git + git clone https://github.com/quarkiverse/quarkus-langchain4j.git # Step 3: Build Quarkus LangChain4j - name: Build Quarkus LangChain4j From d675b9142169ae27e0fd384d1cc41d9c5e343e12 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 19 Dec 2025 12:10:05 +0200 Subject: [PATCH 15/19] Add GPULlama3 build and versioning step to Quarkus-LangChain4j workflow --- .../integration-quarkus-langchain4j.yml | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index 601b61db..e098307d 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -84,24 +84,48 @@ jobs: which tornado || { echo "::error::tornado not in PATH"; exit 1; } tornado --devices - # Step 2: Clone Quarkus LangChain4j + # Step 2: Build GPULlama3.java + - name: Build GPULlama3.java + run: | + cd ${{ github.workspace }} + echo "Using TORNADOVM_HOME=$TORNADOVM_HOME" + export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" + tornado --version + + # Append SNAPSHOT to GPULlama3 version + GPULLAMA3_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout) + GPULLAMA3_VERSION="${GPULLAMA3_VERSION}-SNAPSHOT" + echo "GPULlama3 version: $GPULLAMA3_VERSION" + ./mvnw versions:set -DnewVersion=$GPULLAMA3_VERSION + + # Build + ./mvnw clean install -DskipTests + + # Save GPULlama3.java version for subsequent steps + echo "GPULLAMA3_VERSION=$GPULLAMA3_VERSION" >> $GITHUB_ENV + + # Step 3: Clone Quarkus LangChain4j - name: Clone Quarkus LangChain4j run: | cd ${{ github.workspace }} git clone https://github.com/quarkiverse/quarkus-langchain4j.git - # Step 3: Build Quarkus LangChain4j + # Step 4: Build Quarkus LangChain4j with current GPULlama3.java - name: Build Quarkus LangChain4j run: | cd ${{ github.workspace }}/quarkus-langchain4j export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" + # Update the GPULlama3 version used by quarkus-langchain4j + RUNTIME_POM="model-providers/gpu-llama3/runtime/pom.xml" + sed -i 's/${gpu-llama3.version}<\/version>/'$GPULLAMA3_VERSION'<\/version>/' "$RUNTIME_POM" + # Use reactor to build *only *GPULlama3 integration test + dependencies # This recompiles everything with the same Java version, avoiding compatibility issues # The -Dtornado flag activates the TornadoVM profile which includes gpu-llama3 module mvn clean install -pl integration-tests/gpu-llama3 -am -DskipTests -Dtornado - # Step 4: Start Quarkus Application and Wait for Startup + # Step 5: Start Quarkus Application and Wait for Startup - name: Start Quarkus Application and Wait for Startup run: | cd ${{ github.workspace }}/quarkus-langchain4j/integration-tests/gpu-llama3 @@ -143,7 +167,7 @@ jobs: fi done - # Step 5: Run test 1 + # Step 6: Run test 1 - name: Trigger Blocking Endpoint run: | # Trigger endpoint @@ -160,7 +184,7 @@ jobs: echo "HTTP Response body: $HTTP_RESPONSE_BODY" fi - # Step 6: Run test 2 + # Step 7: Run test 2 - name: Trigger Streaming Endpoint run: | # Trigger endpoint @@ -177,7 +201,7 @@ jobs: echo "HTTP Response body: $HTTP_RESPONSE_BODY" fi - # Step 7: Cleanup & Shutdown + # Step 8: Cleanup & Shutdown - name: Cleanup & Shutdown run: | # Clean shutdown From 18f1cd5affb32828c4a5327ad71c8872a0655292 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 19 Dec 2025 16:34:26 +0200 Subject: [PATCH 16/19] Add retry mechanism for Blocking Endpoint test in Quarkus-LangChain4j workflow --- .../integration-quarkus-langchain4j.yml | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index e098307d..478e3d32 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -169,19 +169,41 @@ jobs: # Step 6: Run test 1 - name: Trigger Blocking Endpoint - run: | - # Trigger endpoint - HTTP_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/blocking) - HTTP_RESPONSE_CODE="${HTTP_RESPONSE: -3}" - HTTP_RESPONSE_BODY="$HTTP_RESPONSE%???}" - - # Check response code - if [ "$HTTP_RESPONSE_CODE" != "200" ]; then - echo "ERROR: Blocking endpoint returned HTTP code $HTTP_RESPONSE_CODE" + run: | + MAX_ATTEMPTS=3 + ATTEMPT=1 + SUCCESS=false + + while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do + echo "Attempt $ATTEMPT of $MAX_ATTEMPTS for blocking endpoint..." + + # Trigger endpoint + HTTP_RESPONSE=$(curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/blocking) + HTTP_RESPONSE_CODE="${HTTP_RESPONSE: -3}" + HTTP_RESPONSE_BODY="${HTTP_RESPONSE%???}" + + # Check response code + if [ "$HTTP_RESPONSE_CODE" = "200" ]; then + echo "SUCCESS: Blocking endpoint returned HTTP code: $HTTP_RESPONSE_CODE" + echo "HTTP Response body: $HTTP_RESPONSE_BODY" + SUCCESS=true + break + else + echo "Attempt $ATTEMPT failed: Blocking endpoint returned HTTP code $HTTP_RESPONSE_CODE" + echo "Response body: $HTTP_RESPONSE_BODY" + + if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then + echo "Retrying in 2 seconds..." + sleep 2 + fi + fi + + ATTEMPT=$((ATTEMPT + 1)) + done + + if [ "$SUCCESS" = false ]; then + echo "ERROR: Blocking endpoint failed after $MAX_ATTEMPTS attempts" exit 1 - else - echo "SUCCESS: Blocking endpoint returned HTTP code: ${HTTP_RESPONSE: -3}" - echo "HTTP Response body: $HTTP_RESPONSE_BODY" fi # Step 7: Run test 2 From cf5863cbe02857023772e92bd6c4b356a426b27a Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 19 Dec 2025 17:00:08 +0200 Subject: [PATCH 17/19] Add retry mechanism for Streaming Endpoint test in Quarkus-LangChain4j workflow --- .../integration-quarkus-langchain4j.yml | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index 478e3d32..bdd9e175 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -209,19 +209,41 @@ jobs: # Step 7: Run test 2 - name: Trigger Streaming Endpoint run: | - # Trigger endpoint - HTTP_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/streaming) - HTTP_RESPONSE_CODE="${HTTP_RESPONSE: -3}" - HTTP_RESPONSE_BODY="$HTTP_RESPONSE%???}" + MAX_ATTEMPTS=3 + ATTEMPT=1 + SUCCESS=false - # Check response code - if [ "$HTTP_RESPONSE_CODE" != "200" ]; then - echo "ERROR: Streaming endpoint returned HTTP code $HTTP_RESPONSE_CODE" - exit 1 - else - echo "SUCCESS: Streaming endpoint returned HTTP code: ${HTTP_RESPONSE: -3}" - echo "HTTP Response body: $HTTP_RESPONSE_BODY" - fi + while [ $ATTEMPT -le $MAX_ATTEMPTS ]; do + echo "Attempt $ATTEMPT of $MAX_ATTEMPTS for streaming endpoint..." + + # Trigger endpoint + HTTP_RESPONSE=$(timeout 10s curl -s -w "%{http_code}" http://localhost:$QUARKUS_PORT/chat/streaming) + HTTP_RESPONSE_CODE="${HTTP_RESPONSE: -3}" + #HTTP_RESPONSE_BODY="$HTTP_RESPONSE%???}" + + # Check response code + if [ "$HTTP_RESPONSE_CODE" == "200" ]; then + echo "SUCCESS: Streaming endpoint returned HTTP code: ${HTTP_RESPONSE: -3}" + # do not show ugly streaming response body + #echo "HTTP Response body: $HTTP_RESPONSE_BODY" + SUCCESS=true + break + else + echo "Attempt $ATTEMPT failed: Streaming endpoint returned HTTP code $HTTP_RESPONSE_CODE" + + if [ $ATTEMPT -lt $MAX_ATTEMPTS ]; then + echo "Retrying in 2 seconds..." + sleep 2 + fi + fi + + ATTEMPT=$((ATTEMPT + 1)) + done + + if [ "$SUCCESS" = false ]; then + echo "ERROR: Streaming endpoint failed after $MAX_ATTEMPTS attempts" + exit 1 + fi # Step 8: Cleanup & Shutdown - name: Cleanup & Shutdown From 09f41181942237bffa77b8bcbce251dc78480294 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 19 Dec 2025 17:07:45 +0200 Subject: [PATCH 18/19] Add GPULlama3 JAR verification step to Quarkus-LangChain4j workflow --- .github/workflows/integration-quarkus-langchain4j.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index bdd9e175..a5cfd47c 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -125,6 +125,13 @@ jobs: # The -Dtornado flag activates the TornadoVM profile which includes gpu-llama3 module mvn clean install -pl integration-tests/gpu-llama3 -am -DskipTests -Dtornado + # Step 4.5: Verify GPULlama3 JAR + - name: Verify GPULlama3 JAR + run: | + cd ${{ github.workspace }}/quarkus-langchain4j/integration-tests/gpu-llama3 + echo "GPULlama3 dependency used by Quarkus-LangChain4j:" + mvn dependency:tree | grep "io.github.beehive-lab:gpu-llama3" + # Step 5: Start Quarkus Application and Wait for Startup - name: Start Quarkus Application and Wait for Startup run: | From 3073c7d3251b4fc99f082aa5215c68c599e30550 Mon Sep 17 00:00:00 2001 From: Orion Papadakis Date: Fri, 19 Dec 2025 17:51:25 +0200 Subject: [PATCH 19/19] Update GPULlama3 versioning and verification steps in Quarkus-LangChain4j workflow --- .../integration-quarkus-langchain4j.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/integration-quarkus-langchain4j.yml b/.github/workflows/integration-quarkus-langchain4j.yml index a5cfd47c..8ee6e900 100644 --- a/.github/workflows/integration-quarkus-langchain4j.yml +++ b/.github/workflows/integration-quarkus-langchain4j.yml @@ -117,8 +117,8 @@ jobs: export PATH="$TORNADOVM_HOME/bin:$JAVA_HOME/bin:$PATH" # Update the GPULlama3 version used by quarkus-langchain4j - RUNTIME_POM="model-providers/gpu-llama3/runtime/pom.xml" - sed -i 's/${gpu-llama3.version}<\/version>/'$GPULLAMA3_VERSION'<\/version>/' "$RUNTIME_POM" + POM="pom.xml" + sed -i 's/.*<\/gpu-llama3\.version>/'$GPULLAMA3_VERSION'<\/gpu-llama3.version>/' "$POM" # Use reactor to build *only *GPULlama3 integration test + dependencies # This recompiles everything with the same Java version, avoiding compatibility issues @@ -126,7 +126,7 @@ jobs: mvn clean install -pl integration-tests/gpu-llama3 -am -DskipTests -Dtornado # Step 4.5: Verify GPULlama3 JAR - - name: Verify GPULlama3 JAR + - name: Verify GPULlama3 Dependency run: | cd ${{ github.workspace }}/quarkus-langchain4j/integration-tests/gpu-llama3 echo "GPULlama3 dependency used by Quarkus-LangChain4j:" @@ -245,12 +245,12 @@ jobs: fi ATTEMPT=$((ATTEMPT + 1)) - done + done - if [ "$SUCCESS" = false ]; then - echo "ERROR: Streaming endpoint failed after $MAX_ATTEMPTS attempts" - exit 1 - fi + if [ "$SUCCESS" = false ]; then + echo "ERROR: Streaming endpoint failed after $MAX_ATTEMPTS attempts" + exit 1 + fi # Step 8: Cleanup & Shutdown - name: Cleanup & Shutdown