From 8dd7832af7c43f27e6c9980ff5172f1cbc605e23 Mon Sep 17 00:00:00 2001 From: vansangpfiev Date: Wed, 13 Nov 2024 13:09:15 +0700 Subject: [PATCH 1/4] fix: install local without nvidia driver available --- engine/services/engine_service.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine/services/engine_service.cc b/engine/services/engine_service.cc index 0120def27..1f079b5c8 100644 --- a/engine/services/engine_service.cc +++ b/engine/services/engine_service.cc @@ -159,7 +159,8 @@ cpp::result EngineService::UnzipEngine( auto matched_variant = GetMatchedVariant(engine, variants); CTL_INF("Matched variant: " << matched_variant); - if (!found_cuda || matched_variant.empty()) { + if ((!found_cuda && system_info_utils::IsNvidiaSmiAvailable()) || + matched_variant.empty()) { return false; } From f61f370b4fffce457eb7210f29668212514498d9 Mon Sep 17 00:00:00 2001 From: vansangpfiev Date: Wed, 13 Nov 2024 16:13:56 +0700 Subject: [PATCH 2/4] fix: local installer extraction --- engine/services/engine_service.cc | 22 ++++++++++------- .../components/test_engine_matcher_utils.cc | 24 +++++++++++++++++++ engine/utils/engine_matcher_utils.h | 23 ++++++++++++++++++ 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/engine/services/engine_service.cc b/engine/services/engine_service.cc index 1f079b5c8..0b0ff905d 100644 --- a/engine/services/engine_service.cc +++ b/engine/services/engine_service.cc @@ -146,9 +146,10 @@ cpp::result EngineService::UnzipEngine( CTL_INF("Found cuda variant, extract it"); found_cuda = true; // extract binary - auto engine_path = - file_manager_utils::GetEnginesContainerPath() / engine; - archive_utils::ExtractArchive(path + "/" + cf, engine_path.string()); + auto cuda_path = + file_manager_utils::GetCudaToolkitPath(NormalizeEngine(engine)); + archive_utils::ExtractArchive(path + "/" + cf, cuda_path.string(), + true); } } } @@ -170,9 +171,12 @@ cpp::result EngineService::UnzipEngine( << ", will get engine from remote"); // Go with the remote flow } else { - auto engine_path = file_manager_utils::GetEnginesContainerPath(); + auto [v, ar] = engine_matcher_utils::GetVersionAndArch(matched_variant); + auto engine_path = file_manager_utils::GetEnginesContainerPath() / + NormalizeEngine(engine) / ar / v; + CTL_INF("engine_path: " << engine_path.string()); archive_utils::ExtractArchive(path + "/" + matched_variant, - engine_path.string()); + engine_path.string(), true); } return true; @@ -296,12 +300,12 @@ cpp::result EngineService::DownloadEngineV2( auto variant_path = variant_folder_path / selected_variant->name; std::filesystem::create_directories(variant_folder_path); - CLI_LOG("variant_folder_path: " + variant_folder_path.string()); + CTL_INF("variant_folder_path: " + variant_folder_path.string()); auto on_finished = [this, engine, selected_variant, variant_folder_path, normalize_version](const DownloadTask& finishedTask) { // try to unzip the downloaded file - CLI_LOG("Engine zip path: " << finishedTask.items[0].localPath.string()); - CLI_LOG("Version: " + normalize_version); + CTL_INF("Engine zip path: " << finishedTask.items[0].localPath.string()); + CTL_INF("Version: " + normalize_version); auto extract_path = finishedTask.items[0].localPath.parent_path(); @@ -310,7 +314,7 @@ cpp::result EngineService::DownloadEngineV2( auto variant = engine_matcher_utils::GetVariantFromNameAndVersion( selected_variant->name, engine, normalize_version); - CLI_LOG("Extracted variant: " + variant.value()); + CTL_INF("Extracted variant: " + variant.value()); // set as default auto res = SetDefaultEngineVariant(engine, normalize_version, variant.value()); diff --git a/engine/test/components/test_engine_matcher_utils.cc b/engine/test/components/test_engine_matcher_utils.cc index d724c3fde..7da4e3cd1 100644 --- a/engine/test/components/test_engine_matcher_utils.cc +++ b/engine/test/components/test_engine_matcher_utils.cc @@ -135,3 +135,27 @@ TEST_F(EngineMatcherUtilsTestSuite, TestValidate) { "cortex.llamacpp-0.1.25-25.08.24-windows-amd64-avx2.tar.gz"); } } + +TEST_F(EngineMatcherUtilsTestSuite, TestGetVersionAndArch) { + { + std::string variant = + "cortex.llamacpp-0.1.25-25.08.24-linux-amd64-avx-cuda-11-7.tar.gz"; + auto [version, arch] = engine_matcher_utils::GetVersionAndArch(variant); + EXPECT_EQ(version, "v0.1.25-25.08.24"); + EXPECT_EQ(arch, "linux-amd64-avx-cuda-11-7"); + } + + { + std::string variant = "cortex.llamacpp-0.1.25-windows-amd64-avx2.tar.gz"; + auto [version, arch] = engine_matcher_utils::GetVersionAndArch(variant); + EXPECT_EQ(version, "v0.1.25"); + EXPECT_EQ(arch, "windows-amd64-avx2"); + } + + { + std::string variant = "cortex.llamacpp-0.1.25-25.08.24-mac-amd64.tar.gz"; + auto [version, arch] = engine_matcher_utils::GetVersionAndArch(variant); + EXPECT_EQ(version, "v0.1.25-25.08.24"); + EXPECT_EQ(arch, "mac-amd64"); + } +} diff --git a/engine/utils/engine_matcher_utils.h b/engine/utils/engine_matcher_utils.h index 652e13486..a6135e532 100644 --- a/engine/utils/engine_matcher_utils.h +++ b/engine/utils/engine_matcher_utils.h @@ -172,4 +172,27 @@ inline std::string Validate(const std::vector& variants, return cuda_compatible; } + +inline std::pair GetVersionAndArch( + const std::string& file_name) { + // Remove the file extension + std::string base = file_name.substr(0, file_name.find("tar") - 1); + + size_t arch_pos = 0; + if (base.find("windows") != std::string::npos) { + arch_pos = base.find("-windows"); + } else if (base.find("linux") != std::string::npos) { + arch_pos = base.find("-linux"); + } else { + arch_pos = base.find("-mac"); + } + + // Extract architecture part + auto arch = base.substr(arch_pos + 1); + + // Extract version part + size_t v_pos = base.find_first_of('-'); + auto version = base.substr(v_pos + 1, arch_pos - v_pos - 1); + return std::pair("v" + version, arch); +} } // namespace engine_matcher_utils From 2940785579b5ee9bd5b42e3564bacc7d531c8024 Mon Sep 17 00:00:00 2001 From: vansangpfiev Date: Wed, 13 Nov 2024 17:28:37 +0700 Subject: [PATCH 3/4] fix: set default version --- engine/services/engine_service.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/engine/services/engine_service.cc b/engine/services/engine_service.cc index 0b0ff905d..cd874f89a 100644 --- a/engine/services/engine_service.cc +++ b/engine/services/engine_service.cc @@ -177,6 +177,18 @@ cpp::result EngineService::UnzipEngine( CTL_INF("engine_path: " << engine_path.string()); archive_utils::ExtractArchive(path + "/" + matched_variant, engine_path.string(), true); + + auto variant = + engine_matcher_utils::GetVariantFromNameAndVersion(ar, engine, v); + CTL_INF("Extracted variant: " + variant.value()); + // set as default + auto res = SetDefaultEngineVariant(engine, v, variant.value()); + if (res.has_error()) { + CTL_ERR("Failed to set default engine variant: " << res.error()); + return false; + } else { + CTL_INF("Set default engine variant: " << res.value().variant); + } } return true; From 36eeba10f187056dc50c42f5d3472f57ea9ce504 Mon Sep 17 00:00:00 2001 From: vansangpfiev Date: Wed, 13 Nov 2024 17:48:23 +0700 Subject: [PATCH 4/4] chore: enable docker e2e test --- .github/workflows/cortex-cpp-quality-gate.yml | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/.github/workflows/cortex-cpp-quality-gate.yml b/.github/workflows/cortex-cpp-quality-gate.yml index 85050581a..3c9eea724 100644 --- a/.github/workflows/cortex-cpp-quality-gate.yml +++ b/.github/workflows/cortex-cpp-quality-gate.yml @@ -188,40 +188,40 @@ jobs: AWS_SECRET_ACCESS_KEY: "${{ secrets.MINIO_SECRET_ACCESS_KEY }}" AWS_DEFAULT_REGION: "${{ secrets.MINIO_REGION }}" - # build-docker-and-test: - # runs-on: ubuntu-latest - # steps: - # - name: Getting the repo - # uses: actions/checkout@v3 - # with: - # submodules: 'recursive' - - # - name: Set up QEMU - # uses: docker/setup-qemu-action@v3 - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v3 + build-docker-and-test: + runs-on: ubuntu-latest + steps: + - name: Getting the repo + uses: actions/checkout@v3 + with: + submodules: 'recursive' + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - # - name: Run Docker - # run: | - # docker build -t menloltd/cortex:test -f docker/Dockerfile . - # docker run -it -d -p 3928:39281 --name cortex menloltd/cortex:test - - # - name: use python - # uses: actions/setup-python@v5 - # with: - # python-version: "3.10" - - # - name: Run e2e tests - # run: | - # cd engine - # python -m pip install --upgrade pip - # python -m pip install -r e2e-test/requirements.txt - # pytest e2e-test/test_api_docker.py - - # - name: Run Docker - # continue-on-error: true - # if: always() - # run: | - # docker stop cortex - # docker rm cortex + - name: Run Docker + run: | + docker build -t menloltd/cortex:test -f docker/Dockerfile . + docker run -it -d -p 3928:39281 --name cortex menloltd/cortex:test + + - name: use python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Run e2e tests + run: | + cd engine + python -m pip install --upgrade pip + python -m pip install -r e2e-test/requirements.txt + pytest e2e-test/test_api_docker.py + + - name: Run Docker + continue-on-error: true + if: always() + run: | + docker stop cortex + docker rm cortex