#include "build-info.h"
#include <cstdio>
+#include <cstdlib>
#include <string>
#include <vector>
for (const auto & cmd : cmds) {
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);
}
}
#include <mutex>
#include <condition_variable>
#include <cstring>
+#include <cstdlib>
#include <atomic>
#include <chrono>
#include <queue>
// TODO: maybe validate preset before rendering ?
// render args
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() {