From 3a15db16a5cb3854e706895a8f60596df7624f99 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 8 Nov 2024 15:57:28 +0700 Subject: [PATCH] fix: update default cors to localhost --- docs/static/openapi/cortex.json | 20 ++++---------------- engine/controllers/configs.h | 4 ++-- engine/controllers/engines.h | 20 +++++++++++--------- engine/controllers/models.h | 22 +++++++++++----------- engine/controllers/server.h | 18 +++++++++--------- engine/main.cc | 9 +++++++++ engine/utils/config_yaml_utils.h | 3 ++- engine/utils/file_manager_utils.h | 8 +++++++- 8 files changed, 55 insertions(+), 49 deletions(-) diff --git a/docs/static/openapi/cortex.json b/docs/static/openapi/cortex.json index 763337b5c..a6fbce6d0 100644 --- a/docs/static/openapi/cortex.json +++ b/docs/static/openapi/cortex.json @@ -3133,31 +3133,19 @@ "type": "string", "description": "The identifier or URL of the model to use. It can be a model ID on Cortexso (https://huggingface.co/cortexso) or a HuggingFace URL pointing to the model file. For example: 'gpt2' or 'https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/blob/main/mistral-7b-instruct-v0.1.Q2_K.gguf'", "examples": [ - { - "value": "tinyllama:gguf" - }, - { - "value": "https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/blob/main/mistral-7b-instruct-v0.1.Q2_K.gguf" - } + "tinyllama:gguf", + "https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/blob/main/mistral-7b-instruct-v0.1.Q2_K.gguf" ] }, "id": { "type": "string", "description": "The id which will be used to register the model.", - "examples": [ - { - "value": "my-custom-model-id" - } - ] + "examples": "my-custom-model-id" }, "name": { "type": "string", "description": "The name which will be used to overwrite the model name.", - "examples": [ - { - "value": "my-custom-model-name" - } - ] + "examples": "my-custom-model-name" } } }, diff --git a/engine/controllers/configs.h b/engine/controllers/configs.h index 48f277f46..83fad3b87 100644 --- a/engine/controllers/configs.h +++ b/engine/controllers/configs.h @@ -11,10 +11,10 @@ class Configs : public drogon::HttpController { METHOD_LIST_BEGIN METHOD_ADD(Configs::GetConfigurations, "", Get); - METHOD_ADD(Configs::UpdateConfigurations, "", Patch); + METHOD_ADD(Configs::UpdateConfigurations, "", Options, Patch); ADD_METHOD_TO(Configs::GetConfigurations, "/v1/configs", Get); - ADD_METHOD_TO(Configs::UpdateConfigurations, "/v1/configs", Patch); + ADD_METHOD_TO(Configs::UpdateConfigurations, "/v1/configs", Options, Patch); METHOD_LIST_END diff --git a/engine/controllers/engines.h b/engine/controllers/engines.h index ee017a04c..4f6a1f6fa 100644 --- a/engine/controllers/engines.h +++ b/engine/controllers/engines.h @@ -13,16 +13,17 @@ class Engines : public drogon::HttpController { METHOD_LIST_BEGIN METHOD_ADD(Engines::GetInstalledEngineVariants, "/{1}", Get); - METHOD_ADD(Engines::InstallEngine, "/{1}?version={2}&variant={3}", Post); + METHOD_ADD(Engines::InstallEngine, "/{1}?version={2}&variant={3}", Options, + Post); METHOD_ADD(Engines::UninstallEngine, "/{1}?version={2}&variant={3}", Options, Delete); METHOD_ADD(Engines::SetDefaultEngineVariant, - "/{1}/default?version={2}&variant={3}", Post); + "/{1}/default?version={2}&variant={3}", Options, Post); METHOD_ADD(Engines::GetDefaultEngineVariant, "/{1}/default", Get); - METHOD_ADD(Engines::LoadEngine, "/{1}/load", Post); + METHOD_ADD(Engines::LoadEngine, "/{1}/load", Options, Post); METHOD_ADD(Engines::UnloadEngine, "/{1}/load", Options, Delete); - METHOD_ADD(Engines::UpdateEngine, "/{1}/update", Post); + METHOD_ADD(Engines::UpdateEngine, "/{1}/update", Options, Post); METHOD_ADD(Engines::ListEngine, "", Get); METHOD_ADD(Engines::GetEngineVersions, "/{1}/versions", Get); @@ -31,17 +32,18 @@ class Engines : public drogon::HttpController { ADD_METHOD_TO(Engines::GetInstalledEngineVariants, "/v1/engines/{1}", Get); ADD_METHOD_TO(Engines::InstallEngine, - "/v1/engines/{1}?version={2}&variant={3}", Post); + "/v1/engines/{1}?version={2}&variant={3}", Options, Post); ADD_METHOD_TO(Engines::UninstallEngine, "/v1/engines/{1}?version={2}&variant={3}", Options, Delete); ADD_METHOD_TO(Engines::SetDefaultEngineVariant, - "/v1/engines/{1}/default?version={2}&variant={3}", Post); + "/v1/engines/{1}/default?version={2}&variant={3}", Options, + Post); ADD_METHOD_TO(Engines::GetDefaultEngineVariant, "/v1/engines/{1}/default", Get); - ADD_METHOD_TO(Engines::LoadEngine, "/v1/engines/{1}/load", Post); - ADD_METHOD_TO(Engines::UnloadEngine, "/v1/engines/{1}/load", Post); - ADD_METHOD_TO(Engines::UpdateEngine, "/v1/engines/{1}/update", Post); + ADD_METHOD_TO(Engines::LoadEngine, "/v1/engines/{1}/load", Options, Post); + ADD_METHOD_TO(Engines::UnloadEngine, "/v1/engines/{1}/load", Options, Post); + ADD_METHOD_TO(Engines::UpdateEngine, "/v1/engines/{1}/update", Options, Post); ADD_METHOD_TO(Engines::GetEngineVersions, "/v1/engines/{1}/versions", Get); ADD_METHOD_TO(Engines::GetEngineVariants, "/v1/engines/{1}/versions/{2}", Get); diff --git a/engine/controllers/models.h b/engine/controllers/models.h index 14e19e102..da6caf024 100644 --- a/engine/controllers/models.h +++ b/engine/controllers/models.h @@ -10,27 +10,27 @@ using namespace drogon; class Models : public drogon::HttpController { public: METHOD_LIST_BEGIN - METHOD_ADD(Models::PullModel, "/pull", Post); - METHOD_ADD(Models::GetModelPullInfo, "/pull/info", Post); + METHOD_ADD(Models::PullModel, "/pull", Options, Post); + METHOD_ADD(Models::GetModelPullInfo, "/pull/info", Options, Post); METHOD_ADD(Models::AbortPullModel, "/pull", Options, Delete); METHOD_ADD(Models::ListModel, "", Get); METHOD_ADD(Models::GetModel, "/{1}", Get); - METHOD_ADD(Models::UpdateModel, "/{1}", Patch); - METHOD_ADD(Models::ImportModel, "/import", Post); + METHOD_ADD(Models::UpdateModel, "/{1}", Options, Patch); + METHOD_ADD(Models::ImportModel, "/import", Options, Post); METHOD_ADD(Models::DeleteModel, "/{1}", Options, Delete); - METHOD_ADD(Models::StartModel, "/start", Post); - METHOD_ADD(Models::StopModel, "/stop", Post); + METHOD_ADD(Models::StartModel, "/start", Options, Post); + METHOD_ADD(Models::StopModel, "/stop", Options, Post); METHOD_ADD(Models::GetModelStatus, "/status/{1}", Get); - ADD_METHOD_TO(Models::PullModel, "/v1/models/pull", Post); + ADD_METHOD_TO(Models::PullModel, "/v1/models/pull", Options, Post); ADD_METHOD_TO(Models::AbortPullModel, "/v1/models/pull", Options, Delete); ADD_METHOD_TO(Models::ListModel, "/v1/models", Get); ADD_METHOD_TO(Models::GetModel, "/v1/models/{1}", Get); - ADD_METHOD_TO(Models::UpdateModel, "/v1/models/{1}", Patch); - ADD_METHOD_TO(Models::ImportModel, "/v1/models/import", Post); + ADD_METHOD_TO(Models::UpdateModel, "/v1/models/{1}", Options, Patch); + ADD_METHOD_TO(Models::ImportModel, "/v1/models/import", Options, Post); ADD_METHOD_TO(Models::DeleteModel, "/v1/models/{1}", Options, Delete); - ADD_METHOD_TO(Models::StartModel, "/v1/models/start", Post); - ADD_METHOD_TO(Models::StopModel, "/v1/models/stop", Post); + ADD_METHOD_TO(Models::StartModel, "/v1/models/start", Options, Post); + ADD_METHOD_TO(Models::StopModel, "/v1/models/stop", Options, Post); ADD_METHOD_TO(Models::GetModelStatus, "/v1/models/status/{1}", Get); METHOD_LIST_END diff --git a/engine/controllers/server.h b/engine/controllers/server.h index baba4a961..2889e7ed1 100644 --- a/engine/controllers/server.h +++ b/engine/controllers/server.h @@ -37,20 +37,20 @@ class server : public drogon::HttpController, ~server(); METHOD_LIST_BEGIN // list path definitions here; - METHOD_ADD(server::ChatCompletion, "chat_completion", Post); - METHOD_ADD(server::Embedding, "embedding", Post); - METHOD_ADD(server::LoadModel, "loadmodel", Post); - METHOD_ADD(server::UnloadModel, "unloadmodel", Post); - METHOD_ADD(server::ModelStatus, "modelstatus", Post); + METHOD_ADD(server::ChatCompletion, "chat_completion", Options, Post); + METHOD_ADD(server::Embedding, "embedding", Options, Post); + METHOD_ADD(server::LoadModel, "loadmodel", Options, Post); + METHOD_ADD(server::UnloadModel, "unloadmodel", Options, Post); + METHOD_ADD(server::ModelStatus, "modelstatus", Options, Post); METHOD_ADD(server::GetModels, "models", Get); // cortex.python API - METHOD_ADD(server::FineTuning, "finetuning", Post); + METHOD_ADD(server::FineTuning, "finetuning", Options, Post); // Openai compatible path - ADD_METHOD_TO(server::ChatCompletion, "/v1/chat/completions", Post); - ADD_METHOD_TO(server::FineTuning, "/v1/fine_tuning/job", Post); - ADD_METHOD_TO(server::Embedding, "/v1/embeddings", Post); + ADD_METHOD_TO(server::ChatCompletion, "/v1/chat/completions", Options, Post); + ADD_METHOD_TO(server::FineTuning, "/v1/fine_tuning/job", Options, Post); + ADD_METHOD_TO(server::Embedding, "/v1/embeddings", Options, Post); METHOD_LIST_END void ChatCompletion( diff --git a/engine/main.cc b/engine/main.cc index accf68775..b53227ceb 100644 --- a/engine/main.cc +++ b/engine/main.cc @@ -146,6 +146,14 @@ void RunServer(std::optional port) { auto allowed_origins = config_service->GetApiServerConfiguration()->allowed_origins; + auto is_contains_asterisk = + std::find(allowed_origins.begin(), allowed_origins.end(), "*"); + if (is_contains_asterisk != allowed_origins.end()) { + resp->addHeader("Access-Control-Allow-Origin", "*"); + resp->addHeader("Access-Control-Allow-Methods", "*"); + return; + } + // Check if the origin is in our allowed list auto it = std::find(allowed_origins.begin(), allowed_origins.end(), origin); @@ -154,6 +162,7 @@ void RunServer(std::optional port) { } else if (allowed_origins.empty()) { resp->addHeader("Access-Control-Allow-Origin", "*"); } + resp->addHeader("Access-Control-Allow-Methods", "*"); }); drogon::app().run(); diff --git a/engine/utils/config_yaml_utils.h b/engine/utils/config_yaml_utils.h index 24cdf4924..cd634ee43 100644 --- a/engine/utils/config_yaml_utils.h +++ b/engine/utils/config_yaml_utils.h @@ -44,7 +44,8 @@ constexpr const uint64_t kDefaultCheckedForLlamacppUpdateAt = 0u; constexpr const auto kDefaultLatestRelease = "default_version"; constexpr const auto kDefaultLatestLlamacppRelease = ""; constexpr const auto kDefaultCorsEnabled = true; -const std::vector kDefaultEnabledOrigins{}; +const std::vector kDefaultEnabledOrigins{ + "http://localhost:39281", "http://127.0.0.1:39281", "http://0.0.0.0:39281"}; inline cpp::result DumpYamlConfig(const CortexConfig& config, const std::string& path) { diff --git a/engine/utils/file_manager_utils.h b/engine/utils/file_manager_utils.h index 85063f3e7..a1403437b 100644 --- a/engine/utils/file_manager_utils.h +++ b/engine/utils/file_manager_utils.h @@ -176,7 +176,13 @@ inline cpp::result CreateConfigFileIfNotExist() { .maxLogLines = config_yaml_utils::kDefaultMaxLines, .apiServerHost = config_yaml_utils::kDefaultHost, .apiServerPort = config_yaml_utils::kDefaultPort, - }; + .checkedForUpdateAt = config_yaml_utils::kDefaultCheckedForUpdateAt, + .checkedForLlamacppUpdateAt = + config_yaml_utils::kDefaultCheckedForLlamacppUpdateAt, + .latestRelease = config_yaml_utils::kDefaultLatestRelease, + .latestLlamacppRelease = config_yaml_utils::kDefaultLatestLlamacppRelease, + .enableCors = config_yaml_utils::kDefaultCorsEnabled, + .allowedOrigins = config_yaml_utils::kDefaultEnabledOrigins}; return DumpYamlConfig(config, config_path.string()); }