name: Koboldcpp Windows Full Binaries CUDA 12

on: workflow_dispatch
env:
  BRANCH_NAME: ${{ github.head_ref || github.ref_name }}

jobs:
  windows:
    runs-on: windows-2019
    steps:
      - name: Clone
        id: checkout
        uses: actions/checkout@v3
        with:
          ref: ${{ github.head_ref || github.ref_name }}

      - name: Get Python
        uses: actions/setup-python@v2
        with:
          python-version: 3.8.10

      - name: Install python dependencies
        run: |
          python -m pip install --upgrade pip
          pip install customtkinter==5.2.0 pyinstaller==5.11.0 psutil==5.9.5

      - name: Download and install win64devkit
        run: |
          curl -L https://github.com/skeeto/w64devkit/releases/download/v1.22.0/w64devkit-1.22.0.zip --output w64devkit.zip
          Expand-Archive w64devkit.zip -DestinationPath .

      - name: Add w64devkit to PATH
        run: |
          echo "$(Get-Location)\w64devkit\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8

      - name: Build Non-CUDA
        id: make_build
        run: |
          make -j ${env:NUMBER_OF_PROCESSORS}

      - uses: Jimver/cuda-toolkit@v0.2.15
        id: cuda-toolkit
        with:
          cuda: '12.1.0'

      - name: Build CUDA
        id: cmake_build
        run: |
          mkdir build
          cd build
          cmake .. -DLLAMA_CUBLAS=ON -DCMAKE_SYSTEM_VERSION="10.0.19041.0"
          cmake --build . --config Release -j $((${env:NUMBER_OF_PROCESSORS} - 1))
          mv bin/Release/koboldcpp_cublas.dll ../koboldcpp_cublas.dll
          cd ..

      # note: The libraries that come from the github cuda directory seem to be larger, so they are not recommended
      # - name: Download CuBLAS Libraries
      #   run: |
      #     curl -L https://github.com/LostRuins/koboldcpp/releases/download/cuda11_cublas_libraries/cublas64_11.dll --output cublas64_11.dll
      #     curl -L https://github.com/LostRuins/koboldcpp/releases/download/cuda11_cublas_libraries/cublasLt64_11.dll --output cublasLt64_11.dll
      #     ls
      - name: Copy CuBLAS Libraries
        run: |
          copy "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\cublasLt64_12.dll" .
          copy "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin\cublas64_12.dll" .
          ls

      - name: Package PyInstallers
        id: make_pyinstaller
        run: |
          ./make_pyinstaller_cuda12.bat

      - name: Save artifact
        uses: actions/upload-artifact@v3
        with:
          name: kcpp_windows_pyinstallers
          path: dist/
