Skip to content

Extract extract_first_embedding_row from embed() into jni_server_help… #147

Extract extract_first_embedding_row from embed() into jni_server_help…

Extract extract_first_embedding_row from embed() into jni_server_help… #147

Workflow file for this run

name: Build, Test and Release
on:
pull_request:
workflow_dispatch:
inputs:
release_to_maven_central:
description: 'Release to Maven Central (true/false)'
required: false
default: 'false'
release:
types: [ created ]
env:
MODEL_URL: "https://huggingface.co/TheBloke/CodeLlama-7B-GGUF/resolve/main/codellama-7b.Q2_K.gguf"
MODEL_NAME: "codellama-7b.Q2_K.gguf"
RERANKING_MODEL_URL: "https://huggingface.co/gpustack/jina-reranker-v1-tiny-en-GGUF/resolve/main/jina-reranker-v1-tiny-en-Q4_0.gguf"
RERANKING_MODEL_NAME: "jina-reranker-v1-tiny-en-Q4_0.gguf"
DRAFT_MODEL_URL: "https://huggingface.co/QuantFactory/AMD-Llama-135m-code-GGUF/resolve/main/AMD-Llama-135m-code.Q2_K.gguf"
DRAFT_MODEL_NAME: "AMD-Llama-135m-code.Q2_K.gguf"
jobs:
# ---------------------------------------------------------------------------
# Cross-compile jobs (Docker / dockcross) — produce release artifacts, no testing
# ---------------------------------------------------------------------------
crosscompile-linux-x86_64-cuda:
name: Cross-Compile manylinux_2_28 x86_64 (CUDA)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: bash
run: |
echo "=== Host CPU Information ==="
lscpu
echo ""
echo "=== CPU Details from /proc/cpuinfo ==="
cat /proc/cpuinfo
- name: Build libraries
shell: bash
run: |
.github/dockcross/dockcross-manylinux_2_28-x64 .github/build_cuda_linux.sh "-DOS_NAME=Linux -DOS_ARCH=x86_64"
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: linux-libraries-cuda
path: ${{ github.workspace }}/src/main/resources_linux_cuda/de/kherud/llama/
crosscompile-linux-x86_64:
name: Cross-Compile manylinux2014 x86_64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: bash
run: |
echo "=== Host CPU Information ==="
lscpu
echo ""
echo "=== CPU Details from /proc/cpuinfo ==="
cat /proc/cpuinfo
- name: Build libraries
shell: bash
run: |
.github/dockcross/dockcross-manylinux2014-x64 .github/build.sh "-DOS_NAME=Linux -DOS_ARCH=x86_64"
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: Linux-x86_64-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
crosscompile-linux-aarch64:
name: Cross-Compile Linux aarch64 (LTS)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: bash
run: |
echo "=== Host CPU Information ==="
lscpu
echo ""
echo "=== CPU Details from /proc/cpuinfo ==="
cat /proc/cpuinfo
- name: Build libraries
shell: bash
run: |
.github/dockcross/dockcross-linux-arm64-lts .github/build.sh "-DOS_NAME=Linux -DOS_ARCH=aarch64"
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: Linux-aarch64-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
crosscompile-android-aarch64:
name: Cross-Compile Android aarch64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: bash
run: |
echo "=== Host CPU Information ==="
lscpu
echo ""
echo "=== CPU Details from /proc/cpuinfo ==="
cat /proc/cpuinfo
- name: Build libraries
shell: bash
run: |
.github/dockcross/dockcross-android-arm64 .github/build.sh "-DANDROID_PLATFORM=android-24 -DOS_NAME=Linux-Android -DOS_ARCH=aarch64"
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: Linux-Android-aarch64-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
# ---------------------------------------------------------------------------
# Native build jobs — produce release artifacts + run C++ unit tests
# ---------------------------------------------------------------------------
build-macos-arm64-no-metal:
name: Build and Test macOS 15 arm64 (no Metal)
runs-on: macos-15
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Display CPU Info
shell: bash
run: |
echo "=== CPU Information ==="
sysctl hw.model hw.cachelinesize hw.cpufrequency hw.cachesize hw.physicalcpu hw.logicalcpu hw.packages hw.memsize hw.ncpu 2>/dev/null || true
echo ""
echo "=== Processor Details ==="
system_profiler SPHardwareDataType
- name: Build libraries
shell: bash
run: |
mvn compile
.github/build.sh -DLLAMA_METAL=OFF -DGGML_NATIVE=OFF -DBUILD_TESTING=ON
- name: Run C++ unit tests
run: ctest --test-dir build --output-on-failure
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: macos-15-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
build-macos-arm64-metal:
name: Build and Test macOS 14 arm64 (Metal)
runs-on: macos-14
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Display CPU Info
shell: bash
run: |
echo "=== CPU Information ==="
sysctl hw.model hw.cachelinesize hw.cpufrequency hw.cachesize hw.physicalcpu hw.logicalcpu hw.packages hw.memsize hw.ncpu 2>/dev/null || true
echo ""
echo "=== Processor Details ==="
system_profiler SPHardwareDataType
- name: Build libraries
shell: bash
run: |
mvn compile
.github/build.sh -DLLAMA_METAL_EMBED_LIBRARY=ON -DBUILD_TESTING=ON
- name: Run C++ unit tests
run: ctest --test-dir build --output-on-failure
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: macos-14-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
build-windows-x86_64:
name: Build and Test Windows 2022 x86_64
runs-on: windows-2022
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: pwsh
run: |
Write-Host "=== CPU Information (Get-CimInstance - All Properties) ==="
Get-CimInstance Win32_Processor | Select-Object * | Format-List
Write-Host ""
Write-Host "=== CPU Information (systeminfo) ==="
systeminfo | Select-String "Processor"
Write-Host ""
Write-Host "=== CPU Information (Get-ComputerInfo) ==="
Get-ComputerInfo -Property "CsProcessors*" 2>$null || Write-Host "Get-ComputerInfo not available"
- name: Build libraries
shell: cmd
run: |
.github\build.bat -G "Visual Studio 17 2022" -A "x64" -DOS_NAME=Windows -DOS_ARCH=x86_64 -DBUILD_TESTING=ON
- name: Run C++ unit tests
run: ctest --test-dir build --output-on-failure
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: Windows-x86_64-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
build-windows-x86:
name: Build and Test Windows 2022 x86
runs-on: windows-2022
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: pwsh
run: |
Write-Host "=== CPU Information (Get-CimInstance - All Properties) ==="
Get-CimInstance Win32_Processor | Select-Object * | Format-List
Write-Host ""
Write-Host "=== CPU Information (systeminfo) ==="
systeminfo | Select-String "Processor"
Write-Host ""
Write-Host "=== CPU Information (Get-ComputerInfo) ==="
Get-ComputerInfo -Property "CsProcessors*" 2>$null || Write-Host "Get-ComputerInfo not available"
- name: Build libraries
shell: cmd
run: |
.github\build.bat -G "Visual Studio 17 2022" -A "Win32" -DOS_NAME=Windows -DOS_ARCH=x86 -DBUILD_TESTING=ON
- name: Run C++ unit tests
run: ctest --test-dir build --output-on-failure
- name: Upload artifacts
uses: actions/upload-artifact@v6
with:
name: Windows-x86-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
# ---------------------------------------------------------------------------
# CI-only jobs — no release artifact, purely for test coverage
# ---------------------------------------------------------------------------
test-cpp-linux-x86_64:
name: C++ Tests Ubuntu Latest x86_64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Display CPU Info
run: |
echo "=== CPU Information ==="
lscpu
echo ""
echo "=== CPU Details from /proc/cpuinfo ==="
cat /proc/cpuinfo
- name: Build libraries
run: |
mvn -q compile
.github/build.sh -DBUILD_TESTING=ON
- name: Run C++ unit tests
run: ctest --test-dir build --output-on-failure
test-macos-arm64-metal-15:
name: Build and Test macOS 15 arm64 (Metal)
runs-on: macos-15
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Display CPU Info
shell: bash
run: |
echo "=== CPU Information ==="
sysctl hw.model hw.cachelinesize hw.cpufrequency hw.cachesize hw.physicalcpu hw.logicalcpu hw.packages hw.memsize hw.ncpu 2>/dev/null || true
echo ""
echo "=== Processor Details ==="
system_profiler SPHardwareDataType
- name: Build libraries
shell: bash
run: |
mvn compile
.github/build.sh -DLLAMA_METAL_EMBED_LIBRARY=ON -DGGML_NATIVE=OFF -DBUILD_TESTING=ON
- name: Run C++ unit tests
run: ctest --test-dir build --output-on-failure
- name: Download text generation model
run: curl -L --fail ${MODEL_URL} --create-dirs -o models/${MODEL_NAME}
- name: Download reranking model
run: curl -L --fail ${RERANKING_MODEL_URL} --create-dirs -o models/${RERANKING_MODEL_NAME}
- name: Download draft model
run: curl -L --fail ${DRAFT_MODEL_URL} --create-dirs -o models/${DRAFT_MODEL_NAME}
- name: List files in models directory
run: ls -l models/
- name: Validate model files
run: bash .github/validate-models.sh
- name: Enable core dumps
run: ulimit -c unlimited
- name: Run Java tests
run: mvn --no-transfer-progress test
- name: Memory after tests
if: always()
run: vm_stat && sysctl hw.memsize hw.physmem
- if: failure()
uses: actions/upload-artifact@v6
with:
name: error-log-macos-15-metal
path: |
${{ github.workspace }}/hs_err_pid*.log
${{ github.workspace }}/target/surefire-reports/*.dump
${{ github.workspace }}/target/surefire-reports/*.dumpstream
if-no-files-found: warn
# ---------------------------------------------------------------------------
# Java test jobs — download release artifact, run mvn test
# ---------------------------------------------------------------------------
test-java-linux-x86_64:
name: Java Tests Ubuntu Latest x86_64
needs: crosscompile-linux-x86_64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: bash
run: |
echo "=== CPU Information ==="
lscpu
echo ""
echo "=== CPU Details from /proc/cpuinfo ==="
cat /proc/cpuinfo
- uses: actions/download-artifact@v6
with:
name: Linux-x86_64-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
- name: Download text generation model
run: curl -L --fail ${MODEL_URL} --create-dirs -o models/${MODEL_NAME}
- name: Download reranking model
run: curl -L --fail ${RERANKING_MODEL_URL} --create-dirs -o models/${RERANKING_MODEL_NAME}
- name: Download draft model
run: curl -L --fail ${DRAFT_MODEL_URL} --create-dirs -o models/${DRAFT_MODEL_NAME}
- name: List files in models directory
run: ls -l models/
- name: Validate model files
run: bash .github/validate-models.sh
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Memory before tests
run: free -h
- name: Enable core dumps
run: |
ulimit -c unlimited
echo "${{ github.workspace }}/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern
- name: Run tests
run: mvn --no-transfer-progress test
- name: Memory after tests
if: always()
run: free -h
- if: failure()
uses: actions/upload-artifact@v6
with:
name: error-log-linux-x86_64
path: |
${{ github.workspace }}/hs_err_pid*.log
${{ github.workspace }}/core.*
${{ github.workspace }}/target/surefire-reports/*.dump
${{ github.workspace }}/target/surefire-reports/*.dumpstream
if-no-files-found: warn
test-java-macos-arm64-metal:
name: Java Tests macOS 14 arm64 (Metal)
needs: build-macos-arm64-metal
runs-on: macos-14
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: bash
run: |
echo "=== CPU Information ==="
sysctl hw.model hw.cachelinesize hw.cpufrequency hw.cachesize hw.physicalcpu hw.logicalcpu hw.packages hw.memsize hw.ncpu 2>/dev/null || true
echo ""
echo "=== Processor Details ==="
system_profiler SPHardwareDataType
- uses: actions/download-artifact@v6
with:
name: macos-14-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
- name: Download text generation model
run: curl -L --fail ${MODEL_URL} --create-dirs -o models/${MODEL_NAME}
- name: Download reranking model
run: curl -L --fail ${RERANKING_MODEL_URL} --create-dirs -o models/${RERANKING_MODEL_NAME}
- name: Download draft model
run: curl -L --fail ${DRAFT_MODEL_URL} --create-dirs -o models/${DRAFT_MODEL_NAME}
- name: List files in models directory
run: ls -l models/
- name: Validate model files
run: bash .github/validate-models.sh
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Memory before tests
run: vm_stat && sysctl hw.memsize hw.physmem
- name: Enable core dumps
run: ulimit -c unlimited
- name: Run tests
run: mvn --no-transfer-progress -Dde.kherud.llama.test.ngl=0 test
- name: Memory after tests
if: always()
run: vm_stat && sysctl hw.memsize hw.physmem
- if: failure()
uses: actions/upload-artifact@v6
with:
name: error-log-macos-14-metal
path: |
${{ github.workspace }}/hs_err_pid*.log
${{ github.workspace }}/target/surefire-reports/*.dump
${{ github.workspace }}/target/surefire-reports/*.dumpstream
if-no-files-found: warn
test-java-macos-arm64-no-metal:
name: Java Tests macOS 15 arm64 (no Metal)
needs: build-macos-arm64-no-metal
runs-on: macos-15
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: bash
run: |
echo "=== CPU Information ==="
sysctl hw.model hw.cachelinesize hw.cpufrequency hw.cachesize hw.physicalcpu hw.logicalcpu hw.packages hw.memsize hw.ncpu 2>/dev/null || true
echo ""
echo "=== Processor Details ==="
system_profiler SPHardwareDataType
- uses: actions/download-artifact@v6
with:
name: macos-15-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
- name: Download text generation model
run: curl -L --fail ${MODEL_URL} --create-dirs -o models/${MODEL_NAME}
- name: Download reranking model
run: curl -L --fail ${RERANKING_MODEL_URL} --create-dirs -o models/${RERANKING_MODEL_NAME}
- name: Download draft model
run: curl -L --fail ${DRAFT_MODEL_URL} --create-dirs -o models/${DRAFT_MODEL_NAME}
- name: List files in models directory
run: ls -l models/
- name: Validate model files
run: bash .github/validate-models.sh
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Memory before tests
run: vm_stat && sysctl hw.memsize hw.physmem
- name: Enable core dumps
run: ulimit -c unlimited
- name: Run tests
run: mvn --no-transfer-progress test
- name: Memory after tests
if: always()
run: vm_stat && sysctl hw.memsize hw.physmem
- if: failure()
uses: actions/upload-artifact@v6
with:
name: error-log-macos-15-no-metal
path: |
${{ github.workspace }}/hs_err_pid*.log
${{ github.workspace }}/target/surefire-reports/*.dump
${{ github.workspace }}/target/surefire-reports/*.dumpstream
if-no-files-found: warn
test-java-windows-x86_64:
name: Java Tests Windows Latest x86_64
needs: build-windows-x86_64
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- name: Display CPU Info
shell: pwsh
run: |
Write-Host "=== CPU Information (Get-CimInstance - All Properties) ==="
Get-CimInstance Win32_Processor | Select-Object * | Format-List
Write-Host ""
Write-Host "=== CPU Information (systeminfo) ==="
systeminfo | Select-String "Processor"
Write-Host ""
Write-Host "=== CPU Information (Get-ComputerInfo) ==="
Get-ComputerInfo -Property "CsProcessors*" 2>$null || Write-Host "Get-ComputerInfo not available"
- uses: actions/download-artifact@v6
with:
name: Windows-x86_64-libraries
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
- name: Download text generation model
run: curl -L --fail $env:MODEL_URL --create-dirs -o models/$env:MODEL_NAME
- name: Download reranking model
run: curl -L --fail $env:RERANKING_MODEL_URL --create-dirs -o models/$env:RERANKING_MODEL_NAME
- name: Download draft model
run: curl -L --fail $env:DRAFT_MODEL_URL --create-dirs -o models/$env:DRAFT_MODEL_NAME
- name: List files in models directory
run: ls -l models/
- name: Validate model files
run: .github\validate-models.bat
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Memory before tests
run: Get-CimInstance Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize | Format-List
shell: pwsh
- name: Run tests
run: mvn --no-transfer-progress test
- name: Memory after tests
if: always()
run: Get-CimInstance Win32_OperatingSystem | Select-Object FreePhysicalMemory,TotalVisibleMemorySize | Format-List
shell: pwsh
- if: failure()
uses: actions/upload-artifact@v6
with:
name: windows-output
path: |
${{ github.workspace }}\hs_err_pid*.log
${{ github.workspace }}\target\surefire-reports\*.dump
${{ github.workspace }}\target\surefire-reports\*.dumpstream
${{ github.workspace }}/src/main/resources/de/kherud/llama/**/*
if-no-files-found: warn
# ---------------------------------------------------------------------------
# Package and publish
# ---------------------------------------------------------------------------
package:
name: Package JARs
needs:
- crosscompile-linux-x86_64-cuda
- crosscompile-linux-aarch64
- crosscompile-android-aarch64
- build-windows-x86
- test-cpp-linux-x86_64
- test-macos-arm64-metal-15
- test-java-linux-x86_64
- test-java-macos-arm64-metal
- test-java-macos-arm64-no-metal
- test-java-windows-x86_64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v6
with:
pattern: "*-libraries"
merge-multiple: true
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
- uses: actions/download-artifact@v6
with:
name: linux-libraries-cuda
path: ${{ github.workspace }}/src/main/resources_linux_cuda/de/kherud/llama/
- uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '8'
- name: Build JARs
run: mvn --batch-mode --no-transfer-progress -P release -Dmaven.test.skip=true -Dgpg.skip=true package
- name: Upload JARs
uses: actions/upload-artifact@v6
with:
name: llama-jars
path: target/*.jar
publish:
if: ${{ github.event_name == 'release' || github.event.inputs.release_to_maven_central == 'true' }}
needs: [ package ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/download-artifact@v6
with:
pattern: "*-libraries"
merge-multiple: true
path: ${{ github.workspace }}/src/main/resources/de/kherud/llama/
- uses: actions/download-artifact@v6
with:
name: linux-libraries-cuda
path: ${{ github.workspace }}/src/main/resources_linux_cuda/de/kherud/llama/
- name: Set up Maven Central Repository
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'zulu'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }}
gpg-passphrase: MAVEN_GPG_PASSPHRASE
- name: Publish package
run: mvn --batch-mode -P release -Dmaven.test.skip=true deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}