{ description = "colibrì — run GLM-5.2 (744B MoE) on a consumer machine with ~25 GB RAM"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; # Python with the packages needed by the offline converter tools pythonEnv = pkgs.python3.withPackages (ps: with ps; [ torch safetensors huggingface-hub numpy tokenizers datasets ]); colibri = pkgs.stdenv.mkDerivation { pname = "colibri"; version = "1.0"; src = ./.; # python3 is needed by checkPhase: `make test-c` shells out to # `python3 tools/run_tests.py` (see c/Makefile, PYTHON ?= python3). nativeBuildInputs = [ pkgs.makeWrapper pkgs.python3 ]; buildInputs = [ pkgs.gcc pkgs.gmp ]; # Use x86-64-v3 (AVX2) for a portable binary; override with ARCH=native for local builds ARCH = "x86-64-v3"; buildPhase = '' runHook preBuild make -C c glm ARCH="$ARCH" runHook postBuild ''; installPhase = '' runHook preInstall # Self-contained layout under $out/lib/colibri that mirrors the # source tree `coli` runs in (see the path-resolution logic at the # top of c/coli): the engine, the coli CLI script, the support # modules it imports (openai_server.py, resource_plan.py, # doctor.py), and tools/ all sit next to each other. mkdir -p $out/lib/colibri/tools $out/bin cp c/glm $out/lib/colibri/glm cp c/coli $out/lib/colibri/coli chmod +x $out/lib/colibri/coli cp c/openai_server.py c/resource_plan.py c/doctor.py $out/lib/colibri/ cp -r c/tools/* $out/lib/colibri/tools/ # $out/bin holds the user-facing entry points. ln -s ../lib/colibri/glm $out/bin/glm # Wrap coli: point it at the bundled engine (COLI_ENGINE) so it is # found by default, and at the module dir (PYTHONPATH) so # `import openai_server` / `resource_plan` / `doctor` resolve. makeWrapper ${pythonEnv}/bin/python $out/bin/coli \ --add-flags "$out/lib/colibri/coli" \ --set-default COLI_ENGINE "$out/lib/colibri/glm" \ --set PYTHONPATH "$out/lib/colibri:${pythonEnv}/${pkgs.python3.sitePackages}" runHook postInstall ''; checkPhase = '' runHook preCheck cd c make test-c cd .. runHook postCheck ''; doCheck = true; meta = with pkgs.lib; { description = "Run GLM-5.2 (744B MoE) on a consumer machine with ~25 GB RAM"; homepage = "https://github.com/JustVugg/colibri"; license = licenses.asl20; platforms = platforms.linux; mainProgram = "glm"; }; }; in rec { packages = { default = colibri; inherit colibri; }; apps = { default = { type = "app"; program = "${colibri}/bin/glm"; }; coli = { type = "app"; program = "${colibri}/bin/coli"; }; }; devShells.default = pkgs.mkShell { inputsFrom = [ colibri ]; packages = [ pythonEnv pkgs.gcc pkgs.gnumake pkgs.clang-tools # clangd / clang-tidy for IDE support pkgs.pkg-config ]; shellHook = '' echo "🐦 colibrì dev shell" echo " gcc: $(gcc --version | head -1)" echo " python: $(python3 --version)" echo "" echo "Build the engine: make -C c glm" echo "Run the converter: python c/coli convert --model /path/to/glm52_i4" echo "Chat: COLI_MODEL=/path/to/glm52_i4 ./c/glm ..." ''; }; } ); }