server: re-inject subcommand when router spawns children under unified binary (#23442)

This commit is contained in:
Pascal
2026-05-21 10:09:19 +02:00
committed by GitHub
parent 1d7ab2b947
commit c9021714e8
2 changed files with 17 additions and 0 deletions
+9
View File
@@ -1,6 +1,7 @@
#include "build-info.h" #include "build-info.h"
#include <cstdio> #include <cstdio>
#include <cstdlib>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -77,6 +78,14 @@ int main(int argc, char ** argv) {
for (const auto & cmd : cmds) { for (const auto & cmd : cmds) {
if (matches(arg, cmd)) { if (matches(arg, cmd)) {
// router spawns children through this same binary, it needs the
// subcommand to relaunch as 'llama serve' and not bare options
#ifdef _WIN32
_putenv_s("LLAMA_APP_CMD", cmd.name);
#else
setenv("LLAMA_APP_CMD", cmd.name, 1);
#endif
return cmd.func(argc - 1, argv + 1); return cmd.func(argc - 1, argv + 1);
} }
} }
+8
View File
@@ -14,6 +14,7 @@
#include <mutex> #include <mutex>
#include <condition_variable> #include <condition_variable>
#include <cstring> #include <cstring>
#include <cstdlib>
#include <atomic> #include <atomic>
#include <chrono> #include <chrono>
#include <queue> #include <queue>
@@ -159,6 +160,13 @@ void server_model_meta::update_args(common_preset_context & ctx_preset, std::str
// TODO: maybe validate preset before rendering ? // TODO: maybe validate preset before rendering ?
// render args // render args
args = preset.to_args(bin_path); args = preset.to_args(bin_path);
// unified binary dispatches by subcommand, re-inject it right after the
// binary path so the child starts as 'llama serve ...' not 'llama ...'
const char * app_cmd = std::getenv("LLAMA_APP_CMD");
if (app_cmd != nullptr && app_cmd[0] != '\0' && !bin_path.empty()) {
args.insert(args.begin() + 1, app_cmd);
}
} }
void server_model_meta::update_caps() { void server_model_meta::update_caps() {