#include #include #include #include #include "llm.h" #define MODEL_PATH "qwen2.5-3b-instruct-q4_k_m.gguf" static void usage(const char *prog) { errx(1, "usage: %s [-m model_path]", prog); } int main(int argc , char *argv[]) { int opt; const char *prog; const char *model_path; struct llm_ctx *llm; prog = argv[0]; model_path = MODEL_PATH; openlog(prog, LOG_PID | LOG_NDELAY, LOG_DAEMON); while ((opt = getopt(argc, argv, "m:")) != -1) { switch (opt) { case 'm': model_path = optarg; break; default: usage(prog); } } argc -= optind; argv += optind; if (argc != 0) usage(prog); if (unveil(model_path, "r") == -1) { syslog(LOG_ERR, "unveil %s: %m", model_path); exit(1); } if (unveil(NULL, NULL) == -1) { syslog(LOG_ERR, "unveil lock failed: %m"); exit(1); } if (!(llm = llm_init(model_path))) { syslog(LOG_ERR, "failed to load model"); exit(1); } printf("Loaded model\n"); /* llm_init() calls mlock, hence pledge() after that. */ if (pledge("stdio", NULL) == -1) { syslog(LOG_ERR, "pledge: %m"); exit(1); } return 0; }