Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 578355d

Browse files
committed
update
1 parent 34480fc commit 578355d

File tree

4 files changed

+49
-157
lines changed

4 files changed

+49
-157
lines changed

engine/cli/commands/engine_install_cmd.cc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,12 @@ bool EngineInstallCmd::Exec(const std::string& engine,
125125
engine,
126126
},
127127
};
128+
Json::Value body;
129+
body["version"] = selected_version.value();
130+
body["variant"] = selected_variant.value();
128131

129-
auto response = curl_utils::SimplePostJson(install_url.ToFullPath());
132+
auto response = curl_utils::SimplePostJson(install_url.ToFullPath(),
133+
body.toStyledString());
130134
if (response.has_error()) {
131135
CTL_ERR(response.error());
132136
return false;
@@ -163,11 +167,13 @@ bool EngineInstallCmd::Exec(const std::string& engine,
163167
},
164168
};
165169

170+
Json::Value body;
166171
if (!version.empty()) {
167-
install_url.queries = {{"version", version}};
172+
body["version"] = version;
168173
}
169174

170-
auto response = curl_utils::SimplePostJson(install_url.ToFullPath());
175+
auto response = curl_utils::SimplePostJson(install_url.ToFullPath(),
176+
body.toStyledString());
171177
if (response.has_error()) {
172178
// TODO: namh refactor later
173179
Json::Value root;

engine/controllers/engines.cc

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,23 @@ void Engines::UninstallEngine(
4848
const HttpRequestPtr& req,
4949
std::function<void(const HttpResponsePtr&)>&& callback,
5050
const std::string& engine) {
51-
auto variant = (*(req->getJsonObject())).get("variant", "").asString();
52-
if (variant.empty()) {
53-
Json::Value ret;
54-
ret["message"] = "Variant is required";
55-
auto resp = cortex_utils::CreateCortexHttpJsonResponse(ret);
56-
resp->setStatusCode(k400BadRequest);
57-
callback(resp);
58-
return;
51+
std::optional<std::string> norm_variant = std::nullopt;
52+
std::optional<std::string> norm_version = std::nullopt;
53+
if (req->getJsonObject() != nullptr) {
54+
auto variant = (*(req->getJsonObject())).get("variant", "").asString();
55+
auto version =
56+
(*(req->getJsonObject())).get("version", "latest").asString();
57+
58+
if (!variant.empty()) {
59+
norm_variant = variant;
60+
}
61+
if (!version.empty()) {
62+
norm_version = version;
63+
}
5964
}
6065

61-
auto version = (*(req->getJsonObject())).get("version", "latest").asString();
62-
auto result =
63-
engine_service_->UninstallEngineVariant(engine, version, variant);
66+
auto result = engine_service_->UninstallEngineVariant(engine, norm_version,
67+
norm_variant);
6468

6569
Json::Value ret;
6670
if (result.has_error()) {
@@ -144,18 +148,22 @@ void Engines::InstallEngine(
144148
const HttpRequestPtr& req,
145149
std::function<void(const HttpResponsePtr&)>&& callback,
146150
const std::string& engine) {
147-
auto variant = (*(req->getJsonObject())).get("variant", "").asString();
148-
if (variant.empty()) {
149-
Json::Value ret;
150-
ret["message"] = "Variant is required";
151-
auto resp = cortex_utils::CreateCortexHttpJsonResponse(ret);
152-
resp->setStatusCode(k400BadRequest);
153-
callback(resp);
154-
return;
151+
std::optional<std::string> norm_variant = std::nullopt;
152+
std::string norm_version{"latest"};
153+
154+
if (req->getJsonObject() != nullptr) {
155+
auto variant = (*(req->getJsonObject())).get("variant", "").asString();
156+
auto version =
157+
(*(req->getJsonObject())).get("version", "latest").asString();
158+
159+
if (!variant.empty()) {
160+
norm_variant = variant;
161+
}
162+
norm_version = version;
155163
}
156164

157-
auto version = (*(req->getJsonObject())).get("version", "latest").asString();
158-
auto result = engine_service_->InstallEngineAsyncV2(engine, version, variant);
165+
auto result =
166+
engine_service_->InstallEngineAsync(engine, norm_version, norm_variant);
159167
if (result.has_error()) {
160168
Json::Value res;
161169
res["message"] = result.error();

engine/services/engine_service.cc

Lines changed: 7 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ std::string GetEnginePath(std::string_view e) {
6969
};
7070
} // namespace
7171

72-
cpp::result<void, std::string> EngineService::InstallEngineAsyncV2(
72+
cpp::result<void, std::string> EngineService::InstallEngineAsync(
7373
const std::string& engine, const std::string& version,
7474
const std::optional<std::string> variant_name) {
7575
auto ne = NormalizeEngine(engine);
76-
CTL_INF("InstallEngineAsyncV2: " << ne << ", " << version << ", "
77-
<< variant_name.value_or(""));
76+
CTL_INF("InstallEngineAsync: " << ne << ", " << version << ", "
77+
<< variant_name.value_or(""));
7878
auto os = hw_inf_.sys_inf->os;
7979
if (os == kMacOs && (ne == kOnnxRepo || ne == kTrtLlmRepo)) {
8080
return cpp::fail("Engine " + ne + " is not supported on macOS");
@@ -84,7 +84,7 @@ cpp::result<void, std::string> EngineService::InstallEngineAsyncV2(
8484
return cpp::fail("Engine " + ne + " is not supported on Linux");
8585
}
8686

87-
auto result = DownloadEngineV2(ne, version, variant_name);
87+
auto result = DownloadEngine(ne, version, variant_name);
8888
if (result.has_error()) {
8989
return cpp::fail(result.error());
9090
}
@@ -95,25 +95,6 @@ cpp::result<void, std::string> EngineService::InstallEngineAsyncV2(
9595
return {};
9696
}
9797

98-
cpp::result<bool, std::string> EngineService::InstallEngineAsync(
99-
const std::string& engine, const std::string& version,
100-
const std::string& src) {
101-
// Although this function is called async, only download tasks are performed async
102-
auto ne = NormalizeEngine(engine);
103-
if (!src.empty()) {
104-
auto res = UnzipEngine(ne, version, src);
105-
// If has error or engine is installed successfully
106-
if (res.has_error() || res.value()) {
107-
return res;
108-
}
109-
}
110-
auto result = DownloadEngine(ne, version, true /*async*/);
111-
if (result.has_error()) {
112-
return result;
113-
}
114-
return DownloadCuda(ne, true /*async*/);
115-
}
116-
11798
cpp::result<bool, std::string> EngineService::UnzipEngine(
11899
const std::string& engine, const std::string& version,
119100
const std::string& path) {
@@ -242,7 +223,7 @@ cpp::result<bool, std::string> EngineService::UninstallEngineVariant(
242223
}
243224
}
244225

245-
cpp::result<void, std::string> EngineService::DownloadEngineV2(
226+
cpp::result<void, std::string> EngineService::DownloadEngine(
246227
const std::string& engine, const std::string& version,
247228
const std::optional<std::string> variant_name) {
248229
auto normalized_version = version == "latest"
@@ -377,101 +358,6 @@ cpp::result<void, std::string> EngineService::DownloadEngineV2(
377358
return {};
378359
}
379360

380-
cpp::result<bool, std::string> EngineService::DownloadEngine(
381-
const std::string& engine, const std::string& version, bool async) {
382-
auto res = GetEngineVariants(engine, version);
383-
if (res.has_error()) {
384-
return cpp::fail("Failed to fetch engine releases: " + res.error());
385-
}
386-
387-
if (res.value().empty()) {
388-
return cpp::fail("No release found for " + version);
389-
}
390-
391-
auto os_arch{hw_inf_.sys_inf->os + "-" + hw_inf_.sys_inf->arch};
392-
393-
std::vector<std::string> variants;
394-
for (const auto& asset : res.value()) {
395-
variants.push_back(asset.name);
396-
}
397-
398-
CTL_INF("engine: " << engine);
399-
CTL_INF("CUDA version: " << hw_inf_.cuda_driver_version);
400-
auto matched_variant = GetMatchedVariant(engine, variants);
401-
CTL_INF("Matched variant: " << matched_variant);
402-
if (matched_variant.empty()) {
403-
CTL_ERR("No variant found for " << os_arch);
404-
return cpp::fail("No variant found for " + os_arch);
405-
}
406-
407-
for (const auto& asset : res.value()) {
408-
if (asset.name == matched_variant) {
409-
CTL_INF("Download url: " << asset.browser_download_url);
410-
411-
std::filesystem::path engine_folder_path =
412-
file_manager_utils::GetContainerFolderPath(
413-
file_manager_utils::DownloadTypeToString(DownloadType::Engine)) /
414-
engine;
415-
416-
if (!std::filesystem::exists(engine_folder_path)) {
417-
CTL_INF("Creating " << engine_folder_path.string());
418-
std::filesystem::create_directories(engine_folder_path);
419-
}
420-
if (IsEngineLoaded(engine)) {
421-
CTL_INF("Engine " << engine << " is already loaded, unloading it");
422-
auto unload_res = UnloadEngine(engine);
423-
if (unload_res.has_error()) {
424-
CTL_INF("Failed to unload engine: " << unload_res.error());
425-
return cpp::fail(unload_res.error());
426-
} else {
427-
CTL_INF("Engine " << engine << " unloaded successfully");
428-
}
429-
}
430-
CTL_INF("Engine folder path: " << engine_folder_path.string() << "\n");
431-
auto local_path = engine_folder_path / asset.name;
432-
auto downloadTask{
433-
DownloadTask{.id = engine,
434-
.type = DownloadType::Engine,
435-
.items = {DownloadItem{
436-
.id = engine,
437-
.downloadUrl = asset.browser_download_url,
438-
.localPath = local_path,
439-
}}}};
440-
441-
auto on_finished = [](const DownloadTask& finishedTask) {
442-
// try to unzip the downloaded file
443-
CTL_INF(
444-
"Engine zip path: " << finishedTask.items[0].localPath.string());
445-
446-
std::filesystem::path extract_path =
447-
finishedTask.items[0].localPath.parent_path().parent_path();
448-
449-
archive_utils::ExtractArchive(finishedTask.items[0].localPath.string(),
450-
extract_path.string());
451-
452-
// remove the downloaded file
453-
try {
454-
std::filesystem::remove(finishedTask.items[0].localPath);
455-
} catch (const std::exception& e) {
456-
CTL_WRN("Could not delete file: " << e.what());
457-
}
458-
CTL_INF("Finished!");
459-
};
460-
461-
if (async) {
462-
auto res = download_service_->AddTask(downloadTask, on_finished);
463-
if (res.has_error()) {
464-
return cpp::fail(res.error());
465-
}
466-
return true;
467-
} else {
468-
return download_service_->AddDownloadTask(downloadTask, on_finished);
469-
}
470-
}
471-
}
472-
return true;
473-
}
474-
475361
cpp::result<bool, std::string> EngineService::DownloadCuda(
476362
const std::string& engine, bool async) {
477363
if (hw_inf_.sys_inf->os == "mac" || engine == kOnnxRepo ||
@@ -1032,8 +918,8 @@ cpp::result<EngineUpdateResult, std::string> EngineService::UpdateEngine(
1032918
<< default_variant->variant << " is not up-to-date! Current: "
1033919
<< default_variant->version << ", latest: " << latest_version->name);
1034920

1035-
auto res = InstallEngineAsyncV2(engine, latest_version->tag_name,
1036-
default_variant->variant);
921+
auto res = InstallEngineAsync(engine, latest_version->tag_name,
922+
default_variant->variant);
1037923

1038924
return EngineUpdateResult{.engine = engine,
1039925
.variant = default_variant->variant,

engine/services/engine_service.h

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <string>
55
#include <string_view>
66
#include <vector>
7+
#include "common/engine_servicei.h"
78
#include "cortex-common/EngineI.h"
89
#include "cortex-common/cortexpythoni.h"
910
#include "services/download_service.h"
@@ -13,7 +14,6 @@
1314
#include "utils/github_release_utils.h"
1415
#include "utils/result.hpp"
1516
#include "utils/system_info_utils.h"
16-
#include "common/engine_servicei.h"
1717

1818
struct EngineUpdateResult {
1919
std::string engine;
@@ -37,7 +37,7 @@ struct SystemInfo;
3737

3838
using EngineV = std::variant<EngineI*, CortexPythonEngineI*>;
3939

40-
class EngineService: public EngineServiceI {
40+
class EngineService : public EngineServiceI {
4141
private:
4242
using EngineRelease = github_release_utils::GitHubRelease;
4343
using EngineVariant = github_release_utils::GitHubAsset;
@@ -69,17 +69,13 @@ class EngineService: public EngineServiceI {
6969
*/
7070
cpp::result<bool, std::string> IsEngineReady(const std::string& engine) const;
7171

72-
cpp::result<bool, std::string> InstallEngineAsync(
73-
const std::string& engine, const std::string& version = "latest",
74-
const std::string& src = "");
75-
7672
/**
7773
* Handling install engine variant.
7874
*
7975
* If no version provided, choose `latest`.
8076
* If no variant provided, automatically pick the best variant.
8177
*/
82-
cpp::result<void, std::string> InstallEngineAsyncV2(
78+
cpp::result<void, std::string> InstallEngineAsync(
8379
const std::string& engine, const std::string& version,
8480
const std::optional<std::string> variant_name);
8581

@@ -125,11 +121,7 @@ class EngineService: public EngineServiceI {
125121
const std::string& engine);
126122

127123
private:
128-
cpp::result<bool, std::string> DownloadEngine(
129-
const std::string& engine, const std::string& version = "latest",
130-
bool async = false);
131-
132-
cpp::result<void, std::string> DownloadEngineV2(
124+
cpp::result<void, std::string> DownloadEngine(
133125
const std::string& engine, const std::string& version = "latest",
134126
const std::optional<std::string> variant_name = std::nullopt);
135127

0 commit comments

Comments
 (0)