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

Commit c9f15a2

Browse files
authored
fix: swagger getting configuration from config file (#1803)
1 parent 52acbfa commit c9f15a2

File tree

4 files changed

+48
-30
lines changed

4 files changed

+48
-30
lines changed

docs/static/openapi/cortex.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3092,7 +3092,7 @@
30923092
"items": {
30933093
"type": "string"
30943094
},
3095-
"example": ["http://localhost:39281", "https://cortex.so"]
3095+
"example": ["http://127.0.0.1:39281", "https://cortex.so"]
30963096
},
30973097
"cors": {
30983098
"type": "boolean",
@@ -3139,7 +3139,7 @@
31393139
},
31403140
"example": {
31413141
"allowed_origins": [
3142-
"http://localhost:39281",
3142+
"http://127.0.0.1:39281",
31433143
"https://cortex.so"
31443144
],
31453145
"cors": false,
@@ -3180,7 +3180,7 @@
31803180
"type": "string"
31813181
},
31823182
"description": "List of allowed origins.",
3183-
"example": ["http://localhost:39281", "https://cortex.so"]
3183+
"example": ["http://127.0.0.1:39281", "https://cortex.so"]
31843184
},
31853185
"proxy_username": {
31863186
"type": "string",
@@ -3249,7 +3249,7 @@
32493249
"type": "string"
32503250
},
32513251
"example": [
3252-
"http://localhost:39281",
3252+
"http://127.0.0.1:39281",
32533253
"https://cortex.so"
32543254
]
32553255
},

engine/controllers/swagger.cc

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,17 @@
22
#include "cortex_openapi.h"
33
#include "utils/cortex_utils.h"
44

5-
constexpr auto ScalarUi = R"(
6-
<!doctype html>
7-
<html>
8-
<head>
9-
<title>Cortex API Reference</title>
10-
<meta charset="utf-8" />
11-
<meta
12-
name="viewport"
13-
content="width=device-width, initial-scale=1" />
14-
</head>
15-
<body>
16-
<!-- Need a Custom Header? Check out this example https://codepen.io/scalarorg/pen/VwOXqam -->
17-
<script
18-
id="api-reference"
19-
data-url="/openapi.json"></script>
20-
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
21-
</body>
22-
</html>
23-
)";
24-
25-
Json::Value SwaggerController::generateOpenAPISpec() {
5+
Json::Value SwaggerController::GenerateOpenApiSpec() const {
266
Json::Value root;
277
Json::Reader reader;
288
reader.parse(CortexOpenApi::GetOpenApiJson(), root);
9+
10+
Json::Value server_url;
11+
server_url["url"] = "http://" + host_ + ":" + port_;
12+
Json::Value resp_data(Json::arrayValue);
13+
resp_data.append(server_url);
14+
15+
root["servers"] = resp_data;
2916
return root;
3017
}
3118

@@ -41,7 +28,7 @@ void SwaggerController::serveSwaggerUI(
4128
void SwaggerController::serveOpenAPISpec(
4229
const drogon::HttpRequestPtr& req,
4330
std::function<void(const drogon::HttpResponsePtr&)>&& callback) const {
44-
Json::Value spec = generateOpenAPISpec();
31+
auto spec = GenerateOpenApiSpec();
4532
auto resp = cortex_utils::CreateCortexHttpJsonResponse(spec);
4633
callback(resp);
4734
}

engine/controllers/swagger.h

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,38 @@
55

66
using namespace drogon;
77

8-
class SwaggerController : public drogon::HttpController<SwaggerController> {
8+
class SwaggerController
9+
: public drogon::HttpController<SwaggerController, false> {
10+
11+
constexpr static auto ScalarUi = R"(
12+
<!doctype html>
13+
<html>
14+
<head>
15+
<title>Cortex API Reference</title>
16+
<meta charset="utf-8" />
17+
<meta
18+
name="viewport"
19+
content="width=device-width, initial-scale=1" />
20+
</head>
21+
<body>
22+
<!-- Need a Custom Header? Check out this example https://codepen.io/scalarorg/pen/VwOXqam -->
23+
<script
24+
id="api-reference"
25+
data-url="/openapi.json"></script>
26+
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
27+
</body>
28+
</html>
29+
)";
30+
931
public:
1032
METHOD_LIST_BEGIN
1133
ADD_METHOD_TO(SwaggerController::serveSwaggerUI, "/", Get);
1234
ADD_METHOD_TO(SwaggerController::serveOpenAPISpec, "/openapi.json", Get);
1335
METHOD_LIST_END
1436

37+
explicit SwaggerController(const std::string& host, const std::string& port)
38+
: host_{host}, port_{port} {};
39+
1540
void serveSwaggerUI(
1641
const drogon::HttpRequestPtr& req,
1742
std::function<void(const drogon::HttpResponsePtr&)>&& callback) const;
@@ -21,6 +46,8 @@ class SwaggerController : public drogon::HttpController<SwaggerController> {
2146
std::function<void(const drogon::HttpResponsePtr&)>&& callback) const;
2247

2348
private:
24-
static const std::string swaggerUIHTML;
25-
static Json::Value generateOpenAPISpec();
26-
};
49+
std::string host_;
50+
std::string port_;
51+
52+
Json::Value GenerateOpenApiSpec() const;
53+
};

engine/main.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "controllers/models.h"
1212
#include "controllers/process_manager.h"
1313
#include "controllers/server.h"
14+
#include "controllers/swagger.h"
1415
#include "controllers/threads.h"
1516
#include "database/database.h"
1617
#include "migrations/migration_manager.h"
@@ -155,6 +156,8 @@ void RunServer(std::optional<int> port, bool ignore_cout) {
155156
file_watcher_srv->start();
156157

157158
// initialize custom controllers
159+
auto swagger_ctl = std::make_shared<SwaggerController>(config.apiServerHost,
160+
config.apiServerPort);
158161
auto file_ctl = std::make_shared<Files>(file_srv, message_srv);
159162
auto assistant_ctl = std::make_shared<Assistants>(assistant_srv);
160163
auto thread_ctl = std::make_shared<Threads>(thread_srv, message_srv);
@@ -169,6 +172,7 @@ void RunServer(std::optional<int> port, bool ignore_cout) {
169172
std::make_shared<inferences::server>(inference_svc, engine_service);
170173
auto config_ctl = std::make_shared<Configs>(config_service);
171174

175+
drogon::app().registerController(swagger_ctl);
172176
drogon::app().registerController(file_ctl);
173177
drogon::app().registerController(assistant_ctl);
174178
drogon::app().registerController(thread_ctl);

0 commit comments

Comments
 (0)