diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 66 |
1 files changed, 66 insertions, 0 deletions
@@ -0,0 +1,66 @@ +#include <stdlib.h> +#include <err.h> +#include <syslog.h> +#include <unistd.h> + +#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; +} |
