diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index f3b1a1c..c2ee920 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -94,6 +94,96 @@ jobs: name: flatline_lsp_ubuntu2004_${{ matrix.build }}.zip path: dist/flatline_lsp_ubuntu2004_${{ matrix.build }}.zip + build-release-windows-latest: + runs-on: windows-latest + + env: + OPENBLAS_VERSION: 0.3.23 + + strategy: + matrix: + include: + - build: 'openblas' + defines: '-DLLAMA_BLAS=ON -DLLAMA_BLAS_VENDOR=OpenBLAS -DBLAS_INCLUDE_DIRS="$env:RUNNER_TEMP/openblas/include" -DBLAS_LIBRARIES="$env:RUNNER_TEMP/openblas/lib/openblas.lib"' + + steps: + - name: Clone + id: checkout + uses: actions/checkout@v1 + + - name: Common dependencies + id: depends + run: | + python3 -m pip install cmake + python3 -m pip install torch --index-url https://download.pytorch.org/whl/cpu + python3 -m pip install transformers==4.33.3 tiktoken pygls pyinstaller + + - name: Download OpenBLAS + id: get_openblas + if: ${{ matrix.build == 'openblas' }} + run: | + curl.exe -o $env:RUNNER_TEMP/openblas.zip -L "https://github.com/xianyi/OpenBLAS/releases/download/v${env:OPENBLAS_VERSION}/OpenBLAS-${env:OPENBLAS_VERSION}-x64.zip" + curl.exe -o $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt -L "https://github.com/xianyi/OpenBLAS/raw/v${env:OPENBLAS_VERSION}/LICENSE" + mkdir $env:RUNNER_TEMP/openblas + tar.exe -xvf $env:RUNNER_TEMP/openblas.zip -C $env:RUNNER_TEMP/openblas + $vcdir = $(vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath) + $msvc = $(join-path $vcdir $('VC\Tools\MSVC\'+$(gc -raw $(join-path $vcdir 'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt')).Trim())) + $lib = $(join-path $msvc 'bin\Hostx64\x64\lib.exe') + & $lib /machine:x64 "/def:${env:RUNNER_TEMP}/openblas/lib/libopenblas.def" "/out:${env:RUNNER_TEMP}/openblas/lib/openblas.lib" /name:openblas.dll + + - name: Build backend server + id: cmake_build_backend_server + run: | + cmake -B build_backend_server -S . -DLLAMA_NATIVE=OFF ${{ matrix.defines }} + cmake --build build_backend_server --config Release + + - name: Add libopenblas.dll + id: add_libopenblas_dll + if: ${{ matrix.build == 'openblas' }} + run: | + cp $env:RUNNER_TEMP/openblas/bin/libopenblas.dll ./build_backend_server/bin/Release/openblas.dll + cp $env:RUNNER_TEMP/OpenBLAS.LICENSE.txt ./build_backend_server/bin/Release/OpenBLAS-${env:OPENBLAS_VERSION}.txt + + - name: Build lsp server + id: pyinstaller_build_lsp_server + shell: bash + run: | + pyinstaller flatline_lsp.py \ + --copy-metadata tqdm \ + --copy-metadata regex \ + --copy-metadata requests \ + --copy-metadata packaging \ + --copy-metadata filelock \ + --copy-metadata numpy \ + --copy-metadata tokenizers \ + --copy-metadata huggingface-hub \ + --copy-metadata safetensors \ + --copy-metadata pyyaml \ + --copy-metadata torch \ + --hidden-import=tiktoken_ext.openai_public \ + --hidden-import=tiktoken_ext \ + ; + + - name: Make package + id: make_package + shell: bash + run: | + mkdir -p ./dist/flatline_lsp/_internal/flatline/model_data + mkdir -p ./dist/flatline_lsp/_internal/flatline/backend_server + find build_backend_server + mv build_backend_server/bin/Release/flatline-server.exe ./dist/flatline_lsp/_internal/flatline/backend_server/flatline-server.exe + mkdir -p ./dist/flatline_lsp/license + find build_backend_server/bin/Release -name \*.LICENSE.txt | xargs -I{} cp {} ./dist/flatline_lsp/license/ + cd dist + 7z a flatline_lsp_windows_${{ matrix.build }}.zip flatline_lsp + + - name: Upload package + id: upload_package + uses: actions/upload-artifact@v3 + with: + name: flatline_lsp_windows_${{ matrix.build }}.zip + path: dist/flatline_lsp_windows_${{ matrix.build }}.zip + create-release: runs-on: ubuntu-latest needs: [build-release-ubuntu-2004] @@ -121,8 +211,8 @@ jobs: draft: false prerelease: true - - name: Upload release openblas asset - id: upload_release_openblas_asset + - name: Upload release ubuntu2004 openblas asset + id: upload_release_ubuntu2004_openblas_asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -132,8 +222,8 @@ jobs: asset_name: flatline_lsp_ubuntu2004_openblas.zip asset_content_type: application/zip - - name: Upload release cublas asset - id: upload_release_cublas_asset + - name: Upload release ubuntu2004 cublas asset + id: upload_release_ubuntu2004_cublas_asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -143,6 +233,17 @@ jobs: asset_name: flatline_lsp_ubuntu2004_cublas.zip asset_content_type: application/zip + - name: Upload release windows openblas asset + id: upload_release_windows_openblas_asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: flatline_lsp_windows_openblas.zip/flatline_lsp_windows_openblas.zip + asset_name: flatline_lsp_windows_openblas.zip + asset_content_type: application/zip + test-on-ubuntu-2004: runs-on: ubuntu-20.04 needs: [create-release] diff --git a/CMakeLists.txt b/CMakeLists.txt index 640d00e..a0cd0d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ target_link_libraries(httplib INTERFACE Threads::Threads) add_executable(${PROJECT_NAME}-server ${CMAKE_CURRENT_SOURCE_DIR}/flatline_server.cpp) set_target_properties(${PROJECT_NAME}-server PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin") -target_link_libraries(${PROJECT_NAME}-server PRIVATE llama ggml httplib jsoncpp_static structopt spdlog::spdlog "stdc++fs") +target_link_libraries(${PROJECT_NAME}-server PRIVATE llama ggml httplib jsoncpp_static structopt spdlog::spdlog) add_custom_command( TARGET ${PROJECT_NAME}-server POST_BUILD