From 131fbc4552b4962a961ffdd3269a4d3ee4ecb6d7 Mon Sep 17 00:00:00 2001 From: Gabriel Reus Date: Fri, 26 Jun 2026 13:09:29 +0000 Subject: [PATCH 1/4] Added offline check before pulling a model on server.cpp --- src/cpp/server/server.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cpp/server/server.cpp b/src/cpp/server/server.cpp index b2b0327ab..351e62003 100644 --- a/src/cpp/server/server.cpp +++ b/src/cpp/server/server.cpp @@ -3458,6 +3458,13 @@ void Server::handle_pull(const httplib::Request& req, httplib::Response& res) { if (!parse_required_json_body(req, res, request_json)) return; try { + // First we check if lemonade is offline. + if (config_->offline()) { + res.status = 400; + nlohmann::json error = {{"error", "Lemond is in offline mode, models not downloaded"}, {"code", lemon::kUnknownModelErrorCode}}; + res.set_content(error.dump(), "application/json"); + return; + } // Accept both "model" and "model_name" for compatibility std::string model_name = request_json.contains("model") ? request_json["model"].get() : From bc1d503e95f3561d77ea37415dd18744a1ce5bed Mon Sep 17 00:00:00 2001 From: Gabriel Reus Date: Fri, 26 Jun 2026 13:15:34 +0000 Subject: [PATCH 2/4] Changed ErrorCode to "lemond_offline" --- src/cpp/server/server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/server/server.cpp b/src/cpp/server/server.cpp index 351e62003..4d3c1f50d 100644 --- a/src/cpp/server/server.cpp +++ b/src/cpp/server/server.cpp @@ -3461,7 +3461,7 @@ void Server::handle_pull(const httplib::Request& req, httplib::Response& res) { // First we check if lemonade is offline. if (config_->offline()) { res.status = 400; - nlohmann::json error = {{"error", "Lemond is in offline mode, models not downloaded"}, {"code", lemon::kUnknownModelErrorCode}}; + nlohmann::json error = {{"error", "Lemond is in offline mode, models not downloaded"}, {"code", "lemond_offline"}}; res.set_content(error.dump(), "application/json"); return; } From 1ac01a967dfe8760cf10ad4902375ff0c015bd4b Mon Sep 17 00:00:00 2001 From: Gabriel Reus Date: Sat, 27 Jun 2026 07:59:42 +0000 Subject: [PATCH 3/4] Removed Comment --- src/cpp/server/server.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/server/server.cpp b/src/cpp/server/server.cpp index 4d3c1f50d..f073b3877 100644 --- a/src/cpp/server/server.cpp +++ b/src/cpp/server/server.cpp @@ -3458,7 +3458,6 @@ void Server::handle_pull(const httplib::Request& req, httplib::Response& res) { if (!parse_required_json_body(req, res, request_json)) return; try { - // First we check if lemonade is offline. if (config_->offline()) { res.status = 400; nlohmann::json error = {{"error", "Lemond is in offline mode, models not downloaded"}, {"code", "lemond_offline"}}; From 239881139080ff217a644a9997c4413c912cb28f Mon Sep 17 00:00:00 2001 From: Gabriel Reus Date: Sat, 27 Jun 2026 20:27:47 +0000 Subject: [PATCH 4/4] #2448 Modifications. --- src/cpp/server/ollama_api.cpp | 8 ++++++++ src/cpp/server/server.cpp | 13 +++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/cpp/server/ollama_api.cpp b/src/cpp/server/ollama_api.cpp index 7687caab4..420306c56 100644 --- a/src/cpp/server/ollama_api.cpp +++ b/src/cpp/server/ollama_api.cpp @@ -1,5 +1,6 @@ #include "lemon/ollama_api.h" #include "lemon/model_types.h" +#include "lemon/runtime_config.h" #include #include #include @@ -1181,6 +1182,13 @@ void OllamaApi::handle_pull(const httplib::Request& req, httplib::Response& res) res.set_content(error.dump(), "application/json"); return; } + auto* cfg = RuntimeConfig::global(); + if (cfg && cfg->offline()) { + res.status = 400; + json error = {{"error", "Lemond is in offline mode, models not downloaded"}, {"code", "lemond_offline"}}; + res.set_content(error.dump(), "application/json"); + return; + } LOG(INFO, "OllamaApi") << "POST /api/pull - Pulling model: " << name << std::endl; diff --git a/src/cpp/server/server.cpp b/src/cpp/server/server.cpp index f073b3877..c63ca0c50 100644 --- a/src/cpp/server/server.cpp +++ b/src/cpp/server/server.cpp @@ -3458,12 +3458,6 @@ void Server::handle_pull(const httplib::Request& req, httplib::Response& res) { if (!parse_required_json_body(req, res, request_json)) return; try { - if (config_->offline()) { - res.status = 400; - nlohmann::json error = {{"error", "Lemond is in offline mode, models not downloaded"}, {"code", "lemond_offline"}}; - res.set_content(error.dump(), "application/json"); - return; - } // Accept both "model" and "model_name" for compatibility std::string model_name = request_json.contains("model") ? request_json["model"].get() : @@ -3554,6 +3548,13 @@ void Server::handle_pull(const httplib::Request& req, httplib::Response& res) { return; } + if (config_->offline()) { + res.status = 400; + nlohmann::json error = {{"error", "Lemond is in offline mode, models not downloaded"}, {"code", "lemond_offline"}}; + res.set_content(error.dump(), "application/json"); + return; + } + if (stream) { auto operation = [this, model_name, request_json, do_not_upgrade](DownloadProgressCallback progress_cb) { model_manager_->download_model(model_name, request_json, do_not_upgrade, progress_cb);