diff --git a/misc/colibri/Makefile b/misc/colibri/Makefile index a13d1a1a2d58..b0871064c8fb 100644 --- a/misc/colibri/Makefile +++ b/misc/colibri/Makefile @@ -1,34 +1,47 @@ PORTNAME= colibri -DISTVERSION= g20260715 +DISTVERSION= g20260717 CATEGORIES= misc # machine-learning PKGNAMESUFFIX= -ai MAINTAINER= yuri@FreeBSD.org COMMENT= Run GLM-5.2 (744B MoE) on a 25GB-RAM consumer machine WWW= https://github.com/JustVugg/colibri LICENSE= APACHE20 LICENSE_FILE= ${WRKSRC}/LICENSE +RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}huggingface-hub>0:misc/py-huggingface-hub@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}safetensors>0:misc/py-safetensors@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}numpy>0:math/py-numpy@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}psutil>0:sysutils/py-psutil@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}pytorch>0:misc/py-pytorch@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}datasets>0:misc/py-datasets@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}tokenizers>0:textproc/py-tokenizers@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}transformers>0:misc/py-transformers@${PY_FLAVOR} + + USES= gmake python shebangfix +USE_RC_SUBR= ${PORTNAME} USE_GITHUB= yes GH_ACCOUNT= JustVugg -GH_TAGNAME= 550ddcb +GH_TAGNAME= 8a1dcca # dev branch with hot fixes SHEBANG_FILES= c/coli SHEBANG_GLOB= *.py +CFLAGS_EX= ${CFLAGS:S/O2/O3/} # colibri needs all CPU performance it can get, so we override the default optimization level. native build (CPUTYPE?=native in /etc/rc.config) is also recommended. + CFLAGS+= -pthread -fopenmp # -fopenmp is for tests LDFLAGS+= -pthread -lm MAKE_ARGS= CC=${CC} \ - CFLAGS="${CFLAGS}" \ + CFLAGS="${CFLAGS_EX}" \ LDFLAGS="${LDFLAGS}" TEST_TARGET= test # tests as of 2026-07-14: # Ran 62 tests in 3.629s # OK .include diff --git a/misc/colibri/distinfo b/misc/colibri/distinfo index 90abc8b626af..51384f066fdc 100644 --- a/misc/colibri/distinfo +++ b/misc/colibri/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1784165685 -SHA256 (JustVugg-colibri-g20260715-550ddcb_GH0.tar.gz) = 11ae44721a02516c204fb6fc283b0d886d09de97e6ffeb8b8a4138bbcb0f9b1f -SIZE (JustVugg-colibri-g20260715-550ddcb_GH0.tar.gz) = 1396819 +TIMESTAMP = 1784348501 +SHA256 (JustVugg-colibri-g20260717-8a1dcca_GH0.tar.gz) = 78a4899981bd2da030b48efa328c3c6b330252b08425d154f58acfbbd23edf6a +SIZE (JustVugg-colibri-g20260717-8a1dcca_GH0.tar.gz) = 3055854 diff --git a/misc/colibri/files/colibri.in b/misc/colibri/files/colibri.in new file mode 100644 index 000000000000..34a56c394eac --- /dev/null +++ b/misc/colibri/files/colibri.in @@ -0,0 +1,59 @@ +#!/bin/sh + +# PROVIDE: colibri +# REQUIRE: LOGIN +# KEYWORDS: shutdown + +# Add the following lines to /etc/rc.conf to enable colibri +# colibri_enable="YES" +# +# colibri_enable (bool): Set to YES to enable colibri +# Default: NO +# colibri_user (str): Ollama daemon user +# Default: root +# colibri_args (str): Additional arguments for colibri +# Default: "serve" +# colibri_model (str): Model directory for colibri +# Default: "/home/$colibri_user/colibri-model" +## colibri_api_key (str): API key ti use with colibri +## Default: "" # empty +# colibri_log (str): Log file for colibri +# Default: "/var/log/colibri-$user.log" +# colibri_pidfile (str): PID file for colibri +# Default: "/var/run/colibri-$user.pid" + +. /etc/rc.subr + +name="colibri" +rcvar=colibri_enable + +load_rc_config $name + +: ${colibri_enable:="NO"} +: ${colibri_user:="nobody"} +: ${colibri_args:="serve"} +: ${colibri_model:="/home/${colibri_user}/colibri-model"} +#: ${colibri_api_key:=""} +: ${colibri_log:="/var/log/colibri-${colibri_user}.log"} +: ${colibri_pidfile:="/var/run/${name}-${colibri_user}.pid"} + +run_command="%%PREFIX%%/bin/coli" +pidfile=${colibri_pidfile} +command=/usr/sbin/daemon +command_args="-f -t ${name} -P ${pidfile} -o ${colibri_log} ${run_command} ${colibri_args} --model-id glm-5.2-colibri --model ${colibri_model}" + +start_precmd="colibri_precmd" +colibri_chdir=/tmp + +colibri_precmd() +{ + # set environment variables for the colibri server + #export COLI_MODEL=${colibri_model} + #export COLI_API_KEY=${colibri_api_key} + # ensure log file exists + touch ${colibri_log} ${pidfile} + chown ${colibri_user} ${colibri_log} ${pidfile} + chmod 640 ${colibri_log} +} + +run_rc_command "$1" diff --git a/misc/colibri/files/download-model-glm-5.2.py b/misc/colibri/files/download-model-glm-5.2.py new file mode 100644 index 000000000000..ac4f59ee6885 --- /dev/null +++ b/misc/colibri/files/download-model-glm-5.2.py @@ -0,0 +1,17 @@ +import time +from huggingface_hub import snapshot_download + +while True: + try: + print("Starting/Resuming download...") + snapshot_download( + repo_id="mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp", + local_dir=".", + max_workers=4 + ) + print("Download complete!") + break + except Exception as e: + print(f"Disconnected or Error: {e}. Retrying in 10 seconds...") + time.sleep(10) +