summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..8753f45
--- /dev/null
+++ b/main.c
@@ -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;
+}