effectiveStdenv ? if useCuda then cudaPackages.backendStdenv else stdenv,
enableStatic ? effectiveStdenv.hostPlatform.isStatic,
precompileMetalShaders ? false,
+ useWebUi ? true,
}:
let
cmakeFlags =
[
(cmakeBool "LLAMA_BUILD_SERVER" true)
+ (cmakeBool "LLAMA_BUILD_WEBUI" useWebUi)
(cmakeBool "BUILD_SHARED_LIBS" (!enableStatic))
(cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
(cmakeBool "GGML_NATIVE" false)
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_BUILD_WEBUI "llama: build the embedded Web UI for server" ON)
option(LLAMA_TOOLS_INSTALL "llama: install tools" ${LLAMA_TOOLS_INSTALL_DEFAULT})
option(LLAMA_TESTS_INSTALL "llama: install tests" ON)
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_BUILD_WEBUI "Build the embedded Web UI" ON)
+
+if (LLAMA_BUILD_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()
+ add_definitions(-DLLAMA_BUILD_WEBUI)
+else()
+endif()
add_executable(${TARGET} ${TARGET_SRCS})
install(TARGETS ${TARGET} RUNTIME)
#include <string>
#include <thread>
+#ifdef LLAMA_BUILD_WEBUI
// auto generated files (see README.md for details)
#include "index.html.gz.hpp"
#include "loading.html.hpp"
+#endif
//
// HTTP implementation using cpp-httplib
auto middleware_server_state = [this](const httplib::Request & req, httplib::Response & res) {
bool ready = is_ready.load();
if (!ready) {
+#ifdef LLAMA_BUILD_WEBUI
auto tmp = string_split<std::string>(req.path, '.');
if (req.path == "/" || tmp.back() == "html") {
res.status = 503;
res.set_content(reinterpret_cast<const char*>(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;
return 1;
}
} else {
+#ifdef LLAMA_BUILD_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) {
}
return false;
});
+#endif
}
}
return true;