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

Commit 157d0c0

Browse files
committed
update
1 parent 927d188 commit 157d0c0

File tree

5 files changed

+150
-14
lines changed

5 files changed

+150
-14
lines changed

engine/controllers/engines.cc

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace {
99
// Need to change this after we rename repositories
10+
// TODO: namh try to remove this
1011
std::string NormalizeEngine(const std::string& engine) {
1112
if (engine == kLlamaEngine) {
1213
return kLlamaRepo;
@@ -243,3 +244,66 @@ void Engines::GetEnginesInstalledVariants(
243244
callback(resp);
244245
}
245246
}
247+
248+
void Engines::UpdateEngine(
249+
const HttpRequestPtr& req,
250+
std::function<void(const HttpResponsePtr&)>&& callback,
251+
const std::string& engine) {}
252+
253+
void Engines::GetLatestEngineVersion(
254+
const HttpRequestPtr& req,
255+
std::function<void(const HttpResponsePtr&)>&& callback,
256+
const std::string& engine) {
257+
auto result = engine_service_->GetLatestEngineVersion(engine);
258+
std::cout << result->ToJson() << std::endl;
259+
if (result.has_error()) {
260+
Json::Value res;
261+
res["message"] = result.error();
262+
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
263+
resp->setStatusCode(k400BadRequest);
264+
callback(resp);
265+
} else {
266+
auto resp =
267+
cortex_utils::CreateCortexHttpJsonResponse(result.value().ToApiJson());
268+
resp->setStatusCode(k200OK);
269+
callback(resp);
270+
}
271+
}
272+
273+
void Engines::SetDefaultEngineVariant(
274+
const HttpRequestPtr& req,
275+
std::function<void(const HttpResponsePtr&)>&& callback,
276+
const std::string& engine, const std::string& version,
277+
const std::string& variant) {
278+
auto result =
279+
engine_service_->SetDefaultEngineVariant(engine, version, variant);
280+
if (result.has_error()) {
281+
Json::Value res;
282+
res["message"] = result.error();
283+
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
284+
resp->setStatusCode(k400BadRequest);
285+
} else {
286+
auto resp =
287+
cortex_utils::CreateCortexHttpJsonResponse(result.value().ToJson());
288+
resp->setStatusCode(k200OK);
289+
callback(resp);
290+
}
291+
}
292+
293+
void Engines::GetDefaultEngineVariant(
294+
const HttpRequestPtr& req,
295+
std::function<void(const HttpResponsePtr&)>&& callback,
296+
const std::string& engine) const {
297+
auto result = engine_service_->GetDefaultEngineVariant(engine);
298+
if (result.has_error()) {
299+
Json::Value res;
300+
res["message"] = result.error();
301+
auto resp = cortex_utils::CreateCortexHttpJsonResponse(res);
302+
resp->setStatusCode(k400BadRequest);
303+
} else {
304+
auto resp =
305+
cortex_utils::CreateCortexHttpJsonResponse(result.value().ToJson());
306+
resp->setStatusCode(k200OK);
307+
callback(resp);
308+
}
309+
}

engine/controllers/engines.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class Engines : public drogon::HttpController<Engines, false> {
1212
public:
1313
METHOD_LIST_BEGIN
1414

15+
// TODO: update this API
1516
METHOD_ADD(Engines::InstallEngine, "/install/{1}", Post);
1617
METHOD_ADD(Engines::UninstallEngine, "/{1}", Delete);
1718
METHOD_ADD(Engines::ListEngine, "", Get);
@@ -21,6 +22,11 @@ class Engines : public drogon::HttpController<Engines, false> {
2122
METHOD_ADD(Engines::InstallEngineVariant, "/{1}/versions/{2}/{3}", Post);
2223
METHOD_ADD(Engines::GetEnginesInstalledVariants, "/{1}", Get);
2324

25+
METHOD_ADD(Engines::GetLatestEngineVersion, "/{1}/update", Get);
26+
METHOD_ADD(Engines::UpdateEngine, "/{1}/update", Post);
27+
METHOD_ADD(Engines::SetDefaultEngineVariant, "/{1}/default/{2}/{3}", Post);
28+
METHOD_ADD(Engines::GetDefaultEngineVariant, "/{1}/default", Get);
29+
2430
ADD_METHOD_TO(Engines::InstallEngine, "/v1/engines/install/{1}", Post);
2531
ADD_METHOD_TO(Engines::UninstallEngine, "/v1/engines/{1}", Delete);
2632
// TODO: update response of this API
@@ -66,6 +72,26 @@ class Engines : public drogon::HttpController<Engines, false> {
6672
std::function<void(const HttpResponsePtr&)>&& callback,
6773
const std::string& engine) const;
6874

75+
void GetLatestEngineVersion(
76+
const HttpRequestPtr& req,
77+
std::function<void(const HttpResponsePtr&)>&& callback,
78+
const std::string& engine);
79+
80+
void UpdateEngine(const HttpRequestPtr& req,
81+
std::function<void(const HttpResponsePtr&)>&& callback,
82+
const std::string& engine);
83+
84+
void SetDefaultEngineVariant(
85+
const HttpRequestPtr& req,
86+
std::function<void(const HttpResponsePtr&)>&& callback,
87+
const std::string& engine, const std::string& version,
88+
const std::string& variant);
89+
90+
void GetDefaultEngineVariant(
91+
const HttpRequestPtr& req,
92+
std::function<void(const HttpResponsePtr&)>&& callback,
93+
const std::string& engine) const;
94+
6995
private:
7096
std::shared_ptr<EngineService> engine_service_;
7197
};

engine/services/engine_service.cc

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -593,19 +593,23 @@ EngineService::GetEngineVariants(const std::string& engine,
593593
return compatible_variants;
594594
}
595595

596-
cpp::result<void, std::string> EngineService::SetDefaultEngineVariant(
597-
const std::string& engine, const std::string& variant) {
598-
// TODO: (namh) need add support for onnx and tensorrtllm
599-
// TODO: handle case variant is invalid
596+
cpp::result<DefaultEngineVariant, std::string>
597+
EngineService::SetDefaultEngineVariant(const std::string& engine,
598+
const std::string& version,
599+
const std::string& variant) {
600600
auto ne = NormalizeEngine(engine);
601601

602-
default_variants_[ne] = variant;
603-
return {};
602+
// TODO: (namh) Handle case that the input is invalid, need to check if we have that version
603+
default_variants_[ne] = DefaultEngineVariant{
604+
.engine = engine,
605+
.version = version,
606+
.variant = variant,
607+
};
608+
return default_variants_[ne];
604609
}
605610

606-
cpp::result<std::string, std::string> EngineService::GetDefaultEngineVariant(
607-
const std::string& engine) {
608-
// TODO: handle case default is not set yet
611+
cpp::result<DefaultEngineVariant, std::string>
612+
EngineService::GetDefaultEngineVariant(const std::string& engine) {
609613
auto ne = NormalizeEngine(engine);
610614
if (default_variants_.find(ne) == default_variants_.end()) {
611615
return cpp::fail("Variant for " + engine + " is not set yet!");
@@ -782,3 +786,13 @@ std::vector<EngineV> EngineService::GetLoadedEngines() {
782786
}
783787
return loaded_engines;
784788
}
789+
790+
cpp::result<github_release_utils::GitHubRelease, std::string>
791+
EngineService::GetLatestEngineVersion(const std::string& engine) const {
792+
auto ne = NormalizeEngine(engine);
793+
auto res = github_release_utils::GetReleaseByVersion("janhq", ne, "latest");
794+
if (res.has_error()) {
795+
return cpp::fail("Failed to fetch engine " + engine + " latest version!");
796+
}
797+
return res.value();
798+
}

engine/services/engine_service.h

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,21 @@
1414
#include "utils/result.hpp"
1515
#include "utils/system_info_utils.h"
1616

17+
// TODO: namh think of the other name
18+
struct DefaultEngineVariant {
19+
std::string engine;
20+
std::string version;
21+
std::string variant;
22+
23+
Json::Value ToJson() const {
24+
Json::Value root;
25+
root["engine"] = engine;
26+
root["version"] = version;
27+
root["variant"] = variant;
28+
return root;
29+
}
30+
};
31+
1732
// TODO: namh think of the other name
1833
struct EngineVariantResponse {
1934
std::string name;
@@ -88,10 +103,11 @@ class EngineService {
88103
cpp::result<std::vector<EngineVariant>, std::string> GetEngineVariants(
89104
const std::string& engine, const std::string& version) const;
90105

91-
cpp::result<void, std::string> SetDefaultEngineVariant(
92-
const std::string& engine, const std::string& variant);
106+
cpp::result<DefaultEngineVariant, std::string> SetDefaultEngineVariant(
107+
const std::string& engine, const std::string& version,
108+
const std::string& variant);
93109

94-
cpp::result<std::string, std::string> GetDefaultEngineVariant(
110+
cpp::result<DefaultEngineVariant, std::string> GetDefaultEngineVariant(
95111
const std::string& engine);
96112

97113
cpp::result<std::vector<EngineVariantResponse>, std::string>
@@ -108,6 +124,9 @@ class EngineService {
108124

109125
cpp::result<void, std::string> UnloadEngine(const std::string& engine_name);
110126

127+
cpp::result<github_release_utils::GitHubRelease, std::string>
128+
GetLatestEngineVersion(const std::string& engine) const;
129+
111130
private:
112131
cpp::result<bool, std::string> UnzipEngine(const std::string& engine,
113132
const std::string& version,
@@ -137,5 +156,5 @@ class EngineService {
137156
};
138157
HardwareInfo hw_inf_;
139158

140-
std::unordered_map<std::string, std::string> default_variants_;
159+
std::unordered_map<std::string, DefaultEngineVariant> default_variants_;
141160
};

engine/utils/github_release_utils.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,19 @@ inline cpp::result<std::vector<GitHubRelease>, std::string> GetReleases(
173173
inline cpp::result<GitHubRelease, std::string> GetReleaseByVersion(
174174
const std::string& author, const std::string& repo,
175175
const std::string& tag) {
176+
177+
std::vector<std::string> path_params{"repos", author, repo, "releases"};
178+
if (tag != "latest") {
179+
path_params.push_back("tags");
180+
path_params.push_back(tag);
181+
} else {
182+
path_params.push_back("latest");
183+
}
184+
176185
auto url = url_parser::Url{
177186
.protocol = "https",
178187
.host = "api.github.com",
179-
.pathParams = {"repos", author, repo, "releases", "tags", tag},
188+
.pathParams = path_params,
180189
};
181190

182191
std::unordered_map<std::string, std::string> headers;
@@ -187,6 +196,10 @@ inline cpp::result<GitHubRelease, std::string> GetReleaseByVersion(
187196
if (result.has_error()) {
188197
return cpp::fail(result.error());
189198
}
199+
if (result.value() == Json::nullValue) {
200+
return cpp::fail("No release found for " + tag);
201+
}
202+
190203
return GitHubRelease::FromJson(result.value());
191204
}
192205
}; // namespace github_release_utils

0 commit comments

Comments
 (0)