mlx-bun 0.4.0 → 1.0.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 +1453 -88
- package/THIRD_PARTY_NOTICES.md +882 -0
- package/bin/mlx-bun.convert.mjs +4 -0
- package/bin/mlx-bun.fuse.mjs +4 -0
- package/bin/mlx-bun.generate.mjs +4 -0
- package/bin/mlx-bun.lora.mjs +4 -0
- package/bin/mlx-bun.mjs +13 -21
- package/bin/mlx-bun.server.mjs +4 -0
- package/bin/mlx-bun.upload.mjs +4 -0
- package/dist/web/app.js +9584 -0
- package/package.json +50 -53
- package/src/cli/ane-install.ts +76 -0
- package/src/cli/args.ts +179 -0
- package/src/cli/engine-entry.ts +68 -0
- package/src/cli/inference.ts +214 -0
- package/src/cli/job-entry.ts +97 -0
- package/src/cli/library-host.ts +117 -0
- package/src/cli/main.ts +57 -0
- package/src/cli/memory-engine.ts +163 -0
- package/src/cli/memory.ts +36 -0
- package/src/cli/mlx-lm-aliases.ts +309 -0
- package/src/cli/model-choice.ts +33 -0
- package/src/cli/model-selection.ts +84 -0
- package/src/cli/module-host.ts +11 -0
- package/src/cli/module-verbs.ts +50 -0
- package/src/cli/numerical-policy.ts +12 -0
- package/src/cli/perplexity.ts +89 -0
- package/src/cli/serve-host.ts +423 -0
- package/src/cli/serve-isolated.ts +217 -0
- package/src/cli/serve-options.ts +106 -0
- package/src/cli/serve-state.ts +205 -0
- package/src/cli/serve.ts +500 -0
- package/src/cli/served-model-host.ts +102 -0
- package/src/cli/server-entry.ts +148 -0
- package/src/cli/serving-unit.ts +177 -0
- package/src/{tui.ts → cli/terminal.ts} +13 -8
- package/src/cli/worker-adapters.ts +34 -0
- package/src/cli/worker-entry.ts +272 -0
- package/src/cli/worker-unit.ts +179 -0
- package/src/engine/adapter-operation.ts +26 -0
- package/src/engine/cache-services.ts +114 -0
- package/src/engine/completion.ts +39 -0
- package/src/engine/generation-gateway.ts +358 -0
- package/src/engine/index.ts +59 -0
- package/src/engine/kv-budget.ts +120 -0
- package/src/engine/media-preparation.ts +232 -0
- package/src/engine/model-binding.ts +24 -0
- package/src/engine/model-host.ts +513 -0
- package/src/engine/model-serving.ts +89 -0
- package/src/{serve → engine}/preparation.ts +10 -8
- package/src/{serve → engine}/session-completion-engine.ts +6 -6
- package/src/engine/telemetry.ts +109 -0
- package/src/hub/downloads.ts +116 -0
- package/src/jobs/db.ts +16 -7
- package/src/jobs/events.ts +29 -0
- package/src/jobs/executable.ts +5 -0
- package/src/jobs/host.ts +51 -0
- package/src/jobs/in-process.ts +55 -0
- package/src/{contracts/jobs.ts → jobs/protocol.ts} +7 -9
- package/src/jobs/runner.ts +150 -231
- package/src/jobs/service.ts +75 -0
- package/src/jobs/sse.ts +59 -23
- package/src/jobs/worker-memory.ts +46 -0
- package/src/jobs/worker-process.ts +163 -0
- package/src/jobs/worker-supervisor.ts +258 -0
- package/src/modules.ts +58 -0
- package/src/publishing/catalog-hub.ts +18 -0
- package/src/publishing/credentials.ts +31 -0
- package/src/publishing/upload.ts +37 -0
- package/src/residency/leased-adapters.ts +21 -0
- package/src/residency/local-records.ts +16 -0
- package/src/residency/model-residency.ts +405 -0
- package/src/residency/record-index.ts +28 -0
- package/src/residency/resident-estimate.ts +50 -0
- package/src/{anthropic.ts → server/anthropic.ts} +3 -81
- package/src/server/cache-routes.ts +36 -0
- package/src/{serve → server}/chat-request.ts +12 -10
- package/src/{serve → server}/chat-stage.ts +27 -22
- package/src/{client.ts → server/client.ts} +28 -2
- package/src/{serve → server}/completion-executor.ts +42 -42
- package/src/server/decision-body.ts +55 -0
- package/src/server/decision-routes.ts +134 -0
- package/src/server/decision-wire.ts +228 -0
- package/src/{serve → server}/discovery-routes.ts +42 -83
- package/src/server/generated-token-history.ts +57 -0
- package/src/{serve → server}/http.ts +25 -13
- package/src/{serve → server}/inference-request.ts +5 -5
- package/src/server/job-routes.ts +20 -0
- package/src/server/media-prompt.ts +63 -0
- package/src/server/memory-completion-client.ts +46 -0
- package/src/server/model-routes.ts +192 -0
- package/src/{serve → server}/openai-wire.ts +3 -2
- package/src/{serve → server}/pipeline.ts +1 -1
- package/src/server/prompt-builder.ts +13 -0
- package/src/server/prompt-contracts.ts +17 -0
- package/src/server/proxy-routes.ts +187 -0
- package/src/server/publishing-routes.ts +41 -0
- package/src/{serve → server}/request-plan.ts +8 -8
- package/src/{serve → server}/request-prep.ts +82 -68
- package/src/{serve → server}/responses-client.ts +30 -13
- package/src/{responses.ts → server/responses.ts} +12 -93
- package/src/server/routes.ts +205 -0
- package/src/server/start.ts +72 -0
- package/src/server/status-routes.ts +108 -0
- package/src/{serve → server}/text-completion-stage.ts +25 -4
- package/src/server/text-prompt.ts +12 -0
- package/src/{serve → server}/token-streams.ts +36 -38
- package/src/server/worker-routes.ts +311 -0
- package/src/storage/paths.ts +61 -0
- package/src/web/assets.ts +37 -0
- package/src/web/{src → browser}/api.ts +5 -23
- package/src/web/browser/chat-host.ts +17 -0
- package/src/web/browser/installed-panels.ts +6 -0
- package/src/web/browser/main.ts +55 -0
- package/src/web/browser/markdown.ts +279 -0
- package/src/web/browser/memory-panel.ts +9 -0
- package/src/web/browser/palette.ts +64 -0
- package/src/web/browser/protocol.ts +13 -0
- package/src/web/browser/shell.ts +467 -0
- package/src/web/{src → browser}/status.ts +32 -36
- package/src/web/build.ts +51 -0
- package/src/web/public/app.html +1054 -0
- package/src/web/{sw.js → public/sw.js} +4 -3
- package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
- package/src/web/{vendor → public/vendor}/hljs.js +2 -2
- package/THIRD_PARTY_LICENSES.md +0 -51
- package/docs/README.md +0 -94
- package/docs/archive/hlg-sampling.md +0 -350
- package/docs/archive/investigations/audio-input-plan.md +0 -356
- package/docs/archive/investigations/chunk-finetune-experiment.md +0 -84
- package/docs/archive/investigations/colibri-glm52-port.md +0 -1486
- package/docs/archive/investigations/colibri-oracle-pin.md +0 -1284
- package/docs/archive/investigations/curve-bisector-routing.md +0 -123
- package/docs/archive/investigations/decode-roofline-lookagain.md +0 -348
- package/docs/archive/investigations/diffusion-gemma-port.md +0 -602
- package/docs/archive/investigations/dspark-handoff.md +0 -224
- package/docs/archive/investigations/expert-offload-single-user-moe.md +0 -292
- package/docs/archive/investigations/faithful-l1-consolidation.md +0 -310
- package/docs/archive/investigations/hlg-sampling-investigation.md +0 -970
- package/docs/archive/investigations/indexshare-performance-spike.md +0 -357
- package/docs/archive/investigations/kernel-perf-review-2026-07.md +0 -171
- package/docs/archive/investigations/lab-build-journal.md +0 -157
- package/docs/archive/investigations/minicpm5-decode-megakernel.md +0 -489
- package/docs/archive/investigations/openjarvis-fit.md +0 -198
- package/docs/archive/investigations/openwiki-evaluation.md +0 -249
- package/docs/archive/investigations/optimization_plan.md +0 -346
- package/docs/archive/investigations/orpo-base-uf-experiment-and-directions.md +0 -120
- package/docs/archive/investigations/orpo-flash-cce-pin-leak.md +0 -167
- package/docs/archive/investigations/orpo-uf-testing-handoff.md +0 -126
- package/docs/archive/investigations/pareto-specialized-runtime-findings.md +0 -92
- package/docs/archive/investigations/pi-builtin-investigation.md +0 -308
- package/docs/archive/investigations/pre-colibri-stabilization.md +0 -329
- package/docs/archive/investigations/qwen38-27b-campaign-log.md +0 -1092
- package/docs/archive/investigations/segmented-backward-handoff.md +0 -148
- package/docs/archive/investigations/starter-model-port-handoff.md +0 -342
- package/docs/archive/investigations/steel-flash-cce-handoff.md +0 -489
- package/docs/archive/investigations/the-dreaming-handoff.md +0 -141
- package/docs/archive/investigations/trainer-validation-experiment.md +0 -173
- package/docs/archive/planning/chat-ui-vision-memory-first.md +0 -199
- package/docs/archive/planning/chat-ui-vision.md +0 -50
- package/docs/archive/planning/chunk-task-roadmap.md +0 -77
- package/docs/archive/planning/curve-sampler-research-plan.md +0 -331
- package/docs/archive/planning/journal.md +0 -316
- package/docs/archive/planning/memory-docs-and-dag-plan.md +0 -194
- package/docs/archive/planning/pi-integration-review.md +0 -178
- package/docs/archive/planning/release-notes-v0.0.10.md +0 -57
- package/docs/archive/planning/release-notes-v0.0.11.md +0 -239
- package/docs/archive/planning/release-notes-v0.0.12.md +0 -80
- package/docs/archive/planning/release-notes-v0.0.13.md +0 -77
- package/docs/archive/planning/release-notes-v0.0.9.md +0 -122
- package/docs/archive/planning/release-notes-v0.2.0.md +0 -49
- package/docs/archive/planning/release-notes-v0.3.0.md +0 -35
- package/docs/archive/planning/web-ui-pass-plan.md +0 -213
- package/docs/archive/planning/website-readme-pass-plan.md +0 -224
- package/docs/design/batching.md +0 -1841
- package/docs/design/decode-speed-program.md +0 -2349
- package/docs/design/dreaming-nightly-pipeline.md +0 -684
- package/docs/design/generic-model-support.md +0 -705
- package/docs/design/kv-cache.md +0 -824
- package/docs/design/orpo-training.md +0 -680
- package/docs/design/speculative-decoding.md +0 -1990
- package/docs/design/turboquant.md +0 -2212
- package/docs/design/unified-engine-frontier-plan.md +0 -1880
- package/docs/design/web-chat-redesign.md +0 -695
- package/docs/planning/PRODUCT_ROADMAP.md +0 -594
- package/docs/planning/ResearchTopics.md +0 -119
- package/docs/planning/release-notes-v0.4.0.md +0 -45
- package/docs/planning/video-series.md +0 -421
- package/docs/reference/benchmarks.md +0 -3613
- package/docs/reference/cli.md +0 -585
- package/docs/reference/distribution.md +0 -355
- package/docs/reference/environment.md +0 -398
- package/docs/reference/glossary.md +0 -39
- package/docs/reference/library-api.md +0 -674
- package/docs/reference/memory.md +0 -260
- package/docs/reference/models.md +0 -334
- package/docs/reference/server-api.md +0 -1775
- package/docs/reference/server-config.md +0 -846
- package/docs/reference/training.md +0 -462
- package/docs/reference/troubleshooting.md +0 -158
- package/src/admission-plan.ts +0 -18
- package/src/audio/conformer.ts +0 -647
- package/src/audio/decode.ts +0 -133
- package/src/audio/features.ts +0 -202
- package/src/audio/transcode.ts +0 -67
- package/src/backends/mlx/assistant-target.ts +0 -46
- package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
- package/src/backends/mlx/autoregressive.ts +0 -108
- package/src/backends/mlx/batch-group.ts +0 -1790
- package/src/backends/mlx/cache-attachment.ts +0 -67
- package/src/backends/mlx/cache-layout.ts +0 -31
- package/src/backends/mlx/checkpoint-state.ts +0 -53
- package/src/backends/mlx/continuation-persistence.ts +0 -106
- package/src/backends/mlx/continuation-request.ts +0 -43
- package/src/backends/mlx/continuation.ts +0 -77
- package/src/backends/mlx/diffusion.ts +0 -39
- package/src/backends/mlx/draft-target.ts +0 -32
- package/src/backends/mlx/evaluation.ts +0 -105
- package/src/backends/mlx/fill-append.ts +0 -45
- package/src/backends/mlx/full-kv-row-append.ts +0 -32
- package/src/backends/mlx/full-kv-row-donor.ts +0 -54
- package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
- package/src/backends/mlx/gateway-binding.ts +0 -130
- package/src/backends/mlx/graph.ts +0 -38
- package/src/backends/mlx/kv-codec.ts +0 -9
- package/src/backends/mlx/kv-maintenance.ts +0 -133
- package/src/backends/mlx/kv-tensor-rows.ts +0 -212
- package/src/backends/mlx/memory-client.ts +0 -189
- package/src/backends/mlx/methods.ts +0 -90
- package/src/backends/mlx/model-prompt.ts +0 -164
- package/src/backends/mlx/model-serving.ts +0 -79
- package/src/backends/mlx/prefill-cohort.ts +0 -89
- package/src/backends/mlx/prefill-rows.ts +0 -200
- package/src/backends/mlx/prefill.ts +0 -33
- package/src/backends/mlx/projected-context-rows.ts +0 -72
- package/src/backends/mlx/request-policy.ts +0 -20
- package/src/backends/mlx/request-state-policy.ts +0 -41
- package/src/backends/mlx/rollback.ts +0 -89
- package/src/backends/mlx/row-sampling.ts +0 -49
- package/src/backends/mlx/serial-executor.ts +0 -242
- package/src/backends/mlx/speculative-group.ts +0 -359
- package/src/backends/mlx/speculative-round.ts +0 -161
- package/src/backends/mlx/speculative.ts +0 -114
- package/src/backends/mlx/state-rows.ts +0 -104
- package/src/backends/mlx/state-views.ts +0 -46
- package/src/backends/mlx/target-layout-capability.ts +0 -35
- package/src/backends/mlx/text-engine.ts +0 -73
- package/src/backends/mlx/transitioning-kv-rows.ts +0 -165
- package/src/chat-template.ts +0 -382
- package/src/cli.ts +0 -3168
- package/src/config.ts +0 -399
- package/src/contracts/completion.ts +0 -16
- package/src/contracts/execution.ts +0 -60
- package/src/contracts/generation.ts +0 -103
- package/src/contracts/host.ts +0 -7
- package/src/contracts/pi-provider.ts +0 -30
- package/src/contracts/pi.ts +0 -259
- package/src/contracts/prefix-cache.ts +0 -23
- package/src/contracts/resources.ts +0 -25
- package/src/contracts/sampling.ts +0 -23
- package/src/contracts/scheduling.ts +0 -45
- package/src/contracts/tsconfig.json +0 -14
- package/src/dataset/generators.ts +0 -1087
- package/src/dataset/index.ts +0 -12
- package/src/dataset/job.ts +0 -81
- package/src/dataset/llm.ts +0 -71
- package/src/dataset/registry.ts +0 -528
- package/src/diffusion/diffusion-generate.ts +0 -507
- package/src/download.ts +0 -505
- package/src/embed.ts +0 -77
- package/src/engine/admission.ts +0 -59
- package/src/engine/cancellation.ts +0 -38
- package/src/engine/engine.ts +0 -56
- package/src/engine/execution-coordinator.ts +0 -70
- package/src/engine/execution-plan.ts +0 -53
- package/src/engine/resources.ts +0 -53
- package/src/engine/scheduler.ts +0 -72
- package/src/engine/session.ts +0 -247
- package/src/eval/README.md +0 -130
- package/src/eval/ifeval.ts +0 -81
- package/src/eval/kl-prompts.ts +0 -29
- package/src/eval/kl.ts +0 -590
- package/src/eval/perplexity.ts +0 -164
- package/src/eval/quality-db.ts +0 -92
- package/src/eval/reference-logits.ts +0 -207
- package/src/eval/runner.ts +0 -124
- package/src/eval/score.ts +0 -49
- package/src/eval/tasks/bfcl.ts +0 -535
- package/src/eval/tasks/gsm8k.ts +0 -98
- package/src/eval/tasks/hashhop.ts +0 -139
- package/src/eval/tasks/humaneval.ts +0 -275
- package/src/eval/tasks/ifeval.ts +0 -525
- package/src/eval/tasks/mmlu.ts +0 -157
- package/src/eval/ultrafeedback.ts +0 -60
- package/src/evaldb.ts +0 -199
- package/src/expert-io.ts +0 -393
- package/src/expert-offload-build.ts +0 -77
- package/src/expert-offload.ts +0 -76
- package/src/expert-residency.ts +0 -1134
- package/src/expert-usage.ts +0 -415
- package/src/fill/echo-index.ts +0 -188
- package/src/fill/fill-session.ts +0 -452
- package/src/fill/proposal.ts +0 -68
- package/src/fill/schema-rows.ts +0 -506
- package/src/fill/tool-boundary.ts +0 -103
- package/src/fit.ts +0 -249
- package/src/generate.ts +0 -1346
- package/src/grammar.ts +0 -591
- package/src/harness-pi.ts +0 -184
- package/src/hf-push.ts +0 -628
- package/src/hub-rest.ts +0 -242
- package/src/index.ts +0 -63
- package/src/inference/denoising.ts +0 -17
- package/src/inference/draft-acceptance.ts +0 -41
- package/src/inference/draft-output.ts +0 -49
- package/src/inference/graph.ts +0 -33
- package/src/inference/prefill.ts +0 -39
- package/src/inference/rollback.ts +0 -7
- package/src/jobs/index.ts +0 -31
- package/src/jobs/job-entry.ts +0 -107
- package/src/jobs/task-client.ts +0 -19
- package/src/jobs/types.ts +0 -2
- package/src/kv-scheme.ts +0 -257
- package/src/kv-store.ts +0 -1099
- package/src/lab/README.md +0 -18
- package/src/lab/curve/curve-designer.html +0 -303
- package/src/lab/curve/curve-sampler.ts +0 -122
- package/src/lab/expert-trace/expert-trace.ts +0 -69
- package/src/lab/paged-kv/paged-kv-rows.ts +0 -83
- package/src/lab/paged-kv/paged-kv.ts +0 -270
- package/src/library.ts +0 -40
- package/src/lora.ts +0 -408
- package/src/md-modules.d.ts +0 -49
- package/src/media-fetch.ts +0 -442
- package/src/memory/article.ts +0 -558
- package/src/memory/chunk-validation.ts +0 -150
- package/src/memory/chunk.ts +0 -318
- package/src/memory/cluster.ts +0 -351
- package/src/memory/coverage.ts +0 -134
- package/src/memory/crosslink.ts +0 -0
- package/src/memory/db.ts +0 -253
- package/src/memory/entity.ts +0 -203
- package/src/memory/gate.ts +0 -187
- package/src/memory/history.ts +0 -152
- package/src/memory/ingest.ts +0 -335
- package/src/memory/model.ts +0 -183
- package/src/memory/normalize.ts +0 -671
- package/src/memory/parse.ts +0 -22
- package/src/memory/pipeline.ts +0 -275
- package/src/memory/prompts.ts +0 -65
- package/src/memory/query.ts +0 -334
- package/src/memory/reconcile.ts +0 -734
- package/src/memory/redirect.ts +0 -108
- package/src/memory/reindex.ts +0 -325
- package/src/memory/resolve.ts +0 -307
- package/src/memory/rest.ts +0 -245
- package/src/memory/route.ts +0 -272
- package/src/memory/schedule.ts +0 -165
- package/src/memory/stages.ts +0 -777
- package/src/memory/synthesize.ts +0 -1638
- package/src/memory/tools.ts +0 -749
- package/src/memory/vault.ts +0 -1194
- package/src/memory/wikify.ts +0 -1064
- package/src/mlx/array.ts +0 -388
- package/src/mlx/autograd.ts +0 -304
- package/src/mlx/checkpoint.ts +0 -149
- package/src/mlx/compile.ts +0 -168
- package/src/mlx/custom-vjp.ts +0 -188
- package/src/mlx/ffi.ts +0 -512
- package/src/mlx/materialize.ts +0 -23
- package/src/mlx/metal-kernel.ts +0 -159
- package/src/mlx/ops.ts +0 -1021
- package/src/mlx/quantized-rows.ts +0 -36
- package/src/mlx/token-bitmask.ts +0 -52
- package/src/mlx/turboquant-kv-decode.ts +0 -82
- package/src/mlx/turboquant-kv-inverse.ts +0 -122
- package/src/mlx/turboquant-ops.ts +0 -861
- package/src/mlx/turboquant-tables.ts +0 -237
- package/src/mmap.ts +0 -90
- package/src/model/artifact-identity.ts +0 -73
- package/src/model/batched-kv.ts +0 -235
- package/src/model/batched-mask.ts +0 -279
- package/src/model/batched-quant.ts +0 -212
- package/src/model/batched-quantized-kv.ts +0 -144
- package/src/model/batched-rotating-quant.ts +0 -353
- package/src/model/batched-rotating-state.ts +0 -149
- package/src/model/batched-rotating.ts +0 -338
- package/src/model/batched-row-storage.ts +0 -179
- package/src/model/batched-ssm.ts +0 -52
- package/src/model/batched-turboquant-kv.ts +0 -93
- package/src/model/compiled-decode.ts +0 -712
- package/src/model/decoded-kv-donor.ts +0 -12
- package/src/model/delayed-quantized-kv.ts +0 -72
- package/src/model/delayed-rotating-quantized-kv.ts +0 -93
- package/src/model/delayed-turboquant-kv.ts +0 -55
- package/src/model/diffusion-gemma.ts +0 -1026
- package/src/model/factory.ts +0 -189
- package/src/model/fingerprint.ts +0 -33
- package/src/model/flash-attention.ts +0 -694
- package/src/model/full-prefill-padding.ts +0 -56
- package/src/model/full-prefill-row.ts +0 -105
- package/src/model/gemma4-base.ts +0 -2351
- package/src/model/gemma4.ts +0 -1315
- package/src/model/generated/gemma4-12b.ts +0 -429
- package/src/model/generated/gemma4-26b.ts +0 -448
- package/src/model/generated/gemma4-e4b.ts +0 -717
- package/src/model/generated/index.ts +0 -18
- package/src/model/glm52-atlas.ts +0 -511
- package/src/model/glm52-cache.ts +0 -792
- package/src/model/glm52-config.ts +0 -262
- package/src/model/glm52-container.ts +0 -305
- package/src/model/glm52-coupling.ts +0 -388
- package/src/model/glm52-dsa.ts +0 -606
- package/src/model/glm52-expert-layout.ts +0 -253
- package/src/model/glm52-layout.ts +0 -152
- package/src/model/glm52-memory.ts +0 -500
- package/src/model/glm52-mla.ts +0 -792
- package/src/model/glm52-moe.ts +0 -223
- package/src/model/glm52-pilot.ts +0 -537
- package/src/model/glm52-reference.ts +0 -445
- package/src/model/glm52-residency.ts +0 -557
- package/src/model/glm52-resident-weights.ts +0 -135
- package/src/model/glm52-streamed-experts.ts +0 -453
- package/src/model/glm52-streamed-metal.ts +0 -610
- package/src/model/glm52-weights.ts +0 -503
- package/src/model/glm52.ts +0 -1132
- package/src/model/implementation.ts +0 -69
- package/src/model/kv-attention-view.ts +0 -67
- package/src/model/minicpm5.ts +0 -376
- package/src/model/profile.ts +0 -443
- package/src/model/qwen-append.ts +0 -12
- package/src/model/qwen-conv.ts +0 -52
- package/src/model/qwen3-delta-state.ts +0 -74
- package/src/model/qwen3-delta.ts +0 -451
- package/src/model/qwen3-moe.ts +0 -404
- package/src/model/qwen3-mrope.ts +0 -252
- package/src/model/qwen3.ts +0 -277
- package/src/model/qwen3_5-checkpoint.ts +0 -164
- package/src/model/qwen3_5.ts +0 -819
- package/src/model/rotating-kv-donor.ts +0 -35
- package/src/model/rotating-kv-layout.ts +0 -262
- package/src/model/rotating-row-transaction.ts +0 -35
- package/src/model/speculative-rotating-kv.ts +0 -101
- package/src/model/ssm-prefill-padding.ts +0 -39
- package/src/model/support.ts +0 -102
- package/src/model/trellis-balanced-scatter.ts +0 -51
- package/src/model/trellis-linear.ts +0 -672
- package/src/model/trellis-shared-m.ts +0 -151
- package/src/model/trellis-shared-scatter.ts +0 -144
- package/src/model/trellis-splitk-prefill.ts +0 -158
- package/src/model/trellis-tiled-prefill.ts +0 -136
- package/src/model/trellis-vector-expand.ts +0 -62
- package/src/model/trellis-wide-prefill.ts +0 -94
- package/src/model/turboquant-codec.ts +0 -83
- package/src/model/universal/archs.ts +0 -332
- package/src/model/universal/dense.ts +0 -612
- package/src/model/universal/modules.ts +0 -170
- package/src/model/universal/rope.ts +0 -381
- package/src/native/expert_io.c +0 -523
- package/src/native/frame_extract.swift +0 -140
- package/src/native-pack.ts +0 -162
- package/src/pi-provider.ts +0 -53
- package/src/pi-session.ts +0 -81
- package/src/pi-terminal.ts +0 -274
- package/src/pi-web.ts +0 -1932
- package/src/preflight.ts +0 -158
- package/src/prompt-cache.ts +0 -460
- package/src/quantize/allocator.ts +0 -627
- package/src/quantize/atomic-output.ts +0 -38
- package/src/quantize/calibration.ts +0 -181
- package/src/quantize/config-writer.ts +0 -145
- package/src/quantize/index.ts +0 -84
- package/src/quantize/job.ts +0 -162
- package/src/quantize/quantizer.ts +0 -666
- package/src/quantize/rotate.ts +0 -603
- package/src/quantize/safetensors-writer.ts +0 -249
- package/src/quantize/sensitivity.ts +0 -216
- package/src/quantize/trellis.ts +0 -586
- package/src/quantize/weight-transform.ts +0 -292
- package/src/registry.ts +0 -602
- package/src/runtime-config.ts +0 -81
- package/src/safetensors.ts +0 -158
- package/src/sampler.ts +0 -1011
- package/src/serve/admin-routes.ts +0 -184
- package/src/serve/assets/curve-terrain.html +0 -105
- package/src/serve/assets/training-inference-map.html +0 -575
- package/src/serve/aux-routes.ts +0 -132
- package/src/serve/batch-scheduler.ts +0 -8
- package/src/serve/checkpoint-identity.ts +0 -64
- package/src/serve/generation-gateway.ts +0 -496
- package/src/serve/isolate.ts +0 -609
- package/src/serve/kv-budget.ts +0 -14
- package/src/serve/lab-routes.ts +0 -341
- package/src/serve/lane-registry.ts +0 -45
- package/src/serve/model-admin-routes.ts +0 -155
- package/src/serve/model-binding.ts +0 -43
- package/src/serve/model-host.ts +0 -511
- package/src/serve/parent-application.ts +0 -56
- package/src/serve/prompt-response-trace.ts +0 -147
- package/src/serve/response-lease.ts +0 -24
- package/src/serve/session-search.ts +0 -326
- package/src/serve/static-routes.ts +0 -101
- package/src/server.ts +0 -1314
- package/src/spec/assistant-rows.ts +0 -92
- package/src/spec/assistant-source.ts +0 -126
- package/src/spec/cache-identity.ts +0 -22
- package/src/spec/deepspec-rows.ts +0 -29
- package/src/spec/deepspec-source.ts +0 -145
- package/src/spec/dflash-source.ts +0 -149
- package/src/spec/drafter.ts +0 -304
- package/src/spec/dspark/ab-stats.ts +0 -136
- package/src/spec/dspark/calibration.ts +0 -112
- package/src/spec/dspark/data-dflash.ts +0 -156
- package/src/spec/dspark/data.ts +0 -201
- package/src/spec/dspark/deepspec-module.ts +0 -776
- package/src/spec/dspark/generate-dflash.ts +0 -245
- package/src/spec/dspark/generate.ts +0 -290
- package/src/spec/dspark/loader.ts +0 -23
- package/src/spec/dspark/loss.ts +0 -213
- package/src/spec/dspark/module-dflash.ts +0 -560
- package/src/spec/dspark/module.ts +0 -540
- package/src/spec/dspark/quantize-drafter.ts +0 -91
- package/src/spec/dspark/sample.ts +0 -112
- package/src/spec/generate.ts +0 -276
- package/src/spec/glm52-mtp-graph.ts +0 -29
- package/src/spec/glm52-mtp-rows.ts +0 -132
- package/src/spec/glm52-mtp-source.ts +0 -317
- package/src/spec/glm52-mtp-state.ts +0 -33
- package/src/spec/ngram-source.ts +0 -204
- package/src/spec/projected-draft-rows.ts +0 -73
- package/src/spec/qwen-mtp-module.ts +0 -171
- package/src/spec/qwen-mtp-rows.ts +0 -219
- package/src/spec/qwen-mtp-source.ts +0 -383
- package/src/spec/qwen-mtp-state.ts +0 -30
- package/src/spec/serve-loop.ts +0 -585
- package/src/spec/source.ts +0 -215
- package/src/spec/two-model-rows.ts +0 -61
- package/src/spec/two-model.ts +0 -113
- package/src/ssd-cache.ts +0 -372
- package/src/ssd-durability.ts +0 -211
- package/src/tokenizer.ts +0 -335
- package/src/tool-approvals.ts +0 -131
- package/src/tool-call.ts +0 -695
- package/src/train/dataset.ts +0 -484
- package/src/train/diffusion-lora.ts +0 -216
- package/src/train/export.ts +0 -32
- package/src/train/flash-cce.ts +0 -1234
- package/src/train/forward.ts +0 -266
- package/src/train/fuse.ts +0 -243
- package/src/train/index.ts +0 -46
- package/src/train/job.ts +0 -205
- package/src/train/lora-params.ts +0 -254
- package/src/train/loss.ts +0 -1591
- package/src/train/merge.ts +0 -195
- package/src/train/optimizer.ts +0 -183
- package/src/train/prefix-shared.ts +0 -490
- package/src/train/rank.ts +0 -137
- package/src/train/segmented.ts +0 -1828
- package/src/train/steel-qmm-header.ts +0 -1461
- package/src/train/trainer.ts +0 -1221
- package/src/train/watch.ts +0 -542
- package/src/vision/diffusion-vision.ts +0 -620
- package/src/vision/embedder.ts +0 -168
- package/src/vision/preprocess.ts +0 -247
- package/src/vision/prompt.ts +0 -373
- package/src/vision/qwen3vl-preprocess.ts +0 -409
- package/src/vision/qwen3vl-prompt.ts +0 -196
- package/src/vision/qwen3vl-tower.ts +0 -555
- package/src/vision/siglip.ts +0 -599
- package/src/vision/video-frames.ts +0 -148
- package/src/web/app.html +0 -2143
- package/src/web/app.js +0 -5703
- package/src/web/skills/memory/SKILL.md +0 -120
- package/src/web/skills/web-research/SKILL.md +0 -46
- package/src/web/skills.ts +0 -97
- package/src/web/src/adapters-panel.ts +0 -288
- package/src/web/src/assistant.ts +0 -451
- package/src/web/src/chat.ts +0 -1057
- package/src/web/src/composer.ts +0 -959
- package/src/web/src/dataset.ts +0 -132
- package/src/web/src/finetune.ts +0 -267
- package/src/web/src/hub.ts +0 -428
- package/src/web/src/main.ts +0 -98
- package/src/web/src/markdown.ts +0 -0
- package/src/web/src/memory-panel.ts +0 -572
- package/src/web/src/model-picker.ts +0 -159
- package/src/web/src/palette.ts +0 -346
- package/src/web/src/protocol.ts +0 -26
- package/src/web/src/quantize.ts +0 -167
- package/src/web/src/rag.ts +0 -274
- package/src/web/src/sessions.ts +0 -469
- package/src/web/src/shell.ts +0 -804
- package/src/web/src/ui-catalog.ts +0 -78
- package/src/web/vendor/README.md +0 -61
- package/src/web-assets.ts +0 -47
- package/src/web-tools.ts +0 -478
- package/src/weights.ts +0 -255
- /package/src/{serve → server}/completion-sink.ts +0 -0
- /package/src/web/{icon.svg → public/icon.svg} +0 -0
- /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
- /package/src/web/{vendor → public/vendor}/hljs-LICENSE +0 -0
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# Research Topics
|
|
2
|
-
|
|
3
|
-
Speculative, exploratory directions for mlx-bun — theses worth prototyping, not
|
|
4
|
-
committed work. Each entry carries enough detail to pick up cold. PLAN.md is for
|
|
5
|
-
work in flight; this is for ideas waiting their turn.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. Tonal Grading for Token Distributions ("HDR Sampling")
|
|
10
|
-
|
|
11
|
-
> Replace the global scalar sampling knobs (temperature, top-k, top-p) with a
|
|
12
|
-
> region-aware **transfer function** applied to logits before softmax — the
|
|
13
|
-
> color-grading move, ported to token distributions.
|
|
14
|
-
|
|
15
|
-
**Framing — the Wes Anderson point.** A film's symmetrical pastel look isn't a
|
|
16
|
-
colorist failing to neutralize; it's a *target*. Grade Marvel that way and it's
|
|
17
|
-
"wrong" only against Marvel's acceptance function, not against any absolute.
|
|
18
|
-
Different films, different targets — and you have a lot of films. The
|
|
19
|
-
Lucien-synthesis agent and the test-writing agent want different *looks*, and
|
|
20
|
-
"temperature + a system-prompt vibe word" is the crude contrast slider standing
|
|
21
|
-
in for a real grade.
|
|
22
|
-
|
|
23
|
-
**Core thesis.** Current LLM sampling is "SDR": the available controls
|
|
24
|
-
(temperature, top-k, top-p) are crude *global* knobs — the equivalent of a single
|
|
25
|
-
contrast slider. Color grading abandoned "just turn the contrast knob" long ago
|
|
26
|
-
in favor of transfer functions with region-specific behavior. The same move is
|
|
27
|
-
available for sampling: replace global scalar knobs with a region-aware transfer
|
|
28
|
-
function applied to the logits before softmax.
|
|
29
|
-
|
|
30
|
-
**The reframe that makes it work.** Signal vs. noise is defined by *intent*, not
|
|
31
|
-
by magnitude — exactly as on a camera sensor, where the noise floor is "noise"
|
|
32
|
-
because it doesn't represent what's wanted, not because it's small. The full
|
|
33
|
-
logit vector is the model's signal, but it is not the signal *I* care about. My
|
|
34
|
-
acceptance criterion defines which part is signal. The low-logit tail is
|
|
35
|
-
therefore legitimately treatable as a noise floor to roll off.
|
|
36
|
-
|
|
37
|
-
**The three regions** — one curve, three treatments. This is precisely what
|
|
38
|
-
temperature *cannot* do, since it scales everywhere uniformly:
|
|
39
|
-
|
|
40
|
-
- **Shoulder** (head / confident tokens): soft rolloff instead of hard
|
|
41
|
-
truncation. Top-k/top-p slam into the ceiling and clip; a shoulder eases the
|
|
42
|
-
top tokens toward co-equality while *preserving their ordering* — it tames
|
|
43
|
-
single-token dominance without destroying the relationships among the spared
|
|
44
|
-
tokens.
|
|
45
|
-
- **Midtones** (the plausible-but-distinct band): steepen for local contrast.
|
|
46
|
-
Push apart the tokens that matter so detail comes out sharp. This has no name
|
|
47
|
-
in current sampling because sampling has no concept of distributional
|
|
48
|
-
midtones — and it's the most novel piece.
|
|
49
|
-
- **Toe** (tail / unwanted tokens): roll into the floor. Defines them as noise
|
|
50
|
-
relative to intent.
|
|
51
|
-
|
|
52
|
-
**Curve vocabulary, ported from grading:**
|
|
53
|
-
|
|
54
|
-
- **Pivot/cut** placed *relative* to the distribution (by rank or percentile),
|
|
55
|
-
recomputed every step — never an absolute logit value, because logits are only
|
|
56
|
-
meaningful up to an additive constant (softmax shift-invariance). HLG's
|
|
57
|
-
relative / scene-referred design is the right philosophical match; LogC3 is
|
|
58
|
-
more absolute / exposure-locked.
|
|
59
|
-
- **Slope-matched splices** between regions (C1 continuity — no kink in how
|
|
60
|
-
adjacent-ranked tokens get treated).
|
|
61
|
-
- **Curve family:** signed / `log1p`-style forms to stay finite on negative
|
|
62
|
-
logits. An HLG-style architecture (gamma toe + log shoulder, slope-matched) is
|
|
63
|
-
the leading candidate because its two-regime structure happens to match the
|
|
64
|
-
two-regime structure of a real logit distribution — temperature-style shaping
|
|
65
|
-
on the uncertain tail, log-style compression on the overconfident head.
|
|
66
|
-
|
|
67
|
-
**Why it's not overclaiming.** I am *not* claiming buried capability that a curve
|
|
68
|
-
"unclips" — the logits aren't a compressed encoding of something richer. The
|
|
69
|
-
honest claim: there is an acceptable manifold the model can't articulate and the
|
|
70
|
-
default transform doesn't reliably land on; the curve encodes my
|
|
71
|
-
*observer-relative acceptance function* onto a distribution that has no opinion
|
|
72
|
-
of its own. This is why sampling knobs exist at all — "friendly / neutral /
|
|
73
|
-
professional" are crude gestures at exactly this, and a grade is the
|
|
74
|
-
high-resolution version.
|
|
75
|
-
|
|
76
|
-
**The per-agent-target insight (the payoff).** "Correctly transformed to display"
|
|
77
|
-
is not universally acceptable — it's unacceptable for an Oscar-buzz feature and
|
|
78
|
-
fine for a sports broadcast, because they have different acceptance functions.
|
|
79
|
-
Grading Marvel like Wes Anderson isn't incompetence; it's the wrong *target*. My
|
|
80
|
-
agents are different films:
|
|
81
|
-
|
|
82
|
-
- A **conversation→article synthesis** agent wants range, texture, and
|
|
83
|
-
surprising-but-apt word choices — "cinematic."
|
|
84
|
-
- An **acceptance-criteria→tests** agent wants tight, predictable, low-variance
|
|
85
|
-
determinism — "broadcast neutral."
|
|
86
|
-
|
|
87
|
-
They want different *grades*, not different *temperatures*. Per-task tonal
|
|
88
|
-
curves, not per-task scalar knobs.
|
|
89
|
-
|
|
90
|
-
**Open engineering question — build this first.** The colorist works in a tight
|
|
91
|
-
perceptual loop against a calibrated reference monitor; a sampler's curve is
|
|
92
|
-
chosen *upstream* of seeing output, with a slower, noisier judgment loop. So the
|
|
93
|
-
gating question isn't "is the curve good" — it's **"what is the monitor?"** What
|
|
94
|
-
readout tells me the midtones got crisper and the highlights rolled off well, per
|
|
95
|
-
target? Candidates: held-out preference, diversity-at-fixed-quality, task-specific
|
|
96
|
-
pass rates (for the test agent) vs. human preference (for the synthesis agent).
|
|
97
|
-
Define the per-target reference monitor first; the curve design follows from it
|
|
98
|
-
the way a grade follows from a trustworthy display.
|
|
99
|
-
|
|
100
|
-
**Implementation.** A pure elementwise function on the logits tensor inside
|
|
101
|
-
mlx-bun's per-step logits-processor hook: sort once for the rank-relative pivot,
|
|
102
|
-
apply the slope-matched toe/mid/shoulder curve, renormalize, sample. The hook
|
|
103
|
-
already exists — logits processors run at
|
|
104
|
-
[`generate.ts:236`](../../src/generate.ts:236)
|
|
105
|
-
(`for (const p of processors) logits = disposing(logits, p(history, logits))`),
|
|
106
|
-
built by `makeLogitsProcessors` in [`src/sampler.ts`](../../src/sampler.ts) as pure
|
|
107
|
-
`(history, logits) => logits` functions applied before `toLogprobs` and the
|
|
108
|
-
sampler — so the curve drops in as one more processor in that loop.
|
|
109
|
-
|
|
110
|
-
Given dispatch dominates decode wall time (~90–96%), the curve's arithmetic cost
|
|
111
|
-
rides inside work already dispatched — wall-time-negligible. Parameterize: pivot
|
|
112
|
-
rank, toe exponent, midtone slope, shoulder compression. A/B against plain
|
|
113
|
-
temperature **at matched effective entropy**, judged on the per-target monitor —
|
|
114
|
-
looking for outputs that land in the target region *unreachably* by
|
|
115
|
-
temperature-plus-top-p at any setting, not merely "different."
|
|
116
|
-
|
|
117
|
-
*Relation to current code:* the `--temperature` / `--top-p` / `--top-k` server
|
|
118
|
-
defaults (and `generation_config.json`) are the SDR knobs this topic proposes to
|
|
119
|
-
supersede — useful as the A/B baseline, not the destination.
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# mlx-bun v0.4.0
|
|
2
|
-
|
|
3
|
-
This release brings shared batched decode, generated-history cache reuse and
|
|
4
|
-
resumable generation together through separate scheduling, inference, sampling
|
|
5
|
-
and persistence interfaces.
|
|
6
|
-
|
|
7
|
-
- Shared ordinary and speculative execution supports Qwen MTP, prompt lookup,
|
|
8
|
-
standalone, assistant, DeepSpec and DSpark/DFlash providers on qualified
|
|
9
|
-
model/request combinations. Single requests run at B=1 through the scheduler.
|
|
10
|
-
- Full and rotating affine/TurboQuant cache layouts compose with delayed and
|
|
11
|
-
per-layer precision, speculative rollback and generated target/draft state.
|
|
12
|
-
- Completed decode populates the shared RAM/SSD cache so later turns can reuse
|
|
13
|
-
generated history. SSD persistence is queued and runs during idle ownership.
|
|
14
|
-
- Ordinary interrupted-generation resume now works through shared execution,
|
|
15
|
-
including compatible adapters and quantized caches. Restored sampler history,
|
|
16
|
-
pending tokens and usage accounting preserve the continuation contract.
|
|
17
|
-
- Ordinary paged storage and adapter-qualified prompt lookup use the same state
|
|
18
|
-
and execution interfaces. GLM native MTP gains shared cache transactions and
|
|
19
|
-
row state; final real-artifact testing remains deferred.
|
|
20
|
-
- Measured Trellis v13 is selected by default, and eligible Qwen KV4 speculation
|
|
21
|
-
is enabled. Workload-dependent lookup and other experimental settings remain
|
|
22
|
-
opt-in. Memory fit estimates are advisory unless users choose explicit limits.
|
|
23
|
-
- Benchmark reporting retains request/source identities, paired comparisons,
|
|
24
|
-
failures and configuration differences. CI and the release build use Bun 1.4.2.
|
|
25
|
-
|
|
26
|
-
Serving keeps its existing `--batch 8` default. A lone eligible request starts
|
|
27
|
-
immediately at B=1; the cap does not wait for eight requests. `--batch 1` retains
|
|
28
|
-
the serial executor, and unsupported compositions can still use it. Removing
|
|
29
|
-
serial and completing every feature combination are follow-up work.
|
|
30
|
-
|
|
31
|
-
Checkpoint capture is eventually persistent: queued snapshots can remain in RAM
|
|
32
|
-
during uninterrupted traffic. A successful explicit flush is the durability
|
|
33
|
-
boundary. Media, fill/grammar-jump and direct paged-attention work remain tracked.
|
|
34
|
-
No DSpark/DFlash checkpoint has been trained for this campaign; execution fixtures
|
|
35
|
-
do not establish trained-drafter performance.
|
|
36
|
-
|
|
37
|
-
Measured performance and its workload limits are in the
|
|
38
|
-
[benchmark record](https://github.com/joshuarossi/mlx-bun/blob/v0.4.0/docs/reference/benchmarks.md).
|
|
39
|
-
This release does not claim a matched full-task Kanban speedup or completion of
|
|
40
|
-
the entire optimization program. Supported settings are documented in the
|
|
41
|
-
[server configuration reference](https://github.com/joshuarossi/mlx-bun/blob/v0.4.0/docs/reference/server-config.md).
|
|
42
|
-
|
|
43
|
-
Requires Apple Silicon and macOS 14 or later. npm installs require Bun 1.4.0 or
|
|
44
|
-
later; Bun 1.4.2 is the tested version. The existing native runtime pack 0.4.0
|
|
45
|
-
provides MLX 0.32.2 and its matching C API.
|
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
# mlx-bun video series
|
|
2
|
-
|
|
3
|
-
## Episode 1: local AI on a Mac without the setup ritual
|
|
4
|
-
|
|
5
|
-
### Production brief
|
|
6
|
-
|
|
7
|
-
- **Working title:** Running a 27B Model Locally on a Mac, Without Python
|
|
8
|
-
- **Thumbnail text:** 27B. LOCAL. NO PYTHON.
|
|
9
|
-
- **Target length:** 8 minutes
|
|
10
|
-
- **Audience:** developers who know what local models are but have not used MLX
|
|
11
|
-
- **Machine:** whichever machine is used for the final recorded benchmark; show
|
|
12
|
-
its chip and memory alongside the results
|
|
13
|
-
- **Demo model:** `mlx-community/Qwen3.8-27B-OptiQ-4bit`, already downloaded
|
|
14
|
-
- **Presentation:** calm, direct, mostly terminal and browser capture with short
|
|
15
|
-
pieces to camera
|
|
16
|
-
- **Question the episode answers:** Can local AI on a Mac feel like installed
|
|
17
|
-
software instead of an ML engineering project?
|
|
18
|
-
|
|
19
|
-
This episode proves the product before explaining the implementation. It does
|
|
20
|
-
not tour every feature. Memory, training, model ports, Bun FFI, and the failed
|
|
21
|
-
experiments belong in later episodes.
|
|
22
|
-
|
|
23
|
-
### Recording setup
|
|
24
|
-
|
|
25
|
-
Prepare two terminal profiles:
|
|
26
|
-
|
|
27
|
-
1. A clean profile for the installation shot. Do not begin the model download
|
|
28
|
-
during the take unless the download duration is known and useful on camera.
|
|
29
|
-
2. The normal development profile with Qwen3.8-27B already downloaded. Use
|
|
30
|
-
this for the live server and API demonstrations.
|
|
31
|
-
|
|
32
|
-
Before recording, confirm the exact model selector accepted on the machine:
|
|
33
|
-
|
|
34
|
-
```sh
|
|
35
|
-
mlx-bun ls
|
|
36
|
-
mlx-bun fit Qwen3.8-27B --ctx 8192
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Start the demo server shortly before the live take if model loading or browser
|
|
40
|
-
placement would interrupt the opening. The visible command should still be the
|
|
41
|
-
real command:
|
|
42
|
-
|
|
43
|
-
```sh
|
|
44
|
-
mlx-bun serve Qwen3.8-27B
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Use a fresh chat and disable notifications. Set the terminal to at least 18 pt.
|
|
48
|
-
Keep the browser and terminal at the same zoom level throughout.
|
|
49
|
-
|
|
50
|
-
### Shot-by-shot script
|
|
51
|
-
|
|
52
|
-
#### 0:00 to 0:12, cold open
|
|
53
|
-
|
|
54
|
-
**Picture**
|
|
55
|
-
|
|
56
|
-
Close shot of an empty terminal. Type `mlx-bun serve Qwen3.8-27B`. Cut directly
|
|
57
|
-
to the browser as the chat opens. Ask a short question whose answer starts
|
|
58
|
-
quickly.
|
|
59
|
-
|
|
60
|
-
Suggested prompt:
|
|
61
|
-
|
|
62
|
-
> Why can a 27-billion-parameter model fit on this 32 GB Mac? Answer in three
|
|
63
|
-
> sentences and show the memory arithmetic.
|
|
64
|
-
|
|
65
|
-
Do not wait for the full answer. Once several words appear, cut to camera.
|
|
66
|
-
|
|
67
|
-
**Voiceover**
|
|
68
|
-
|
|
69
|
-
> That is a 27-billion-parameter Qwen model running locally on a Mac. There is no
|
|
70
|
-
> Python server behind it, no API key, and no request leaving the machine. One
|
|
71
|
-
> command started the model, the chat interface, and an API that existing tools
|
|
72
|
-
> can use. This is mlx-bun.
|
|
73
|
-
|
|
74
|
-
**On-screen text**
|
|
75
|
-
|
|
76
|
-
```text
|
|
77
|
-
<machine> · Qwen3.8-27B · 20.4 GB weights
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
#### 0:12 to 0:35, state the problem
|
|
81
|
-
|
|
82
|
-
**Picture**
|
|
83
|
-
|
|
84
|
-
Piece to camera. Brief cuts to a deliberately restrained list of familiar setup
|
|
85
|
-
artifacts: a Python environment, package installation, a server command, and a
|
|
86
|
-
model configuration file. Do not use fake error messages.
|
|
87
|
-
|
|
88
|
-
**Dialogue**
|
|
89
|
-
|
|
90
|
-
> Local AI already works on a Mac. The rough part is everything around the
|
|
91
|
-
> model. You choose a model that might fit, assemble a Python environment,
|
|
92
|
-
> start a server, and then configure the application that was supposed to use
|
|
93
|
-
> it.
|
|
94
|
-
>
|
|
95
|
-
> I wanted the default path to feel like installing software. Run one command,
|
|
96
|
-
> get a useful local assistant, and keep the controls available when you
|
|
97
|
-
> actually need them.
|
|
98
|
-
|
|
99
|
-
#### 0:35 to 1:10, show the real first-run path
|
|
100
|
-
|
|
101
|
-
**Picture**
|
|
102
|
-
|
|
103
|
-
Show the installation command in the clean terminal. Use a pre-recorded,
|
|
104
|
-
time-compressed capture of the first run beside it. Label the time compression.
|
|
105
|
-
|
|
106
|
-
```sh
|
|
107
|
-
curl -fsSL https://mlx-bun.dev/install.sh | sh
|
|
108
|
-
mlx-bun
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Show the starter model becoming ready. Then cut to the explicit Qwen download
|
|
112
|
-
command used before the main recording:
|
|
113
|
-
|
|
114
|
-
```sh
|
|
115
|
-
mlx-bun get mlx-community/Qwen3.8-27B-OptiQ-4bit
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
**Voiceover**
|
|
119
|
-
|
|
120
|
-
> The installer downloads a signed, notarized executable. On a fresh machine,
|
|
121
|
-
> bare `mlx-bun` downloads a sub-gigabyte MiniCPM5 starter so the first chat can
|
|
122
|
-
> begin quickly.
|
|
123
|
-
>
|
|
124
|
-
> This episode is about a much larger model, Qwen3.8-27B. Its quantized weights
|
|
125
|
-
> are 20.4 gigabytes, so I downloaded them before recording. I do not think
|
|
126
|
-
> watching a twenty-gigabyte progress bar would improve the video.
|
|
127
|
-
|
|
128
|
-
**Verification note**
|
|
129
|
-
|
|
130
|
-
Capture this section again if first-run behavior changes. Do not narrate the
|
|
131
|
-
device-aware model selection described in the product roadmap until that lookup
|
|
132
|
-
is implemented.
|
|
133
|
-
|
|
134
|
-
#### 1:10 to 1:55, one process with three ways in
|
|
135
|
-
|
|
136
|
-
**Picture**
|
|
137
|
-
|
|
138
|
-
Use a simple screen composition with the running `mlx-bun` process in the
|
|
139
|
-
center. Reveal the chat UI, an HTTP request, and a TypeScript file around it.
|
|
140
|
-
|
|
141
|
-
```text
|
|
142
|
-
Chat UI
|
|
143
|
-
\
|
|
144
|
-
mlx-bun + MLX + Metal
|
|
145
|
-
/ \
|
|
146
|
-
OpenAI-compatible API TypeScript library
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**Dialogue**
|
|
150
|
-
|
|
151
|
-
> The visible chat is only one way into the runtime. The same process exposes an
|
|
152
|
-
> OpenAI-compatible API, so applications that already speak that protocol can
|
|
153
|
-
> point at localhost. A Bun application can also call the generation library
|
|
154
|
-
> directly without running a sidecar server.
|
|
155
|
-
>
|
|
156
|
-
> Those are different entry points into the same native runtime. The model
|
|
157
|
-
> weights stay on the Mac, and MLX runs the computation through Metal on the
|
|
158
|
-
> Apple Silicon GPU.
|
|
159
|
-
|
|
160
|
-
#### 1:55 to 2:35, prove the API claim
|
|
161
|
-
|
|
162
|
-
**Picture**
|
|
163
|
-
|
|
164
|
-
Keep the server log visible on the left. Run this request on the right:
|
|
165
|
-
|
|
166
|
-
```sh
|
|
167
|
-
curl http://localhost:8080/v1/chat/completions \
|
|
168
|
-
-H 'Content-Type: application/json' \
|
|
169
|
-
-d '{
|
|
170
|
-
"messages": [{
|
|
171
|
-
"role": "user",
|
|
172
|
-
"content": "Name two reasons unified memory helps local inference."
|
|
173
|
-
}],
|
|
174
|
-
"max_tokens": 96,
|
|
175
|
-
"temperature": 0
|
|
176
|
-
}'
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
Format or crop the JSON response so the answer and usage fields remain legible.
|
|
180
|
-
|
|
181
|
-
**Voiceover**
|
|
182
|
-
|
|
183
|
-
> This is a normal chat-completions request. Change an OpenAI client base URL to
|
|
184
|
-
> `localhost:8080`, and the request goes to the model loaded by mlx-bun. There
|
|
185
|
-
> is no translation service on the internet and no account involved.
|
|
186
|
-
|
|
187
|
-
Do not say every OpenAI feature is implemented. The claim is protocol
|
|
188
|
-
compatibility for the documented API, not the entirety of OpenAI's platform.
|
|
189
|
-
|
|
190
|
-
#### 2:35 to 3:25, explain why Bun matters
|
|
191
|
-
|
|
192
|
-
**Picture**
|
|
193
|
-
|
|
194
|
-
Piece to camera, followed by a clean runtime diagram. Avoid scrolling through
|
|
195
|
-
large source files here.
|
|
196
|
-
|
|
197
|
-
```text
|
|
198
|
-
TypeScript application
|
|
199
|
-
↓
|
|
200
|
-
Bun
|
|
201
|
-
↓
|
|
202
|
-
mlx-bun native bindings
|
|
203
|
-
↓
|
|
204
|
-
MLX
|
|
205
|
-
↓
|
|
206
|
-
Apple Silicon GPU
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
**Dialogue**
|
|
210
|
-
|
|
211
|
-
> Most MLX applications are written in Python. mlx-bun calls MLX's native C API
|
|
212
|
-
> from Bun instead.
|
|
213
|
-
>
|
|
214
|
-
> It loads safetensors weights, builds the model graph, manages the attention
|
|
215
|
-
> cache, samples tokens, and serves requests from TypeScript. It does not start
|
|
216
|
-
> Python in the background.
|
|
217
|
-
>
|
|
218
|
-
> That does not make GPU matrix multiplication faster because it passed through
|
|
219
|
-
> JavaScript. The GPU still sets that limit. It does make the application easier
|
|
220
|
-
> to distribute, and it gives the server less work to do around each model step.
|
|
221
|
-
|
|
222
|
-
#### 3:25 to 4:15, show the finite-matrix idea
|
|
223
|
-
|
|
224
|
-
**Picture**
|
|
225
|
-
|
|
226
|
-
Run the fit command. Hold on the result long enough to read memory use, safe
|
|
227
|
-
context, and predicted speed. Use the exact live output rather than rebuilding
|
|
228
|
-
it for the edit.
|
|
229
|
-
|
|
230
|
-
```sh
|
|
231
|
-
mlx-bun fit Qwen3.8-27B --ctx 8192
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
**Dialogue**
|
|
235
|
-
|
|
236
|
-
> The project makes one opinionated bet. Local AI on a Mac is a finite problem.
|
|
237
|
-
> Apple ships a known set of chips and memory sizes. mlx-bun supports a curated
|
|
238
|
-
> set of model families. We can measure those combinations instead of asking
|
|
239
|
-
> every user to become a model-serving specialist.
|
|
240
|
-
>
|
|
241
|
-
> The `fit` command estimates whether a model and context length are safe before
|
|
242
|
-
> loading the weights. The default path can be simple because the measurements
|
|
243
|
-
> and the failure checks live underneath it.
|
|
244
|
-
|
|
245
|
-
Do not claim that automatic device-specific recommendation is complete. Today,
|
|
246
|
-
the fit contract is the concrete proof of this idea.
|
|
247
|
-
|
|
248
|
-
#### 4:15 to 5:20, correctness before speed
|
|
249
|
-
|
|
250
|
-
**Picture**
|
|
251
|
-
|
|
252
|
-
Show a two-column comparison titled `Python oracle` and `mlx-bun`. Animate two
|
|
253
|
-
small arrays of identical hexadecimal or decimal values. Follow with a quick
|
|
254
|
-
shot of a parity test name from the repository.
|
|
255
|
-
|
|
256
|
-
```text
|
|
257
|
-
same model + same input
|
|
258
|
-
|
|
259
|
-
mlx-lm logits = mlx-bun logits
|
|
260
|
-
bit-exact
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
**Dialogue**
|
|
264
|
-
|
|
265
|
-
> Reimplementing a model runtime creates a nasty testing problem. Wrong models
|
|
266
|
-
> still write convincing sentences.
|
|
267
|
-
>
|
|
268
|
-
> So I do not use "the answer looked reasonable" as the correctness test. For
|
|
269
|
-
> the compatibility path, the Python MLX implementation is the oracle. The same
|
|
270
|
-
> weights and inputs go through both runtimes, and the tests compare the logits
|
|
271
|
-
> before a token is selected.
|
|
272
|
-
>
|
|
273
|
-
> On the validated paths, those logits match bit for bit. That catches errors in
|
|
274
|
-
> attention masks, normalization, position encoding, cache updates, and model
|
|
275
|
-
> loading that a chat demo can easily hide.
|
|
276
|
-
>
|
|
277
|
-
> Compatibility work has a strict order here. Match the reference first. Then
|
|
278
|
-
> measure any optimization against that baseline.
|
|
279
|
-
|
|
280
|
-
#### 5:20 to 6:20, measured performance
|
|
281
|
-
|
|
282
|
-
**Picture**
|
|
283
|
-
|
|
284
|
-
Display one benchmark card. Do not show the entire results table.
|
|
285
|
-
|
|
286
|
-
```text
|
|
287
|
-
Qwen3.8-27B · <machine> · warm HTTP serving
|
|
288
|
-
Preflight-gated run · 2026-08-22 · Bun 1.4.0
|
|
289
|
-
|
|
290
|
-
short decode decode at 15.8k warm TTFT aggregate ×4
|
|
291
|
-
mlx-bun 18.6 tok/s 17.0 tok/s 116 ms 19.5 tok/s
|
|
292
|
-
mlx-lm 16.5 tok/s 14.8 tok/s 284 ms 18.6 tok/s
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
Add a small source line: `docs/reference/benchmarks.md`.
|
|
296
|
-
|
|
297
|
-
**Dialogue**
|
|
298
|
-
|
|
299
|
-
> Here is a measured comparison on this Mac. Same Qwen model snapshot, same
|
|
300
|
-
> machine state, warm HTTP serving.
|
|
301
|
-
>
|
|
302
|
-
> On the short request, mlx-bun generated 18.6 tokens per second. mlx-lm
|
|
303
|
-
> generated 16.5. At about 15,800 tokens of context, the result was 17.0 versus
|
|
304
|
-
> 14.8. Warm time to first token was 116 milliseconds for mlx-bun and 284 for
|
|
305
|
-
> mlx-lm.
|
|
306
|
-
>
|
|
307
|
-
> This is the kind of comparison I care about. It uses the server path an
|
|
308
|
-
> application actually hits, the same weights, and a machine that passed the
|
|
309
|
-
> benchmark preflight. The GPU sets the speed limit, but the runtime still has
|
|
310
|
-
> to reach that limit without wasting memory or time around each token.
|
|
311
|
-
|
|
312
|
-
**Editorial note**
|
|
313
|
-
|
|
314
|
-
These are controlled same-machine results. Put the run date and Bun version on screen.
|
|
315
|
-
If a fresh cleared-machine benchmark is available before publication, replace
|
|
316
|
-
the full card and narration together. Never mix live numbers with this table.
|
|
317
|
-
|
|
318
|
-
#### 6:20 to 7:05, show the larger project without losing focus
|
|
319
|
-
|
|
320
|
-
**Picture**
|
|
321
|
-
|
|
322
|
-
Use four quick clips, about three seconds each:
|
|
323
|
-
|
|
324
|
-
1. An image input in chat.
|
|
325
|
-
2. The Markdown memory directory.
|
|
326
|
-
3. A training progress display.
|
|
327
|
-
4. A benchmark or parity result from the lab.
|
|
328
|
-
|
|
329
|
-
Return to camera before naming more features.
|
|
330
|
-
|
|
331
|
-
**Dialogue**
|
|
332
|
-
|
|
333
|
-
> Serving is the base of the project, not its boundary. The same binary also has
|
|
334
|
-
> image and video input on supported Qwen models, a local Markdown memory, LoRA
|
|
335
|
-
> training, and a lab for decoding and quantization experiments.
|
|
336
|
-
>
|
|
337
|
-
> I am not going to explain those in a thirty-second feature list. Each one has
|
|
338
|
-
> an implementation story, measurements, and a few failures worth discussing.
|
|
339
|
-
> Those will be separate videos.
|
|
340
|
-
|
|
341
|
-
#### 7:05 to 7:50, close and set up episode 2
|
|
342
|
-
|
|
343
|
-
**Picture**
|
|
344
|
-
|
|
345
|
-
Return to the original chat. Show the local URL, server process, and activity
|
|
346
|
-
monitor GPU history in quick succession. End on the repository and site URLs.
|
|
347
|
-
|
|
348
|
-
**Dialogue**
|
|
349
|
-
|
|
350
|
-
> mlx-bun is my attempt to make local AI on Apple Silicon behave like software
|
|
351
|
-
> you can install, use, and build on.
|
|
352
|
-
>
|
|
353
|
-
> The short version is one command. Underneath it is a TypeScript model runtime,
|
|
354
|
-
> native bindings, model-family ports, memory accounting, and a lot of parity
|
|
355
|
-
> tests.
|
|
356
|
-
>
|
|
357
|
-
> In the next video, I am going to trace one generated token through that whole
|
|
358
|
-
> path, from the TypeScript call to MLX and the GPU, then back to the response.
|
|
359
|
-
> That is where the project gets strange.
|
|
360
|
-
|
|
361
|
-
**On-screen text**
|
|
362
|
-
|
|
363
|
-
```text
|
|
364
|
-
mlx-bun.dev
|
|
365
|
-
github.com/joshuarossi/mlx-bun
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
### Required captures
|
|
369
|
-
|
|
370
|
-
- Clean installer command.
|
|
371
|
-
- Time-compressed first run with MiniCPM5 becoming ready.
|
|
372
|
-
- The explicit Qwen3.8-27B download command or a short time-compressed capture.
|
|
373
|
-
- `mlx-bun serve Qwen3.8-27B` startup and automatic browser open.
|
|
374
|
-
- A short streamed chat response.
|
|
375
|
-
- A successful `/v1/chat/completions` curl request.
|
|
376
|
-
- Live `mlx-bun fit Qwen3.8-27B --ctx 8192` output.
|
|
377
|
-
- One real parity test or stored oracle comparison.
|
|
378
|
-
- Four brief clips for vision, memory, training, and benchmark evidence.
|
|
379
|
-
- Repository and website closing shot.
|
|
380
|
-
|
|
381
|
-
### Graphics to prepare
|
|
382
|
-
|
|
383
|
-
Only three graphics are needed:
|
|
384
|
-
|
|
385
|
-
1. The three-entry-point runtime diagram.
|
|
386
|
-
2. The bit-exact oracle comparison.
|
|
387
|
-
3. The dated Qwen3.8-27B benchmark card.
|
|
388
|
-
|
|
389
|
-
Keep them monochrome except for one mlx-bun accent color. Use the same terminal
|
|
390
|
-
font in the diagrams and screen recordings.
|
|
391
|
-
|
|
392
|
-
### Recording-day checks
|
|
393
|
-
|
|
394
|
-
- Confirm the current release installation command.
|
|
395
|
-
- Confirm the Qwen3.8-27B selector and exact displayed model name.
|
|
396
|
-
- Confirm port 8080 is unused before the take.
|
|
397
|
-
- Confirm no private paths, tokens, conversations, or model-cache usernames are
|
|
398
|
-
visible.
|
|
399
|
-
- Confirm first-run behavior still matches the narration.
|
|
400
|
-
- Confirm the API request and response fields against the current reference
|
|
401
|
-
docs.
|
|
402
|
-
- Confirm the benchmark card still matches `docs/reference/benchmarks.md`.
|
|
403
|
-
- Record room tone and five seconds of clean terminal footage for edits.
|
|
404
|
-
- Capture every important terminal action twice.
|
|
405
|
-
|
|
406
|
-
### Episode 2 handoff
|
|
407
|
-
|
|
408
|
-
The promised follow-up is: **What happens when mlx-bun generates one token?**
|
|
409
|
-
|
|
410
|
-
Trace this path without turning the episode into a source-tree tour:
|
|
411
|
-
|
|
412
|
-
```text
|
|
413
|
-
request
|
|
414
|
-
→ tokenizer
|
|
415
|
-
→ model forward pass
|
|
416
|
-
→ MLX lazy graph evaluation
|
|
417
|
-
→ Metal execution
|
|
418
|
-
→ GPU sampling
|
|
419
|
-
→ one token returned to Bun
|
|
420
|
-
→ streamed protocol event
|
|
421
|
-
```
|