From 9b4a763f56393111560830ece791e70d325e377f Mon Sep 17 00:00:00 2001 From: kushagharahi <3326002+kushagharahi@users.noreply.github.com> Date: Fri, 6 Mar 2026 00:21:48 -0600 Subject: [PATCH] introduce LLAMA_SERVER_NO_WEBUI --- CMakeLists.txt | 1 + tools/server/CMakeLists.txt | 35 +++++++++++++++++++++-------------- tools/server/server-http.cpp | 9 ++++++++- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69da97dc1e..425d7addc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,6 +108,7 @@ option(LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE}) option(LLAMA_BUILD_TOOLS "llama: build tools" ${LLAMA_STANDALONE}) option(LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE}) option(LLAMA_BUILD_SERVER "llama: build server example" ${LLAMA_STANDALONE}) +option(LLAMA_SERVER_NO_WEBUI "llama: disable the embedded Web UI in server" OFF) option(LLAMA_TOOLS_INSTALL "llama: install tools" ${LLAMA_TOOLS_INSTALL_DEFAULT}) option(LLAMA_TESTS_INSTALL "llama: install tests" ON) diff --git a/tools/server/CMakeLists.txt b/tools/server/CMakeLists.txt index 5621a51b22..ceb17ddd1e 100644 --- a/tools/server/CMakeLists.txt +++ b/tools/server/CMakeLists.txt @@ -35,22 +35,29 @@ set(TARGET_SRCS server-models.cpp server-models.h ) -set(PUBLIC_ASSETS - index.html.gz - loading.html -) -foreach(asset ${PUBLIC_ASSETS}) - set(input "${CMAKE_CURRENT_SOURCE_DIR}/public/${asset}") - set(output "${CMAKE_CURRENT_BINARY_DIR}/${asset}.hpp") - list(APPEND TARGET_SRCS ${output}) - add_custom_command( - DEPENDS "${input}" - OUTPUT "${output}" - COMMAND "${CMAKE_COMMAND}" "-DINPUT=${input}" "-DOUTPUT=${output}" -P "${PROJECT_SOURCE_DIR}/scripts/xxd.cmake" +option(LLAMA_SERVER_NO_WEBUI "Disable the embedded Web UI" OFF) + +if (NOT LLAMA_SERVER_NO_WEBUI) + set(PUBLIC_ASSETS + index.html.gz + loading.html ) - set_source_files_properties(${output} PROPERTIES GENERATED TRUE) -endforeach() + + foreach(asset ${PUBLIC_ASSETS}) + set(input "${CMAKE_CURRENT_SOURCE_DIR}/public/${asset}") + set(output "${CMAKE_CURRENT_BINARY_DIR}/${asset}.hpp") + list(APPEND TARGET_SRCS ${output}) + add_custom_command( + DEPENDS "${input}" + OUTPUT "${output}" + COMMAND "${CMAKE_COMMAND}" "-DINPUT=${input}" "-DOUTPUT=${output}" -P "${PROJECT_SOURCE_DIR}/scripts/xxd.cmake" + ) + set_source_files_properties(${output} PROPERTIES GENERATED TRUE) + endforeach() +else() + add_definitions(-DLLAMA_SERVER_NO_WEBUI) +endif() add_executable(${TARGET} ${TARGET_SRCS}) install(TARGETS ${TARGET} RUNTIME) diff --git a/tools/server/server-http.cpp b/tools/server/server-http.cpp index 129022a711..a362d959a9 100644 --- a/tools/server/server-http.cpp +++ b/tools/server/server-http.cpp @@ -8,9 +8,11 @@ #include #include +#ifndef LLAMA_SERVER_NO_WEBUI // auto generated files (see README.md for details) #include "index.html.gz.hpp" #include "loading.html.hpp" +#endif // // HTTP implementation using cpp-httplib @@ -181,11 +183,14 @@ bool server_http_context::init(const common_params & params) { auto middleware_server_state = [this](const httplib::Request & req, httplib::Response & res) { bool ready = is_ready.load(); if (!ready) { +#ifndef LLAMA_SERVER_NO_WEBUI auto tmp = string_split(req.path, '.'); if (req.path == "/" || tmp.back() == "html") { res.status = 503; res.set_content(reinterpret_cast(loading_html), loading_html_len, "text/html; charset=utf-8"); - } else { + } else +#endif + { // no endpoints is allowed to be accessed when the server is not ready // this is to prevent any data races or inconsistent states res.status = 503; @@ -249,6 +254,7 @@ bool server_http_context::init(const common_params & params) { return 1; } } else { +#ifndef LLAMA_SERVER_NO_WEBUI // using embedded static index.html srv->Get(params.api_prefix + "/", [](const httplib::Request & req, httplib::Response & res) { if (req.get_header_value("Accept-Encoding").find("gzip") == std::string::npos) { @@ -262,6 +268,7 @@ bool server_http_context::init(const common_params & params) { } return false; }); +#endif } } return true;