Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
220 commits
Select commit Hold shift + click to select a range
ac1f7a8
feat(prefetch): implement prefetcher v2.1 with lookahead-2, hot pinni…
EgonRuiter Jul 15, 2026
c462427
feat(io): implement Consolidated Expert I/O to reduce expert disk rea…
EgonRuiter Jul 15, 2026
4ae4f61
feat(prefetch): implement stale request pruning and queue de-duplicat…
EgonRuiter Jul 15, 2026
b3fdb14
feat(prefetch): add opt-in lookahead-3 prefetching option for PILOT=3
EgonRuiter Jul 15, 2026
24058d3
feat(pinning): implement dynamic asymmetric expert pinning and layer …
EgonRuiter Jul 15, 2026
ca78883
feat(prefetch): implement persistent hot pinning and pre-warmup wait …
EgonRuiter Jul 15, 2026
6ade409
refactor(prefetch): clean up unused variables, dead functions, and ha…
EgonRuiter Jul 16, 2026
1ac2e7b
fix(prefetch): address copilot code quality reviews on safety and con…
EgonRuiter Jul 16, 2026
2d8d295
fix(prefetch): address second round of copilot review comments
EgonRuiter Jul 16, 2026
b6bae91
fix(prefetch): address third round of copilot review comments
EgonRuiter Jul 16, 2026
c769e04
fix(prefetch): address fourth round of copilot review comments
EgonRuiter Jul 16, 2026
364b974
tok: o200k pre-tokenizer support, auto-detected from tokenizer.json
nbeerbower Jul 16, 2026
9e2d415
tests: o200k tokenizer coverage, no model download
nbeerbower Jul 16, 2026
5ad4d54
test_tok_o200k: fgets instead of getline for the windows job
nbeerbower Jul 16, 2026
d52e761
feat: AMD GPU support via HIP/ROCm — single-source backend through ba…
noobdev-ph Jul 16, 2026
288edd7
fix: GPU backend failure-path hardening + tests
noobdev-ph Jul 17, 2026
dc19663
pipe: blocking pipe_wait (COLI_PIPE_BLOCK=1) + PIPE_WORKERS implies P…
ebootheee Jul 17, 2026
755a9a4
merge: dev — keep engine-hip-syntax alongside the new windows-cuda-bu…
noobdev-ph Jul 17, 2026
92ddc22
Merge remote-tracking branch 'upstream/dev' into feat/gpu-backend-har…
noobdev-ph Jul 17, 2026
72dd9ac
security: harden model-file parsing, server, and build per audit
KingIcyCreamProjects Jul 16, 2026
df644dc
security: SEC-9 — bound untrusted config/oracle JSON slurps
KingIcyCreamProjects Jul 17, 2026
fb45de2
security: extend the audit — olmoe loader, tokenizer, server slowloris
KingIcyCreamProjects Jul 18, 2026
d86a6b9
packaging: pyproject.toml + editorconfig + clang-format
ZacharyZcR Jul 18, 2026
741d46b
Merge branch 'pr396' into p396-packaging
JustVugg Jul 19, 2026
ca39e53
packaging: single version source + honest editable-install semantics …
JustVugg Jul 19, 2026
22509fc
Merge pull request #362 from EgonRuiter/prefetcher-v3
JustVugg Jul 19, 2026
fae4b2c
Merge pull request #412 from JustVugg/p396-packaging
JustVugg Jul 19, 2026
72e3677
security: reject malformed model tensors at the untrusted-mirror boun…
JustVugg Jul 19, 2026
3ffe4bb
Merge pull request #413 from JustVugg/p-sec-trustboundary
JustVugg Jul 19, 2026
ac39be6
flake: remove unnecessary rec
attilaolah Jul 19, 2026
73aef4d
nix: configure and apply a formatter
attilaolah Jul 19, 2026
a6d0a6c
nix: use with pkgs in some package lists
attilaolah Jul 19, 2026
e93d574
nix: add the python env to check inputs
attilaolah Jul 19, 2026
bcb984a
nix: use getExe instead of hardcoding the path
attilaolah Jul 19, 2026
58fd0e5
nix: commit lockfile, ignore result
attilaolah Jul 19, 2026
da97f0d
nix: build on darwin with -march=native
attilaolah Jul 19, 2026
51fe03f
nix: set main program to coli
attilaolah Jul 19, 2026
4775f28
nix: copy missing version.py to the environment
attilaolah Jul 19, 2026
845af63
docs: beginner-friendly Quick Start guide for Linux/Windows/macOS (#414)
JustVugg Jul 19, 2026
40a3596
nix: python3 is only needed for checks, not for the actual build
attilaolah Jul 19, 2026
ebc851e
Merge pull request #415 from JustVugg/docs-quickstart
JustVugg Jul 19, 2026
cfcc742
metal: advance the LFRU recency clock on the GPU-prerouted decode pat…
JustVugg Jul 19, 2026
8f33bd1
Merge pull request #420 from JustVugg/p417-metal-lfru
JustVugg Jul 19, 2026
f853ea8
refactor: split glm.c into colibri.c + 4 header modules
ZacharyZcR Jul 18, 2026
420a072
docs: add simplified Chinese and Italian README, update language nav
ZacharyZcR Jul 18, 2026
e486574
web: i18n support — English, 简体中文, 繁體中文, Italiano
ZacharyZcR Jul 18, 2026
93b4a8e
ci: fix Windows CUDA DLL check — glm.exe → colibri.exe
ZacharyZcR Jul 18, 2026
bc69a9a
fix: remove duplicate argmax_v — use NaN-safe version from sample.h
ZacharyZcR Jul 19, 2026
083fda5
fix: update test_logit_nan to include colibri.c instead of glm.c
ZacharyZcR Jul 19, 2026
8a9a0fc
plan: auto-tune heuristics — bottleneck classification + parameter de…
ZacharyZcR Jul 18, 2026
61004dc
Merge pull request #391 from ZacharyZcR/refactor/split-colibri
JustVugg Jul 19, 2026
2760917
Merge remote-tracking branch 'upstream/main' into feat/hip-single-source
noobdev-ph Jul 19, 2026
468b190
Merge remote-tracking branch 'upstream/main' into feat/gpu-backend-ha…
noobdev-ph Jul 19, 2026
aa62ffd
Merge remote-tracking branch 'upstream/dev' into feat/hip-single-source
noobdev-ph Jul 19, 2026
26d6b2d
sync: dev
noobdev-ph Jul 19, 2026
63966ba
Dual-SSD streaming: COLI_MODEL_MIRROR reads experts from two model co…
steve-m Jul 13, 2026
e9225d2
docs: dual-SSD streaming env vars in ENVIRONMENT.md
steve-m Jul 19, 2026
4586d33
fix: MTP-head probe uses the last expert by index, not a hardcoded 255
nbeerbower Jul 19, 2026
ab55f49
cuda: COLI_GROUP_ASYNC=1 — async expert-group issue/take with CPU/GPU…
ZacharyZcR Jul 17, 2026
1d9f554
cuda: cache layernorm weights on-device in pipe_layer_sparse (kill 15…
ZacharyZcR Jul 17, 2026
7d01d21
fix Windows async expert loader
ZacharyZcR Jul 18, 2026
3e45074
site: official website — animated demo, expert brain, 3-D atlas, Page…
ZacharyZcR Jul 19, 2026
bca4e95
site: redesign — measured atlas everywhere, vision, algorithm, models
ZacharyZcR Jul 19, 2026
22560ad
README: vision, the JIT-for-weights framing, roadmap, acknowledgements
ZacharyZcR Jul 19, 2026
0049ea1
E5: MTLResidencySet lifecycle scaffolding (init/register/unregister/s…
monotophic Jul 18, 2026
309f20c
E5: moe_submit relies on the residency set instead of per-buffer useR…
monotophic Jul 18, 2026
82d0600
E5: validator round-1 fixes (resset mutex split, flush visibility, ci…
monotophic Jul 18, 2026
e011092
E5: carry the fslab-OOM unwind fix (unregister before free)
monotophic Jul 18, 2026
8efa9ec
E5: hazard-audit round-2 fixes (re-register set hygiene, SUMMARY mute…
monotophic Jul 18, 2026
042fd64
Align residency-set docs with split runtime
rgbkrk Jul 19, 2026
e135119
Document current Metal warning baseline
rgbkrk Jul 19, 2026
113ece3
cuda: COLI_CUDA_ROUTER=1 — route the decode row on the layer's home d…
ZacharyZcR Jul 19, 2026
34f6e50
cuda: decode expert groups take the grouped kernels even under TC_W4A…
ZacharyZcR Jul 19, 2026
70fb5b0
fix(api): pass tools and tool_choice as parameters to generation() to…
Jul 19, 2026
26bd8b4
fix(engine): filter non-EOS stop tokens in serve mode to prevent prem…
Jul 19, 2026
1f00142
PROF: DISK-CLASS — per-load cold/warm disk instrumentation (re-derive…
monotophic Jul 19, 2026
fbabaa4
Merge pull request #422 from nbeerbower/fix-mtp-probe-expert-count
JustVugg Jul 19, 2026
5c84b25
fix: old x86 Mac scalar -> vnni
okuvshynov Jul 19, 2026
a7ef058
Merge pull request #438 from monotophic/e7/disk-class-instr
JustVugg Jul 19, 2026
17fbdfa
Merge pull request #393 from ZacharyZcR/feat/auto-tune
JustVugg Jul 19, 2026
9c698b2
bench: microbench for AVX-VNNI idot accumulator A/B (not a gate)
cdhdt Jul 19, 2026
c4b2cf6
idot: independent accumulators on the AVX-VNNI int8/int4 dot kernels
cdhdt Jul 19, 2026
453d140
pin: with CUDA_RELEASE_HOST the VRAM prefix must not consume the RAM …
ZacharyZcR Jul 19, 2026
85107f8
io: skip the wasted WILLNEED on expert weights under DIRECT=1
cdhdt Jul 19, 2026
9f30916
metal: parallel top-8 expert selection (r_top8_par), default ON
monotophic Jul 19, 2026
4b70482
Merge pull request #445 from ZacharyZcR/fix/pin-budget-release-host
JustVugg Jul 19, 2026
9c5ab39
rss_guard: free the evicted expert slab under g_pilot_mx (use-after-f…
cdhdt Jul 19, 2026
e9b3614
Merge pull request #449 from cdhdt/fix/rss-guard-uaf
JustVugg Jul 20, 2026
a74e3e0
cuda: grouped-int4 (fmt=4) support in the expert-group kernels (#334)
ZacharyZcR Jul 20, 2026
536d8bf
numa: per-layer pin arenas — fix the PIN_GB=all VMA explosion (#419)
ZacharyZcR Jul 19, 2026
57e67d6
numa: skip binding the GPU-prefix staging slabs
ZacharyZcR Jul 19, 2026
ae4e31a
tools: IQ3_XXS-codebook scheme in the quant ablation (#452 step 1)
ZacharyZcR Jul 20, 2026
42a5417
convert: mirror the --indir resume params guard onto --repo download …
monotophic Jul 20, 2026
e483461
tools: fmt=5 index codec — deployable bytes for the E8/IQ3 container …
ZacharyZcR Jul 20, 2026
d43b545
tests: efficiency suite — tiny-model regression gates + full-model op…
woolcoxm Jul 17, 2026
cf126cb
fix(tests): skip efficiency tests when glm_tiny fixture is absent (CI…
woolcoxm Jul 17, 2026
f27a89e
resource_plan: fix --auto-tier pinning decode to one core (#325)
woolcoxm Jul 16, 2026
bd3efb1
resource_plan: stop setting OMP_PROC_BIND/OMP_PLACES from --auto-tier…
woolcoxm Jul 16, 2026
171aa69
fix(resource_plan): take last two lscpu fields, not [1]/[2] (#332 rev…
woolcoxm Jul 17, 2026
0b05f6a
win32: auto-enable the GPU in bare coli chat
woolcoxm Jul 17, 2026
3455eee
Merge remote-tracking branch 'origin/dev' into pr437
JustVugg Jul 20, 2026
3ddbc65
Merge pull request #437 from 4ny3l/fix-tool-calling-401
JustVugg Jul 20, 2026
bb2bae8
Merge pull request #456 from monotophic/convert/resume-guard
JustVugg Jul 20, 2026
1765ed8
Merge pull request #453 from ZacharyZcR/feat/ablation-iq3-scheme
JustVugg Jul 20, 2026
af23f31
Merge pull request #360 from woolcoxm/test/efficiency-suite
JustVugg Jul 20, 2026
0337697
Merge pull request #332 from woolcoxm/fix/auto-tier-single-core
JustVugg Jul 20, 2026
505a0f6
Merge pull request #440 from okuvshynov/test_macpro_2019
JustVugg Jul 20, 2026
7de49fa
docs: explain the prebuilt Windows binary — what the .exe is and how …
JustVugg Jul 20, 2026
85e7dff
Merge pull request #460 from JustVugg/docs-windows-exe
JustVugg Jul 20, 2026
b347092
Merge remote-tracking branch 'origin/main' into dev
JustVugg Jul 20, 2026
f8e0612
Merge pull request #363 from woolcoxm/fix/win32-coli-chat-cuda-autoen…
JustVugg Jul 20, 2026
48d4af6
Merge remote-tracking branch 'origin/dev' into pr330
JustVugg Jul 20, 2026
ff38be0
Merge pull request #330 from nbeerbower/tok-o200k
JustVugg Jul 20, 2026
d336230
Merge pull request #424 from ZacharyZcR/feat/website
JustVugg Jul 20, 2026
d34461c
Merge remote-tracking branch 'origin/dev' into pr270
JustVugg Jul 20, 2026
e809171
Merge pull request #270 from ebootheee/pr-pipe-batch-sync
JustVugg Jul 20, 2026
1aacfcf
Merge pull request #433 from ZacharyZcR/fix/decode-grouped-kernels
JustVugg Jul 20, 2026
78a773e
Merge pull request #432 from ZacharyZcR/feat/cuda-device-router
JustVugg Jul 20, 2026
e78fcfc
Merge pull request #451 from ZacharyZcR/feat/cuda-grouped-g64
JustVugg Jul 20, 2026
0696172
Merge pull request #342 from ZacharyZcR/feat/expert-group-overlap
JustVugg Jul 20, 2026
aa825d3
Merge pull request #447 from monotophic/metal/rtop8-parallel
JustVugg Jul 20, 2026
73badea
Merge pull request #429 from ZacharyZcR/fix/numa-vma-419
JustVugg Jul 20, 2026
04ed004
Merge pull request #444 from cdhdt/perf/idot-avxvnni-accumulators
JustVugg Jul 20, 2026
c98b451
Merge pull request #446 from cdhdt/perf/io-direct-pilot
JustVugg Jul 20, 2026
93cde63
Merge pull request #409 from attilaolah/nix
JustVugg Jul 20, 2026
e48513c
Merge pull request #338 from noobdev-ph/feat/gpu-backend-hardening
JustVugg Jul 20, 2026
31526ae
fix(build): test_pipe_block references glm.c, renamed to colibri.c by…
JustVugg Jul 20, 2026
ebd85a7
Merge pull request #426 from rgbkrk/quod/metal-residency-set-dev
JustVugg Jul 20, 2026
49c1153
nix: re-use existing pkgs binding
attilaolah Jul 20, 2026
d721163
refactor: grammar-draft state into GrDraft struct (mechanical, no beh…
fabio-rovai Jul 14, 2026
d7b855f
serve stage 2: per-request grammars end-to-end — response_format -> S…
fabio-rovai Jul 14, 2026
84514a5
review: docs section, 1 MiB grammar pre-check, negative tests, measur…
fabio-rovai Jul 14, 2026
cccf8ec
Merge pull request #463 from attilaolah/nix
JustVugg Jul 20, 2026
5e42e70
int3-g64 (fmt=5): per-group-scale 3-bit weight format — engine, conve…
fabio-rovai Jul 20, 2026
932f367
convert: --up-bits/--gate-bits/--down-bits per-projection expert quant
fabio-rovai Jul 20, 2026
f42adfa
Merge #168: int3-g64 (fmt=5) per-group-scale 3-bit expert quant
JustVugg Jul 20, 2026
1a260a4
docs: surface the website (badge + header link) in README
JustVugg Jul 20, 2026
0f8cbe2
cuda: COLI_CUDA_RESID=1 — expert-group results stay on device (#431 P…
ZacharyZcR Jul 19, 2026
8698715
eval_glm: stream results line-by-line + incremental CSV (no more lost…
woolcoxm Jul 17, 2026
6e29260
cuda+engine: full fmt=4 (grouped int4 gs=64) support + diagnostic har…
woolcoxm Jul 16, 2026
bfb8000
fix: layer_cuda_shard_kvb scale offset for fmt=4 (multi-GPU, per Just…
woolcoxm Jul 16, 2026
d96e425
fix: apply per-group scales in CUDA attention kernels for fmt=4 (kv_b…
woolcoxm Jul 17, 2026
f4409fd
fix(rebase): adapt fmt=4 to dev's quant.h refactor + colibri.c rename
woolcoxm Jul 20, 2026
8b69c89
fix(rebase): adapt to dev's split tensor_upload/_g API + fault-inject…
woolcoxm Jul 20, 2026
7291fd1
tests: skip the fmt=5 codec tests where numpy is absent
ZacharyZcR Jul 20, 2026
c98e5f8
Merge #298: per-group scales in CUDA dense/attention kernels (fmt=4 c…
JustVugg Jul 20, 2026
133d271
Merge #458: fmt=5 index codec tools — deployable bytes for the E8/IQ3…
JustVugg Jul 20, 2026
880cfb4
Merge #192: serve stage 2 — response_format, per-request grammars, gr…
JustVugg Jul 20, 2026
e942f62
cuda: reject fmt=4 at the per-row-only entry points (#334 follow-up t…
ZacharyZcR Jul 20, 2026
87cd0aa
Merge dev into dual-ssd-mirror: resolve #298/#192-era conflicts
JustVugg Jul 20, 2026
57fe1a3
Merge remote-tracking branch 'upstream/dev' into feat/fmt5-engine
ZacharyZcR Jul 20, 2026
c45a882
engine: fmt=6 E8/IQ3 lattice container — CPU decode kernel and dispat…
ZacharyZcR Jul 20, 2026
507c8a1
fix(ci): remove accidentally-committed test_st_pread binary
JustVugg Jul 20, 2026
68ac9ff
Merge #421: dual-SSD streaming (COLI_MODEL_MIRROR) — read the model f…
JustVugg Jul 20, 2026
377cc35
quant: FWHT primitive for the fmt=6 rotation, with the placement rule…
ZacharyZcR Jul 20, 2026
cbbe310
site: fix license — Apache 2.0, not MIT
JustVugg Jul 20, 2026
32eac69
cuda: fix two loader stubs missed in the resident-rename (#434 Window…
ZacharyZcR Jul 20, 2026
0d2fb6f
feat(st): COLI_MODEL_DIRS - split model shards across N drives, no du…
mohamedmastouri2000-boop Jul 20, 2026
f939191
fix(coli): honour explicit COLI_CUDA=0 over the Windows bare-run auto…
mohamedmastouri2000-boop Jul 20, 2026
4cc9885
Merge #468: honour explicit COLI_CUDA=0 over Windows auto-enable + dr…
JustVugg Jul 20, 2026
e16ec68
Merge #469: COLI_MODEL_DIRS — split model shards across N drives (cap…
JustVugg Jul 20, 2026
ac04b37
fix(plan): respect explicit COLI_CUDA_MTP=1 - skip the DRAFT=0 export…
mohamedmastouri2000-boop Jul 20, 2026
1b8f307
Merge #470: respect explicit COLI_CUDA_MTP=1 — planner skips DRAFT=0 …
JustVugg Jul 20, 2026
80cf3d4
quant: int4 IDOT at S=1 on AVX-512 VNNI (g_i4s=1), like ARM SDOT
veerareddyvishal144 Jul 20, 2026
eaa68f4
pilot: LFRU-aware eviction guard — never evict a warm demand expert f…
cdhdt Jul 20, 2026
4aca059
Merge #474: LFRU-aware pilot eviction guard — a speculation never evi…
JustVugg Jul 21, 2026
e0f12c2
moe: XEXP=1 opt-in cross-expert OpenMP block for S=1 all-resident int…
veerareddyvishal144 Jul 21, 2026
4dfe581
omp: reset CPU affinity before the tuning re-exec (fixes #471)
veerareddyvishal144 Jul 21, 2026
04ef848
Merge remote-tracking branch 'upstream/main' into feat/fmt5-engine
ZacharyZcR Jul 21, 2026
981a82e
Merge remote-tracking branch 'upstream/main' into fix/dense-fmt4-scales
ZacharyZcR Jul 21, 2026
a66c99a
attn: vectorize the MLA absorption helpers (qt_addrow / qt_matvec_row…
veerareddyvishal144 Jul 21, 2026
56e4ed7
Merge remote-tracking branch 'upstream/dev' into feat/fmt5-engine
ZacharyZcR Jul 21, 2026
d8277d6
Merge remote-tracking branch 'upstream/dev' into fix/dense-fmt4-scales
ZacharyZcR Jul 21, 2026
d469c54
perf: SIMD MLA-absorb score + value-mix reductions (#442)
woolcoxm Jul 21, 2026
fe6c164
merge: dev (#298 fmt=4 per-group scales) — HIP verified, test call si…
noobdev-ph Jul 21, 2026
44c8153
windows: use $(file) for the build-config stamp + document the scoop/…
woolcoxm Jul 21, 2026
ea45ee9
fix: silence -Wformat-truncation in expert tensor-name snprintfs (#484)
woolcoxm Jul 21, 2026
3d854e7
fix(cuda): honor explicit CUDA_EXPERT_GB under CUDA_DENSE=1 (#491)
woolcoxm Jul 21, 2026
2910e44
Merge #481: SIMD MLA-absorb score + value-mix reductions (+4.7x, byte…
JustVugg Jul 21, 2026
a0f294b
Merge #465: fmt=6 E8/IQ3 lattice container — CPU decode kernel + disp…
JustVugg Jul 21, 2026
0cd1bb7
Merge #464: reject fmt=4 without a group size at the per-row-only CUD…
JustVugg Jul 21, 2026
6dc16c5
Merge #495: honor explicit CUDA_EXPERT_GB under CUDA_DENSE=1 (#491)
JustVugg Jul 21, 2026
928cf17
Merge #485: silence -Wformat-truncation in expert tensor-name snprint…
JustVugg Jul 21, 2026
d338217
Merge #483: windows build-config stamp + scoop/VS-prompt sh.exe doc (…
JustVugg Jul 21, 2026
766dd07
Merge #476: reset CPU affinity before the OMP tuning re-exec (fixes #…
JustVugg Jul 21, 2026
b50524d
Merge remote-tracking branch 'origin/dev' into pr473
JustVugg Jul 21, 2026
a920336
Fix GPU detection on unified-memory chips; wire HF_TOKEN into downloader
ideaclaw Jul 21, 2026
2b098cf
test: add CUDA env integration tests (COLI_CUDA modes + expert budget…
dqiaok Jul 21, 2026
52fee21
Merge #473: int4 IDOT at S=1 on AVX-512 VNNI (g_i4s=1)
JustVugg Jul 21, 2026
d1696af
Merge remote-tracking branch 'origin/dev' into pr475
JustVugg Jul 21, 2026
e05ae97
Merge #475: opt-in XEXP=1 — one OpenMP region per expert block at S=1…
JustVugg Jul 21, 2026
81ab0f3
Merge remote-tracking branch 'origin/dev' into pr477
JustVugg Jul 21, 2026
b86cc1d
Merge #477: vectorize MLA absorption helpers (qt_addrow/qt_matvec_row…
JustVugg Jul 21, 2026
5e02064
fix(ci): guard #471 CPU-affinity reset with #ifdef CPU_SETSIZE
JustVugg Jul 21, 2026
38d1777
fix(pilot): narrow LFRU eviction guard so speculations don't over-dro…
woolcoxm Jul 21, 2026
65be434
Merge remote-tracking branch 'upstream/dev' into feat/hip-single-source
noobdev-ph Jul 21, 2026
7c54ad0
Merge #339: AMD GPU support — HIP/ROCm via single-source backend_gpu_…
JustVugg Jul 21, 2026
700532d
Merge #497: narrow the LFRU eviction guard so speculations don't over…
JustVugg Jul 21, 2026
9b1d87d
sec(olmoe): validate expert weight/scale sizes before the raw read
JustVugg Jul 21, 2026
6a958f8
Merge remote-tracking branch 'upstream/dev' into feat/cuda-resident-a…
ZacharyZcR Jul 21, 2026
7577f94
cuda: carry per-tensor group sizes into the issue/resident GroupDesc …
ZacharyZcR Jul 21, 2026
cc7461f
Merge dev into security branch: resolve #391/#413-era conflicts + fix…
JustVugg Jul 21, 2026
e90a4a5
Merge #368: security hardening — server, parsers, build (untrusted-mi…
JustVugg Jul 21, 2026
ed66f5c
hip: map the peer-copy/event-wait surface the resident path uses
ZacharyZcR Jul 21, 2026
fb92fa5
tests: drop 12 stray test binaries committed in #368's conflict resol…
ZacharyZcR Jul 21, 2026
3634001
convert: --xbits e8 — produce and load the fmt=6 E8/IQ3 container (#4…
ZacharyZcR Jul 21, 2026
f7f6826
tools: bytes-true 'iq3-pack' ablation scheme + inverse rotation (#452…
ZacharyZcR Jul 21, 2026
c5b9d5a
Fixed (I hope) broken anchor links
DavidePapero Jul 21, 2026
3be2336
Merge #500: remove 12 stray test binaries from dev + gitignore the pa…
JustVugg Jul 21, 2026
38763b2
Merge #501: convert --xbits e8 — produce and load the fmt=6 E8/IQ3 co…
JustVugg Jul 21, 2026
645d6fb
Merge #504: fix broken anchor links in the Docker READMEs
JustVugg Jul 21, 2026
31d644c
Merge #434: COLI_CUDA_RESID=1 — expert-group results stay on device (…
JustVugg Jul 21, 2026
b06affd
serve: refuse an over-long prompt instead of silently truncating it (…
JustVugg Jul 21, 2026
8c8c798
Merge pull request #506 from JustVugg/fix/401-context-truncation
JustVugg Jul 21, 2026
e2cad79
serve: recover a tool call whose closing tag never arrives (#401)
JustVugg Jul 21, 2026
d633b35
Merge pull request #505 from JustVugg/fix/401-unclosed-tool-call
JustVugg Jul 21, 2026
6305fb1
release: bump to 1.1.0 and write the CHANGELOG
JustVugg Jul 21, 2026
e7e5723
Merge pull request #507 from JustVugg/release/v1.1.0-bump
JustVugg Jul 21, 2026
767bf75
release: ship the engine under its plain name so the archive actually…
JustVugg Jul 21, 2026
008ecc3
Merge pull request #508 from JustVugg/fix/release-package-engine-name
JustVugg Jul 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 120
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
AllowShortLoopsOnASingleLine: true
BreakBeforeBraces: Attach
PointerAlignment: Right
SpaceAfterCStyleCast: false
SortIncludes: false
24 changes: 24 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

[*.{c,h,cu}]
indent_size = 4

[*.{ts,tsx,js,json,css}]
indent_size = 2

[Makefile]
indent_style = tab

[*.yml]
indent_size = 2

[*.md]
trim_trailing_whitespace = false
33 changes: 27 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build glm
run: cd c && make glm
- name: Build colibri
run: cd c && make colibri
- name: C test suite
run: cd c && make test-c

Expand Down Expand Up @@ -41,6 +41,27 @@ jobs:
-Xcompiler=-Wall,-Wextra
echo "CUDA syntax check passed"

engine-hip-syntax:
name: HIP syntax check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Free runner disk
# rocm/dev images are large; hosted runners need the headroom freed
# BEFORE the pull (which is why this is not a container: job).
run: sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL
- name: Compile backend_cuda.cu + test binary with hipcc (no GPU)
run: |
# Tag pinned: `latest` outgrew the runner disk once already. The
# gcc-side engine link is skipped: containerized gcc/ld cannot link
# ROCm runtime libs (both 22.04 and 24.04 bases); the hipcc-driver
# link of the test binary below covers the single-source claim, and
# the engine link is exercised on real ROCm hardware (GPU_BACKENDS.md).
docker run --rm -v "$PWD":/src -w /src rocm/dev-ubuntu-24.04:6.2 bash -c '
apt-get update && apt-get install -y --no-install-recommends make gcc g++ &&
make -C c gpu-compile HIP=1 HIP_ARCH=gfx1100'
echo "HIP syntax check passed"

windows-cuda-build:
# The Windows CUDA path has no coverage anywhere: `engine-cuda-syntax` above
# compiles with nvcc's *GCC* host on Linux, and check.yml's windows job is
Expand Down Expand Up @@ -105,13 +126,13 @@ jobs:
make cuda-dll CUDA_ARCH=sm_80
test -f coli_cuda.dll || { echo "cuda-dll reported success but produced no DLL" >&2; exit 1; }
echo "coli_cuda.dll built (MSVC host)"
- name: make glm CUDA_DLL=1 (host links backend_loader, not cudart)
- name: make colibri CUDA_DLL=1 (host links backend_loader, not cudart)
shell: msys2 {0}
run: |
cd c
make glm CUDA_DLL=1
test -f glm.exe || { echo "glm CUDA_DLL=1 reported success but produced no exe" >&2; exit 1; }
echo "glm.exe built against the DLL loader"
make colibri CUDA_DLL=1
test -f colibri.exe || { echo "colibri CUDA_DLL=1 reported success but produced no exe" >&2; exit 1; }
echo "colibri.exe built against the DLL loader"

web:
name: Web UI
Expand Down
35 changes: 33 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,12 @@ jobs:
run: |
TAG=${GITHUB_REF#refs/tags/}
mkdir -p dist
cp c/glm${{ matrix.ext }} dist/colibri-${TAG}-${{ matrix.name }}${{ matrix.ext }}
# The engine goes in under its PLAIN name. `coli` locates the engine by looking for
# "colibri"/"colibri.exe" (then "glm") next to itself, so shipping it as
# colibri-<tag>-<platform>.exe made every downloaded archive fail with
# "engine is not built. Run: coli build" -- with the engine sitting right there.
# The version lives in the ARCHIVE name, which is where a downloader looks for it.
cp c/glm${{ matrix.ext }} dist/colibri${{ matrix.ext }}
cp c/coli dist/
cp c/version.py dist/
cp c/openai_server.py dist/
Expand All @@ -73,10 +78,36 @@ jobs:
tar czf colibri-${TAG}-${{ matrix.name }}.tar.gz *
fi

# Unpack what we are about to publish, in a clean directory, and prove `coli` finds the
# engine. A packaging mistake is invisible to every other job in this repo: the build is
# green, the tests are green, and the artifact is still unusable. Assert on behaviour.
- name: Verify the packaged archive actually runs
run: |
TAG=${GITHUB_REF#refs/tags/}
mkdir -p verify && cd verify
if [ "${{ matrix.ext }}" = ".exe" ]; then
7z x ../dist/colibri-${TAG}-${{ matrix.name }}.zip > /dev/null
else
tar xzf ../dist/colibri-${TAG}-${{ matrix.name }}.tar.gz
fi
test -x colibri${{ matrix.ext }} || { echo "engine missing from archive"; ls -la; exit 1; }
out=$(python3 coli info 2>&1 || true)
echo "$out"
case "$out" in
*"engine is not built"*) echo "FAIL: coli cannot find the packaged engine"; exit 1 ;;
esac
echo "$out" | grep -q "colibri" || { echo "FAIL: coli did not run"; exit 1; }
echo "OK: coli locates the engine in the published archive"

# Only the archives -- never the loose files. `dist/colibri-*.*` used to work by accident
# (the engine was versioned, so it did not match); now that the engine is plainly named,
# be explicit about what gets published.
- uses: actions/upload-artifact@v4
with:
name: colibri-${{ matrix.name }}
path: dist/colibri-*.*
path: |
dist/colibri-*.zip
dist/colibri-*.tar.gz

release:
needs: build
Expand Down
24 changes: 12 additions & 12 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ desktop/src-tauri/target/
desktop/src-tauri/gen/

# binari compilati (si rigenerano con make / coli build)
c/colibri
c/colibri.exe
c/glm
c/glm.exe
c/olmoe
Expand All @@ -23,18 +25,12 @@ c/backend_loader.o
c/coli_cuda.dll
c/coli_cuda.lib
c/coli_cuda.exp
c/tests/test_json
c/tests/test_json.exe
c/tests/test_st
c/tests/test_st.exe
c/tests/test_tier
c/tests/test_tier.exe
c/tests/test_grammar
c/tests/test_grammar.exe
c/tests/test_schema_gbnf
c/tests/test_schema_gbnf.exe
c/tests/test_compat_direct
c/tests/test_compat_direct.exe
c/tests/test_*
!c/tests/test_*.c
!c/tests/test_*.cu
!c/tests/test_*.mm
!c/tests/test_*.py
result

# oracoli tiny generati (make_glm_oracle.py) e dati benchmark scaricati
c/glm_tiny/
Expand Down Expand Up @@ -68,3 +64,7 @@ c/tests/test_decode_batch
c/tests/test_i4_acc512
c/tests/test_idot
c/tests/test_uring
olmoe_merged/
olmoe_i4/
c/olmoe_merged/
c/olmoe_i4/
77 changes: 77 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,83 @@
All notable changes to colibrì are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/).

## [1.1.0] — 2026-07-22

A community release. 27 pull requests from more than 20 contributors, 216 commits since
v1.0.0. Most of what follows was found, measured, or fixed by people who do not work on
this project and had nothing to gain from it.

### Added

- **AMD GPU support (HIP/ROCm)** (#339) — single-source `backend_gpu_compat.h` with a WMMA
dispatch gate, so one codebase builds for CUDA and HIP. Validated on an RX 9070 XT
(RDNA4, ROCm 7.2): token-exact against CPU on a real fmt=4 gs64 container, with resident
dense *and* with routed experts in VRAM, plus a fail-injection control proving the GPU
actually executed the work.
- **Dual-SSD streaming** (`COLI_MODEL_MIRROR`, #421) — read the model from two drives at
once, roughly doubling streaming bandwidth on a disk-bound host.
- **N-drive shard split** (`COLI_MODEL_DIRS`, #469) — capacity aggregation: run a container
no single drive can hold, spread across several with no duplication.
- **fmt=5 (int3-g64)** (#168) — 3-bit weights with per-64 group scales: measured 3.3x lower
outlier-row error than per-row int4 at 25% fewer bytes.
- **fmt=6 (E8/IQ3 lattice)** (#465) — CPU decode kernel and dispatch; index codec tooling (#458).
- **`tools/try_tool_calling.py`** — dependency-free two-turn tool-calling probe that doubles
as a smoke test.

### Fixed

- **Tool calling in coding clients** (#401), root cause found, in two parts:
- **#506** — the engine capped prompt encoding at `CTX-2`, and the tokenizer stops dead at
its limit *without reporting anything*. A prompt longer than the context was therefore
silently truncated to its first `CTX-2` tokens and answered anyway. With the 4096 default
that is 4094 — exactly the `prefill 4094` in the field report. The dropped tail was the
tool instructions and the user's actual turn, so the model emitted a bare `<` and stopped;
and because clients append to the *end* while truncation keeps the *head*, every retry
re-sent a byte-identical prompt. Now refused with a 400 `context_length_exceeded`.
- **#505** — a tool call whose closing `</tool_call>` never arrived was dropped whole,
because the parser required both tags. Now recovered when unambiguous, on both the
streamed and non-streamed paths.
- **#437** — non-EOS role markers were armed as hard stops in serve mode and cut generation
the instant a tool block started.
- **Grouped-int4 (fmt=4) produced garbage output on CUDA** with `CUDA_DENSE=1` (#298) — the
dense and attention kernels applied per-group scales as if they were per-row. Hardware-verified.
- **OpenMP tuning re-exec preserved the CPU affinity mask** (#476), jailing every thread onto
one core when `OMP_PROC_BIND`/`OMP_PLACES` were set: roughly a 20x slowdown.
- **Pilot eviction guard dropped ~100% of speculations** once the cache filled (#497),
collapsing `PILOT_REAL` to a hint-only path.
- **Silent budget clamp** capped the CUDA expert tier at ~109 experts regardless of
`CUDA_EXPERT_GB` (#495).
- fmt=4 guard at the per-row-only CUDA entry points (#464/#470); `COLI_CUDA_MTP=1` and
`COLI_CUDA=0` are now honoured over implicit defaults (#468).

### Security

Threat model: model files come from mirrors that are not trusted.

- **#368** — server hardening, JSON and tokenizer parser hardening, build flags, downloader
and dependency pinning.
- **#413** — the quant layout is resolved *and* validated against the on-disk byte counts
(unknown layouts are refused rather than falling through to int2), shape-product overflow
is rejected, and the olmoe dtype-3 path no longer trusts a crafted `nbytes` (heap overflow).

### Performance — all byte-identical

- **#481** +4.7x on the MLA-absorb score and value-mix reductions
- **#477** +13% decode on AVX-512 (`qt_addrow` / `qt_matvec_rows`)
- **#475** +11.6% with opt-in `XEXP=1` (one OpenMP region per expert block at S=1 full residency)
- **#473** +5.5% int4 IDOT at S=1 on AVX-512 VNNI

### Changed

- `glm.c` is now `colibri.c` plus header modules (#391); `make glm` remains as an alias.
- Serve stage 2 (#192): `response_format`, per-request grammars, grammar-forced drafts.

### Upgrade notes

- **`CTX` still defaults to 4096.** Coding clients send far more than that in a single system
prompt. Use `CTX=32768`. Before this release an over-long prompt was silently truncated;
now you get a clear 400 instead.

## [1.0.0] — 2026-07-19

First tagged release. The engine has been running in production since late June
Expand Down
85 changes: 85 additions & 0 deletions GPU_BACKENDS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# GPU backends: CUDA and HIP/ROCm

colibrì's GPU expert backend is **one source file** (`c/backend_cuda.cu`) compiled
for either vendor through `c/backend_gpu_compat.h` — the same one-shim-header
pattern `compat.h` uses for the Windows port. Compiled by nvcc the shim is a
pass-through to `cuda_runtime.h` (the NVIDIA path is byte-identical to the
pre-HIP tree); compiled by hipcc it maps the 14-symbol CUDA runtime surface the
backend uses onto HIP 1:1. The kernels use only shared syntax
(`__global__`, `__shared__`, `__syncthreads__`, `<<<>>>`), no vendor intrinsics.

**Rule for contributors:** vendor differences go in `backend_gpu_compat.h`
only — never `#ifdef __HIP__` (or CUDA-specific code) in `backend_cuda.cu`.

## Supported environments

| backend | platform | toolchain | build |
|---|---|---|---|
| CUDA (`CUDA=1`) | Linux x86-64 | CUDA toolkit (nvcc), `CUDA_HOME=/usr/local/cuda` default | `make -C c glm CUDA=1 [CUDA_ARCH=native\|sm_XX]` |
| HIP (`HIP=1`) | Linux x86-64 | ROCm (hipcc), `ROCM_HOME=/opt/rocm` default; tested on ROCm 7.2 | `make -C c glm HIP=1 [HIP_ARCH=native\|gfxXXXX]` |

`CUDA=1` and `HIP=1` are mutually exclusive and both opt-in: the default build
remains pure, dependency-free CPU. Both are refused on non-Linux with an early
`$(error)`. `*_ARCH=native` targets the local GPU; pass an explicit arch when
distributing or on machines with an unsupported iGPU visible to the runtime
(and mask iGPUs at runtime with `HIP_VISIBLE_DEVICES=<ordinal>` on ROCm).

## Runtime configuration (identical for both vendors)

- `COLI_CUDA=1` + `COLI_GPU=N` (or `COLI_GPUS=0,1,...`) — enable, select devices
- `CUDA_EXPERT_GB=G` — VRAM budget for the expert tier (clamped to free VRAM
minus projected dense set and 2 GB headroom per device)
- `CUDA_RELEASE_HOST=1` — GPU-tier experts drop their host backing after
upload (default on multi-GPU); combined with `PIN=auto`/`PIN_FILL`, VRAM
becomes additional pinned capacity at zero RAM cost. The engine
rematerializes an expert from disk (`expert_host_ensure`) whenever the CPU
path needs one whose host copy was released — validated under total GPU
failure below.
- `CUDA_DENSE=1` — experimental resident-dense path (unchanged)
- `COLI_CUDA_TC_W4A16=1` — opt-in W4A16 tensor-core path. **NVIDIA-only**:
the WMMA kernels are compile-gated (`COLI_GPU_HAS_WMMA` in the compat
header) because gfx GPUs report `compute_major >= 7` and a runtime check
alone would select empty kernel bodies under HIP. On AMD, all compute uses
the portable kernels; rocWMMA matrix-core support is a possible follow-up.

## Validation

### Unit tests (run on GPU hardware)

```sh
make -C c cuda-test [CUDA_ARCH=...] # NVIDIA
make -C c hip-test [HIP_ARCH=...] # AMD (same test source)
```

Covers q8/q4/q2/f32 matmul correctness, multi-device placement/stats, and
`tensor_update` — the standard upstream suite, unchanged, compiled by hipcc.
(A companion PR adds failure-path tests for the backend; they are
vendor-neutral and run under `hip-test` identically.)

### CI (no GPU required)

The `engine-hip-syntax` job in `.github/workflows/ci.yml` compiles the
backend and its test binary with hipcc (`rocm/dev` container pinned to
`6.2`, `gfx1100`) on every PR, mirroring `engine-cuda-syntax`. Kernel
*execution* is not possible on hosted runners; that is what `hip-test`
on real hardware is for (matrix below).

### Hardware test matrix (documented results)

| environment | result |
|---|---|
| AMD RX 9070 XT (gfx1201), ROCm 7.2.4, Linux 7.0 | `hip-test` **pass** (all cases above); GLM-5.2 end-to-end runs (0.32 tok/s @ 61% expert hit with CUDA_RELEASE_HOST=1); benchmark series in PR #112 |
| NVIDIA | compile-verified in CI (`sm_80`); nvcc path is a pass-through include — **runtime run of `make cuda-test` on NVIDIA hardware welcomed**, the test source is vendor-neutral |

## Known behavior notes

- GPU float matmuls round differently than the CPU int8-dot (IDOT) kernels:
greedy output is **not token-identical** across backends (consistent with
the shape-dependence documented in #100), and MTP draft acceptance measures
lower on GPU-heavy configs (~40% → ~31% on the PR #112 machine). A
numerics-matched integer GPU kernel is the planned follow-up.
- An earlier revision of this branch carried `CUDA_EXTEND=1` (VRAM tier
holding experts beyond the RAM pin). It was superseded by upstream's
`PIN=auto` + `PIN_FILL` + `CUDA_RELEASE_HOST`, which achieve the same
capacity extension with deeper engine integration; this branch's safety
and validation work now targets that mechanism.
Loading
Loading