From abf25c84dcef5d04244763622b427a3fe180c8b0 Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Sat, 22 Nov 2025 00:18:45 +0000 Subject: [PATCH 1/8] Testing on staging runners --- .github/workflows/cleanup_caches.yml | 2 +- .github/workflows/coverity.yml | 4 ++-- .github/workflows/linux.yml | 34 ++++++++++++++-------------- .github/workflows/mac.yml | 2 +- .github/workflows/manylinux_2_28.yml | 14 ++++++------ .github/workflows/windows.yml | 28 +++++++++++------------ 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/.github/workflows/cleanup_caches.yml b/.github/workflows/cleanup_caches.yml index 3bbbb1246e..db1b07b8a3 100644 --- a/.github/workflows/cleanup_caches.yml +++ b/.github/workflows/cleanup_caches.yml @@ -10,7 +10,7 @@ permissions: read-all jobs: Cleanup_OV_CACHE: name: Cleanup OV_CACHE - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st if: ${{ github.repository_owner == 'openvinotoolkit' }} container: image: openvinogithubactions.azurecr.io/dockerhub/ubuntu:20.04 diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index c4a19e7090..cb0a41a5c7 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -30,7 +30,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: 'openvinogithubactions.azurecr.io/openvino_provider:0.1.0' volumes: @@ -70,7 +70,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-16-cores-64gb + runs-on: aks-linux-16-cores-64gb-st container: image: openvinogithubactions.azurecr.io/ov_build/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a4ad20710b..730faf8ec9 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -80,7 +80,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: 'openvinogithubactions.azurecr.io/openvino_provider:0.1.0' volumes: @@ -124,7 +124,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -247,7 +247,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -329,7 +329,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: openvinogithubactions.azurecr.io/library/python:3.12-slim volumes: @@ -383,7 +383,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -454,7 +454,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -554,7 +554,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-8-cores-64gb + runs-on: aks-linux-8-cores-64gb-st container: image: openvinogithubactions.azurecr.io/ov_test/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -608,36 +608,36 @@ jobs: marker: 'llm' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).LLM_samples.test }} - runner: 'aks-linux-4-cores-16gb' + runner: 'aks-linux-4-cores-16gb-st' - name: 'Whisper' marker: 'whisper' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Whisper_samples.test }} - runner: 'aks-linux-4-cores-16gb' + runner: 'aks-linux-4-cores-16gb-st' - name: 'dreamlike_anime_1_0' marker: 'dreamlike_anime_1_0' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-linux-8-cores-32gb' + runner: 'aks-linux-8-cores-32gb-st' - name: 'LCM_Dreamshaper_v7_int8_ov' marker: 'LCM_Dreamshaper_v7_int8_ov' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-linux-4-cores-16gb' + runner: 'aks-linux-4-cores-16gb-st' - name: 'VLM' marker: 'vlm' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).VLM_samples.test }} - runner: 'aks-linux-8-cores-64gb' + runner: 'aks-linux-8-cores-64gb-st' - name: 'Rag' marker: 'rag' cmd: 'tests/python_tests/samples' - runner: 'aks-linux-4-cores-16gb' + runner: 'aks-linux-4-cores-16gb-st' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG_samples.test }} - name: 'Speech generation' marker: 'speech_generation' cmd: 'tests/python_tests/samples' - runner: 'aks-linux-4-cores-16gb' + runner: 'aks-linux-4-cores-16gb-st' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Speech_generation_samples.test }} timeout-minutes: 120 @@ -741,7 +741,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_test/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -814,7 +814,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_test/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -880,7 +880,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index 86dedec156..89657de2d1 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -71,7 +71,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: 'openvinogithubactions.azurecr.io/openvino_provider:0.1.0' volumes: diff --git a/.github/workflows/manylinux_2_28.yml b/.github/workflows/manylinux_2_28.yml index 1be636623b..3eb6cbe645 100644 --- a/.github/workflows/manylinux_2_28.yml +++ b/.github/workflows/manylinux_2_28.yml @@ -80,7 +80,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: 'openvinogithubactions.azurecr.io/openvino_provider:0.1.0' volumes: @@ -121,7 +121,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/manylinux_2_28:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -238,7 +238,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/manylinux_2_28:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -319,7 +319,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_build/manylinux_2_28:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -382,7 +382,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: openvinogithubactions.azurecr.io/library/python:3.12-slim volumes: @@ -492,7 +492,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-8-cores-64gb + runs-on: aks-linux-8-cores-64gb-st container: image: openvinogithubactions.azurecr.io/ov_test/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: @@ -542,7 +542,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-4-cores-16gb + runs-on: aks-linux-4-cores-16gb-st container: image: openvinogithubactions.azurecr.io/ov_test/ubuntu_22_04_x64:${{ needs.openvino_download.outputs.docker_tag }} volumes: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 93a03be433..53cedc84a4 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -75,7 +75,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: 'openvinogithubactions.azurecr.io/openvino_provider:0.1.0' volumes: @@ -104,7 +104,7 @@ jobs: defaults: run: shell: pwsh - runs-on: aks-win-8-cores-16gb + runs-on: aks-win-8-cores-16gb-st env: CMAKE_GENERATOR: 'Ninja' # Ninja is the only Windows native generator supported by ccache OV_INSTALL_DIR: ${{ github.workspace }}\install\ov @@ -290,7 +290,7 @@ jobs: defaults: run: shell: pwsh - runs-on: aks-win-8-cores-16gb + runs-on: aks-win-8-cores-16gb-st env: OV_INSTALL_DIR: ${{ github.workspace }}\ov SRC_DIR: ${{ github.workspace }}\src @@ -443,7 +443,7 @@ jobs: defaults: run: shell: bash - runs-on: aks-linux-medium + runs-on: aks-linux-medium-st container: image: openvinogithubactions.azurecr.io/library/python:3.12-slim volumes: @@ -491,7 +491,7 @@ jobs: defaults: run: shell: pwsh - runs-on: aks-win-4-cores-8gb + runs-on: aks-win-4-cores-8gb-st env: OV_INSTALL_DIR: ${{ github.workspace }}/install/ov SRC_DIR: ${{ github.workspace }}/src @@ -543,7 +543,7 @@ jobs: defaults: run: shell: pwsh - runs-on: aks-win-4-cores-8gb + runs-on: aks-win-4-cores-8gb-st env: OV_INSTALL_DIR: ${{ github.workspace }}/ov @@ -643,7 +643,7 @@ jobs: defaults: run: shell: pwsh - runs-on: aks-win-16-cores-32gb + runs-on: aks-win-16-cores-32gb-st env: INSTALL_DIR: ${{ github.workspace }}/install SRC_DIR: ${{ github.workspace }}/src @@ -696,31 +696,31 @@ jobs: marker: 'llm' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).LLM_samples.test }} - runner: 'aks-win-16-cores-32gb' + runner: 'aks-win-16-cores-32gb-st' - name: 'Whisper' marker: 'whisper' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Whisper_samples.test }} - runner: 'aks-win-4-cores-8gb' + runner: 'aks-win-4-cores-8gb-st' - name: 'dreamlike_anime_1_0' marker: 'dreamlike_anime_1_0' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-win-8-cores-32gb' + runner: 'aks-win-8-cores-32gb-st' - name: 'LCM_Dreamshaper_v7_int8_ov' marker: 'LCM_Dreamshaper_v7_int8_ov' cmd: 'tests/python_tests/samples' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-win-8-cores-16gb' + runner: 'aks-win-8-cores-16gb-st' - name: 'Rag' marker: 'rag' cmd: 'tests/python_tests/samples' - runner: 'aks-win-4-cores-8gb' + runner: 'aks-win-4-cores-8gb-st' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG_samples.test }} - name: 'Speech generation' marker: 'speech_generation' cmd: 'tests/python_tests/samples' - runner: 'aks-win-4-cores-8gb' + runner: 'aks-win-4-cores-8gb-st' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Speech_generation_samples.test }} needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_build_nodejs ] @@ -822,7 +822,7 @@ jobs: defaults: run: shell: pwsh - runs-on: aks-win-8-cores-16gb + runs-on: aks-win-8-cores-16gb-st env: INSTALL_DIR: ${{ github.workspace }}/install SRC_DIR: ${{ github.workspace }}/src From 3d9503d162ea6b8a659aa8bbedbf8cb0b754fccc Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Sun, 23 Nov 2025 02:13:54 +0000 Subject: [PATCH 2/8] Trying to isolate the problem --- .github/workflows/windows.yml | 678 ++-------------------------------- 1 file changed, 40 insertions(+), 638 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 53cedc84a4..96f3f71294 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -94,195 +94,6 @@ jobs: # branch_name: master # event_name: pull_request - genai_build_cpack: - name: genai cpack (${{ matrix.build-type }}) - strategy: - matrix: - build-type: [Release, Debug] - needs: [ openvino_download ] - timeout-minutes: 45 - defaults: - run: - shell: pwsh - runs-on: aks-win-8-cores-16gb-st - env: - CMAKE_GENERATOR: 'Ninja' # Ninja is the only Windows native generator supported by ccache - OV_INSTALL_DIR: ${{ github.workspace }}\install\ov - GENAI_INSTALL_DIR: ${{ github.workspace }}\install\genai - INSTALL_TOOLS_DIR: ${{ github.workspace }}\tools - INSTALL_TESTS_DIR: ${{ github.workspace }}\tests - SRC_DIR: ${{ github.workspace }}\src\genai - BUILD_DIR: ${{ github.workspace }}\build\genai - CCACHE_DIR: ${{ github.workspace }}\ccache - MANIFEST_PATH: ${{ github.workspace }}\manifest.yml - - steps: - - name: Clone genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - submodules: recursive - path: ${{ env.SRC_DIR }} - - - name: Setup Python 3.10 - if: ${{ matrix.build-type != 'Debug' }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.10' - - - name: Setup Python 3.11 - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.11' - - - name: Setup Python 3.12 - if: ${{ matrix.build-type != 'Debug' }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.12' - - - name: Setup Python 3.13 - if: ${{ matrix.build-type != 'Debug' }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.13' - - - name: Download OpenVINO package - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ needs.openvino_download.outputs.ov_artifact_name }} - path: ${{ env.OV_INSTALL_DIR }} - merge-multiple: true - - # - # Build - # - - - name: Download and install ninja - run: | - Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip -OutFile ninja-win.zip -MaximumRetryCount 10 - Expand-Archive -Force ninja-win.zip - # Add it to the GitHub Path so it would be available in the subsequent steps - Add-Content -Path $env:GITHUB_PATH -Value "${{ github.workspace }}/ninja-win" - - - name: Download and install ccache - run: | - Invoke-WebRequest -Uri 'https://github.com/ccache/ccache/releases/download/v4.9.1/ccache-4.9.1-windows-x86_64.zip' -OutFile 'ccache.zip' - Expand-Archive -Path 'ccache.zip' -DestinationPath 'C:\temp\ccache' - Move-Item -Path 'C:\temp\ccache\*' -Destination 'C:\ccache' - Add-Content -Path $env:GITHUB_PATH -Value "C:\ccache" - - - name: Setup ccache - id: ccache-restore - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - key: ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack - path: ${{ env.CCACHE_DIR }} - - - name: Generate product manifest - id: create_manifest - uses: openvinotoolkit/openvino/.github/actions/create_manifest@master - with: - repos: ${{ env.SRC_DIR }} - product_type: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} - target_arch: 'x86_64' - build_type: ${{ matrix.build-type }} - save_to: ${{ env.MANIFEST_PATH }} - - - name: Clean ccache stats - run: ccache --zero-stats --show-config - - - name: Configure Developer Command Prompt for Microsoft Visual C++ - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 - with: - toolset: 14.42 # v2022 - - - name: CMake Build - shell: pwsh - run: | - ${{ env.OV_INSTALL_DIR }}/setupvars.ps1 - if ( "${{ matrix.build-type }}" -ne "Debug" ) { - $pyVersions = '3.10', '3.11', '3.12', '3.13' - } else { - $pyVersions = '3.11' - } - - foreach ($pyVersion in $pyVersions) { - Remove-Item -Path "${{ env.BUILD_DIR }}/CMakeCache.txt" -Force -ErrorAction SilentlyContinue - $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" - $pythonExecutablePath = & cmd /c $pythonCommand - - cmake -DPython3_EXECUTABLE="$pythonExecutablePath" -DOpenVINODeveloperPackage_DIR=${{ env.OV_INSTALL_DIR }}/developer_package/cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} && - cmake --build ${{ env.BUILD_DIR }} --parallel $ENV:NUMBER_OF_PROCESSORS --config ${{ matrix.build-type }} --verbose && - cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.GENAI_INSTALL_DIR }} - if ($LASTEXITCODE -ne 0) { - Write-Host "Failed to build bindings for Python $pyVersion" - exit 1 - } - } - - cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TOOLS_DIR }} --component tools_bin - cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TESTS_DIR }} --component tests - env: - CMAKE_TLS_VERIFY: 0 - - - name: Show ccache stats - run: ccache --show-stats - - # - # Upload build artifacts - # - - - name: Pack Artifacts - run: | - $file=Get-ChildItem -Path "${{ env.GENAI_INSTALL_DIR }}" - $compress = @{ - Path = $file - CompressionLevel = "Optimal" - DestinationPath = "${{ env.BUILD_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip" - } - Compress-Archive @compress - - - name: Save ccache - if: always() && steps.ccache-restore.outputs.cache-hit != 'true' && github.event_name == 'push' - uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - key: ${{ steps.ccache-restore.outputs.cache-primary-key }} - path: ${{ env.CCACHE_DIR }} - - - name: Upload cpack package - if: ${{ always() }} - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_cpack_${{ matrix.build-type }} - path: ${{ env.BUILD_DIR }}/*.zip - if-no-files-found: 'error' - - - name: Upload Tools - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_tools_${{ matrix.build-type }} - path: ${{ env.INSTALL_TOOLS_DIR }} - if-no-files-found: 'error' - - - name: Upload Tests - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_tests_${{ matrix.build-type }} - path: ${{ env.INSTALL_TESTS_DIR }} - if-no-files-found: 'error' - - - name: Upload manifest - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: manifest_${{ matrix.build-type }} - path: ${{ env.MANIFEST_PATH }} - if-no-files-found: 'error' - genai_build_wheel: name: genai wheel needs: [ openvino_download ] @@ -306,7 +117,7 @@ jobs: with: submodules: recursive path: ${{ env.SRC_DIR }} - + - name: Setup Python 3.11 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: @@ -376,32 +187,32 @@ jobs: - name: Build WWB Wheel run: python -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ${{ env.SRC_DIR }}/tools/who_what_benchmark working-directory: ${{ env.OV_INSTALL_DIR }} - + - name: Setup Python 3.10 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.10' cache: 'pip' - + - name: Setup Python 3.12 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.12' cache: 'pip' - + - name: Setup Python 3.13 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.13' cache: 'pip' - + - name: Build genai wheel run: | $pyVersions = '3.10', '3.11', '3.12', '3.13' foreach ($pyVersion in $pyVersions) { $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" $pythonExecutablePath = & cmd /c $pythonCommand - + & $pythonExecutablePath -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ` --config-settings=override=cmake.generator='Ninja' ` --config-settings=override=cmake.build_path='${{ env.BUILD_DIR }}/genai' ` @@ -433,162 +244,6 @@ jobs: path: ${{ env.INSTALL_DIR }} if-no-files-found: 'error' - store_artifacts: - name: Store build artifacts - strategy: - matrix: - build-type: [Release] - needs: [openvino_download, genai_build_wheel, genai_build_cpack] - timeout-minutes: 10 - defaults: - run: - shell: bash - runs-on: aks-linux-medium-st - container: - image: openvinogithubactions.azurecr.io/library/python:3.12-slim - volumes: - - /mount:/mount - - ${{ github.workspace }}:${{ github.workspace }} - env: - WHEEL_PACKAGE: ${{ github.workspace }}/wheels - MANIFEST_PATH: ${{ github.workspace }}/manifest.yml - - steps: - - name: Download genai package - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}_${{ matrix.build-type }} - path: ${{ github.workspace }} - - - name: Download manifest and wheels - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: '{${{ env.GENAI_WHEELS_ARTIFACT_NAME }},manifest_${{ matrix.build-type }}}' - path: ${{ github.workspace }} - merge-multiple: true - - - name: Store ${{ matrix.build_type }} artifacts to a shared drive - id: store_artifacts - if: ${{ always() }} - uses: openvinotoolkit/openvino/.github/actions/store_artifacts@master - with: - artifacts: | - ${{ github.workspace }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip - ${{ env.WHEEL_PACKAGE }} - ${{ env.MANIFEST_PATH }} - storage_dir: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} - storage_root: ${{ env.ARTIFACTS_SHARE }} - product_name: ${{ github.event.repository.name }} - - genai_build_samples: - name: Build Samples - ${{ matrix.build-type }} - strategy: - fail-fast: false - matrix: - build-type: [Release, Debug] - needs: [ openvino_download, genai_build_cpack ] - timeout-minutes: 10 - defaults: - run: - shell: pwsh - runs-on: aks-win-4-cores-8gb-st - env: - OV_INSTALL_DIR: ${{ github.workspace }}/install/ov - SRC_DIR: ${{ github.workspace }}/src - BUILD_DIR: ${{ github.workspace }}/build - INSTALL_DIR: ${{ github.workspace }}/install/genai - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - - - name: Download Build Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }}}" - path: ${{ env.OV_INSTALL_DIR }} - merge-multiple: true - - - name: Extract Artifacts - run: Expand-Archive -Path ${{ env.OV_INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.OV_INSTALL_DIR }} - - - name: Build Samples (Release) - if: ${{ 'Release' == matrix.build-type }} - run: | - & ${{ env.OV_INSTALL_DIR }}/samples/cpp/build_samples.ps1 -i ${{ env.INSTALL_DIR }} - & ${{ env.OV_INSTALL_DIR }}/samples/c/build_samples.ps1 -i ${{ env.INSTALL_DIR }} - - - name: Build Samples (Debug) - if: ${{ 'Release' != matrix.build-type }} - run: | - . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" - cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.OV_INSTALL_DIR }}/samples/cpp -B ${{ env.BUILD_DIR }} - cmake --build ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --parallel $ENV:NUMBER_OF_PROCESSORS - cmake --install ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --component samples_bin --prefix ${{ env.INSTALL_DIR }} - - - name: Upload Samples Build Package - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_samples_${{ matrix.build-type }} - path: ${{ env.INSTALL_DIR }} - if-no-files-found: 'error' - - genai_build_nodejs: - name: Build Node.js bindings - needs: [ openvino_download ] - timeout-minutes: 90 - defaults: - run: - shell: pwsh - runs-on: aks-win-4-cores-8gb-st - - env: - OV_INSTALL_DIR: ${{ github.workspace }}/ov - SRC_DIR: ${{ github.workspace }}/openvino.genai - INSTALL_DIR: ${{ github.workspace }}/openvino.genai/src/js/bin - BUILD_DIR: ${{ github.workspace }}/build - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - submodules: recursive - path: ${{ env.SRC_DIR }} - - - name: Download OpenVINO package - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ needs.openvino_download.outputs.ov_artifact_name }} - path: ${{ env.OV_INSTALL_DIR }} - merge-multiple: true - - - name: Setup Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - - - name: Build GenAI Node.js bindings - run: | - . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" - cmake -DCMAKE_BUILD_TYPE=Release ` - -DENABLE_JS=ON -DCPACK_GENERATOR=NPM ` - -DENABLE_PYTHON=OFF -DENABLE_WHEEL=OFF ` - -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} - cmake --build ${{ env.BUILD_DIR }} --config Release --parallel --verbose - cmake --install ${{ env.BUILD_DIR }} --config Release --prefix ${{ env.INSTALL_DIR }} - - - name: Upload Node.js bindings Build Package - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_nodejs_bindings - path: ${{ env.INSTALL_DIR }} - if-no-files-found: 'error' - genai_tests_wheel: name: Python (${{ matrix.test.name}}) Tests (wheel) needs: [ smart_ci, openvino_download, genai_build_wheel ] @@ -597,41 +252,41 @@ jobs: fail-fast: false matrix: test: - - name: 'Whisper' - # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed - cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} - timeout: 120 - - name: 'Cacheopt E2E (Part 1)' - cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - timeout: 180 - - name: 'Cacheopt E2E (Part 2)' - cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - timeout: 360 - - name: 'LLM & VLM' - cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - timeout: 180 - - name: 'GGUF Reader tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - timeout: 360 - - name: 'Tokenizer tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} - timeout: 60 - - name: 'API tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} - timeout: 60 - - name: 'Rag tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} - timeout: 30 + # - name: 'Whisper' + # # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed + # cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} + # timeout: 120 + # - name: 'Cacheopt E2E (Part 1)' + # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + # timeout: 180 + # - name: 'Cacheopt E2E (Part 2)' + # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + # timeout: 360 + # - name: 'LLM & VLM' + # cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + # timeout: 180 + # - name: 'GGUF Reader tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + # timeout: 360 + # - name: 'Tokenizer tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} + # timeout: 60 + # - name: 'API tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} + # timeout: 60 + # - name: 'Rag tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} + # timeout: 30 - name: 'WWB tests' - cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "not nanollava"' + cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf"' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).WWB.test }} timeout: 120 - name: 'WWB tests (nanollava)' @@ -685,256 +340,3 @@ jobs: run: ${{ matrix.test.cmd }} working-directory: ${{ env.SRC_DIR }} - genai_samples_tests: - name: Samples ${{ matrix.test.name }} (${{ matrix.build-type }}) - strategy: - fail-fast: false - matrix: - build-type: [Release] - test: - - name: 'LLM' - marker: 'llm' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).LLM_samples.test }} - runner: 'aks-win-16-cores-32gb-st' - - name: 'Whisper' - marker: 'whisper' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Whisper_samples.test }} - runner: 'aks-win-4-cores-8gb-st' - - name: 'dreamlike_anime_1_0' - marker: 'dreamlike_anime_1_0' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-win-8-cores-32gb-st' - - name: 'LCM_Dreamshaper_v7_int8_ov' - marker: 'LCM_Dreamshaper_v7_int8_ov' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-win-8-cores-16gb-st' - - name: 'Rag' - marker: 'rag' - cmd: 'tests/python_tests/samples' - runner: 'aks-win-4-cores-8gb-st' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG_samples.test }} - - name: 'Speech generation' - marker: 'speech_generation' - cmd: 'tests/python_tests/samples' - runner: 'aks-win-4-cores-8gb-st' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Speech_generation_samples.test }} - - needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_build_nodejs ] - timeout-minutes: 120 - defaults: - run: - shell: pwsh - runs-on: ${{ matrix.test.runner }} - env: - INSTALL_DIR: ${{ github.workspace }}/install - SRC_DIR: ${{ github.workspace }}/src - BUILD_DIR: ${{ github.workspace }}/build - # The debug logging includes messages about the time it takes to read the GGUF model. - # These messages differ from run to run, so we cannot compare the results of the CPP, Python, and JavaScript parts. - OPENVINO_LOG_LEVEL: 1 - - steps: - - name: Clone openvino.genai - if: ${{ matrix.test.run_condition }} - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - - - name: Download Build Artifacts - if: ${{ matrix.test.run_condition }} - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_samples_${{ matrix.build-type }},genai_wheels}" - path: ${{ env.INSTALL_DIR }} - merge-multiple: true - - - name: Extract Artifacts - if: ${{ matrix.test.run_condition }} - run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} - - - name: Download GenAI JS Bildings Artifacts - if: ${{ matrix.test.run_condition }} - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: genai_nodejs_bindings - path: ${{ env.SRC_DIR }}/src/js/bin - merge-multiple: true - - - name: Setup Python ${{ env.PYTHON_VERSION }} - if: ${{ matrix.test.run_condition }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - - - name: Install GenAI wheels - if: ${{ matrix.test.run_condition }} - uses: ./src/.github/actions/install_wheel - with: - packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" - requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" - local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels - - - name: Setup NodeJS - if: ${{ matrix.test.run_condition }} - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 - with: - node-version: 21 - - - name: Install GenAI NPM package - if: ${{ matrix.test.run_condition }} - working-directory: ${{ env.SRC_DIR }}/src/js - run: | - npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts - Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin - npm install --verbose - - - name: Install NPM dependencies for samples - if: ${{ matrix.test.run_condition }} - working-directory: ${{ env.SRC_DIR }}/samples/js/text_generation - run: | - npm install ${{ env.SRC_DIR }}/src/js - npm install --verbose - - - name: Test Samples (Python and C++) - if: ${{ matrix.test.run_condition }} - run: python -m pytest -vs ${{ env.SRC_DIR }}/${{ matrix.test.cmd }} -m "${{ matrix.test.marker }}" - env: - PATH: "${{ env.INSTALL_DIR }}/runtime/bin/intel64/${{ matrix.build-type }};${{ env.INSTALL_DIR }}/runtime/3rdparty/tbb/bin;%PATH%" # Required for C++ samples - SAMPLES_PY_DIR: "${{ env.INSTALL_DIR }}/samples/python" - SAMPLES_JS_DIR: "${{ env.SRC_DIR }}/samples/js" - SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" - SAMPLES_C_DIR: "${{ env.INSTALL_DIR }}/samples_bin" - - genai_tools_tests: - name: Tools tests (${{ matrix.build-type }}) - strategy: - fail-fast: false - matrix: - build-type: [Release] - needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel ] - if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching }} - timeout-minutes: 90 - defaults: - run: - shell: pwsh - runs-on: aks-win-8-cores-16gb-st - env: - INSTALL_DIR: ${{ github.workspace }}/install - SRC_DIR: ${{ github.workspace }}/src - BUILD_DIR: ${{ github.workspace }}/build - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - - - name: Download Build Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_tools_${{ matrix.build-type }},genai_tests_${{ matrix.build-type }},genai_wheels}" - path: ${{ env.INSTALL_DIR }} - merge-multiple: true - - - name: Extract Artifacts - run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} - - - name: Setup Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - - - name: Install GenAI wheels - uses: ./src/.github/actions/install_wheel - with: - packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" - requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" - local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels - - - name: gtests unit tests - run: | - . "${{ env.INSTALL_DIR }}/setupvars.ps1" - & "${{ env.INSTALL_DIR }}/tests/tests_continuous_batching.exe" --gtest_filter="-AddSecondInputTest.*" - - - name: Test C++ Tools - run: | - . "${{ env.INSTALL_DIR }}/setupvars.ps1" - python -m pytest -vs ${{ env.SRC_DIR }}/tests/python_tests/samples/test_continuous_batching_tools.py -m "samples" - env: - SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" - - genai_nodejs_tests: - name: Node.js bindings tests - needs: [ smart_ci, openvino_download, genai_build_nodejs ] - if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).JS_API }} - timeout-minutes: 20 - defaults: - run: - shell: pwsh - runs-on: windows-2022 - - env: - SRC_DIR: ${{ github.workspace }}/openvino.genai - INSTALL_DIR: ${{ github.workspace }}/install - NODE_VERSION: 21 - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - submodules: recursive - - - name: Download OpenVINO Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ needs.openvino_download.outputs.ov_artifact_name }} - path: ${{ env.INSTALL_DIR }} - merge-multiple: true - - - name: Download GenAI JS Bildings Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: genai_nodejs_bindings - path: ${{ env.SRC_DIR }}/src/js/bin - merge-multiple: true - - - name: Setup Node ${{ env.NODE_VERSION }} - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 - with: - node-version: ${{ env.NODE_VERSION }} - - # JS pacakges uses the OpenVINO and OpenVINO GenAI libraries from the bin directory. - # Here we emulate the installation of the openvino-node package from NPM. The latest - # release of the openvino-node package is installed, and we need to update the binaries - # in the node_modules/openvino-node/bin directory to work correctly with GenAI - - name: Install npm package tests dependencies - working-directory: ${{ env.SRC_DIR }}/src/js - run: | - npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts - Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin - npm install --verbose - - - name: Run npm package tests - working-directory: ${{ env.SRC_DIR }}/src/js - run: npm test - - Overall_Status: - name: ci/gha_overall_status_windows - needs: [smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_tests_wheel, genai_tools_tests, genai_samples_tests, genai_build_nodejs, genai_nodejs_tests] - if: ${{ always() }} - runs-on: ubuntu-latest - steps: - - name: Check status of all jobs - if: >- - ${{ - contains(needs.*.result, 'failure') || - contains(needs.*.result, 'cancelled') - }} - run: exit 1 From 8b0d5d4b5c4d019a391ddbdad2ccc38d3ffc9fad Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Sun, 23 Nov 2025 03:29:47 +0000 Subject: [PATCH 3/8] Revert "Trying to isolate the problem" This reverts commit 3d9503d162ea6b8a659aa8bbedbf8cb0b754fccc. --- .github/workflows/windows.yml | 678 ++++++++++++++++++++++++++++++++-- 1 file changed, 638 insertions(+), 40 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 96f3f71294..53cedc84a4 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -94,6 +94,195 @@ jobs: # branch_name: master # event_name: pull_request + genai_build_cpack: + name: genai cpack (${{ matrix.build-type }}) + strategy: + matrix: + build-type: [Release, Debug] + needs: [ openvino_download ] + timeout-minutes: 45 + defaults: + run: + shell: pwsh + runs-on: aks-win-8-cores-16gb-st + env: + CMAKE_GENERATOR: 'Ninja' # Ninja is the only Windows native generator supported by ccache + OV_INSTALL_DIR: ${{ github.workspace }}\install\ov + GENAI_INSTALL_DIR: ${{ github.workspace }}\install\genai + INSTALL_TOOLS_DIR: ${{ github.workspace }}\tools + INSTALL_TESTS_DIR: ${{ github.workspace }}\tests + SRC_DIR: ${{ github.workspace }}\src\genai + BUILD_DIR: ${{ github.workspace }}\build\genai + CCACHE_DIR: ${{ github.workspace }}\ccache + MANIFEST_PATH: ${{ github.workspace }}\manifest.yml + + steps: + - name: Clone genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + submodules: recursive + path: ${{ env.SRC_DIR }} + + - name: Setup Python 3.10 + if: ${{ matrix.build-type != 'Debug' }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.10' + + - name: Setup Python 3.11 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.11' + + - name: Setup Python 3.12 + if: ${{ matrix.build-type != 'Debug' }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.12' + + - name: Setup Python 3.13 + if: ${{ matrix.build-type != 'Debug' }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.13' + + - name: Download OpenVINO package + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ needs.openvino_download.outputs.ov_artifact_name }} + path: ${{ env.OV_INSTALL_DIR }} + merge-multiple: true + + # + # Build + # + + - name: Download and install ninja + run: | + Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip -OutFile ninja-win.zip -MaximumRetryCount 10 + Expand-Archive -Force ninja-win.zip + # Add it to the GitHub Path so it would be available in the subsequent steps + Add-Content -Path $env:GITHUB_PATH -Value "${{ github.workspace }}/ninja-win" + + - name: Download and install ccache + run: | + Invoke-WebRequest -Uri 'https://github.com/ccache/ccache/releases/download/v4.9.1/ccache-4.9.1-windows-x86_64.zip' -OutFile 'ccache.zip' + Expand-Archive -Path 'ccache.zip' -DestinationPath 'C:\temp\ccache' + Move-Item -Path 'C:\temp\ccache\*' -Destination 'C:\ccache' + Add-Content -Path $env:GITHUB_PATH -Value "C:\ccache" + + - name: Setup ccache + id: ccache-restore + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + key: ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack + path: ${{ env.CCACHE_DIR }} + + - name: Generate product manifest + id: create_manifest + uses: openvinotoolkit/openvino/.github/actions/create_manifest@master + with: + repos: ${{ env.SRC_DIR }} + product_type: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} + target_arch: 'x86_64' + build_type: ${{ matrix.build-type }} + save_to: ${{ env.MANIFEST_PATH }} + + - name: Clean ccache stats + run: ccache --zero-stats --show-config + + - name: Configure Developer Command Prompt for Microsoft Visual C++ + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 + with: + toolset: 14.42 # v2022 + + - name: CMake Build + shell: pwsh + run: | + ${{ env.OV_INSTALL_DIR }}/setupvars.ps1 + if ( "${{ matrix.build-type }}" -ne "Debug" ) { + $pyVersions = '3.10', '3.11', '3.12', '3.13' + } else { + $pyVersions = '3.11' + } + + foreach ($pyVersion in $pyVersions) { + Remove-Item -Path "${{ env.BUILD_DIR }}/CMakeCache.txt" -Force -ErrorAction SilentlyContinue + $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" + $pythonExecutablePath = & cmd /c $pythonCommand + + cmake -DPython3_EXECUTABLE="$pythonExecutablePath" -DOpenVINODeveloperPackage_DIR=${{ env.OV_INSTALL_DIR }}/developer_package/cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} && + cmake --build ${{ env.BUILD_DIR }} --parallel $ENV:NUMBER_OF_PROCESSORS --config ${{ matrix.build-type }} --verbose && + cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.GENAI_INSTALL_DIR }} + if ($LASTEXITCODE -ne 0) { + Write-Host "Failed to build bindings for Python $pyVersion" + exit 1 + } + } + + cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TOOLS_DIR }} --component tools_bin + cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TESTS_DIR }} --component tests + env: + CMAKE_TLS_VERIFY: 0 + + - name: Show ccache stats + run: ccache --show-stats + + # + # Upload build artifacts + # + + - name: Pack Artifacts + run: | + $file=Get-ChildItem -Path "${{ env.GENAI_INSTALL_DIR }}" + $compress = @{ + Path = $file + CompressionLevel = "Optimal" + DestinationPath = "${{ env.BUILD_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip" + } + Compress-Archive @compress + + - name: Save ccache + if: always() && steps.ccache-restore.outputs.cache-hit != 'true' && github.event_name == 'push' + uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + key: ${{ steps.ccache-restore.outputs.cache-primary-key }} + path: ${{ env.CCACHE_DIR }} + + - name: Upload cpack package + if: ${{ always() }} + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_cpack_${{ matrix.build-type }} + path: ${{ env.BUILD_DIR }}/*.zip + if-no-files-found: 'error' + + - name: Upload Tools + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_tools_${{ matrix.build-type }} + path: ${{ env.INSTALL_TOOLS_DIR }} + if-no-files-found: 'error' + + - name: Upload Tests + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_tests_${{ matrix.build-type }} + path: ${{ env.INSTALL_TESTS_DIR }} + if-no-files-found: 'error' + + - name: Upload manifest + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: manifest_${{ matrix.build-type }} + path: ${{ env.MANIFEST_PATH }} + if-no-files-found: 'error' + genai_build_wheel: name: genai wheel needs: [ openvino_download ] @@ -117,7 +306,7 @@ jobs: with: submodules: recursive path: ${{ env.SRC_DIR }} - + - name: Setup Python 3.11 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: @@ -187,32 +376,32 @@ jobs: - name: Build WWB Wheel run: python -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ${{ env.SRC_DIR }}/tools/who_what_benchmark working-directory: ${{ env.OV_INSTALL_DIR }} - + - name: Setup Python 3.10 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.10' cache: 'pip' - + - name: Setup Python 3.12 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.12' cache: 'pip' - + - name: Setup Python 3.13 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.13' cache: 'pip' - + - name: Build genai wheel run: | $pyVersions = '3.10', '3.11', '3.12', '3.13' foreach ($pyVersion in $pyVersions) { $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" $pythonExecutablePath = & cmd /c $pythonCommand - + & $pythonExecutablePath -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ` --config-settings=override=cmake.generator='Ninja' ` --config-settings=override=cmake.build_path='${{ env.BUILD_DIR }}/genai' ` @@ -244,6 +433,162 @@ jobs: path: ${{ env.INSTALL_DIR }} if-no-files-found: 'error' + store_artifacts: + name: Store build artifacts + strategy: + matrix: + build-type: [Release] + needs: [openvino_download, genai_build_wheel, genai_build_cpack] + timeout-minutes: 10 + defaults: + run: + shell: bash + runs-on: aks-linux-medium-st + container: + image: openvinogithubactions.azurecr.io/library/python:3.12-slim + volumes: + - /mount:/mount + - ${{ github.workspace }}:${{ github.workspace }} + env: + WHEEL_PACKAGE: ${{ github.workspace }}/wheels + MANIFEST_PATH: ${{ github.workspace }}/manifest.yml + + steps: + - name: Download genai package + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}_${{ matrix.build-type }} + path: ${{ github.workspace }} + + - name: Download manifest and wheels + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: '{${{ env.GENAI_WHEELS_ARTIFACT_NAME }},manifest_${{ matrix.build-type }}}' + path: ${{ github.workspace }} + merge-multiple: true + + - name: Store ${{ matrix.build_type }} artifacts to a shared drive + id: store_artifacts + if: ${{ always() }} + uses: openvinotoolkit/openvino/.github/actions/store_artifacts@master + with: + artifacts: | + ${{ github.workspace }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip + ${{ env.WHEEL_PACKAGE }} + ${{ env.MANIFEST_PATH }} + storage_dir: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} + storage_root: ${{ env.ARTIFACTS_SHARE }} + product_name: ${{ github.event.repository.name }} + + genai_build_samples: + name: Build Samples - ${{ matrix.build-type }} + strategy: + fail-fast: false + matrix: + build-type: [Release, Debug] + needs: [ openvino_download, genai_build_cpack ] + timeout-minutes: 10 + defaults: + run: + shell: pwsh + runs-on: aks-win-4-cores-8gb-st + env: + OV_INSTALL_DIR: ${{ github.workspace }}/install/ov + SRC_DIR: ${{ github.workspace }}/src + BUILD_DIR: ${{ github.workspace }}/build + INSTALL_DIR: ${{ github.workspace }}/install/genai + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + + - name: Download Build Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }}}" + path: ${{ env.OV_INSTALL_DIR }} + merge-multiple: true + + - name: Extract Artifacts + run: Expand-Archive -Path ${{ env.OV_INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.OV_INSTALL_DIR }} + + - name: Build Samples (Release) + if: ${{ 'Release' == matrix.build-type }} + run: | + & ${{ env.OV_INSTALL_DIR }}/samples/cpp/build_samples.ps1 -i ${{ env.INSTALL_DIR }} + & ${{ env.OV_INSTALL_DIR }}/samples/c/build_samples.ps1 -i ${{ env.INSTALL_DIR }} + + - name: Build Samples (Debug) + if: ${{ 'Release' != matrix.build-type }} + run: | + . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" + cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.OV_INSTALL_DIR }}/samples/cpp -B ${{ env.BUILD_DIR }} + cmake --build ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --parallel $ENV:NUMBER_OF_PROCESSORS + cmake --install ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --component samples_bin --prefix ${{ env.INSTALL_DIR }} + + - name: Upload Samples Build Package + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_samples_${{ matrix.build-type }} + path: ${{ env.INSTALL_DIR }} + if-no-files-found: 'error' + + genai_build_nodejs: + name: Build Node.js bindings + needs: [ openvino_download ] + timeout-minutes: 90 + defaults: + run: + shell: pwsh + runs-on: aks-win-4-cores-8gb-st + + env: + OV_INSTALL_DIR: ${{ github.workspace }}/ov + SRC_DIR: ${{ github.workspace }}/openvino.genai + INSTALL_DIR: ${{ github.workspace }}/openvino.genai/src/js/bin + BUILD_DIR: ${{ github.workspace }}/build + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + submodules: recursive + path: ${{ env.SRC_DIR }} + + - name: Download OpenVINO package + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ needs.openvino_download.outputs.ov_artifact_name }} + path: ${{ env.OV_INSTALL_DIR }} + merge-multiple: true + + - name: Setup Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' + + - name: Build GenAI Node.js bindings + run: | + . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" + cmake -DCMAKE_BUILD_TYPE=Release ` + -DENABLE_JS=ON -DCPACK_GENERATOR=NPM ` + -DENABLE_PYTHON=OFF -DENABLE_WHEEL=OFF ` + -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} + cmake --build ${{ env.BUILD_DIR }} --config Release --parallel --verbose + cmake --install ${{ env.BUILD_DIR }} --config Release --prefix ${{ env.INSTALL_DIR }} + + - name: Upload Node.js bindings Build Package + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_nodejs_bindings + path: ${{ env.INSTALL_DIR }} + if-no-files-found: 'error' + genai_tests_wheel: name: Python (${{ matrix.test.name}}) Tests (wheel) needs: [ smart_ci, openvino_download, genai_build_wheel ] @@ -252,41 +597,41 @@ jobs: fail-fast: false matrix: test: - # - name: 'Whisper' - # # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed - # cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} - # timeout: 120 - # - name: 'Cacheopt E2E (Part 1)' - # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - # timeout: 180 - # - name: 'Cacheopt E2E (Part 2)' - # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - # timeout: 360 - # - name: 'LLM & VLM' - # cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - # timeout: 180 - # - name: 'GGUF Reader tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - # timeout: 360 - # - name: 'Tokenizer tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} - # timeout: 60 - # - name: 'API tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} - # timeout: 60 - # - name: 'Rag tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} - # timeout: 30 + - name: 'Whisper' + # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed + cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} + timeout: 120 + - name: 'Cacheopt E2E (Part 1)' + cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + timeout: 180 + - name: 'Cacheopt E2E (Part 2)' + cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + timeout: 360 + - name: 'LLM & VLM' + cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + timeout: 180 + - name: 'GGUF Reader tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + timeout: 360 + - name: 'Tokenizer tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} + timeout: 60 + - name: 'API tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} + timeout: 60 + - name: 'Rag tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} + timeout: 30 - name: 'WWB tests' - cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf"' + cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "not nanollava"' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).WWB.test }} timeout: 120 - name: 'WWB tests (nanollava)' @@ -340,3 +685,256 @@ jobs: run: ${{ matrix.test.cmd }} working-directory: ${{ env.SRC_DIR }} + genai_samples_tests: + name: Samples ${{ matrix.test.name }} (${{ matrix.build-type }}) + strategy: + fail-fast: false + matrix: + build-type: [Release] + test: + - name: 'LLM' + marker: 'llm' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).LLM_samples.test }} + runner: 'aks-win-16-cores-32gb-st' + - name: 'Whisper' + marker: 'whisper' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Whisper_samples.test }} + runner: 'aks-win-4-cores-8gb-st' + - name: 'dreamlike_anime_1_0' + marker: 'dreamlike_anime_1_0' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} + runner: 'aks-win-8-cores-32gb-st' + - name: 'LCM_Dreamshaper_v7_int8_ov' + marker: 'LCM_Dreamshaper_v7_int8_ov' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} + runner: 'aks-win-8-cores-16gb-st' + - name: 'Rag' + marker: 'rag' + cmd: 'tests/python_tests/samples' + runner: 'aks-win-4-cores-8gb-st' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG_samples.test }} + - name: 'Speech generation' + marker: 'speech_generation' + cmd: 'tests/python_tests/samples' + runner: 'aks-win-4-cores-8gb-st' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Speech_generation_samples.test }} + + needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_build_nodejs ] + timeout-minutes: 120 + defaults: + run: + shell: pwsh + runs-on: ${{ matrix.test.runner }} + env: + INSTALL_DIR: ${{ github.workspace }}/install + SRC_DIR: ${{ github.workspace }}/src + BUILD_DIR: ${{ github.workspace }}/build + # The debug logging includes messages about the time it takes to read the GGUF model. + # These messages differ from run to run, so we cannot compare the results of the CPP, Python, and JavaScript parts. + OPENVINO_LOG_LEVEL: 1 + + steps: + - name: Clone openvino.genai + if: ${{ matrix.test.run_condition }} + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + + - name: Download Build Artifacts + if: ${{ matrix.test.run_condition }} + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_samples_${{ matrix.build-type }},genai_wheels}" + path: ${{ env.INSTALL_DIR }} + merge-multiple: true + + - name: Extract Artifacts + if: ${{ matrix.test.run_condition }} + run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} + + - name: Download GenAI JS Bildings Artifacts + if: ${{ matrix.test.run_condition }} + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: genai_nodejs_bindings + path: ${{ env.SRC_DIR }}/src/js/bin + merge-multiple: true + + - name: Setup Python ${{ env.PYTHON_VERSION }} + if: ${{ matrix.test.run_condition }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' + + - name: Install GenAI wheels + if: ${{ matrix.test.run_condition }} + uses: ./src/.github/actions/install_wheel + with: + packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" + requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" + local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels + + - name: Setup NodeJS + if: ${{ matrix.test.run_condition }} + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + with: + node-version: 21 + + - name: Install GenAI NPM package + if: ${{ matrix.test.run_condition }} + working-directory: ${{ env.SRC_DIR }}/src/js + run: | + npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts + Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin + npm install --verbose + + - name: Install NPM dependencies for samples + if: ${{ matrix.test.run_condition }} + working-directory: ${{ env.SRC_DIR }}/samples/js/text_generation + run: | + npm install ${{ env.SRC_DIR }}/src/js + npm install --verbose + + - name: Test Samples (Python and C++) + if: ${{ matrix.test.run_condition }} + run: python -m pytest -vs ${{ env.SRC_DIR }}/${{ matrix.test.cmd }} -m "${{ matrix.test.marker }}" + env: + PATH: "${{ env.INSTALL_DIR }}/runtime/bin/intel64/${{ matrix.build-type }};${{ env.INSTALL_DIR }}/runtime/3rdparty/tbb/bin;%PATH%" # Required for C++ samples + SAMPLES_PY_DIR: "${{ env.INSTALL_DIR }}/samples/python" + SAMPLES_JS_DIR: "${{ env.SRC_DIR }}/samples/js" + SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" + SAMPLES_C_DIR: "${{ env.INSTALL_DIR }}/samples_bin" + + genai_tools_tests: + name: Tools tests (${{ matrix.build-type }}) + strategy: + fail-fast: false + matrix: + build-type: [Release] + needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel ] + if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching }} + timeout-minutes: 90 + defaults: + run: + shell: pwsh + runs-on: aks-win-8-cores-16gb-st + env: + INSTALL_DIR: ${{ github.workspace }}/install + SRC_DIR: ${{ github.workspace }}/src + BUILD_DIR: ${{ github.workspace }}/build + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + + - name: Download Build Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_tools_${{ matrix.build-type }},genai_tests_${{ matrix.build-type }},genai_wheels}" + path: ${{ env.INSTALL_DIR }} + merge-multiple: true + + - name: Extract Artifacts + run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} + + - name: Setup Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' + + - name: Install GenAI wheels + uses: ./src/.github/actions/install_wheel + with: + packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" + requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" + local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels + + - name: gtests unit tests + run: | + . "${{ env.INSTALL_DIR }}/setupvars.ps1" + & "${{ env.INSTALL_DIR }}/tests/tests_continuous_batching.exe" --gtest_filter="-AddSecondInputTest.*" + + - name: Test C++ Tools + run: | + . "${{ env.INSTALL_DIR }}/setupvars.ps1" + python -m pytest -vs ${{ env.SRC_DIR }}/tests/python_tests/samples/test_continuous_batching_tools.py -m "samples" + env: + SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" + + genai_nodejs_tests: + name: Node.js bindings tests + needs: [ smart_ci, openvino_download, genai_build_nodejs ] + if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).JS_API }} + timeout-minutes: 20 + defaults: + run: + shell: pwsh + runs-on: windows-2022 + + env: + SRC_DIR: ${{ github.workspace }}/openvino.genai + INSTALL_DIR: ${{ github.workspace }}/install + NODE_VERSION: 21 + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + submodules: recursive + + - name: Download OpenVINO Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ needs.openvino_download.outputs.ov_artifact_name }} + path: ${{ env.INSTALL_DIR }} + merge-multiple: true + + - name: Download GenAI JS Bildings Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: genai_nodejs_bindings + path: ${{ env.SRC_DIR }}/src/js/bin + merge-multiple: true + + - name: Setup Node ${{ env.NODE_VERSION }} + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + with: + node-version: ${{ env.NODE_VERSION }} + + # JS pacakges uses the OpenVINO and OpenVINO GenAI libraries from the bin directory. + # Here we emulate the installation of the openvino-node package from NPM. The latest + # release of the openvino-node package is installed, and we need to update the binaries + # in the node_modules/openvino-node/bin directory to work correctly with GenAI + - name: Install npm package tests dependencies + working-directory: ${{ env.SRC_DIR }}/src/js + run: | + npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts + Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin + npm install --verbose + + - name: Run npm package tests + working-directory: ${{ env.SRC_DIR }}/src/js + run: npm test + + Overall_Status: + name: ci/gha_overall_status_windows + needs: [smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_tests_wheel, genai_tools_tests, genai_samples_tests, genai_build_nodejs, genai_nodejs_tests] + if: ${{ always() }} + runs-on: ubuntu-latest + steps: + - name: Check status of all jobs + if: >- + ${{ + contains(needs.*.result, 'failure') || + contains(needs.*.result, 'cancelled') + }} + run: exit 1 From 0c3751118db0634d5fe9590642581b4b38437a90 Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Mon, 24 Nov 2025 00:38:00 +0000 Subject: [PATCH 4/8] Reapply "Trying to isolate the problem" This reverts commit 8b0d5d4b5c4d019a391ddbdad2ccc38d3ffc9fad. --- .github/workflows/windows.yml | 678 ++-------------------------------- 1 file changed, 40 insertions(+), 638 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 53cedc84a4..96f3f71294 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -94,195 +94,6 @@ jobs: # branch_name: master # event_name: pull_request - genai_build_cpack: - name: genai cpack (${{ matrix.build-type }}) - strategy: - matrix: - build-type: [Release, Debug] - needs: [ openvino_download ] - timeout-minutes: 45 - defaults: - run: - shell: pwsh - runs-on: aks-win-8-cores-16gb-st - env: - CMAKE_GENERATOR: 'Ninja' # Ninja is the only Windows native generator supported by ccache - OV_INSTALL_DIR: ${{ github.workspace }}\install\ov - GENAI_INSTALL_DIR: ${{ github.workspace }}\install\genai - INSTALL_TOOLS_DIR: ${{ github.workspace }}\tools - INSTALL_TESTS_DIR: ${{ github.workspace }}\tests - SRC_DIR: ${{ github.workspace }}\src\genai - BUILD_DIR: ${{ github.workspace }}\build\genai - CCACHE_DIR: ${{ github.workspace }}\ccache - MANIFEST_PATH: ${{ github.workspace }}\manifest.yml - - steps: - - name: Clone genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - submodules: recursive - path: ${{ env.SRC_DIR }} - - - name: Setup Python 3.10 - if: ${{ matrix.build-type != 'Debug' }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.10' - - - name: Setup Python 3.11 - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.11' - - - name: Setup Python 3.12 - if: ${{ matrix.build-type != 'Debug' }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.12' - - - name: Setup Python 3.13 - if: ${{ matrix.build-type != 'Debug' }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: '3.13' - - - name: Download OpenVINO package - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ needs.openvino_download.outputs.ov_artifact_name }} - path: ${{ env.OV_INSTALL_DIR }} - merge-multiple: true - - # - # Build - # - - - name: Download and install ninja - run: | - Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip -OutFile ninja-win.zip -MaximumRetryCount 10 - Expand-Archive -Force ninja-win.zip - # Add it to the GitHub Path so it would be available in the subsequent steps - Add-Content -Path $env:GITHUB_PATH -Value "${{ github.workspace }}/ninja-win" - - - name: Download and install ccache - run: | - Invoke-WebRequest -Uri 'https://github.com/ccache/ccache/releases/download/v4.9.1/ccache-4.9.1-windows-x86_64.zip' -OutFile 'ccache.zip' - Expand-Archive -Path 'ccache.zip' -DestinationPath 'C:\temp\ccache' - Move-Item -Path 'C:\temp\ccache\*' -Destination 'C:\ccache' - Add-Content -Path $env:GITHUB_PATH -Value "C:\ccache" - - - name: Setup ccache - id: ccache-restore - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - key: ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack - path: ${{ env.CCACHE_DIR }} - - - name: Generate product manifest - id: create_manifest - uses: openvinotoolkit/openvino/.github/actions/create_manifest@master - with: - repos: ${{ env.SRC_DIR }} - product_type: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} - target_arch: 'x86_64' - build_type: ${{ matrix.build-type }} - save_to: ${{ env.MANIFEST_PATH }} - - - name: Clean ccache stats - run: ccache --zero-stats --show-config - - - name: Configure Developer Command Prompt for Microsoft Visual C++ - uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 - with: - toolset: 14.42 # v2022 - - - name: CMake Build - shell: pwsh - run: | - ${{ env.OV_INSTALL_DIR }}/setupvars.ps1 - if ( "${{ matrix.build-type }}" -ne "Debug" ) { - $pyVersions = '3.10', '3.11', '3.12', '3.13' - } else { - $pyVersions = '3.11' - } - - foreach ($pyVersion in $pyVersions) { - Remove-Item -Path "${{ env.BUILD_DIR }}/CMakeCache.txt" -Force -ErrorAction SilentlyContinue - $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" - $pythonExecutablePath = & cmd /c $pythonCommand - - cmake -DPython3_EXECUTABLE="$pythonExecutablePath" -DOpenVINODeveloperPackage_DIR=${{ env.OV_INSTALL_DIR }}/developer_package/cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} && - cmake --build ${{ env.BUILD_DIR }} --parallel $ENV:NUMBER_OF_PROCESSORS --config ${{ matrix.build-type }} --verbose && - cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.GENAI_INSTALL_DIR }} - if ($LASTEXITCODE -ne 0) { - Write-Host "Failed to build bindings for Python $pyVersion" - exit 1 - } - } - - cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TOOLS_DIR }} --component tools_bin - cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TESTS_DIR }} --component tests - env: - CMAKE_TLS_VERIFY: 0 - - - name: Show ccache stats - run: ccache --show-stats - - # - # Upload build artifacts - # - - - name: Pack Artifacts - run: | - $file=Get-ChildItem -Path "${{ env.GENAI_INSTALL_DIR }}" - $compress = @{ - Path = $file - CompressionLevel = "Optimal" - DestinationPath = "${{ env.BUILD_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip" - } - Compress-Archive @compress - - - name: Save ccache - if: always() && steps.ccache-restore.outputs.cache-hit != 'true' && github.event_name == 'push' - uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 - with: - key: ${{ steps.ccache-restore.outputs.cache-primary-key }} - path: ${{ env.CCACHE_DIR }} - - - name: Upload cpack package - if: ${{ always() }} - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_cpack_${{ matrix.build-type }} - path: ${{ env.BUILD_DIR }}/*.zip - if-no-files-found: 'error' - - - name: Upload Tools - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_tools_${{ matrix.build-type }} - path: ${{ env.INSTALL_TOOLS_DIR }} - if-no-files-found: 'error' - - - name: Upload Tests - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_tests_${{ matrix.build-type }} - path: ${{ env.INSTALL_TESTS_DIR }} - if-no-files-found: 'error' - - - name: Upload manifest - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: manifest_${{ matrix.build-type }} - path: ${{ env.MANIFEST_PATH }} - if-no-files-found: 'error' - genai_build_wheel: name: genai wheel needs: [ openvino_download ] @@ -306,7 +117,7 @@ jobs: with: submodules: recursive path: ${{ env.SRC_DIR }} - + - name: Setup Python 3.11 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: @@ -376,32 +187,32 @@ jobs: - name: Build WWB Wheel run: python -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ${{ env.SRC_DIR }}/tools/who_what_benchmark working-directory: ${{ env.OV_INSTALL_DIR }} - + - name: Setup Python 3.10 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.10' cache: 'pip' - + - name: Setup Python 3.12 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.12' cache: 'pip' - + - name: Setup Python 3.13 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.13' cache: 'pip' - + - name: Build genai wheel run: | $pyVersions = '3.10', '3.11', '3.12', '3.13' foreach ($pyVersion in $pyVersions) { $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" $pythonExecutablePath = & cmd /c $pythonCommand - + & $pythonExecutablePath -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ` --config-settings=override=cmake.generator='Ninja' ` --config-settings=override=cmake.build_path='${{ env.BUILD_DIR }}/genai' ` @@ -433,162 +244,6 @@ jobs: path: ${{ env.INSTALL_DIR }} if-no-files-found: 'error' - store_artifacts: - name: Store build artifacts - strategy: - matrix: - build-type: [Release] - needs: [openvino_download, genai_build_wheel, genai_build_cpack] - timeout-minutes: 10 - defaults: - run: - shell: bash - runs-on: aks-linux-medium-st - container: - image: openvinogithubactions.azurecr.io/library/python:3.12-slim - volumes: - - /mount:/mount - - ${{ github.workspace }}:${{ github.workspace }} - env: - WHEEL_PACKAGE: ${{ github.workspace }}/wheels - MANIFEST_PATH: ${{ github.workspace }}/manifest.yml - - steps: - - name: Download genai package - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}_${{ matrix.build-type }} - path: ${{ github.workspace }} - - - name: Download manifest and wheels - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: '{${{ env.GENAI_WHEELS_ARTIFACT_NAME }},manifest_${{ matrix.build-type }}}' - path: ${{ github.workspace }} - merge-multiple: true - - - name: Store ${{ matrix.build_type }} artifacts to a shared drive - id: store_artifacts - if: ${{ always() }} - uses: openvinotoolkit/openvino/.github/actions/store_artifacts@master - with: - artifacts: | - ${{ github.workspace }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip - ${{ env.WHEEL_PACKAGE }} - ${{ env.MANIFEST_PATH }} - storage_dir: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} - storage_root: ${{ env.ARTIFACTS_SHARE }} - product_name: ${{ github.event.repository.name }} - - genai_build_samples: - name: Build Samples - ${{ matrix.build-type }} - strategy: - fail-fast: false - matrix: - build-type: [Release, Debug] - needs: [ openvino_download, genai_build_cpack ] - timeout-minutes: 10 - defaults: - run: - shell: pwsh - runs-on: aks-win-4-cores-8gb-st - env: - OV_INSTALL_DIR: ${{ github.workspace }}/install/ov - SRC_DIR: ${{ github.workspace }}/src - BUILD_DIR: ${{ github.workspace }}/build - INSTALL_DIR: ${{ github.workspace }}/install/genai - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - - - name: Download Build Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }}}" - path: ${{ env.OV_INSTALL_DIR }} - merge-multiple: true - - - name: Extract Artifacts - run: Expand-Archive -Path ${{ env.OV_INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.OV_INSTALL_DIR }} - - - name: Build Samples (Release) - if: ${{ 'Release' == matrix.build-type }} - run: | - & ${{ env.OV_INSTALL_DIR }}/samples/cpp/build_samples.ps1 -i ${{ env.INSTALL_DIR }} - & ${{ env.OV_INSTALL_DIR }}/samples/c/build_samples.ps1 -i ${{ env.INSTALL_DIR }} - - - name: Build Samples (Debug) - if: ${{ 'Release' != matrix.build-type }} - run: | - . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" - cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.OV_INSTALL_DIR }}/samples/cpp -B ${{ env.BUILD_DIR }} - cmake --build ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --parallel $ENV:NUMBER_OF_PROCESSORS - cmake --install ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --component samples_bin --prefix ${{ env.INSTALL_DIR }} - - - name: Upload Samples Build Package - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_samples_${{ matrix.build-type }} - path: ${{ env.INSTALL_DIR }} - if-no-files-found: 'error' - - genai_build_nodejs: - name: Build Node.js bindings - needs: [ openvino_download ] - timeout-minutes: 90 - defaults: - run: - shell: pwsh - runs-on: aks-win-4-cores-8gb-st - - env: - OV_INSTALL_DIR: ${{ github.workspace }}/ov - SRC_DIR: ${{ github.workspace }}/openvino.genai - INSTALL_DIR: ${{ github.workspace }}/openvino.genai/src/js/bin - BUILD_DIR: ${{ github.workspace }}/build - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - submodules: recursive - path: ${{ env.SRC_DIR }} - - - name: Download OpenVINO package - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ needs.openvino_download.outputs.ov_artifact_name }} - path: ${{ env.OV_INSTALL_DIR }} - merge-multiple: true - - - name: Setup Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - - - name: Build GenAI Node.js bindings - run: | - . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" - cmake -DCMAKE_BUILD_TYPE=Release ` - -DENABLE_JS=ON -DCPACK_GENERATOR=NPM ` - -DENABLE_PYTHON=OFF -DENABLE_WHEEL=OFF ` - -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} - cmake --build ${{ env.BUILD_DIR }} --config Release --parallel --verbose - cmake --install ${{ env.BUILD_DIR }} --config Release --prefix ${{ env.INSTALL_DIR }} - - - name: Upload Node.js bindings Build Package - if: always() - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: genai_nodejs_bindings - path: ${{ env.INSTALL_DIR }} - if-no-files-found: 'error' - genai_tests_wheel: name: Python (${{ matrix.test.name}}) Tests (wheel) needs: [ smart_ci, openvino_download, genai_build_wheel ] @@ -597,41 +252,41 @@ jobs: fail-fast: false matrix: test: - - name: 'Whisper' - # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed - cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} - timeout: 120 - - name: 'Cacheopt E2E (Part 1)' - cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - timeout: 180 - - name: 'Cacheopt E2E (Part 2)' - cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - timeout: 360 - - name: 'LLM & VLM' - cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - timeout: 180 - - name: 'GGUF Reader tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - timeout: 360 - - name: 'Tokenizer tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} - timeout: 60 - - name: 'API tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} - timeout: 60 - - name: 'Rag tests' - cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} - timeout: 30 + # - name: 'Whisper' + # # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed + # cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} + # timeout: 120 + # - name: 'Cacheopt E2E (Part 1)' + # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + # timeout: 180 + # - name: 'Cacheopt E2E (Part 2)' + # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + # timeout: 360 + # - name: 'LLM & VLM' + # cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + # timeout: 180 + # - name: 'GGUF Reader tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + # timeout: 360 + # - name: 'Tokenizer tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} + # timeout: 60 + # - name: 'API tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} + # timeout: 60 + # - name: 'Rag tests' + # cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' + # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} + # timeout: 30 - name: 'WWB tests' - cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "not nanollava"' + cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf"' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).WWB.test }} timeout: 120 - name: 'WWB tests (nanollava)' @@ -685,256 +340,3 @@ jobs: run: ${{ matrix.test.cmd }} working-directory: ${{ env.SRC_DIR }} - genai_samples_tests: - name: Samples ${{ matrix.test.name }} (${{ matrix.build-type }}) - strategy: - fail-fast: false - matrix: - build-type: [Release] - test: - - name: 'LLM' - marker: 'llm' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).LLM_samples.test }} - runner: 'aks-win-16-cores-32gb-st' - - name: 'Whisper' - marker: 'whisper' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Whisper_samples.test }} - runner: 'aks-win-4-cores-8gb-st' - - name: 'dreamlike_anime_1_0' - marker: 'dreamlike_anime_1_0' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-win-8-cores-32gb-st' - - name: 'LCM_Dreamshaper_v7_int8_ov' - marker: 'LCM_Dreamshaper_v7_int8_ov' - cmd: 'tests/python_tests/samples' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} - runner: 'aks-win-8-cores-16gb-st' - - name: 'Rag' - marker: 'rag' - cmd: 'tests/python_tests/samples' - runner: 'aks-win-4-cores-8gb-st' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG_samples.test }} - - name: 'Speech generation' - marker: 'speech_generation' - cmd: 'tests/python_tests/samples' - runner: 'aks-win-4-cores-8gb-st' - run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Speech_generation_samples.test }} - - needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_build_nodejs ] - timeout-minutes: 120 - defaults: - run: - shell: pwsh - runs-on: ${{ matrix.test.runner }} - env: - INSTALL_DIR: ${{ github.workspace }}/install - SRC_DIR: ${{ github.workspace }}/src - BUILD_DIR: ${{ github.workspace }}/build - # The debug logging includes messages about the time it takes to read the GGUF model. - # These messages differ from run to run, so we cannot compare the results of the CPP, Python, and JavaScript parts. - OPENVINO_LOG_LEVEL: 1 - - steps: - - name: Clone openvino.genai - if: ${{ matrix.test.run_condition }} - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - - - name: Download Build Artifacts - if: ${{ matrix.test.run_condition }} - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_samples_${{ matrix.build-type }},genai_wheels}" - path: ${{ env.INSTALL_DIR }} - merge-multiple: true - - - name: Extract Artifacts - if: ${{ matrix.test.run_condition }} - run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} - - - name: Download GenAI JS Bildings Artifacts - if: ${{ matrix.test.run_condition }} - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: genai_nodejs_bindings - path: ${{ env.SRC_DIR }}/src/js/bin - merge-multiple: true - - - name: Setup Python ${{ env.PYTHON_VERSION }} - if: ${{ matrix.test.run_condition }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - - - name: Install GenAI wheels - if: ${{ matrix.test.run_condition }} - uses: ./src/.github/actions/install_wheel - with: - packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" - requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" - local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels - - - name: Setup NodeJS - if: ${{ matrix.test.run_condition }} - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 - with: - node-version: 21 - - - name: Install GenAI NPM package - if: ${{ matrix.test.run_condition }} - working-directory: ${{ env.SRC_DIR }}/src/js - run: | - npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts - Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin - npm install --verbose - - - name: Install NPM dependencies for samples - if: ${{ matrix.test.run_condition }} - working-directory: ${{ env.SRC_DIR }}/samples/js/text_generation - run: | - npm install ${{ env.SRC_DIR }}/src/js - npm install --verbose - - - name: Test Samples (Python and C++) - if: ${{ matrix.test.run_condition }} - run: python -m pytest -vs ${{ env.SRC_DIR }}/${{ matrix.test.cmd }} -m "${{ matrix.test.marker }}" - env: - PATH: "${{ env.INSTALL_DIR }}/runtime/bin/intel64/${{ matrix.build-type }};${{ env.INSTALL_DIR }}/runtime/3rdparty/tbb/bin;%PATH%" # Required for C++ samples - SAMPLES_PY_DIR: "${{ env.INSTALL_DIR }}/samples/python" - SAMPLES_JS_DIR: "${{ env.SRC_DIR }}/samples/js" - SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" - SAMPLES_C_DIR: "${{ env.INSTALL_DIR }}/samples_bin" - - genai_tools_tests: - name: Tools tests (${{ matrix.build-type }}) - strategy: - fail-fast: false - matrix: - build-type: [Release] - needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel ] - if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching }} - timeout-minutes: 90 - defaults: - run: - shell: pwsh - runs-on: aks-win-8-cores-16gb-st - env: - INSTALL_DIR: ${{ github.workspace }}/install - SRC_DIR: ${{ github.workspace }}/src - BUILD_DIR: ${{ github.workspace }}/build - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - - - name: Download Build Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_tools_${{ matrix.build-type }},genai_tests_${{ matrix.build-type }},genai_wheels}" - path: ${{ env.INSTALL_DIR }} - merge-multiple: true - - - name: Extract Artifacts - run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} - - - name: Setup Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 - with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - - - name: Install GenAI wheels - uses: ./src/.github/actions/install_wheel - with: - packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" - requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" - local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels - - - name: gtests unit tests - run: | - . "${{ env.INSTALL_DIR }}/setupvars.ps1" - & "${{ env.INSTALL_DIR }}/tests/tests_continuous_batching.exe" --gtest_filter="-AddSecondInputTest.*" - - - name: Test C++ Tools - run: | - . "${{ env.INSTALL_DIR }}/setupvars.ps1" - python -m pytest -vs ${{ env.SRC_DIR }}/tests/python_tests/samples/test_continuous_batching_tools.py -m "samples" - env: - SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" - - genai_nodejs_tests: - name: Node.js bindings tests - needs: [ smart_ci, openvino_download, genai_build_nodejs ] - if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).JS_API }} - timeout-minutes: 20 - defaults: - run: - shell: pwsh - runs-on: windows-2022 - - env: - SRC_DIR: ${{ github.workspace }}/openvino.genai - INSTALL_DIR: ${{ github.workspace }}/install - NODE_VERSION: 21 - - steps: - - name: Clone openvino.genai - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 - with: - path: ${{ env.SRC_DIR }} - submodules: recursive - - - name: Download OpenVINO Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: ${{ needs.openvino_download.outputs.ov_artifact_name }} - path: ${{ env.INSTALL_DIR }} - merge-multiple: true - - - name: Download GenAI JS Bildings Artifacts - uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 - with: - name: genai_nodejs_bindings - path: ${{ env.SRC_DIR }}/src/js/bin - merge-multiple: true - - - name: Setup Node ${{ env.NODE_VERSION }} - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 - with: - node-version: ${{ env.NODE_VERSION }} - - # JS pacakges uses the OpenVINO and OpenVINO GenAI libraries from the bin directory. - # Here we emulate the installation of the openvino-node package from NPM. The latest - # release of the openvino-node package is installed, and we need to update the binaries - # in the node_modules/openvino-node/bin directory to work correctly with GenAI - - name: Install npm package tests dependencies - working-directory: ${{ env.SRC_DIR }}/src/js - run: | - npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts - Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin - npm install --verbose - - - name: Run npm package tests - working-directory: ${{ env.SRC_DIR }}/src/js - run: npm test - - Overall_Status: - name: ci/gha_overall_status_windows - needs: [smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_tests_wheel, genai_tools_tests, genai_samples_tests, genai_build_nodejs, genai_nodejs_tests] - if: ${{ always() }} - runs-on: ubuntu-latest - steps: - - name: Check status of all jobs - if: >- - ${{ - contains(needs.*.result, 'failure') || - contains(needs.*.result, 'cancelled') - }} - run: exit 1 From 1bc67779bfb371d093372e70683c32ba6b651b1b Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Mon, 24 Nov 2025 00:43:37 +0000 Subject: [PATCH 5/8] Disable mac, no need to run that --- .github/workflows/mac.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index 89657de2d1..202458ef51 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -1,7 +1,6 @@ name: macOS (14, Python 3.11) on: workflow_dispatch: - pull_request: merge_group: push: branches: @@ -146,7 +145,7 @@ jobs: restore-keys: | ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack path: ${{ env.CCACHE_DIR }} - + - name: Generate product manifest id: create_manifest uses: openvinotoolkit/openvino/.github/actions/create_manifest@master @@ -159,7 +158,7 @@ jobs: - name: Clean ccache stats run: ccache --zero-stats --show-config - + - name: CMake Build run: | source ${{ env.OV_INSTALL_DIR }}/setupvars.sh @@ -205,7 +204,7 @@ jobs: name: genai_tests_${{ matrix.build-type }} path: ${{ env.INSTALL_TESTS_DIR }} if-no-files-found: 'error' - + - name: Upload manifest if: always() uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 @@ -263,7 +262,7 @@ jobs: restore-keys: | ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-wheel path: ${{ env.CCACHE_DIR }}\ - + - name: Set CI environment id: create_manifest uses: openvinotoolkit/openvino/.github/actions/create_manifest@master From 6dd345d02980c07a4798d7d703deacf72acff769 Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Mon, 24 Nov 2025 00:43:56 +0000 Subject: [PATCH 6/8] trying to filter out passing tests to isolate the problem --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 96f3f71294..dba2616a2e 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -286,7 +286,7 @@ jobs: # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} # timeout: 30 - name: 'WWB tests' - cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf"' + cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -k "katuni4ka/tiny-random-llava-visual-text or hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf or hf-internal-testing/tiny-stable-diffusion-torch-image-to-image-hf or Qwen/Qwen3-Embedding-0.6B-text-embedding"' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).WWB.test }} timeout: 120 - name: 'WWB tests (nanollava)' From 2aa500863ceca02f138c1a9643e98092c33c0e8a Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Tue, 25 Nov 2025 13:55:13 +0000 Subject: [PATCH 7/8] Revert "trying to filter out passing tests to isolate the problem" This reverts commit 6dd345d02980c07a4798d7d703deacf72acff769. --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index dba2616a2e..96f3f71294 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -286,7 +286,7 @@ jobs: # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} # timeout: 30 - name: 'WWB tests' - cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -k "katuni4ka/tiny-random-llava-visual-text or hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf or hf-internal-testing/tiny-stable-diffusion-torch-image-to-image-hf or Qwen/Qwen3-Embedding-0.6B-text-embedding"' + cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf"' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).WWB.test }} timeout: 120 - name: 'WWB tests (nanollava)' From 7a9523b339a1dfc10b166161ecea7b29795a6304 Mon Sep 17 00:00:00 2001 From: Andrey Babushkin Date: Tue, 25 Nov 2025 22:57:37 +0000 Subject: [PATCH 8/8] Revert "Reapply "Trying to isolate the problem"" This reverts commit 0c3751118db0634d5fe9590642581b4b38437a90. --- .github/workflows/windows.yml | 678 ++++++++++++++++++++++++++++++++-- 1 file changed, 638 insertions(+), 40 deletions(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 96f3f71294..53cedc84a4 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -94,6 +94,195 @@ jobs: # branch_name: master # event_name: pull_request + genai_build_cpack: + name: genai cpack (${{ matrix.build-type }}) + strategy: + matrix: + build-type: [Release, Debug] + needs: [ openvino_download ] + timeout-minutes: 45 + defaults: + run: + shell: pwsh + runs-on: aks-win-8-cores-16gb-st + env: + CMAKE_GENERATOR: 'Ninja' # Ninja is the only Windows native generator supported by ccache + OV_INSTALL_DIR: ${{ github.workspace }}\install\ov + GENAI_INSTALL_DIR: ${{ github.workspace }}\install\genai + INSTALL_TOOLS_DIR: ${{ github.workspace }}\tools + INSTALL_TESTS_DIR: ${{ github.workspace }}\tests + SRC_DIR: ${{ github.workspace }}\src\genai + BUILD_DIR: ${{ github.workspace }}\build\genai + CCACHE_DIR: ${{ github.workspace }}\ccache + MANIFEST_PATH: ${{ github.workspace }}\manifest.yml + + steps: + - name: Clone genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + submodules: recursive + path: ${{ env.SRC_DIR }} + + - name: Setup Python 3.10 + if: ${{ matrix.build-type != 'Debug' }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.10' + + - name: Setup Python 3.11 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.11' + + - name: Setup Python 3.12 + if: ${{ matrix.build-type != 'Debug' }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.12' + + - name: Setup Python 3.13 + if: ${{ matrix.build-type != 'Debug' }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: '3.13' + + - name: Download OpenVINO package + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ needs.openvino_download.outputs.ov_artifact_name }} + path: ${{ env.OV_INSTALL_DIR }} + merge-multiple: true + + # + # Build + # + + - name: Download and install ninja + run: | + Invoke-WebRequest https://github.com/ninja-build/ninja/releases/download/v1.11.1/ninja-win.zip -OutFile ninja-win.zip -MaximumRetryCount 10 + Expand-Archive -Force ninja-win.zip + # Add it to the GitHub Path so it would be available in the subsequent steps + Add-Content -Path $env:GITHUB_PATH -Value "${{ github.workspace }}/ninja-win" + + - name: Download and install ccache + run: | + Invoke-WebRequest -Uri 'https://github.com/ccache/ccache/releases/download/v4.9.1/ccache-4.9.1-windows-x86_64.zip' -OutFile 'ccache.zip' + Expand-Archive -Path 'ccache.zip' -DestinationPath 'C:\temp\ccache' + Move-Item -Path 'C:\temp\ccache\*' -Destination 'C:\ccache' + Add-Content -Path $env:GITHUB_PATH -Value "C:\ccache" + + - name: Setup ccache + id: ccache-restore + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + key: ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-${{ runner.arch }}-ccache-${{ env.TARGET_BRANCH }}-${{ matrix.build-type }}-cpack + path: ${{ env.CCACHE_DIR }} + + - name: Generate product manifest + id: create_manifest + uses: openvinotoolkit/openvino/.github/actions/create_manifest@master + with: + repos: ${{ env.SRC_DIR }} + product_type: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} + target_arch: 'x86_64' + build_type: ${{ matrix.build-type }} + save_to: ${{ env.MANIFEST_PATH }} + + - name: Clean ccache stats + run: ccache --zero-stats --show-config + + - name: Configure Developer Command Prompt for Microsoft Visual C++ + uses: ilammy/msvc-dev-cmd@0b201ec74fa43914dc39ae48a89fd1d8cb592756 # v1.13.0 + with: + toolset: 14.42 # v2022 + + - name: CMake Build + shell: pwsh + run: | + ${{ env.OV_INSTALL_DIR }}/setupvars.ps1 + if ( "${{ matrix.build-type }}" -ne "Debug" ) { + $pyVersions = '3.10', '3.11', '3.12', '3.13' + } else { + $pyVersions = '3.11' + } + + foreach ($pyVersion in $pyVersions) { + Remove-Item -Path "${{ env.BUILD_DIR }}/CMakeCache.txt" -Force -ErrorAction SilentlyContinue + $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" + $pythonExecutablePath = & cmd /c $pythonCommand + + cmake -DPython3_EXECUTABLE="$pythonExecutablePath" -DOpenVINODeveloperPackage_DIR=${{ env.OV_INSTALL_DIR }}/developer_package/cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} && + cmake --build ${{ env.BUILD_DIR }} --parallel $ENV:NUMBER_OF_PROCESSORS --config ${{ matrix.build-type }} --verbose && + cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.GENAI_INSTALL_DIR }} + if ($LASTEXITCODE -ne 0) { + Write-Host "Failed to build bindings for Python $pyVersion" + exit 1 + } + } + + cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TOOLS_DIR }} --component tools_bin + cmake --install ${{ env.BUILD_DIR }} --config=${{ matrix.build-type }} --prefix=${{ env.INSTALL_TESTS_DIR }} --component tests + env: + CMAKE_TLS_VERIFY: 0 + + - name: Show ccache stats + run: ccache --show-stats + + # + # Upload build artifacts + # + + - name: Pack Artifacts + run: | + $file=Get-ChildItem -Path "${{ env.GENAI_INSTALL_DIR }}" + $compress = @{ + Path = $file + CompressionLevel = "Optimal" + DestinationPath = "${{ env.BUILD_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip" + } + Compress-Archive @compress + + - name: Save ccache + if: always() && steps.ccache-restore.outputs.cache-hit != 'true' && github.event_name == 'push' + uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + with: + key: ${{ steps.ccache-restore.outputs.cache-primary-key }} + path: ${{ env.CCACHE_DIR }} + + - name: Upload cpack package + if: ${{ always() }} + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_cpack_${{ matrix.build-type }} + path: ${{ env.BUILD_DIR }}/*.zip + if-no-files-found: 'error' + + - name: Upload Tools + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_tools_${{ matrix.build-type }} + path: ${{ env.INSTALL_TOOLS_DIR }} + if-no-files-found: 'error' + + - name: Upload Tests + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_tests_${{ matrix.build-type }} + path: ${{ env.INSTALL_TESTS_DIR }} + if-no-files-found: 'error' + + - name: Upload manifest + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: manifest_${{ matrix.build-type }} + path: ${{ env.MANIFEST_PATH }} + if-no-files-found: 'error' + genai_build_wheel: name: genai wheel needs: [ openvino_download ] @@ -117,7 +306,7 @@ jobs: with: submodules: recursive path: ${{ env.SRC_DIR }} - + - name: Setup Python 3.11 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: @@ -187,32 +376,32 @@ jobs: - name: Build WWB Wheel run: python -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ${{ env.SRC_DIR }}/tools/who_what_benchmark working-directory: ${{ env.OV_INSTALL_DIR }} - + - name: Setup Python 3.10 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.10' cache: 'pip' - + - name: Setup Python 3.12 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.12' cache: 'pip' - + - name: Setup Python 3.13 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: python-version: '3.13' cache: 'pip' - + - name: Build genai wheel run: | $pyVersions = '3.10', '3.11', '3.12', '3.13' foreach ($pyVersion in $pyVersions) { $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" $pythonExecutablePath = & cmd /c $pythonCommand - + & $pythonExecutablePath -m pip wheel -v --no-deps --wheel-dir ${{ env.WHEELS_DIR }} ` --config-settings=override=cmake.generator='Ninja' ` --config-settings=override=cmake.build_path='${{ env.BUILD_DIR }}/genai' ` @@ -244,6 +433,162 @@ jobs: path: ${{ env.INSTALL_DIR }} if-no-files-found: 'error' + store_artifacts: + name: Store build artifacts + strategy: + matrix: + build-type: [Release] + needs: [openvino_download, genai_build_wheel, genai_build_cpack] + timeout-minutes: 10 + defaults: + run: + shell: bash + runs-on: aks-linux-medium-st + container: + image: openvinogithubactions.azurecr.io/library/python:3.12-slim + volumes: + - /mount:/mount + - ${{ github.workspace }}:${{ github.workspace }} + env: + WHEEL_PACKAGE: ${{ github.workspace }}/wheels + MANIFEST_PATH: ${{ github.workspace }}/manifest.yml + + steps: + - name: Download genai package + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}_${{ matrix.build-type }} + path: ${{ github.workspace }} + + - name: Download manifest and wheels + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: '{${{ env.GENAI_WHEELS_ARTIFACT_NAME }},manifest_${{ matrix.build-type }}}' + path: ${{ github.workspace }} + merge-multiple: true + + - name: Store ${{ matrix.build_type }} artifacts to a shared drive + id: store_artifacts + if: ${{ always() }} + uses: openvinotoolkit/openvino/.github/actions/store_artifacts@master + with: + artifacts: | + ${{ github.workspace }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip + ${{ env.WHEEL_PACKAGE }} + ${{ env.MANIFEST_PATH }} + storage_dir: ${{ env.BASE_PRODUCT_TYPE }}_${{ matrix.build-type }} + storage_root: ${{ env.ARTIFACTS_SHARE }} + product_name: ${{ github.event.repository.name }} + + genai_build_samples: + name: Build Samples - ${{ matrix.build-type }} + strategy: + fail-fast: false + matrix: + build-type: [Release, Debug] + needs: [ openvino_download, genai_build_cpack ] + timeout-minutes: 10 + defaults: + run: + shell: pwsh + runs-on: aks-win-4-cores-8gb-st + env: + OV_INSTALL_DIR: ${{ github.workspace }}/install/ov + SRC_DIR: ${{ github.workspace }}/src + BUILD_DIR: ${{ github.workspace }}/build + INSTALL_DIR: ${{ github.workspace }}/install/genai + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + + - name: Download Build Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }}}" + path: ${{ env.OV_INSTALL_DIR }} + merge-multiple: true + + - name: Extract Artifacts + run: Expand-Archive -Path ${{ env.OV_INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.OV_INSTALL_DIR }} + + - name: Build Samples (Release) + if: ${{ 'Release' == matrix.build-type }} + run: | + & ${{ env.OV_INSTALL_DIR }}/samples/cpp/build_samples.ps1 -i ${{ env.INSTALL_DIR }} + & ${{ env.OV_INSTALL_DIR }}/samples/c/build_samples.ps1 -i ${{ env.INSTALL_DIR }} + + - name: Build Samples (Debug) + if: ${{ 'Release' != matrix.build-type }} + run: | + . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" + cmake -DCMAKE_BUILD_TYPE=${{ matrix.build-type }} -S ${{ env.OV_INSTALL_DIR }}/samples/cpp -B ${{ env.BUILD_DIR }} + cmake --build ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --parallel $ENV:NUMBER_OF_PROCESSORS + cmake --install ${{ env.BUILD_DIR }} --config ${{ matrix.build-type }} --component samples_bin --prefix ${{ env.INSTALL_DIR }} + + - name: Upload Samples Build Package + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_samples_${{ matrix.build-type }} + path: ${{ env.INSTALL_DIR }} + if-no-files-found: 'error' + + genai_build_nodejs: + name: Build Node.js bindings + needs: [ openvino_download ] + timeout-minutes: 90 + defaults: + run: + shell: pwsh + runs-on: aks-win-4-cores-8gb-st + + env: + OV_INSTALL_DIR: ${{ github.workspace }}/ov + SRC_DIR: ${{ github.workspace }}/openvino.genai + INSTALL_DIR: ${{ github.workspace }}/openvino.genai/src/js/bin + BUILD_DIR: ${{ github.workspace }}/build + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + submodules: recursive + path: ${{ env.SRC_DIR }} + + - name: Download OpenVINO package + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ needs.openvino_download.outputs.ov_artifact_name }} + path: ${{ env.OV_INSTALL_DIR }} + merge-multiple: true + + - name: Setup Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' + + - name: Build GenAI Node.js bindings + run: | + . "${{ env.OV_INSTALL_DIR }}/setupvars.ps1" + cmake -DCMAKE_BUILD_TYPE=Release ` + -DENABLE_JS=ON -DCPACK_GENERATOR=NPM ` + -DENABLE_PYTHON=OFF -DENABLE_WHEEL=OFF ` + -S ${{ env.SRC_DIR }} -B ${{ env.BUILD_DIR }} + cmake --build ${{ env.BUILD_DIR }} --config Release --parallel --verbose + cmake --install ${{ env.BUILD_DIR }} --config Release --prefix ${{ env.INSTALL_DIR }} + + - name: Upload Node.js bindings Build Package + if: always() + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + with: + name: genai_nodejs_bindings + path: ${{ env.INSTALL_DIR }} + if-no-files-found: 'error' + genai_tests_wheel: name: Python (${{ matrix.test.name}}) Tests (wheel) needs: [ smart_ci, openvino_download, genai_build_wheel ] @@ -252,41 +597,41 @@ jobs: fail-fast: false matrix: test: - # - name: 'Whisper' - # # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed - # cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} - # timeout: 120 - # - name: 'Cacheopt E2E (Part 1)' - # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - # timeout: 180 - # - name: 'Cacheopt E2E (Part 2)' - # cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} - # timeout: 360 - # - name: 'LLM & VLM' - # cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - # timeout: 180 - # - name: 'GGUF Reader tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} - # timeout: 360 - # - name: 'Tokenizer tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} - # timeout: 60 - # - name: 'API tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} - # timeout: 60 - # - name: 'Rag tests' - # cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' - # run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} - # timeout: 30 + - name: 'Whisper' + # TODO: skip some tests temporary untill https://github.com/huggingface/datasets/issues/7647 dataset is fixed + cmd: 'python -m pytest -s -v tests/python_tests/test_whisper_pipeline.py tests/python_tests/test_whisper_pipeline_static.py -k "not test_smoke[sample_from_dataset0 and not test_whisper_constructors[sample_from_dataset0 and not test_max_new_tokens[sample_from_dataset0 and not test_language_mode[language and not test_task_mode[sample_from_dataset0 and not test_language_autodetect[sample_from_dataset0 and not test_whisper_config_constructor and not test_language_autodetect[sample_from_dataset1 and not test_language_autodetect[sample_from_dataset2 and not test_initial_prompt_hotwords[sample_from_dataset0 and not test_random_sampling[sample_from_dataset0"' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).whisper.test }} + timeout: 120 + - name: 'Cacheopt E2E (Part 1)' + cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_1.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + timeout: 180 + - name: 'Cacheopt E2E (Part 2)' + cmd: 'python -m pytest -s -v tests/python_tests/test_kv_cache_eviction/test_kv_cache_eviction_2.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test }} + timeout: 360 + - name: 'LLM & VLM' + cmd: 'python -m pytest -s -v tests/python_tests/test_llm_pipeline.py tests/python_tests/test_llm_pipeline_static.py tests/python_tests/test_vlm_pipeline.py tests/python_tests/test_structured_output.py --override-ini cache_dir=/mount/caches/pytest/' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).visual_language.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + timeout: 180 + - name: 'GGUF Reader tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_gguf_reader.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).GGUF.test || fromJSON(needs.smart_ci.outputs.affected_components).LLM.test }} + timeout: 360 + - name: 'Tokenizer tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_tokenizer.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).tokenizers.test }} + timeout: 60 + - name: 'API tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_continuous_batching.py tests/python_tests/test_generation_config.py tests/python_tests/test_sampling.py tests/python_tests/test_text_streamer.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching.test || fromJSON(needs.smart_ci.outputs.affected_components).sampling.test || fromJSON(needs.smart_ci.outputs.affected_components).text_streamer.test }} + timeout: 60 + - name: 'Rag tests' + cmd: 'python -m pytest -s -v tests/python_tests/test_rag.py' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG.test }} + timeout: 30 - name: 'WWB tests' - cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "hf-internal-testing/tiny-stable-diffusion-torch-image-inpainting-hf"' + cmd: 'python -m pytest -s -v tools/who_what_benchmark/tests -m "not nanollava"' run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).WWB.test }} timeout: 120 - name: 'WWB tests (nanollava)' @@ -340,3 +685,256 @@ jobs: run: ${{ matrix.test.cmd }} working-directory: ${{ env.SRC_DIR }} + genai_samples_tests: + name: Samples ${{ matrix.test.name }} (${{ matrix.build-type }}) + strategy: + fail-fast: false + matrix: + build-type: [Release] + test: + - name: 'LLM' + marker: 'llm' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).LLM_samples.test }} + runner: 'aks-win-16-cores-32gb-st' + - name: 'Whisper' + marker: 'whisper' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Whisper_samples.test }} + runner: 'aks-win-4-cores-8gb-st' + - name: 'dreamlike_anime_1_0' + marker: 'dreamlike_anime_1_0' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} + runner: 'aks-win-8-cores-32gb-st' + - name: 'LCM_Dreamshaper_v7_int8_ov' + marker: 'LCM_Dreamshaper_v7_int8_ov' + cmd: 'tests/python_tests/samples' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Image_generation_samples.test }} + runner: 'aks-win-8-cores-16gb-st' + - name: 'Rag' + marker: 'rag' + cmd: 'tests/python_tests/samples' + runner: 'aks-win-4-cores-8gb-st' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).RAG_samples.test }} + - name: 'Speech generation' + marker: 'speech_generation' + cmd: 'tests/python_tests/samples' + runner: 'aks-win-4-cores-8gb-st' + run_condition: ${{ fromJSON(needs.smart_ci.outputs.affected_components).Speech_generation_samples.test }} + + needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_build_nodejs ] + timeout-minutes: 120 + defaults: + run: + shell: pwsh + runs-on: ${{ matrix.test.runner }} + env: + INSTALL_DIR: ${{ github.workspace }}/install + SRC_DIR: ${{ github.workspace }}/src + BUILD_DIR: ${{ github.workspace }}/build + # The debug logging includes messages about the time it takes to read the GGUF model. + # These messages differ from run to run, so we cannot compare the results of the CPP, Python, and JavaScript parts. + OPENVINO_LOG_LEVEL: 1 + + steps: + - name: Clone openvino.genai + if: ${{ matrix.test.run_condition }} + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + + - name: Download Build Artifacts + if: ${{ matrix.test.run_condition }} + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_samples_${{ matrix.build-type }},genai_wheels}" + path: ${{ env.INSTALL_DIR }} + merge-multiple: true + + - name: Extract Artifacts + if: ${{ matrix.test.run_condition }} + run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} + + - name: Download GenAI JS Bildings Artifacts + if: ${{ matrix.test.run_condition }} + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: genai_nodejs_bindings + path: ${{ env.SRC_DIR }}/src/js/bin + merge-multiple: true + + - name: Setup Python ${{ env.PYTHON_VERSION }} + if: ${{ matrix.test.run_condition }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' + + - name: Install GenAI wheels + if: ${{ matrix.test.run_condition }} + uses: ./src/.github/actions/install_wheel + with: + packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" + requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" + local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels + + - name: Setup NodeJS + if: ${{ matrix.test.run_condition }} + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + with: + node-version: 21 + + - name: Install GenAI NPM package + if: ${{ matrix.test.run_condition }} + working-directory: ${{ env.SRC_DIR }}/src/js + run: | + npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts + Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin + npm install --verbose + + - name: Install NPM dependencies for samples + if: ${{ matrix.test.run_condition }} + working-directory: ${{ env.SRC_DIR }}/samples/js/text_generation + run: | + npm install ${{ env.SRC_DIR }}/src/js + npm install --verbose + + - name: Test Samples (Python and C++) + if: ${{ matrix.test.run_condition }} + run: python -m pytest -vs ${{ env.SRC_DIR }}/${{ matrix.test.cmd }} -m "${{ matrix.test.marker }}" + env: + PATH: "${{ env.INSTALL_DIR }}/runtime/bin/intel64/${{ matrix.build-type }};${{ env.INSTALL_DIR }}/runtime/3rdparty/tbb/bin;%PATH%" # Required for C++ samples + SAMPLES_PY_DIR: "${{ env.INSTALL_DIR }}/samples/python" + SAMPLES_JS_DIR: "${{ env.SRC_DIR }}/samples/js" + SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" + SAMPLES_C_DIR: "${{ env.INSTALL_DIR }}/samples_bin" + + genai_tools_tests: + name: Tools tests (${{ matrix.build-type }}) + strategy: + fail-fast: false + matrix: + build-type: [Release] + needs: [ smart_ci, openvino_download, genai_build_cpack, genai_build_wheel ] + if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).continuous_batching }} + timeout-minutes: 90 + defaults: + run: + shell: pwsh + runs-on: aks-win-8-cores-16gb-st + env: + INSTALL_DIR: ${{ github.workspace }}/install + SRC_DIR: ${{ github.workspace }}/src + BUILD_DIR: ${{ github.workspace }}/build + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + + - name: Download Build Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + pattern: "{${{ needs.openvino_download.outputs.ov_artifact_name }},genai_cpack_${{ matrix.build-type }},genai_tools_${{ matrix.build-type }},genai_tests_${{ matrix.build-type }},genai_wheels}" + path: ${{ env.INSTALL_DIR }} + merge-multiple: true + + - name: Extract Artifacts + run: Expand-Archive -Path ${{ env.INSTALL_DIR }}/${{ env.GENAI_ARCHIVE_ARTIFACT_BASE_NAME }}.zip -DestinationPath ${{ env.INSTALL_DIR }} + + - name: Setup Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' + + - name: Install GenAI wheels + uses: ./src/.github/actions/install_wheel + with: + packages: "openvino;openvino_tokenizers[transformers];openvino_genai[testing]" + requirements_files: "${{ env.SRC_DIR }}/samples/requirements.txt" + local_wheel_dir: ${{ env.INSTALL_DIR }}/wheels + + - name: gtests unit tests + run: | + . "${{ env.INSTALL_DIR }}/setupvars.ps1" + & "${{ env.INSTALL_DIR }}/tests/tests_continuous_batching.exe" --gtest_filter="-AddSecondInputTest.*" + + - name: Test C++ Tools + run: | + . "${{ env.INSTALL_DIR }}/setupvars.ps1" + python -m pytest -vs ${{ env.SRC_DIR }}/tests/python_tests/samples/test_continuous_batching_tools.py -m "samples" + env: + SAMPLES_CPP_DIR: "${{ env.INSTALL_DIR }}/samples_bin" + + genai_nodejs_tests: + name: Node.js bindings tests + needs: [ smart_ci, openvino_download, genai_build_nodejs ] + if: ${{ fromJSON(needs.smart_ci.outputs.affected_components).JS_API }} + timeout-minutes: 20 + defaults: + run: + shell: pwsh + runs-on: windows-2022 + + env: + SRC_DIR: ${{ github.workspace }}/openvino.genai + INSTALL_DIR: ${{ github.workspace }}/install + NODE_VERSION: 21 + + steps: + - name: Clone openvino.genai + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1 + with: + path: ${{ env.SRC_DIR }} + submodules: recursive + + - name: Download OpenVINO Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: ${{ needs.openvino_download.outputs.ov_artifact_name }} + path: ${{ env.INSTALL_DIR }} + merge-multiple: true + + - name: Download GenAI JS Bildings Artifacts + uses: akashchi/download-artifact@d59a9c15fec3fdb7c9adf09464124d00f9c11415 + with: + name: genai_nodejs_bindings + path: ${{ env.SRC_DIR }}/src/js/bin + merge-multiple: true + + - name: Setup Node ${{ env.NODE_VERSION }} + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 + with: + node-version: ${{ env.NODE_VERSION }} + + # JS pacakges uses the OpenVINO and OpenVINO GenAI libraries from the bin directory. + # Here we emulate the installation of the openvino-node package from NPM. The latest + # release of the openvino-node package is installed, and we need to update the binaries + # in the node_modules/openvino-node/bin directory to work correctly with GenAI + - name: Install npm package tests dependencies + working-directory: ${{ env.SRC_DIR }}/src/js + run: | + npm install $(Resolve-Path -Path "${{ env.INSTALL_DIR }}/openvino_node_npm_package/openvino-node-*") --ignore-scripts + Copy-Item -Recurse ${{ env.INSTALL_DIR }}/openvino_node_npm_package/bin node_modules/openvino-node/bin + npm install --verbose + + - name: Run npm package tests + working-directory: ${{ env.SRC_DIR }}/src/js + run: npm test + + Overall_Status: + name: ci/gha_overall_status_windows + needs: [smart_ci, openvino_download, genai_build_cpack, genai_build_wheel, genai_build_samples, genai_tests_wheel, genai_tools_tests, genai_samples_tests, genai_build_nodejs, genai_nodejs_tests] + if: ${{ always() }} + runs-on: ubuntu-latest + steps: + - name: Check status of all jobs + if: >- + ${{ + contains(needs.*.result, 'failure') || + contains(needs.*.result, 'cancelled') + }} + run: exit 1