mlx-bun 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -588
- package/docs/README.md +94 -0
- package/docs/{design → archive/investigations}/audio-input-plan.md +4 -4
- package/docs/{design → archive/investigations}/diffusion-gemma-port.md +3 -3
- package/docs/{design → archive/investigations}/faithful-l1-consolidation.md +4 -4
- package/docs/{design → archive/investigations}/minicpm5-decode-megakernel.md +11 -11
- package/docs/archive/investigations/openjarvis-fit.md +198 -0
- package/docs/{design → archive/investigations}/optimization_plan.md +1 -1
- package/docs/{design → archive/investigations}/pre-colibri-stabilization.md +5 -5
- package/docs/archive/investigations/qwen38-27b-campaign-log.md +1092 -0
- package/docs/{design → archive/investigations}/the-dreaming-handoff.md +2 -2
- package/docs/archive/planning/release-notes-v0.3.0.md +35 -0
- package/docs/design/batching.md +1841 -0
- package/docs/design/decode-speed-program.md +2346 -169
- package/docs/design/dreaming-nightly-pipeline.md +675 -282
- package/docs/design/generic-model-support.md +655 -334
- package/docs/design/kv-cache.md +824 -0
- package/docs/design/orpo-training.md +673 -1239
- package/docs/design/speculative-decoding.md +1990 -0
- package/docs/design/turboquant.md +2212 -0
- package/docs/design/unified-engine-frontier-plan.md +1833 -727
- package/docs/design/web-chat-redesign.md +666 -1083
- package/docs/planning/PRODUCT_ROADMAP.md +50 -1
- package/docs/planning/release-notes-v0.4.0.md +45 -0
- package/docs/planning/video-series.md +2 -2
- package/docs/reference/benchmarks.md +3613 -0
- package/docs/reference/cli.md +434 -160
- package/docs/reference/distribution.md +328 -182
- package/docs/reference/environment.md +398 -0
- package/docs/reference/glossary.md +39 -0
- package/docs/reference/library-api.md +566 -168
- package/docs/reference/memory.md +227 -64
- package/docs/reference/models.md +113 -6
- package/docs/reference/server-api.md +944 -429
- package/docs/reference/server-config.md +740 -338
- package/docs/reference/training.md +393 -254
- package/docs/reference/troubleshooting.md +158 -0
- package/package.json +9 -4
- package/src/audio/decode.ts +2 -2
- package/src/audio/features.ts +2 -2
- package/src/backends/mlx/assistant-target.ts +46 -0
- package/src/backends/mlx/autoregressive-draft-rows.ts +120 -0
- package/src/backends/mlx/autoregressive.ts +108 -0
- package/src/backends/mlx/batch-group.ts +1790 -0
- package/src/backends/mlx/cache-attachment.ts +67 -0
- package/src/backends/mlx/cache-layout.ts +31 -0
- package/src/backends/mlx/checkpoint-state.ts +53 -0
- package/src/backends/mlx/continuation-persistence.ts +106 -0
- package/src/backends/mlx/continuation-request.ts +43 -0
- package/src/backends/mlx/continuation.ts +77 -0
- package/src/backends/mlx/diffusion.ts +39 -0
- package/src/backends/mlx/draft-target.ts +32 -0
- package/src/backends/mlx/evaluation.ts +105 -0
- package/src/backends/mlx/fill-append.ts +45 -0
- package/src/backends/mlx/full-kv-row-append.ts +32 -0
- package/src/backends/mlx/full-kv-row-donor.ts +54 -0
- package/src/backends/mlx/full-transitioning-kv-rows.ts +65 -0
- package/src/backends/mlx/gateway-binding.ts +130 -0
- package/src/backends/mlx/graph.ts +38 -0
- package/src/backends/mlx/kv-codec.ts +9 -0
- package/src/backends/mlx/kv-maintenance.ts +133 -0
- package/src/backends/mlx/kv-tensor-rows.ts +212 -0
- package/src/backends/mlx/memory-client.ts +189 -0
- package/src/backends/mlx/methods.ts +90 -0
- package/src/backends/mlx/model-prompt.ts +164 -0
- package/src/backends/mlx/model-serving.ts +79 -0
- package/src/backends/mlx/prefill-cohort.ts +89 -0
- package/src/backends/mlx/prefill-rows.ts +200 -0
- package/src/backends/mlx/prefill.ts +33 -0
- package/src/backends/mlx/projected-context-rows.ts +72 -0
- package/src/backends/mlx/request-policy.ts +20 -0
- package/src/backends/mlx/request-state-policy.ts +41 -0
- package/src/backends/mlx/rollback.ts +89 -0
- package/src/backends/mlx/row-sampling.ts +49 -0
- package/src/backends/mlx/serial-executor.ts +242 -0
- package/src/backends/mlx/speculative-group.ts +359 -0
- package/src/backends/mlx/speculative-round.ts +161 -0
- package/src/backends/mlx/speculative.ts +114 -0
- package/src/backends/mlx/state-rows.ts +104 -0
- package/src/backends/mlx/state-views.ts +46 -0
- package/src/backends/mlx/target-layout-capability.ts +35 -0
- package/src/backends/mlx/text-engine.ts +73 -0
- package/src/backends/mlx/transitioning-kv-rows.ts +165 -0
- package/src/cli.ts +66 -58
- package/src/client.ts +66 -0
- package/src/config.ts +21 -4
- package/src/contracts/completion.ts +16 -0
- package/src/contracts/execution.ts +60 -0
- package/src/contracts/generation.ts +103 -0
- package/src/contracts/host.ts +7 -0
- package/src/contracts/jobs.ts +66 -0
- package/src/contracts/pi-provider.ts +30 -0
- package/src/contracts/pi.ts +259 -0
- package/src/contracts/prefix-cache.ts +23 -0
- package/src/contracts/resources.ts +25 -0
- package/src/contracts/sampling.ts +23 -0
- package/src/contracts/scheduling.ts +45 -0
- package/src/contracts/tsconfig.json +14 -0
- package/src/diffusion/diffusion-generate.ts +218 -153
- package/src/embed.ts +1 -1
- package/src/engine/admission.ts +59 -0
- package/src/engine/cancellation.ts +38 -0
- package/src/engine/engine.ts +56 -0
- package/src/engine/execution-coordinator.ts +70 -0
- package/src/engine/execution-plan.ts +53 -0
- package/src/engine/resources.ts +53 -0
- package/src/engine/scheduler.ts +72 -0
- package/src/engine/session.ts +247 -0
- package/src/eval/README.md +44 -1
- package/src/eval/kl.ts +236 -3
- package/src/eval/reference-logits.ts +207 -0
- package/src/eval/runner.ts +8 -96
- package/src/fill/echo-index.ts +188 -0
- package/src/fill/fill-session.ts +452 -0
- package/src/fill/proposal.ts +68 -0
- package/src/fill/schema-rows.ts +506 -0
- package/src/fill/tool-boundary.ts +103 -0
- package/src/fit.ts +30 -16
- package/src/generate.ts +709 -417
- package/src/grammar.ts +12 -7
- package/src/harness-pi.ts +14 -33
- package/src/hub-rest.ts +4 -4
- package/src/index.ts +7 -0
- package/src/inference/denoising.ts +17 -0
- package/src/inference/draft-acceptance.ts +41 -0
- package/src/inference/draft-output.ts +49 -0
- package/src/inference/graph.ts +33 -0
- package/src/inference/prefill.ts +39 -0
- package/src/inference/rollback.ts +7 -0
- package/src/jobs/db.ts +4 -0
- package/src/jobs/index.ts +2 -0
- package/src/jobs/job-entry.ts +12 -12
- package/src/jobs/runner.ts +98 -13
- package/src/jobs/task-client.ts +19 -0
- package/src/jobs/types.ts +2 -58
- package/src/kv-scheme.ts +70 -12
- package/src/kv-store.ts +177 -63
- package/src/lab/README.md +18 -0
- package/src/{assets → lab/curve}/curve-designer.html +2 -2
- package/src/{curve-sampler.ts → lab/curve/curve-sampler.ts} +2 -2
- package/src/{expert-trace.ts → lab/expert-trace/expert-trace.ts} +5 -5
- package/src/lab/paged-kv/paged-kv-rows.ts +83 -0
- package/src/{model → lab/paged-kv}/paged-kv.ts +32 -15
- package/src/library.ts +40 -0
- package/src/lora.ts +18 -0
- package/src/media-fetch.ts +1 -1
- package/src/memory/article.ts +1 -1
- package/src/memory/chunk.ts +1 -1
- package/src/memory/model.ts +30 -169
- package/src/memory/prompts.ts +1 -1
- package/src/memory/rest.ts +1 -1
- package/src/memory/schedule.ts +1 -1
- package/src/memory/stages.ts +4 -1
- package/src/memory/vault.ts +1 -3
- package/src/mlx/array.ts +11 -11
- package/src/mlx/compile.ts +12 -2
- package/src/mlx/ffi.ts +58 -11
- package/src/mlx/materialize.ts +23 -0
- package/src/mlx/metal-kernel.ts +10 -11
- package/src/mlx/ops.ts +33 -13
- package/src/mlx/quantized-rows.ts +36 -0
- package/src/mlx/token-bitmask.ts +52 -0
- package/src/mlx/turboquant-kv-decode.ts +82 -0
- package/src/mlx/turboquant-kv-inverse.ts +122 -0
- package/src/mlx/turboquant-ops.ts +33 -3
- package/src/mlx/turboquant-tables.ts +2 -2
- package/src/model/artifact-identity.ts +73 -0
- package/src/model/batched-kv.ts +235 -0
- package/src/model/batched-mask.ts +20 -6
- package/src/model/batched-quant.ts +9 -3
- package/src/model/batched-quantized-kv.ts +144 -0
- package/src/model/batched-rotating-quant.ts +78 -17
- package/src/model/batched-rotating-state.ts +76 -0
- package/src/model/batched-rotating.ts +65 -23
- package/src/model/batched-row-storage.ts +52 -0
- package/src/model/batched-ssm.ts +52 -0
- package/src/model/batched-turboquant-kv.ts +93 -0
- package/src/model/compiled-decode.ts +8 -2
- package/src/model/decoded-kv-donor.ts +12 -0
- package/src/model/delayed-quantized-kv.ts +72 -0
- package/src/model/delayed-rotating-quantized-kv.ts +93 -0
- package/src/model/delayed-turboquant-kv.ts +55 -0
- package/src/model/diffusion-gemma.ts +8 -8
- package/src/model/factory.ts +76 -33
- package/src/model/fingerprint.ts +1 -1
- package/src/model/flash-attention.ts +3 -3
- package/src/model/full-prefill-padding.ts +56 -0
- package/src/model/full-prefill-row.ts +105 -0
- package/src/model/gemma4-base.ts +179 -80
- package/src/model/gemma4.ts +40 -32
- package/src/model/generated/gemma4-12b.ts +6 -3
- package/src/model/generated/gemma4-26b.ts +6 -3
- package/src/model/generated/gemma4-e4b.ts +6 -3
- package/src/model/glm52-cache.ts +80 -4
- package/src/model/glm52-dsa.ts +13 -9
- package/src/model/glm52-memory.ts +1 -1
- package/src/model/glm52-mla.ts +12 -6
- package/src/model/glm52.ts +19 -40
- package/src/model/implementation.ts +69 -0
- package/src/model/kv-attention-view.ts +67 -0
- package/src/model/minicpm5.ts +17 -15
- package/src/model/profile.ts +12 -2
- package/src/model/qwen-append.ts +12 -0
- package/src/model/qwen-conv.ts +52 -0
- package/src/model/qwen3-delta-state.ts +74 -0
- package/src/model/qwen3-delta.ts +59 -36
- package/src/model/qwen3_5-checkpoint.ts +164 -0
- package/src/model/qwen3_5.ts +202 -78
- package/src/model/rotating-kv-donor.ts +35 -0
- package/src/model/rotating-kv-layout.ts +262 -0
- package/src/model/rotating-row-transaction.ts +35 -0
- package/src/model/speculative-rotating-kv.ts +101 -0
- package/src/model/ssm-prefill-padding.ts +39 -0
- package/src/model/support.ts +1 -1
- package/src/model/trellis-balanced-scatter.ts +51 -0
- package/src/model/trellis-linear.ts +672 -0
- package/src/model/trellis-shared-m.ts +151 -0
- package/src/model/trellis-shared-scatter.ts +144 -0
- package/src/model/trellis-splitk-prefill.ts +158 -0
- package/src/model/trellis-tiled-prefill.ts +136 -0
- package/src/model/trellis-vector-expand.ts +62 -0
- package/src/model/trellis-wide-prefill.ts +94 -0
- package/src/model/turboquant-codec.ts +83 -0
- package/src/model/universal/dense.ts +15 -14
- package/src/model/universal/modules.ts +8 -1
- package/src/native-pack.ts +6 -5
- package/src/pi-provider.ts +6 -64
- package/src/pi-web.ts +8 -315
- package/src/preflight.ts +31 -15
- package/src/prompt-cache.ts +110 -69
- package/src/quantize/allocator.ts +1 -1
- package/src/quantize/config-writer.ts +10 -3
- package/src/quantize/rotate.ts +4 -4
- package/src/quantize/trellis.ts +586 -0
- package/src/responses.ts +28 -1
- package/src/runtime-config.ts +18 -4
- package/src/sampler.ts +40 -29
- package/src/serve/batch-scheduler.ts +8 -1671
- package/src/serve/chat-request.ts +391 -0
- package/src/serve/chat-stage.ts +195 -0
- package/src/serve/checkpoint-identity.ts +64 -0
- package/src/serve/completion-executor.ts +15 -7
- package/src/serve/discovery-routes.ts +12 -13
- package/src/serve/generation-gateway.ts +183 -213
- package/src/serve/http.ts +159 -0
- package/src/serve/inference-request.ts +79 -0
- package/src/serve/isolate.ts +297 -105
- package/src/serve/lab-routes.ts +3 -0
- package/src/serve/lane-registry.ts +2 -1
- package/src/serve/model-admin-routes.ts +7 -5
- package/src/serve/model-binding.ts +43 -0
- package/src/serve/model-host.ts +511 -0
- package/src/serve/openai-wire.ts +103 -0
- package/src/serve/parent-application.ts +56 -0
- package/src/serve/pipeline.ts +33 -0
- package/src/serve/preparation.ts +33 -0
- package/src/serve/request-plan.ts +23 -18
- package/src/serve/request-prep.ts +344 -0
- package/src/serve/response-lease.ts +24 -0
- package/src/serve/responses-client.ts +69 -0
- package/src/serve/session-completion-engine.ts +110 -0
- package/src/serve/session-search.ts +1 -1
- package/src/serve/static-routes.ts +5 -5
- package/src/serve/text-completion-stage.ts +104 -0
- package/src/serve/token-streams.ts +519 -0
- package/src/server.ts +335 -2711
- package/src/spec/assistant-rows.ts +92 -0
- package/src/spec/assistant-source.ts +31 -55
- package/src/spec/cache-identity.ts +22 -0
- package/src/spec/deepspec-rows.ts +29 -0
- package/src/spec/deepspec-source.ts +16 -14
- package/src/spec/dflash-source.ts +36 -12
- package/src/spec/drafter.ts +153 -142
- package/src/spec/dspark/ab-stats.ts +3 -3
- package/src/spec/dspark/calibration.ts +2 -2
- package/src/spec/dspark/deepspec-module.ts +97 -122
- package/src/spec/dspark/generate-dflash.ts +2 -2
- package/src/spec/dspark/generate.ts +2 -2
- package/src/spec/dspark/loader.ts +1 -1
- package/src/spec/dspark/module-dflash.ts +129 -172
- package/src/spec/dspark/module.ts +3 -3
- package/src/spec/dspark/quantize-drafter.ts +1 -1
- package/src/spec/generate.ts +1 -1
- package/src/spec/glm52-mtp-graph.ts +29 -0
- package/src/spec/glm52-mtp-rows.ts +132 -0
- package/src/spec/glm52-mtp-source.ts +54 -137
- package/src/spec/glm52-mtp-state.ts +33 -0
- package/src/spec/ngram-source.ts +93 -21
- package/src/spec/projected-draft-rows.ts +73 -0
- package/src/spec/qwen-mtp-module.ts +171 -0
- package/src/spec/qwen-mtp-rows.ts +219 -0
- package/src/spec/qwen-mtp-source.ts +147 -195
- package/src/spec/qwen-mtp-state.ts +30 -0
- package/src/spec/serve-loop.ts +201 -201
- package/src/spec/source.ts +110 -13
- package/src/spec/two-model-rows.ts +61 -0
- package/src/spec/two-model.ts +44 -102
- package/src/ssd-cache.ts +99 -19
- package/src/ssd-durability.ts +36 -20
- package/src/tool-call.ts +51 -14
- package/src/train/flash-cce.ts +2 -2
- package/src/train/forward.ts +6 -0
- package/src/train/loss.ts +1 -1
- package/src/train/prefix-shared.ts +5 -1
- package/src/train/segmented.ts +5 -3
- package/src/train/trainer.ts +6 -6
- package/src/vision/prompt.ts +1 -1
- package/src/vision/qwen3vl-tower.ts +52 -10
- package/src/web/app.html +1 -1
- package/src/web/app.js +62 -60
- package/src/web/src/adapters-panel.ts +3 -3
- package/src/web/src/assistant.ts +2 -36
- package/src/web/src/chat.ts +4 -4
- package/src/web/src/composer.ts +4 -4
- package/src/web/src/hub.ts +1 -1
- package/src/web/src/markdown.ts +0 -0
- package/src/web/src/memory-panel.ts +1 -1
- package/src/web/src/model-picker.ts +1 -1
- package/src/web/src/palette.ts +1 -1
- package/src/web/src/protocol.ts +3 -39
- package/src/web/src/sessions.ts +1 -1
- package/src/web/src/ui-catalog.ts +4 -18
- package/src/web-assets.ts +47 -0
- package/src/weights.ts +55 -9
- package/docs/archive/investigations/curve-runs/bisector-route.json +0 -98
- package/docs/archive/investigations/curve-runs/bisector-trace.json +0 -1393
- package/docs/archive/investigations/curve-runs/curve-terrain.json +0 -1179
- package/docs/archive/investigations/curve-runs/curve-terrain.svg +0 -42
- package/docs/archive/investigations/hlg-ab.html +0 -34
- package/docs/archive/investigations/hlg-explorer.html +0 -238
- package/docs/archive/investigations/hlg-figs/cliff.svg +0 -1
- package/docs/archive/investigations/hlg-figs/cross.svg +0 -1
- package/docs/archive/investigations/hlg-figs/edges.svg +0 -1
- package/docs/archive/investigations/hlg-figs/k20-grids.svg +0 -1
- package/docs/archive/investigations/hlg-figs/k20-peaks.svg +0 -1
- package/docs/archive/investigations/hlg-figs/lw-curve.svg +0 -1
- package/docs/archive/investigations/hlg-figs/terrain.svg +0 -1
- package/docs/archive/investigations/hlg-report.html +0 -262
- package/docs/archive/investigations/hlg-runs/hlg-ab.json +0 -149
- package/docs/archive/investigations/hlg-runs/hlg-blind-prompts.md +0 -87
- package/docs/archive/investigations/hlg-runs/hlg-blind.json +0 -107
- package/docs/archive/investigations/hlg-runs/hlg-cliff.json +0 -197
- package/docs/archive/investigations/hlg-runs/hlg-cross.json +0 -505
- package/docs/archive/investigations/hlg-runs/hlg-edge.json +0 -388
- package/docs/archive/investigations/hlg-runs/hlg-eval1.json +0 -25
- package/docs/archive/investigations/hlg-runs/hlg-frontier.json +0 -86
- package/docs/archive/investigations/hlg-runs/hlg-grid.json +0 -242
- package/docs/archive/investigations/hlg-runs/hlg-grid2.json +0 -343
- package/docs/archive/investigations/hlg-runs/hlg-lw-coarse.json +0 -110
- package/docs/archive/investigations/hlg-runs/hlg-map.json +0 -383
- package/docs/archive/investigations/hlg-runs/run0-original.log +0 -159
- package/docs/archive/investigations/hlg-runs/runA-recommended.log +0 -131
- package/docs/archive/investigations/hlg-runs/runAA-cliff-cpm5.log +0 -26
- package/docs/archive/investigations/hlg-runs/runAB-grid2-e4b.log +0 -18
- package/docs/archive/investigations/hlg-runs/runAC-peak-e4b-partial.log +0 -25
- package/docs/archive/investigations/hlg-runs/runAD-ab-samples.log +0 -8
- package/docs/archive/investigations/hlg-runs/runAE-edge-e4b.log +0 -51
- package/docs/archive/investigations/hlg-runs/runAF-logit-calibration.log +0 -10
- package/docs/archive/investigations/hlg-runs/runAG-eval-config2.log +0 -16
- package/docs/archive/investigations/hlg-runs/runB-gain-variants.log +0 -192
- package/docs/archive/investigations/hlg-runs/runC-pivots.log +0 -162
- package/docs/archive/investigations/hlg-runs/runD-oetf.log +0 -132
- package/docs/archive/investigations/hlg-runs/runE-eotf.log +0 -162
- package/docs/archive/investigations/hlg-runs/runF-shaper-working.log +0 -86
- package/docs/archive/investigations/hlg-runs/runG-shaper-sweep.log +0 -101
- package/docs/archive/investigations/hlg-runs/runH-wsweep.log +0 -176
- package/docs/archive/investigations/hlg-runs/runI-asweep.log +0 -176
- package/docs/archive/investigations/hlg-runs/runJ-knobmap.log +0 -49
- package/docs/archive/investigations/hlg-runs/runK-frontier.log +0 -19
- package/docs/archive/investigations/hlg-runs/runL-widemap.log +0 -65
- package/docs/archive/investigations/hlg-runs/runM-frontier-emb.log +0 -15
- package/docs/archive/investigations/hlg-runs/runN-verify.log +0 -116
- package/docs/archive/investigations/hlg-runs/runO-frontier-seed5000.log +0 -15
- package/docs/archive/investigations/hlg-runs/runP-grid-AxSm.log +0 -15
- package/docs/archive/investigations/hlg-runs/runQ-grid-tgW.log +0 -15
- package/docs/archive/investigations/hlg-runs/runR-blind-transcript.log +0 -79
- package/docs/archive/investigations/hlg-runs/runS-cross-coherence.log +0 -33
- package/docs/archive/investigations/hlg-runs/runT-cross-cpm5.log +0 -33
- package/docs/archive/investigations/hlg-runs/runU-cross-12b.log +0 -33
- package/docs/archive/investigations/hlg-runs/runV-lw-e4b.log +0 -22
- package/docs/archive/investigations/hlg-runs/runW-lw-12b.log +0 -22
- package/docs/archive/investigations/hlg-runs/runX-lw-cpm5.log +0 -22
- package/docs/archive/investigations/hlg-runs/runY-cliff-e4b.log +0 -26
- package/docs/archive/investigations/hlg-runs/runZ-cliff-12b.log +0 -26
- package/docs/archive/mlx-bun-lab-report.html +0 -275
- package/docs/archive/wwdc-mlx-bun.html +0 -848
- package/docs/design/adapters-end-to-end.md +0 -205
- package/docs/design/batching-perf-path.md +0 -255
- package/docs/design/batching-v2-plan.md +0 -529
- package/docs/design/bucketing-stage.md +0 -197
- package/docs/design/compat-cli-surface-design.md +0 -230
- package/docs/design/docs-reorg-plan.md +0 -165
- package/docs/design/dspark-serving-program.md +0 -371
- package/docs/design/dspark-speculative-decoding.md +0 -318
- package/docs/design/grammar-spec-batching-integration.md +0 -301
- package/docs/design/memory-inference-path.md +0 -422
- package/docs/design/memory-synthesis.md +0 -287
- package/docs/design/memory-system.md +0 -237
- package/docs/design/mlx-lm-serving-execution-seam.md +0 -81
- package/docs/design/mlx-lm-tool-parity-plan.md +0 -545
- package/docs/design/omlx-adoption-map.md +0 -98
- package/docs/design/orpo-dynamic-lambda.md +0 -220
- package/docs/design/orpo-future-enhancements.md +0 -340
- package/docs/design/paged-kv-cache.md +0 -214
- package/docs/design/parallel-slots.md +0 -567
- package/docs/design/parity-tier-dag.md +0 -161
- package/docs/design/repo-cleanup-plan.md +0 -231
- package/docs/design/runtime-isolation.md +0 -263
- package/docs/design/segmented-backward-training.md +0 -543
- package/docs/design/spec-decode-larger-targets.md +0 -229
- package/docs/design/ssd-kv-cold-tier.md +0 -415
- package/docs/design/structured-output.md +0 -484
- package/docs/design/tauri-desktop-app.md +0 -127
- package/docs/design/the-dreaming-master-plan.md +0 -445
- package/docs/design/turboquant-kv.md +0 -235
- package/docs/design/turboquant-weights.md +0 -467
- package/docs/design/w4a16-compute-precision-spike.md +0 -232
- package/docs/design/web-chat-beat-matrix.md +0 -315
- package/docs/design/write-pipeline-entity.md +0 -468
- package/docs/planning/IDEAS.md +0 -69
- package/docs/reference/embedding.md +0 -197
- package/docs/reference/features-matrix.md +0 -101
- package/docs/reference/orpo-quickstart.md +0 -135
- package/src/flags.ts +0 -11
- /package/docs/{design → archive/investigations}/colibri-glm52-port.md +0 -0
- /package/docs/{planning → archive/planning}/chunk-task-roadmap.md +0 -0
- /package/docs/{planning → archive/planning}/curve-sampler-research-plan.md +0 -0
- /package/docs/{planning → archive/planning}/memory-docs-and-dag-plan.md +0 -0
- /package/docs/{planning → archive/planning}/pi-integration-review.md +0 -0
- /package/docs/{planning → archive/planning}/release-notes-v0.2.0.md +0 -0
- /package/src/{memory-plan.ts → admission-plan.ts} +0 -0
- /package/{docs/archive/investigations → src/serve/assets}/curve-terrain.html +0 -0
- /package/{docs/dag → src/serve/assets}/training-inference-map.html +0 -0
package/docs/reference/memory.md
CHANGED
|
@@ -1,97 +1,260 @@
|
|
|
1
|
-
# Memory
|
|
1
|
+
# Memory — the personal wiki
|
|
2
2
|
|
|
3
|
-
mlx-bun memory is a local
|
|
3
|
+
`mlx-bun memory` is a local, durable memory for your assistant: a wiki of
|
|
4
|
+
Markdown articles at `~/.mlx-bun/wiki/` that the built-in pi agent reads to
|
|
5
|
+
remember your projects, people, decisions, and history across sessions. It is
|
|
6
|
+
yours — git-tracked, editable in any tool (Obsidian opens it as a vault), and it
|
|
7
|
+
never leaves the machine.
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
The one rule the whole feature is built around:
|
|
6
10
|
|
|
7
|
-
> Chat agents read memory
|
|
11
|
+
> Chat-time agents **read** memory. `mlx-bun memory synthesize` is the only
|
|
12
|
+
> thing that **writes** it.
|
|
8
13
|
|
|
9
|
-
|
|
14
|
+
Articles are durable priors; conversations are evidence; synthesis is the
|
|
15
|
+
deliberate, auditable step that turns evidence into updated articles. Normal
|
|
16
|
+
chat never mutates an article. Nightly synthesis is called **the Dreaming**;
|
|
17
|
+
its engineering design lives in
|
|
18
|
+
[dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md) — this
|
|
19
|
+
page is the user-facing reference.
|
|
10
20
|
|
|
11
|
-
##
|
|
21
|
+
## Quick start
|
|
12
22
|
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
|
|
23
|
+
```bash
|
|
24
|
+
mlx-bun memory init # create the wiki; offers import + nightly job
|
|
25
|
+
mlx-bun pi # the assistant now reads your memory automatically
|
|
26
|
+
mlx-bun memory status # where it is, how many articles, schedule state
|
|
27
|
+
mlx-bun memory search <query> # find something from the terminal
|
|
28
|
+
mlx-bun memory open # browse it in Obsidian
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`init` is idempotent and safe to re-run. It never overwrites files you have
|
|
32
|
+
edited: the README and `Meta/` pages are written only when missing. Once a
|
|
33
|
+
wiki exists, every `mlx-bun pi` session and the web chat behind `mlx-bun serve`
|
|
34
|
+
pick it up with no further configuration; if it does not exist, no memory
|
|
35
|
+
tools or prompt hints are exposed at all.
|
|
36
|
+
|
|
37
|
+
`mlx-bun setup` is a true alias for `mlx-bun memory` (same subcommands).
|
|
38
|
+
|
|
39
|
+
## What the wiki contains
|
|
40
|
+
|
|
41
|
+
Everything lives under one portable folder (copy it and your memory moves
|
|
42
|
+
with you):
|
|
20
43
|
|
|
21
|
-
|
|
44
|
+
| Path | What it is |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| `~/.mlx-bun/wiki/` | The vault root. Override with `MLX_BUN_WIKI=/path/to/wiki`. |
|
|
47
|
+
| `articles/*.md` | Your memory articles — one topic per file, `Topic_Name.md`. The only thing synthesis writes. |
|
|
48
|
+
| `Reference/*.md` | Read-only symlinks to mlx-bun's own docs (README, server API/config, library API, embedding, distribution, training, ORPO quickstart, product roadmap), so the assistant can answer mlx-bun questions on day one. Synthesis never writes here. |
|
|
49
|
+
| `Meta/*.md` | Operational pages the pipeline follows: editorial guidelines, article conventions, infobox schemas, category definitions, entities policy, summary style, bucketing/buckets, chunking, topics to ignore. Edit them to steer synthesis. |
|
|
50
|
+
| `Talk/` | Per-article discussion and conflict notes. |
|
|
51
|
+
| `README.md`, `.gitignore` | Orientation page; keeps `.DS_Store` and Obsidian workspace state out of git. |
|
|
52
|
+
|
|
53
|
+
The vault is plain Markdown and a git repository (`init` runs `git init` and
|
|
54
|
+
makes the initial commit). Every synthesis run commits its changes, so any
|
|
55
|
+
article change is reviewable and revertible with ordinary git. You can edit
|
|
56
|
+
any file directly; the next run respects your edits.
|
|
57
|
+
|
|
58
|
+
Two things live **outside** the vault because they are derived or operational:
|
|
59
|
+
|
|
60
|
+
- `~/.cache/mlx-bun/memory.sqlite` — the synthesis store (ingested
|
|
61
|
+
conversations, chunks, buckets, watermarks, and a rebuildable index of the
|
|
62
|
+
articles). The vault is truth; this DB is a cache plus pipeline ledger.
|
|
63
|
+
- `~/.mlx-bun/logs/memory-synthesis.{out,err}.log` — output of the nightly job.
|
|
64
|
+
|
|
65
|
+
Article names are **stems**: the filename without `.md`, underscores for
|
|
66
|
+
spaces (`Archie_Project`). Every command and tool below takes a stem.
|
|
22
67
|
|
|
23
68
|
## CLI
|
|
24
69
|
|
|
70
|
+
All subcommands are `mlx-bun memory <sub>`; with no subcommand, `status` runs.
|
|
71
|
+
An unknown subcommand prints help and exits non-zero (so scripts and launchd
|
|
72
|
+
jobs can detect typos).
|
|
73
|
+
|
|
74
|
+
### Set up and inspect
|
|
75
|
+
|
|
25
76
|
```bash
|
|
26
|
-
mlx-bun memory init # create the wiki
|
|
27
|
-
mlx-bun memory status # path, article
|
|
28
|
-
mlx-bun memory open
|
|
29
|
-
mlx-bun memory open <article> # open a specific article
|
|
30
|
-
mlx-bun memory list # list article stems + Reference/* docs
|
|
31
|
-
mlx-bun memory search <query> # search articles
|
|
32
|
-
mlx-bun memory toc <article> # headings + anchors
|
|
33
|
-
mlx-bun memory section <article> <anchor>
|
|
34
|
-
mlx-bun memory links <article> # outbound/inbound wikilinks
|
|
35
|
-
mlx-bun memory read <article> # print article body
|
|
36
|
-
mlx-bun memory synthesize --dry-run
|
|
37
|
-
mlx-bun memory schedule --at 03:00
|
|
38
|
-
mlx-bun memory unschedule
|
|
77
|
+
mlx-bun memory init # create the wiki (alias: setup)
|
|
78
|
+
mlx-bun memory status # path, article + reference counts, git, nightly state, recent articles
|
|
79
|
+
mlx-bun memory open [article] # open the wiki or one article (alias: browse)
|
|
39
80
|
```
|
|
40
81
|
|
|
41
|
-
|
|
82
|
+
`init` walks through setup in a terminal: creates the vault, then offers to
|
|
83
|
+
seed it by importing `articles/*.md` from an existing wiki you point it at
|
|
84
|
+
(existing files are never overwritten), then offers to install the nightly
|
|
85
|
+
synthesis job. Both offers are TTY-only and default to no import / no
|
|
86
|
+
schedule, so a non-interactive `init` just creates the vault.
|
|
42
87
|
|
|
43
|
-
|
|
88
|
+
`open` prefers Obsidian (`open -a Obsidian` for the vault, the `obsidian://`
|
|
89
|
+
URL handler for a single article) and falls back to Finder / the default
|
|
90
|
+
Markdown app.
|
|
44
91
|
|
|
45
|
-
|
|
92
|
+
### Read from the terminal
|
|
46
93
|
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
94
|
+
```bash
|
|
95
|
+
mlx-bun memory list # article stems + Reference/* docs
|
|
96
|
+
mlx-bun memory search <query> # ranked article matches + sample lines
|
|
97
|
+
mlx-bun memory toc <article> # headings with their #anchors
|
|
98
|
+
mlx-bun memory section <article> <anchor> # one section's body
|
|
99
|
+
mlx-bun memory links <article> # resolved outbound + inbound [[wikilinks]]
|
|
100
|
+
mlx-bun memory read <article> # the full article
|
|
101
|
+
```
|
|
50
102
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
103
|
+
These are the same filesystem helpers the agent tools use. `search` is a
|
|
104
|
+
substring search over articles and reference docs, not a semantic one; results
|
|
105
|
+
prefixed `Reference/` are mlx-bun docs, not your memory.
|
|
54
106
|
|
|
55
|
-
|
|
56
|
-
- `memory_links` — outbound/inbound wikilinks
|
|
57
|
-
- `memory_infobox` — read an article's infobox fields (there is no infobox *query* tool — the infobox is content the model reads, not a filter)
|
|
107
|
+
### Synthesize
|
|
58
108
|
|
|
59
|
-
|
|
60
|
-
-
|
|
61
|
-
|
|
62
|
-
- `reference_list`
|
|
109
|
+
```bash
|
|
110
|
+
mlx-bun memory synthesize [--dry-run] # run the full pipeline now (aliases: pipeline, all)
|
|
111
|
+
```
|
|
63
112
|
|
|
64
|
-
**
|
|
65
|
-
|
|
66
|
-
|
|
113
|
+
**This writes to your vault** (only `articles/`, committed to git). It runs
|
|
114
|
+
the full local DAG — segment → extract → route → create/patch → link — then an
|
|
115
|
+
editorial wikify sweep over every article. `--dry-run` is the safe mode: it
|
|
116
|
+
lists the planned stages, makes no model calls, and writes nothing. The
|
|
117
|
+
command also accepts `--since` and `--model`, but the current pipeline does
|
|
118
|
+
not apply them — a run always covers the store's whole pending corpus with the
|
|
119
|
+
default model.
|
|
67
120
|
|
|
68
|
-
|
|
69
|
-
|
|
121
|
+
Synthesis runs on Gemma-4-e4b (the OptiQ 4-bit release) loaded from the
|
|
122
|
+
Hugging Face hub cache; if it is not downloaded the command stops with the
|
|
123
|
+
exact `hf download` line to run. If a trained `memory-chunk` adapter is present
|
|
124
|
+
at `~/.cache/mlx-bun/adapters/memory-chunk` the segment stage mounts it; every
|
|
125
|
+
other stage runs the base model with its policy prompt. Set
|
|
126
|
+
`MLX_BUN_MEMORY_BATCH=<n>` to batch model calls (default 1).
|
|
127
|
+
|
|
128
|
+
Synthesis operates on conversations already loaded into the synthesis store.
|
|
129
|
+
The pipeline's ingest step reports "corpus already in the store" — it does not
|
|
130
|
+
scan your pi sessions on its own today, so a fresh store yields an empty run.
|
|
131
|
+
|
|
132
|
+
### Run one stage
|
|
70
133
|
|
|
71
|
-
The
|
|
134
|
+
The DAG is decomposed into independent, resumable workers. Each pulls its
|
|
135
|
+
eligible work from the store by state, walks oldest-conversation-first,
|
|
136
|
+
persists, and exits — so you can run them separately, or as separate concurrent
|
|
137
|
+
processes on different conversation slices (GPU and memory allowing):
|
|
72
138
|
|
|
73
|
-
|
|
139
|
+
```bash
|
|
140
|
+
mlx-bun memory segment [--limit N] [--convs a,b] # conversations → topic chunks
|
|
141
|
+
mlx-bun memory extract [--limit N] [--convs a,b] # chunks → entities
|
|
142
|
+
mlx-bun memory route [--convs a,b] # entities → create / capture decisions
|
|
143
|
+
mlx-bun memory synthesize-stage [--limit N] [--convs a,b] # create + patch articles (alias: stage-synthesize)
|
|
144
|
+
mlx-bun memory link [--limit N] # deterministic cross-linking, no model
|
|
145
|
+
```
|
|
74
146
|
|
|
75
|
-
|
|
147
|
+
`--limit` bounds the batch (segment, extract, synthesize-stage, link);
|
|
148
|
+
`--convs` restricts a run to specific conversation ids. `link` inline-links
|
|
149
|
+
first mentions of other articles and rebuilds each `## See also` from mentions
|
|
150
|
+
and co-occurrence; it is idempotent and needs no model.
|
|
76
151
|
|
|
77
|
-
|
|
152
|
+
### Schedule the Dreaming
|
|
78
153
|
|
|
79
154
|
```bash
|
|
80
|
-
mlx-bun memory
|
|
81
|
-
mlx-bun memory
|
|
155
|
+
mlx-bun memory schedule [--at HH:MM] # install the nightly job (default 03:00)
|
|
156
|
+
mlx-bun memory unschedule # remove it
|
|
82
157
|
```
|
|
83
158
|
|
|
84
|
-
|
|
159
|
+
`schedule` writes a launchd agent (`~/Library/LaunchAgents/com.mlx-bun.memory.plist`,
|
|
160
|
+
label `com.mlx-bun.memory`) that runs `mlx-bun memory synthesize` at the
|
|
161
|
+
given local time and loads it. launchd survives reboots and runs a job missed
|
|
162
|
+
while the machine was asleep on next wake. `status` shows whether the job is
|
|
163
|
+
installed and loaded; if `launchctl load` fails the plist is still written and
|
|
164
|
+
the command tells you to load it by hand.
|
|
165
|
+
|
|
166
|
+
## The Dreaming — what nightly synthesis does
|
|
167
|
+
|
|
168
|
+
From your side, the Dreaming is a nightly editor that reads what you talked
|
|
169
|
+
about and keeps a wiki current. Each run:
|
|
170
|
+
|
|
171
|
+
1. **Segments** each new conversation into single-topic chunks (pointer ranges
|
|
172
|
+
into the transcript, not copies).
|
|
173
|
+
2. **Extracts** the subjects each chunk is about — people, projects, tools,
|
|
174
|
+
decisions — and resolves aliases so "the Lumix" and "Lumix S5" are one thing.
|
|
175
|
+
3. **Routes** every subject: enough substance gets its own article; thin
|
|
176
|
+
subjects are captured so they stay searchable until they warrant one. There
|
|
177
|
+
is no notability filter — if you talk about it, it surfaces.
|
|
178
|
+
4. **Creates or patches** articles: new subjects get an outline, per-section
|
|
179
|
+
drafts, and an infobox; existing articles get one section folded in at a
|
|
180
|
+
time, the rest left byte-identical. Corrections arrive as ordinary chunks,
|
|
181
|
+
and chronological processing means your latest position wins.
|
|
182
|
+
5. **Cross-links** the vault (first mentions → `[[wikilinks]]`, co-occurrence →
|
|
183
|
+
See also) and commits.
|
|
184
|
+
6. **Wikifies** — an editorial sweep over every article: tighten each section
|
|
185
|
+
without losing any citation or specific detail, refresh the infobox.
|
|
186
|
+
|
|
187
|
+
Deterministic gates sit between every model step: citation survival, footnote
|
|
188
|
+
integrity, word floors, wikilink resolution, article-structure checks. A weak
|
|
189
|
+
model output is rejected and the article is left untouched — a bad night is a
|
|
190
|
+
no-op, never a corrupted vault. Every article carries `conv:` citations back to
|
|
191
|
+
the conversation that supported it.
|
|
192
|
+
|
|
193
|
+
Everything runs locally on the same base model you chat with; no embeddings,
|
|
194
|
+
no cloud. Architecture, stage contracts, and the gate definitions are in
|
|
195
|
+
[dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md).
|
|
196
|
+
|
|
197
|
+
## Agent tools (pi and web chat)
|
|
198
|
+
|
|
199
|
+
When a vault exists, `mlx-bun pi` and the web chat register these read-only
|
|
200
|
+
tools plus a `memory` skill that teaches the workflow: **FIND** the article,
|
|
201
|
+
**READ** it small, follow the graph, use reference docs for mlx-bun questions,
|
|
202
|
+
and search only as a last resort. The system prompt gets one soft hint that
|
|
203
|
+
memory is on; memory is for user-specific continuity, not a first step for
|
|
204
|
+
weather, public facts, or ordinary coding tasks.
|
|
205
|
+
|
|
206
|
+
**FIND** (deterministic lookup, never a vector search):
|
|
207
|
+
- `memory_resolve` — name or alias → the article (stem, title, kind, lead); offers near candidates on a miss.
|
|
208
|
+
- `memory_category` — one of category / type / series → member articles.
|
|
209
|
+
|
|
210
|
+
**READ** (TOC → one section, not a whole-article dump):
|
|
211
|
+
- `memory_read` — TOC + lead by default; `force=true` for the full article (large articles still degrade to TOC + lead).
|
|
212
|
+
- `memory_section` — one section by heading anchor; the default read granularity.
|
|
213
|
+
|
|
214
|
+
**Follow the graph**:
|
|
215
|
+
- `memory_links` — outbound `[[links]]` grouped by origin (infobox / series / see also / prose) plus inbound backlinks.
|
|
216
|
+
- `memory_infobox` — an article's infobox as key:value facts to read. There is no infobox *query* tool; to find articles use `memory_resolve` or `memory_category`.
|
|
217
|
+
|
|
218
|
+
**Reference docs** (mlx-bun's own docs, mirrored read-only under `Reference/`):
|
|
219
|
+
- `reference_search`, `reference_read`, `reference_list`.
|
|
220
|
+
|
|
221
|
+
**Utility**:
|
|
222
|
+
- `memory_list` — your article stems (an overview/fallback, not a first move).
|
|
223
|
+
- `memory_status` — vault path, setup state, article count, git state, schedule state.
|
|
224
|
+
|
|
225
|
+
**Last resort**:
|
|
226
|
+
- `memory_search` — substring search across articles; use only after the deterministic finders failed.
|
|
227
|
+
|
|
228
|
+
All of these are read-only and auto-allowed; none can modify an article. If
|
|
229
|
+
the vault is missing, the tools are not registered at all, and the skill and
|
|
230
|
+
prompt hint are omitted.
|
|
231
|
+
|
|
232
|
+
## Web chat: Memory panel and REST routes
|
|
233
|
+
|
|
234
|
+
The web chat's Memory panel talks to a loopback-only HTTP surface that wraps
|
|
235
|
+
the same vault helpers: `GET /api/memory/status`, `/list`, `/search`,
|
|
236
|
+
`/article`, `/links`, `/history`, `/diff`, and `POST /api/memory/init` (the
|
|
237
|
+
first-run consent card; the same `setupVault` the CLI uses, minus the
|
|
238
|
+
interactive import and schedule prompts). A `GET /v1/memory/synthesize`
|
|
239
|
+
route streams a synthesis run as server-sent events (`?dry=1` for a dry run).
|
|
240
|
+
Wire details — parameters, response shapes, the no-vault response — are owned
|
|
241
|
+
by [server-api.md](server-api.md#get-apimemory--post-apimemoryinit). These
|
|
242
|
+
routes never touch the agent-tool surface above.
|
|
85
243
|
|
|
86
|
-
##
|
|
244
|
+
## Consent and safety
|
|
87
245
|
|
|
88
|
-
|
|
246
|
+
- Creating the vault is explicit (`memory init` or the web consent card);
|
|
247
|
+
scheduling is explicit (`memory schedule` or the `init` prompt).
|
|
248
|
+
- Chat-time tools are read-only. Article mutation by the agent during chat is
|
|
249
|
+
out of bounds by construction.
|
|
250
|
+
- Opening Obsidian or Finder is you browsing and editing your own files; it is
|
|
251
|
+
not agent mutation.
|
|
252
|
+
- Imports copy articles in; the source wiki is never modified.
|
|
253
|
+
- Nothing — articles, conversations, synthesis — leaves the machine.
|
|
89
254
|
|
|
90
|
-
|
|
91
|
-
2. **memory-chunk LoRA** — conversation → topic chunks (already trained as a WIP artifact);
|
|
92
|
-
3. **memory-bucket LoRA** — chunk → existing bucket or new article proposal;
|
|
93
|
-
4. **memory-synthesis LoRA** — chunks + existing article → conservative article update candidate;
|
|
94
|
-
5. **memory-editor LoRA** — candidate article → polished wiki Markdown;
|
|
95
|
-
6. deterministic footnote/wikilink normalization, quality gates, and git commit.
|
|
255
|
+
## Related
|
|
96
256
|
|
|
97
|
-
|
|
257
|
+
- [cli.md](cli.md#memory--the-personal-wiki) — the `memory` command in the full CLI reference.
|
|
258
|
+
- [server-api.md](server-api.md#get-apimemory--post-apimemoryinit) — `/api/memory/*` wire format.
|
|
259
|
+
- [dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md) — the canonical pipeline design.
|
|
260
|
+
- [docs/design/dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md), [docs/design/dreaming-nightly-pipeline.md](../design/dreaming-nightly-pipeline.md) — synthesis internals and the local inference path.
|
package/docs/reference/models.md
CHANGED
|
@@ -1,8 +1,93 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
the standard Hugging Face hub cache —
|
|
5
|
-
mlx-lm read/write the same tree.
|
|
1
|
+
# Models: supported roster + management (get / scan / ls / gc)
|
|
2
|
+
|
|
3
|
+
The one supported-model list, plus how mlx-bun downloads, indexes, lists,
|
|
4
|
+
and reclaims models. The store is the standard Hugging Face hub cache —
|
|
5
|
+
nothing proprietary; `hf` and mlx-lm read/write the same tree.
|
|
6
|
+
|
|
7
|
+
## Supported models
|
|
8
|
+
|
|
9
|
+
The source of truth is code, not this table: `src/model/profile.ts`
|
|
10
|
+
(which `model_type` loads via which graph), `src/model/support.ts` (the
|
|
11
|
+
support tier `mlx-bun ls` prints), `src/model/universal/archs.ts` (the
|
|
12
|
+
Tier-0 descriptor table), `src/spec/source.ts` + `src/server.ts` (draft
|
|
13
|
+
sources), and the `instanceof` gates in `src/server.ts` for image / video /
|
|
14
|
+
audio. If this table and the code disagree, the code wins and this table
|
|
15
|
+
is the bug.
|
|
16
|
+
|
|
17
|
+
Scope is deliberate: a few families held to explicit oracle contracts
|
|
18
|
+
(L1 = bit-exact vs mlx-lm, L2 = bit-exact vs mlx-optiq, L3 = measured, no
|
|
19
|
+
oracle), plus a declared Tier-0 generic surface. There is no alias table —
|
|
20
|
+
the "query" column is a substring that `resolve()` matches against
|
|
21
|
+
already-downloaded repos (it must match exactly one repo; see
|
|
22
|
+
[Query resolution rules](#query-resolution-rules-per-verb)).
|
|
23
|
+
|
|
24
|
+
| `serve` query | Validated artifact (HF repo) | Family · load path · tier | Modalities | Draft sources | KV schemes | Notes |
|
|
25
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
26
|
+
| `e4b` | `mlx-community/gemma-4-e4b-it-OptiQ-4bit` | Gemma 4 (`gemma4*`) · dedicated `gemma4` graph with a **generated** specialization keyed on the config fingerprint · L1 | text · **image** (SigLIP tower in the bf16 `optiq_vision.safetensors` sidecar) · **audio** (Conformer tower in the same sidecar) | two-model · Gemma `-assistant` (L2) · locally-trained DSpark (`dspark.json`) · ngram | bf16 · uniform 4/8 · `config` (kv_config.json, batches) · turbo · `--paged-kv` | **Default model** (`DEFAULT_REPO_ID`, src/fit.ts). The only audio-capable artifact. ~7.0 GB on disk (benchmarks.md legend, 2026-06-15). Trains (LoRA / ORPO / SFT). |
|
|
27
|
+
| `12B` | `mlx-community/gemma-4-12B-it-OptiQ-4bit` | Gemma 4 · generated specialization · L1 | text · **image** (encoder-free `gemma4_unified_vision` declared in config.json — no sidecar needed). No audio: the snapshot's sidecar is an audio **stub** (`embed_audio` only, no `audio_tower.*`) | two-model · `-assistant` · DSpark local · **DeepSpec released** (`deepseek-ai/dspark_gemma4_12b_block7`) · ngram | bf16 · uniform · `config` · turbo · `--paged-kv` | ~8.4 GB (2026-06-15). `largestRecommendedRepoId` pick for ≥ 24 GB RAM (src/fit.ts). Trains. |
|
|
28
|
+
| `26B` | `mlx-community/gemma-4-26B-A4B-it-OptiQ-4bit` | Gemma 4 MoE · generated specialization · L1 | text · image **only if** the snapshot ships the SigLIP sidecar (registry `has_vision_sidecar`; the tower is `gemma4_vision`). No `audio_config` → no audio | two-model · `-assistant` · ngram | bf16 · uniform · `config` · turbo · `--paged-kv` | ~18 GB (2026-06-15). `largestRecommendedRepoId` pick for ≥ 48 GB RAM. |
|
|
29
|
+
| any other `gemma4*` config (1B, e2b, 31B, …) | — | Gemma 4 · the `Gemma4Model` monolith (no generated specialization) · L1 by family | per the registry's vision/audio flags | same as the family | same as the family | Loads by `model_type`; **no artifact is pinned in tests/support/goldens for these**, so treat as family-supported, artifact-unvalidated. |
|
|
30
|
+
| `MiniCPM5` | `mlx-community/MiniCPM5-1B-OptiQ-4bit` | MiniCPM5 · `model_type: llama` matched by exact shape (`isMiniCPM5Config`) → dedicated `minicpm5` graph · L1 / L2 | text | two-model · ngram | bf16 · uniform · `config` (batches — Phase 3.1) · turbo (quality curve measured 2026-07-06, benchmarks.md §3) | Sub-GB starter (benchmarks.md legend). Trains (segmented backward). Tool calling (XML). |
|
|
31
|
+
| `Qwen3.5-4B` | `mlx-community/Qwen3.5-4B-OptiQ-4bit` | Qwen3.5 (`qwen3_5` / `qwen3_5_text`, dense hybrid gated-DeltaNet) · dedicated `qwen3.5` graph · L1 | text (image/video only when the artifact ships vision weights — see Qwen3.8) | two-model · ngram · `mtp` if a `qwen3_5_mtp` companion exists | bf16 (L1) · `config` (KV-ON parity passed 2026-06-15, PLAN 14e) | Thinking + tool calling. Batches on the SSM path (`MLX_BUN_BATCH_SSM=0` reverts). The MoE variant `qwen3_5_moe` is **not** supported. |
|
|
32
|
+
| `Qwen3.8` | `mlx-community/Qwen3.8-27B-OptiQ-4bit` @ `b04599de95d7a9bfbd7f208d347c0f10d9432a42` | Qwen3.5 family · **exact artifact profile** `qwen3.8-27b-optiq-4bit` (safetensors + `qwen3.5` graph) · L1 | text · **image** · **video** (`image_url` / `video_url` parts; Qwen3-VL tower + mRoPE; video decodes via the AVFoundation sidecar `mlx-bun-frame-extract`, 2 fps, ≤ 768 frames). Video never combines with audio; no audio | **native MTP head** (`mlx-community/Qwen3.8-27B-MTP-bf16`, auto-detected `qwen3_5_mtp`; `--draft-kind mtp` with no `--draft-model` uses a bundled `mtp/` subfolder) · two-model · ngram | bf16 (L1) · `config` is **Lab** — policy copied from the same-topology Qwen3.6 artifact, no model-specific oracle (benchmarks.md, 2026-08-22) | `reasoning_effort` (xhigh/medium/low) + `preserve_thinking` + tool calling. `/v1/models` advertises vision. Shipped in v0.2.0. |
|
|
33
|
+
| `Qwen3-Embedding` | `mlx-community/Qwen3-Embedding-4B-4bit-DWQ` | plain `qwen3` · dedicated `qwen3` graph · L1 | text | — | — | **Embeddings only**: `/v1/embeddings` + `mlx-bun embed`. Auto-picked by `embed` when no query is given; never the chat default. |
|
|
34
|
+
| `Qwen3-30B` | `mlx-community/Qwen3-30B-A3B-Thinking-2507-4bit` | Qwen3-MoE (`qwen3_moe`) · dedicated `qwen3-moe` graph · L1 (opt-in slow parity test, `MLX_BUN_TEST_QWEN3_MOE=1`) | text | two-model · ngram | bf16 (the artifact ships no kv_config.json) | Sparse top-k SwitchGLU experts. |
|
|
35
|
+
| `diffusiongemma` | `mlx-community/diffusiongemma-26B-A4B-it-OptiQ-4bit` | DiffusionGemma (`diffusion_gemma`) · dedicated graph + **denoising loop** (non-autoregressive) · L2 (optiq) | text · **image** (single image; its own inline-quantized SigLIP tower). No video / audio | — (no AR verify loop) | — (canvas model; the `--kv-quant` axis does not apply) | Serial lane always. Diffusion-native LoRA trains. |
|
|
36
|
+
| `GLM-5.2-colibri` | `mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp` @ `3cc8db99b1b13fc79325d987ba3c1c430766b3b8` | GLM-5.2 (`glm_moe_dsa`) · **Colibri container loader** + dedicated `glm5.2` graph (streamed experts) · **exact artifact profile**, L3 | text | **checkpoint-native MTP** (`--mtp on`, the default; mutually exclusive with `--draft-model`) | checkpoint-native compressed **MLA/DSA** cache (its own scheme; SSD tier v3 persists it) | Fixed-context admission: `--context-length` (4096) and `--max-tokens` (128) are reserved by the header-only resource equation before weights open; `--memory-budget` defaults to min(25 GiB, RAM). `--mtp off` enables ordinary batching. Embeddings, vision/audio, adapters, and training are unsupported. See [below](#direct-container-artifacts-glm-5x). |
|
|
37
|
+
| Tier-0 generic | validated manifest (`tests/support/universal-manifest.ts`): `Llama-3.2-1B-Instruct-4bit`, `Qwen2.5-0.5B-Instruct-4bit`, `Qwen3-0.6B-4bit`, `quantized-gemma-2b-it`, `gemma-2-2b-it-4bit`, `Phi-3.5-mini-instruct-4bit`, `GLM-4-9B-0414-4bit`, `granite-3.3-2b-instruct-4bit`, `starcoder2-3b-4bit`, `SmolLM3-3B-4bit` (all `mlx-community/`) and `ekryski/OLMo-2-0425-1B-Instruct-4bit` | 11 `model_type`s: `llama`, `smollm3`, `qwen2`, `qwen3`, `gemma`, `gemma2`, `phi3`, `olmo2`, `glm4`, `granite`, `starcoder2` (+ mlx-lm remaps `mistral`, `iquestcoder` → `llama`) · `universal-dense` graph · L1 | text | two-model · ngram | bf16; unreleased Llama full-attention uniform KV4/KV8 | `ls` labels these `supported (generic)`. Shared full-attention execution is qualified on Llama-3.2-3B at B1/B4, including speculative KV4/KV8 and generated RAM/SSD state; gemma2-family / sliding-window archs run serial. No compiled specialization. A `model_type` absent from the table refuses to load. |
|
|
38
|
+
|
|
39
|
+
Rules that apply across rows (all enforced in `src/server.ts`):
|
|
40
|
+
|
|
41
|
+
- **Draft sources.** Two-model and ngram work on any autoregressive target
|
|
42
|
+
(two-model requires the same tokenizer family — probe-checked at startup).
|
|
43
|
+
The KV-borrowing drafters (`-assistant`, DSpark, DeepSpec) require a
|
|
44
|
+
Gemma 4 target; `qwen3_5_mtp` heads require a Qwen3.5-family target; GLM's
|
|
45
|
+
MTP is its own row. Qwen MTP companions may store dense or affine-quantized
|
|
46
|
+
projections; the loader uses each module's quantization metadata. Target
|
|
47
|
+
verification is unchanged, while draft acceptance and speed depend on the
|
|
48
|
+
companion. In the unreleased shared executor, qualified plain, uniform,
|
|
49
|
+
per-layer affine and TurboQuant layouts compose with drafting through the
|
|
50
|
+
target/provider interfaces. Positive affine conversion thresholds are also
|
|
51
|
+
supported by library requests. The loaded model and provider determine
|
|
52
|
+
which combinations can execute.
|
|
53
|
+
- **Qwen3.5-family checkpoint generations.** Both ship the same graph and both
|
|
54
|
+
load: the mlx-lm-converted naming (`language_model.model.*`,
|
|
55
|
+
`language_model.lm_head`, `vision_tower.*`) and the transformers-5.8 export
|
|
56
|
+
(`model.language_model.*`, top-level `lm_head`, `model.visual.*`, in-repo
|
|
57
|
+
`mtp.*`, HF-layout `conv1d.weight` `[C,1,K]`, RMSNorm gains stored as γ−1).
|
|
58
|
+
The load seam (`src/model/qwen3_5-checkpoint.ts`) replicates mlx-lm's
|
|
59
|
+
`sanitize()` exactly: in-repo `mtp.*` and the vision tensors are dropped from
|
|
60
|
+
the text graph, and the +1.0 γ shift fires **only** when the artifact carries
|
|
61
|
+
`mtp.*` tensors **or** an unsanitized `conv1d.weight` — never on the naming
|
|
62
|
+
alone, so an old artifact can never be shifted.
|
|
63
|
+
- **KV schemes.** `--kv-quant 4|8` (uniform, L1) and `config` (per-layer
|
|
64
|
+
`kv_config.json`, L2) apply to the autoregressive families that ship the
|
|
65
|
+
file; `turbo` additionally requires a full-attention `head_dim` in
|
|
66
|
+
{64, 128, 256, 512} (refused at startup otherwise). Qualified TurboQuant
|
|
67
|
+
targets support shared ordinary and speculative execution; sliding layers
|
|
68
|
+
remain bf16;
|
|
69
|
+
`--paged-kv` is Gemma 4 only, bf16, serial. Flag detail:
|
|
70
|
+
[server-config.md](server-config.md).
|
|
71
|
+
- **Modalities.** Image requests reach a Gemma 4 model only when
|
|
72
|
+
`has_vision_sidecar` or a `*_unified_vision` config is present; audio only
|
|
73
|
+
when `audio_config` AND the sidecar's `audio_tower.*` tensors are both
|
|
74
|
+
present; video only on a Qwen3.5-family model. A request carrying media the
|
|
75
|
+
model cannot take is an explicit 400, never a silent text-only degrade.
|
|
76
|
+
Wire formats: [server-api.md](server-api.md).
|
|
77
|
+
- **Memory.** Disk sizes above are the dated figures from
|
|
78
|
+
[benchmarks.md](benchmarks.md); for RAM, ask `mlx-bun fit <query> --ctx
|
|
79
|
+
<n>` rather than a table (src/fit.ts is the calculator).
|
|
80
|
+
|
|
81
|
+
### How a new model gets here
|
|
82
|
+
|
|
83
|
+
A `model_type` earns a row by landing a descriptor (Tier-0) or a dedicated
|
|
84
|
+
graph (targeted) **plus a green parity manifest entry** against the oracle
|
|
85
|
+
that already ships it — the process, cost per arch, and the graduation path
|
|
86
|
+
from generic to targeted are in
|
|
87
|
+
[docs/design/generic-model-support.md](../design/generic-model-support.md)
|
|
88
|
+
(§3.1 descriptor table, §3.5 the parity gate, §3.6 graduation). Exact
|
|
89
|
+
artifacts additionally get a declared profile (see
|
|
90
|
+
[Declared model profiles](#declared-model-profiles)).
|
|
6
91
|
|
|
7
92
|
## The cache layout (and why duplicates happen)
|
|
8
93
|
|
|
@@ -65,7 +150,16 @@ existing prefix in chunks — no whole-file allocation):
|
|
|
65
150
|
A mismatch deletes the partial (never resume corrupt bytes); a short
|
|
66
151
|
read keeps the `.incomplete` for resume.
|
|
67
152
|
|
|
68
|
-
## GLM-5.
|
|
153
|
+
## Direct-container artifacts (GLM-5.x)
|
|
154
|
+
|
|
155
|
+
Models that load through the Colibri container loader (`loader: "colibri"`
|
|
156
|
+
in `src/model/profile.ts`) skip `Weights.open` entirely: a header-only
|
|
157
|
+
resource equation runs before any resident tensor or expert slab opens, and
|
|
158
|
+
an impossible plan fails without committing memory. One validated artifact
|
|
159
|
+
today; a GLM-5.3+ artifact joins as a new row in the roster above plus a
|
|
160
|
+
subsection here once it has a declared profile.
|
|
161
|
+
|
|
162
|
+
### GLM-5.2 on a 32 GB Mac
|
|
69
163
|
|
|
70
164
|
The validated direct-container artifact is
|
|
71
165
|
`mateogrgic/GLM-5.2-colibri-int4-with-int8-mtp` at revision
|
|
@@ -134,6 +228,15 @@ sampling. Those methods remain explicit flags/request fields or documented
|
|
|
134
228
|
defaults. If an exact profile requires a capability the running engine does not
|
|
135
229
|
have, loading refuses; it never downgrades to another model path.
|
|
136
230
|
|
|
231
|
+
**Packed trellis artifacts.** A `quantization` entry with `mode: "trellis"`
|
|
232
|
+
(TurboQuant Q2b, `mjriii/Qwen3.8-27B-q3-…-packed`) stores that module as a
|
|
233
|
+
trellis-coded bit-stream + fp16 row scales and is served by the engine's own
|
|
234
|
+
Metal kernels; stock mlx-lm cannot load it. Experimental k3/axis0 artifacts
|
|
235
|
+
can store two-block interleaved codes as a 3D tensor; the loader identifies
|
|
236
|
+
the layout from its shape and keeps one resident code copy. Format and kernels:
|
|
237
|
+
`docs/design/turboquant.md` (Q campaign); fallback `MLX_BUN_TRELLIS=expand`:
|
|
238
|
+
`server-config.md`.
|
|
239
|
+
|
|
137
240
|
Fidelity labels mean L1 = bit-exact mlx-lm, L2 = bit-exact mlx-optiq, and L3 =
|
|
138
241
|
measured evidence without a matching oracle. Model profiles do not imply that a
|
|
139
242
|
quantized artifact retains the base model's benchmark score; quality evidence
|
|
@@ -225,3 +328,7 @@ Safety rails:
|
|
|
225
328
|
|
|
226
329
|
After a real deletion, gc re-scans so the registry drops the reaped
|
|
227
330
|
rows immediately.
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
Non-Qwen grouped TurboQuant drafting, including assistant donor attention, uses
|
|
334
|
+
the shared cache interfaces. See [composition coverage](../design/batching.md#turboquant-donor-attention-and-grouped-draft-composition).
|