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

Commit 3edfb66

Browse files
committed
remove validate task
update update update update update
1 parent 3be991e commit 3edfb66

20 files changed

+263
-359
lines changed

engine/common/base.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,6 @@ class BaseModel {
2020
virtual void GetModels(
2121
const HttpRequestPtr& req,
2222
std::function<void(const HttpResponsePtr&)>&& callback) = 0;
23-
virtual void GetEngines(
24-
const HttpRequestPtr& req,
25-
std::function<void(const HttpResponsePtr&)>&& callback) = 0;
2623
virtual void FineTuning(
2724
const HttpRequestPtr& req,
2825
std::function<void(const HttpResponsePtr&)>&& callback) = 0;
@@ -48,4 +45,4 @@ class BaseEmbedding {
4845
std::function<void(const HttpResponsePtr&)>&& callback) = 0;
4946

5047
// The derived class can also override other methods if needed
51-
};
48+
};

engine/common/download_task.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,13 @@
44
#include <filesystem>
55
#include <sstream>
66
#include <string>
7-
#include <unordered_map>
87

98
enum class DownloadType { Model, Engine, Miscellaneous, CudaToolkit, Cortex };
109

1110
struct DownloadItem {
1211

1312
std::string id;
1413

15-
std::optional<std::unordered_map<std::string, std::string>> headers;
16-
1714
std::string downloadUrl;
1815

1916
/**

engine/controllers/engines.cc

Lines changed: 60 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
#include "services/engine_service.h"
33
#include "utils/archive_utils.h"
44
#include "utils/cortex_utils.h"
5+
#include "utils/engine_constants.h"
56
#include "utils/logging_utils.h"
67
#include "utils/string_utils.h"
78

89
namespace {
910
// Need to change this after we rename repositories
10-
// TODO: namh try to remove this
1111
std::string NormalizeEngine(const std::string& engine) {
1212
if (engine == kLlamaEngine) {
1313
return kLlamaRepo;
@@ -55,65 +55,38 @@ void Engines::InstallEngine(
5555
void Engines::ListEngine(
5656
const HttpRequestPtr& req,
5757
std::function<void(const HttpResponsePtr&)>&& callback) const {
58-
// TODO: NamH need refactor this
59-
// auto status_list = engine_service_->GetEngineInfoList();
60-
58+
std::vector<std::string> supported_engines{kLlamaEngine, kOnnxEngine,
59+
kTrtLlmEngine};
6160
Json::Value ret;
62-
ret["object"] = "list";
63-
// Json::Value data(Json::arrayValue);
64-
// for (auto& status : status_list) {
65-
// Json::Value ret;
66-
// ret["name"] = status.name;
67-
// ret["description"] = status.description;
68-
// ret["version"] = status.version.value_or("");
69-
// ret["variant"] = status.variant.value_or("");
70-
// ret["productName"] = status.product_name;
71-
// ret["status"] = status.status;
72-
// ret["format"] = status.format;
73-
//
74-
// data.append(std::move(ret));
75-
// }
61+
for (const auto& engine : supported_engines) {
62+
std::cout << engine << std::endl;
7663

77-
// ret["data"] = data;
78-
ret["result"] = "OK";
79-
auto resp = cortex_utils::CreateCortexHttpJsonResponse(ret);
80-
resp->setStatusCode(k200OK);
81-
callback(resp);
82-
}
64+
auto result = engine_service_->GetInstalledEngineVariants(engine);
65+
if (result.has_error()) {
66+
continue;
67+
}
68+
Json::Value variants(Json::arrayValue);
69+
for (const auto& variant : result.value()) {
70+
variants.append(variant.ToJson());
71+
}
72+
ret[engine] = variants;
73+
}
8374

84-
void Engines::GetEngine(const HttpRequestPtr& req,
85-
std::function<void(const HttpResponsePtr&)>&& callback,
86-
const std::string& engine) const {
87-
// auto status = engine_service_->GetEngineInfo(engine);
88-
Json::Value ret;
89-
// if (status.has_value()) {
90-
// ret["name"] = status->name;
91-
// ret["description"] = status->description;
92-
// ret["version"] = status->version.value_or("");
93-
// ret["variant"] = status->variant.value_or("");
94-
// ret["productName"] = status->product_name;
95-
// ret["status"] = status->status;
96-
// ret["format"] = status->format;
97-
//
98-
// auto resp = cortex_utils::CreateCortexHttpJsonResponse(ret);
99-
// resp->setStatusCode(k200OK);
100-
// callback(resp);
101-
// } else {
102-
ret["message"] = "Engine not found";
10375
auto resp = cortex_utils::CreateCortexHttpJsonResponse(ret);
104-
resp->setStatusCode(k400BadRequest);
76+
resp->setStatusCode(k200OK);
10577
callback(resp);
106-
// }
10778
}
10879

10980
void Engines::UninstallEngine(
11081
const HttpRequestPtr& req,
11182
std::function<void(const HttpResponsePtr&)>&& callback,
112-
const std::string& engine) {
83+
const std::string& engine, const std::string& version,
84+
const std::string& variant) {
11385

114-
auto result = engine_service_->UninstallEngine(engine);
115-
Json::Value ret;
86+
auto result =
87+
engine_service_->UninstallEngineVariant(engine, variant, version);
11688

89+
Json::Value ret;
11790
if (result.has_error()) {
11891
CTL_INF(result.error());
11992
ret["message"] = result.error();
@@ -309,3 +282,42 @@ void Engines::GetDefaultEngineVariant(
309282
callback(resp);
310283
}
311284
}
285+
286+
void Engines::LoadEngine(const HttpRequestPtr& req,
287+
std::function<void(const HttpResponsePtr&)>&& callback,
288+
const std::string& engine) {
289+
auto result = engine_service_->LoadEngine(engine);
290+
if (result.has_error()) {
291+
Json::Value res;
292+
res["message"] = result.error();
293+
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
294+
resp->setStatusCode(k400BadRequest);
295+
callback(resp);
296+
} else {
297+
Json::Value res;
298+
res["message"] = "Engine " + engine + " loaded successfully!";
299+
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
300+
resp->setStatusCode(k200OK);
301+
callback(resp);
302+
}
303+
}
304+
305+
void Engines::UnloadEngine(
306+
const HttpRequestPtr& req,
307+
std::function<void(const HttpResponsePtr&)>&& callback,
308+
const std::string& engine) {
309+
auto result = engine_service_->UnloadEngine(engine);
310+
if (result.has_error()) {
311+
Json::Value res;
312+
res["message"] = result.error();
313+
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
314+
resp->setStatusCode(k400BadRequest);
315+
callback(resp);
316+
} else {
317+
Json::Value res;
318+
res["message"] = "Engine " + engine + " unloaded successfully!";
319+
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
320+
resp->setStatusCode(k200OK);
321+
callback(resp);
322+
}
323+
}

engine/controllers/engines.h

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ class Engines : public drogon::HttpController<Engines, false> {
1414

1515
// TODO: update this API
1616
METHOD_ADD(Engines::InstallEngine, "/install/{1}", Post);
17-
METHOD_ADD(Engines::UninstallEngine, "/{1}", Delete);
17+
METHOD_ADD(Engines::UninstallEngine, "/{1}/{2}/{3}", Delete);
1818
METHOD_ADD(Engines::ListEngine, "", Get);
1919

20-
// TODO: might better use query param
2120
METHOD_ADD(Engines::GetEngineVersions, "/{1}/versions", Get);
2221
METHOD_ADD(Engines::GetEngineVariants, "/{1}/versions/{2}", Get);
2322
METHOD_ADD(Engines::InstallEngineVariant, "/{1}/versions/{2}/{3}", Post);
@@ -28,10 +27,11 @@ class Engines : public drogon::HttpController<Engines, false> {
2827
METHOD_ADD(Engines::SetDefaultEngineVariant, "/{1}/default/{2}/{3}", Post);
2928
METHOD_ADD(Engines::GetDefaultEngineVariant, "/{1}/default", Get);
3029

30+
METHOD_ADD(Engines::LoadEngine, "/{1}/load", Post);
31+
METHOD_ADD(Engines::UnloadEngine, "/{1}/load", Delete);
32+
3133
ADD_METHOD_TO(Engines::InstallEngine, "/v1/engines/install/{1}", Post);
32-
ADD_METHOD_TO(Engines::UninstallEngine, "/v1/engines/{1}", Delete);
33-
// TODO: update response of this API
34-
ADD_METHOD_TO(Engines::ListEngine, "/v1/engines", Get);
34+
ADD_METHOD_TO(Engines::UninstallEngine, "/v1/engines/{1}/{2}/{3}", Delete);
3535

3636
METHOD_LIST_END
3737

@@ -45,13 +45,10 @@ class Engines : public drogon::HttpController<Engines, false> {
4545
void ListEngine(const HttpRequestPtr& req,
4646
std::function<void(const HttpResponsePtr&)>&& callback) const;
4747

48-
void GetEngine(const HttpRequestPtr& req,
49-
std::function<void(const HttpResponsePtr&)>&& callback,
50-
const std::string& engine) const;
51-
5248
void UninstallEngine(const HttpRequestPtr& req,
5349
std::function<void(const HttpResponsePtr&)>&& callback,
54-
const std::string& engine);
50+
const std::string& engine, const std::string& version,
51+
const std::string& variant);
5552

5653
void GetEngineVersions(const HttpRequestPtr& req,
5754
std::function<void(const HttpResponsePtr&)>&& callback,
@@ -93,6 +90,14 @@ class Engines : public drogon::HttpController<Engines, false> {
9390
std::function<void(const HttpResponsePtr&)>&& callback,
9491
const std::string& engine) const;
9592

93+
void LoadEngine(const HttpRequestPtr& req,
94+
std::function<void(const HttpResponsePtr&)>&& callback,
95+
const std::string& engine);
96+
97+
void UnloadEngine(const HttpRequestPtr& req,
98+
std::function<void(const HttpResponsePtr&)>&& callback,
99+
const std::string& engine);
100+
96101
private:
97102
std::shared_ptr<EngineService> engine_service_;
98103
};

engine/main.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,11 @@ void RunServer(std::optional<int> port) {
8989

9090
auto event_queue_ptr = std::make_shared<EventQueue>();
9191
cortex::event::EventProcessor event_processor(event_queue_ptr);
92-
auto inference_svc = std::make_shared<services::InferenceService>();
9392

9493
auto download_service = std::make_shared<DownloadService>(event_queue_ptr);
9594
auto engine_service = std::make_shared<EngineService>(download_service);
95+
auto inference_svc =
96+
std::make_shared<services::InferenceService>(engine_service);
9697
auto model_service =
9798
std::make_shared<ModelService>(download_service, inference_svc);
9899

engine/services/download_service.cc

Lines changed: 11 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <ostream>
99
#include <utility>
1010
#include "download_service.h"
11+
#include "utils/curl_utils.h"
1112
#include "utils/format_utils.h"
1213
#include "utils/logging_utils.h"
1314
#include "utils/result.hpp"
@@ -27,43 +28,9 @@ size_t WriteCallback(char* ptr, size_t size, size_t nmemb, void* userdata) {
2728
}
2829
} // namespace
2930

30-
cpp::result<void, std::string> DownloadService::VerifyDownloadTask(
31-
DownloadTask& task) const noexcept {
32-
CLI_LOG("Validating download items, please wait..");
33-
34-
auto total_download_size{0};
35-
std::optional<std::string> err_msg = std::nullopt;
36-
37-
for (auto& item : task.items) {
38-
auto file_size = GetFileSize(item.downloadUrl);
39-
if (file_size.has_error()) {
40-
err_msg = file_size.error();
41-
break;
42-
}
43-
44-
item.bytes = file_size.value();
45-
total_download_size += file_size.value();
46-
}
47-
48-
if (err_msg.has_value()) {
49-
CTL_ERR(err_msg.value());
50-
return cpp::fail(err_msg.value());
51-
}
52-
53-
return {};
54-
}
55-
5631
cpp::result<bool, std::string> DownloadService::AddDownloadTask(
5732
DownloadTask& task,
5833
std::optional<OnDownloadTaskSuccessfully> callback) noexcept {
59-
auto validating_result = VerifyDownloadTask(task);
60-
if (validating_result.has_error()) {
61-
return cpp::fail(validating_result.error());
62-
}
63-
64-
// all items are valid, start downloading
65-
// if any item from the task failed to download, the whole task will be
66-
// considered failed
6734
std::optional<std::string> dl_err_msg = std::nullopt;
6835
bool has_task_done = false;
6936
for (const auto& item : task.items) {
@@ -87,10 +54,7 @@ cpp::result<bool, std::string> DownloadService::AddDownloadTask(
8754
}
8855

8956
cpp::result<uint64_t, std::string> DownloadService::GetFileSize(
90-
const std::string& url,
91-
const std::optional<
92-
std::reference_wrapper<std::unordered_map<std::string, std::string>>>&
93-
headers) const noexcept {
57+
const std::string& url) const noexcept {
9458

9559
auto curl = curl_easy_init();
9660
if (!curl) {
@@ -101,10 +65,11 @@ cpp::result<uint64_t, std::string> DownloadService::GetFileSize(
10165
curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
10266
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
10367

68+
auto headers = curl_utils::GetHeaders(url);
10469
if (headers.has_value()) {
10570
curl_slist* curl_headers = nullptr;
10671

107-
for (const auto& [key, value] : headers->get()) {
72+
for (const auto& [key, value] : headers.value()) {
10873
auto header = key + ": " + value;
10974
curl_headers = curl_slist_append(curl_headers, header.c_str());
11075
}
@@ -185,10 +150,11 @@ cpp::result<bool, std::string> DownloadService::Download(
185150
}
186151

187152
curl_easy_setopt(curl, CURLOPT_URL, download_item.downloadUrl.c_str());
188-
if (download_item.headers.has_value()) {
153+
auto headers = curl_utils::GetHeaders(download_item.downloadUrl);
154+
if (headers.has_value()) {
189155
curl_slist* curl_headers = nullptr;
190156

191-
for (const auto& [key, value] : download_item.headers.value()) {
157+
for (const auto& [key, value] : headers.value()) {
192158
auto header = key + ": " + value;
193159
curl_headers = curl_slist_append(curl_headers, header.c_str());
194160
}
@@ -262,7 +228,7 @@ void DownloadService::ProcessTask(DownloadTask& task) {
262228

263229
active_task_ = std::make_shared<DownloadTask>(task);
264230

265-
for (auto& item : task.items) {
231+
for (const auto& item : task.items) {
266232
auto handle = curl_easy_init();
267233
if (handle == nullptr) {
268234
// skip the task
@@ -282,10 +248,11 @@ void DownloadService::ProcessTask(DownloadTask& task) {
282248
});
283249
downloading_data_map_.insert(std::make_pair(item.id, dl_data_ptr));
284250

285-
if (item.headers.has_value()) {
251+
auto headers = curl_utils::GetHeaders(item.downloadUrl);
252+
if (headers.has_value()) {
286253
curl_slist* curl_headers = nullptr;
287254

288-
for (const auto& [key, value] : item.headers.value()) {
255+
for (const auto& [key, value] : headers.value()) {
289256
auto header = key + ": " + value;
290257
curl_headers = curl_slist_append(curl_headers, header.c_str());
291258
}
@@ -408,11 +375,6 @@ void DownloadService::ProcessCompletedTransfers() {
408375

409376
cpp::result<DownloadTask, std::string> DownloadService::AddTask(
410377
DownloadTask& task, std::function<void(const DownloadTask&)> callback) {
411-
auto validate_result = VerifyDownloadTask(task);
412-
if (validate_result.has_error()) {
413-
return cpp::fail(validate_result.error());
414-
}
415-
416378
{
417379
std::lock_guard<std::mutex> lock(callbacks_mutex_);
418380
callbacks_[task.id] = std::move(callback);

engine/services/download_service.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,7 @@ class DownloadService {
7373
* @param url - url to get file size
7474
*/
7575
cpp::result<uint64_t, std::string> GetFileSize(
76-
const std::string& url,
77-
const std::optional<
78-
std::reference_wrapper<std::unordered_map<std::string, std::string>>>&
79-
headers = std::nullopt) const noexcept;
76+
const std::string& url) const noexcept;
8077

8178
cpp::result<std::string, std::string> StopTask(const std::string& task_id);
8279

@@ -86,9 +83,6 @@ class DownloadService {
8683
DownloadService* download_service;
8784
};
8885

89-
cpp::result<void, std::string> VerifyDownloadTask(
90-
DownloadTask& task) const noexcept;
91-
9286
cpp::result<bool, std::string> Download(
9387
const std::string& download_id,
9488
const DownloadItem& download_item) noexcept;

0 commit comments

Comments
 (0)