mlx-bun 0.0.13 → 0.3.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 -578
- package/bin/mlx-bun.mjs +1 -1
- package/docs/README.md +91 -0
- package/docs/{design → archive}/hlg-sampling.md +3 -3
- package/docs/{design → archive/investigations}/audio-input-plan.md +4 -4
- package/docs/{design → archive/investigations}/colibri-glm52-port.md +1 -1
- package/docs/{design → archive/investigations}/diffusion-gemma-port.md +3 -3
- package/docs/{design → archive/investigations}/faithful-l1-consolidation.md +4 -4
- package/docs/{investigations → archive/investigations}/hlg-sampling-investigation.md +1 -1
- package/docs/{design → archive/investigations}/minicpm5-decode-megakernel.md +11 -11
- package/docs/{design → archive/investigations}/optimization_plan.md +1 -1
- package/docs/archive/investigations/pareto-specialized-runtime-findings.md +92 -0
- package/docs/{design → archive/investigations}/pre-colibri-stabilization.md +5 -5
- package/docs/{design → archive/investigations}/the-dreaming-handoff.md +2 -2
- package/docs/{planning → archive/planning}/chat-ui-vision.md +1 -1
- package/docs/{planning → archive/planning}/chunk-task-roadmap.md +1 -1
- package/docs/{planning → archive/planning}/curve-sampler-research-plan.md +4 -4
- package/docs/{planning → archive/planning}/memory-docs-and-dag-plan.md +1 -1
- package/docs/{planning → archive/planning}/release-notes-v0.0.9.md +1 -1
- package/docs/archive/planning/release-notes-v0.2.0.md +49 -0
- package/docs/{planning → archive/planning}/website-readme-pass-plan.md +1 -1
- package/docs/design/batching.md +569 -0
- package/docs/design/decode-speed-program.md +3178 -169
- package/docs/design/dreaming-nightly-pipeline.md +675 -282
- package/docs/design/generic-model-support.md +579 -334
- package/docs/design/kv-cache.md +680 -0
- package/docs/design/orpo-training.md +673 -1239
- package/docs/design/speculative-decoding.md +1627 -0
- package/docs/design/turboquant.md +2102 -0
- package/docs/design/unified-engine-frontier-plan.md +1831 -727
- package/docs/design/web-chat-redesign.md +666 -1083
- package/docs/planning/PRODUCT_ROADMAP.md +34 -1
- package/docs/planning/release-notes-v0.3.0.md +35 -0
- package/docs/planning/video-series.md +421 -0
- package/docs/reference/benchmarks.md +1162 -0
- package/docs/reference/cli.md +395 -149
- package/docs/reference/distribution.md +321 -181
- package/docs/reference/environment.md +348 -0
- package/docs/reference/glossary.md +39 -0
- package/docs/reference/library-api.md +580 -142
- package/docs/reference/memory.md +227 -64
- package/docs/reference/models.md +137 -6
- package/docs/reference/server-api.md +938 -422
- package/docs/reference/server-config.md +652 -320
- package/docs/reference/training.md +393 -254
- package/docs/reference/troubleshooting.md +166 -0
- package/package.json +10 -5
- package/src/admission-plan.ts +18 -0
- package/src/anthropic.ts +92 -3
- package/src/audio/decode.ts +2 -2
- package/src/audio/features.ts +2 -2
- package/src/backends/mlx/autoregressive.ts +108 -0
- package/src/backends/mlx/batch-group.ts +1646 -0
- package/src/backends/mlx/diffusion.ts +39 -0
- package/src/backends/mlx/draft-target.ts +47 -0
- package/src/backends/mlx/evaluation.ts +105 -0
- package/src/backends/mlx/fill-append.ts +45 -0
- package/src/backends/mlx/gateway-binding.ts +71 -0
- package/src/backends/mlx/graph.ts +38 -0
- package/src/backends/mlx/memory-client.ts +189 -0
- package/src/backends/mlx/memory-guard.ts +40 -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.ts +33 -0
- package/src/backends/mlx/request-policy.ts +20 -0
- package/src/backends/mlx/rollback.ts +51 -0
- package/src/backends/mlx/serial-executor.ts +273 -0
- package/src/backends/mlx/speculative.ts +114 -0
- package/src/backends/mlx/state-views.ts +26 -0
- package/src/backends/mlx/text-engine.ts +73 -0
- package/src/cli.ts +189 -61
- package/src/client.ts +66 -0
- package/src/config.ts +21 -4
- package/src/contracts/completion.ts +16 -0
- package/src/contracts/execution.ts +49 -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/resources.ts +18 -0
- package/src/contracts/scheduling.ts +27 -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 +51 -0
- package/src/engine/resources.ts +42 -0
- package/src/engine/scheduler.ts +67 -0
- package/src/engine/session.ts +247 -0
- package/src/eval/README.md +44 -1
- package/src/eval/kl.ts +263 -23
- package/src/eval/reference-logits.ts +207 -0
- package/src/eval/runner.ts +10 -79
- package/src/eval/tasks/bfcl.ts +2 -1
- package/src/eval/tasks/gsm8k.ts +2 -1
- package/src/eval/tasks/hashhop.ts +2 -1
- package/src/eval/tasks/humaneval.ts +5 -4
- package/src/eval/tasks/ifeval.ts +2 -1
- package/src/eval/tasks/mmlu.ts +2 -1
- package/src/expert-io.ts +3 -1
- package/src/expert-offload.ts +3 -1
- 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 +24 -43
- package/src/generate.ts +740 -337
- package/src/grammar.ts +14 -8
- package/src/harness-pi.ts +15 -34
- package/src/hub-rest.ts +4 -4
- package/src/index.ts +27 -0
- package/src/inference/denoising.ts +17 -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 +15 -14
- 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 +199 -0
- package/src/kv-store.ts +459 -234
- 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} +7 -5
- package/src/{model → lab/paged-kv}/paged-kv.ts +9 -6
- package/src/library.ts +40 -0
- package/src/lora.ts +18 -0
- package/src/media-fetch.ts +20 -4
- package/src/memory/article.ts +1 -1
- package/src/memory/chunk.ts +1 -1
- package/src/memory/model.ts +32 -170
- 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 +3 -4
- package/src/mlx/array.ts +9 -10
- package/src/mlx/compile.ts +12 -2
- package/src/mlx/ffi.ts +66 -22
- package/src/mlx/materialize.ts +23 -0
- package/src/mlx/metal-kernel.ts +10 -11
- package/src/mlx/ops.ts +64 -19
- 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/batched-mask.ts +9 -3
- package/src/model/batched-quant.ts +2 -2
- package/src/model/batched-rotating-quant.ts +45 -99
- package/src/model/batched-rotating-state.ts +73 -0
- package/src/model/batched-rotating.ts +57 -106
- package/src/model/batched-row-storage.ts +127 -0
- package/src/model/compiled-decode.ts +4 -3
- package/src/model/diffusion-gemma.ts +8 -8
- package/src/model/factory.ts +87 -49
- package/src/model/fingerprint.ts +1 -1
- package/src/model/flash-attention.ts +3 -3
- package/src/model/gemma4-base.ts +187 -17
- package/src/model/gemma4.ts +6 -6
- package/src/model/generated/gemma4-12b.ts +52 -148
- package/src/model/generated/gemma4-26b.ts +34 -94
- package/src/model/generated/gemma4-e4b.ts +28 -76
- package/src/model/glm52-cache.ts +19 -9
- package/src/model/glm52-dsa.ts +13 -9
- package/src/model/glm52-memory.ts +28 -1
- package/src/model/implementation.ts +69 -0
- package/src/model/minicpm5.ts +7 -8
- package/src/model/profile.ts +443 -0
- package/src/model/qwen-append.ts +12 -0
- package/src/model/qwen-conv.ts +52 -0
- package/src/model/qwen3-delta.ts +98 -2
- package/src/model/qwen3-mrope.ts +252 -0
- package/src/model/qwen3_5-checkpoint.ts +164 -0
- package/src/model/qwen3_5.ts +336 -60
- 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/universal/dense.ts +1 -1
- package/src/model/universal/modules.ts +8 -1
- package/src/native/frame_extract.swift +140 -0
- package/src/native-pack.ts +15 -7
- package/src/pi-provider.ts +6 -64
- package/src/pi-web.ts +14 -320
- package/src/prompt-cache.ts +97 -54
- package/src/quantize/allocator.ts +1 -1
- package/src/quantize/atomic-output.ts +38 -0
- package/src/quantize/calibration.ts +2 -1
- package/src/quantize/config-writer.ts +16 -3
- package/src/quantize/index.ts +28 -1
- package/src/quantize/job.ts +11 -0
- package/src/quantize/quantizer.ts +265 -100
- package/src/quantize/rotate.ts +603 -0
- package/src/quantize/safetensors-writer.ts +79 -1
- package/src/quantize/sensitivity.ts +41 -59
- package/src/quantize/trellis.ts +586 -0
- package/src/quantize/weight-transform.ts +292 -0
- package/src/responses.ts +130 -3
- package/src/runtime-config.ts +81 -0
- package/src/sampler.ts +276 -4
- package/src/serve/admin-routes.ts +184 -0
- package/src/serve/aux-routes.ts +132 -0
- package/src/serve/batch-scheduler.ts +8 -1558
- 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 +354 -0
- package/src/serve/completion-sink.ts +157 -0
- package/src/serve/discovery-routes.ts +204 -0
- package/src/serve/generation-gateway.ts +211 -243
- 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/kv-budget.ts +14 -0
- package/src/serve/lab-routes.ts +341 -0
- package/src/serve/lane-registry.ts +2 -1
- package/src/serve/model-admin-routes.ts +155 -0
- package/src/serve/model-binding.ts +43 -0
- package/src/serve/model-host.ts +512 -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/prompt-response-trace.ts +147 -0
- package/src/serve/request-plan.ts +162 -0
- package/src/serve/request-prep.ts +346 -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 +101 -0
- package/src/serve/text-completion-stage.ts +104 -0
- package/src/serve/token-streams.ts +519 -0
- package/src/server.ts +523 -3551
- package/src/spec/assistant-source.ts +10 -44
- package/src/spec/deepspec-source.ts +6 -6
- package/src/spec/dflash-source.ts +9 -8
- package/src/spec/dspark/ab-stats.ts +3 -3
- package/src/spec/dspark/calibration.ts +2 -2
- package/src/spec/dspark/deepspec-module.ts +2 -2
- 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 +5 -4
- 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-source.ts +9 -1
- package/src/spec/ngram-source.ts +1 -1
- package/src/spec/prefix-state.ts +45 -0
- package/src/spec/qwen-mtp-source.ts +528 -0
- package/src/spec/serve-loop.ts +179 -213
- package/src/spec/source.ts +42 -10
- package/src/spec/two-model.ts +1 -1
- package/src/ssd-cache.ts +95 -24
- package/src/ssd-durability.ts +207 -0
- package/src/tool-call.ts +51 -14
- package/src/train/flash-cce.ts +14 -13
- package/src/train/forward.ts +38 -1
- package/src/train/loss.ts +3 -2
- package/src/train/prefix-shared.ts +5 -1
- package/src/train/segmented.ts +9 -6
- package/src/train/trainer.ts +9 -8
- package/src/vision/preprocess.ts +1 -1
- package/src/vision/prompt.ts +48 -2
- package/src/vision/qwen3vl-preprocess.ts +409 -0
- package/src/vision/qwen3vl-prompt.ts +196 -0
- package/src/vision/qwen3vl-tower.ts +555 -0
- package/src/vision/video-frames.ts +148 -0
- package/src/web/app.html +1 -1
- package/src/web/app.js +15 -6
- package/src/web/src/adapters-panel.ts +3 -3
- package/src/web/src/assistant.ts +2 -36
- package/src/web/src/chat.ts +16 -9
- 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 +134 -33
- 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 -268
- 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-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 -189
- 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 -288
- 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/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/investigations/curve-runs/bisector-route.json +0 -98
- package/docs/investigations/curve-runs/bisector-trace.json +0 -1393
- package/docs/investigations/curve-runs/curve-terrain.json +0 -1179
- package/docs/investigations/curve-runs/curve-terrain.svg +0 -42
- package/docs/investigations/hlg-ab.html +0 -34
- package/docs/investigations/hlg-explorer.html +0 -238
- package/docs/investigations/hlg-figs/cliff.svg +0 -1
- package/docs/investigations/hlg-figs/cross.svg +0 -1
- package/docs/investigations/hlg-figs/edges.svg +0 -1
- package/docs/investigations/hlg-figs/k20-grids.svg +0 -1
- package/docs/investigations/hlg-figs/k20-peaks.svg +0 -1
- package/docs/investigations/hlg-figs/lw-curve.svg +0 -1
- package/docs/investigations/hlg-figs/terrain.svg +0 -1
- package/docs/investigations/hlg-report.html +0 -262
- package/docs/investigations/hlg-runs/hlg-ab.json +0 -149
- package/docs/investigations/hlg-runs/hlg-blind-prompts.md +0 -87
- package/docs/investigations/hlg-runs/hlg-blind.json +0 -107
- package/docs/investigations/hlg-runs/hlg-cliff.json +0 -197
- package/docs/investigations/hlg-runs/hlg-cross.json +0 -505
- package/docs/investigations/hlg-runs/hlg-edge.json +0 -388
- package/docs/investigations/hlg-runs/hlg-eval1.json +0 -25
- package/docs/investigations/hlg-runs/hlg-frontier.json +0 -86
- package/docs/investigations/hlg-runs/hlg-grid.json +0 -242
- package/docs/investigations/hlg-runs/hlg-grid2.json +0 -343
- package/docs/investigations/hlg-runs/hlg-lw-coarse.json +0 -110
- package/docs/investigations/hlg-runs/hlg-map.json +0 -383
- package/docs/investigations/hlg-runs/run0-original.log +0 -159
- package/docs/investigations/hlg-runs/runA-recommended.log +0 -131
- package/docs/investigations/hlg-runs/runAA-cliff-cpm5.log +0 -26
- package/docs/investigations/hlg-runs/runAB-grid2-e4b.log +0 -18
- package/docs/investigations/hlg-runs/runAC-peak-e4b-partial.log +0 -25
- package/docs/investigations/hlg-runs/runAD-ab-samples.log +0 -8
- package/docs/investigations/hlg-runs/runAE-edge-e4b.log +0 -51
- package/docs/investigations/hlg-runs/runAF-logit-calibration.log +0 -10
- package/docs/investigations/hlg-runs/runAG-eval-config2.log +0 -16
- package/docs/investigations/hlg-runs/runB-gain-variants.log +0 -192
- package/docs/investigations/hlg-runs/runC-pivots.log +0 -162
- package/docs/investigations/hlg-runs/runD-oetf.log +0 -132
- package/docs/investigations/hlg-runs/runE-eotf.log +0 -162
- package/docs/investigations/hlg-runs/runF-shaper-working.log +0 -86
- package/docs/investigations/hlg-runs/runG-shaper-sweep.log +0 -101
- package/docs/investigations/hlg-runs/runH-wsweep.log +0 -176
- package/docs/investigations/hlg-runs/runI-asweep.log +0 -176
- package/docs/investigations/hlg-runs/runJ-knobmap.log +0 -49
- package/docs/investigations/hlg-runs/runK-frontier.log +0 -19
- package/docs/investigations/hlg-runs/runL-widemap.log +0 -65
- package/docs/investigations/hlg-runs/runM-frontier-emb.log +0 -15
- package/docs/investigations/hlg-runs/runN-verify.log +0 -116
- package/docs/investigations/hlg-runs/runO-frontier-seed5000.log +0 -15
- package/docs/investigations/hlg-runs/runP-grid-AxSm.log +0 -15
- package/docs/investigations/hlg-runs/runQ-grid-tgW.log +0 -15
- package/docs/investigations/hlg-runs/runR-blind-transcript.log +0 -79
- package/docs/investigations/hlg-runs/runS-cross-coherence.log +0 -33
- package/docs/investigations/hlg-runs/runT-cross-cpm5.log +0 -33
- package/docs/investigations/hlg-runs/runU-cross-12b.log +0 -33
- package/docs/investigations/hlg-runs/runV-lw-e4b.log +0 -22
- package/docs/investigations/hlg-runs/runW-lw-12b.log +0 -22
- package/docs/investigations/hlg-runs/runX-lw-cpm5.log +0 -22
- package/docs/investigations/hlg-runs/runY-cliff-e4b.log +0 -26
- package/docs/investigations/hlg-runs/runZ-cliff-12b.log +0 -26
- package/docs/planning/IDEAS.md +0 -69
- package/docs/reference/embedding.md +0 -197
- package/docs/reference/features-matrix.md +0 -100
- package/docs/reference/orpo-quickstart.md +0 -135
- package/src/flags.ts +0 -13
- /package/docs/{investigations → archive/investigations}/chunk-finetune-experiment.md +0 -0
- /package/docs/{investigations → archive/investigations}/colibri-oracle-pin.md +0 -0
- /package/docs/{investigations → archive/investigations}/curve-bisector-routing.md +0 -0
- /package/docs/{investigations → archive/investigations}/decode-roofline-lookagain.md +0 -0
- /package/docs/{investigations → archive/investigations}/dspark-handoff.md +0 -0
- /package/docs/{investigations → archive/investigations}/expert-offload-single-user-moe.md +0 -0
- /package/docs/{investigations → archive/investigations}/indexshare-performance-spike.md +0 -0
- /package/docs/{investigations → archive/investigations}/kernel-perf-review-2026-07.md +0 -0
- /package/docs/{investigations → archive/investigations}/lab-build-journal.md +0 -0
- /package/docs/{investigations → archive/investigations}/openwiki-evaluation.md +0 -0
- /package/docs/{investigations → archive/investigations}/orpo-base-uf-experiment-and-directions.md +0 -0
- /package/docs/{investigations → archive/investigations}/orpo-flash-cce-pin-leak.md +0 -0
- /package/docs/{investigations → archive/investigations}/orpo-uf-testing-handoff.md +0 -0
- /package/docs/{investigations → archive/investigations}/pi-builtin-investigation.md +0 -0
- /package/docs/{investigations → archive/investigations}/segmented-backward-handoff.md +0 -0
- /package/docs/{investigations → archive/investigations}/starter-model-port-handoff.md +0 -0
- /package/docs/{investigations → archive/investigations}/steel-flash-cce-handoff.md +0 -0
- /package/docs/{investigations → archive/investigations}/trainer-validation-experiment.md +0 -0
- /package/docs/{planning → archive/planning}/chat-ui-vision-memory-first.md +0 -0
- /package/docs/{planning → archive/planning}/journal.md +0 -0
- /package/docs/{planning → archive/planning}/pi-integration-review.md +0 -0
- /package/docs/{planning → archive/planning}/release-notes-v0.0.10.md +0 -0
- /package/docs/{planning → archive/planning}/release-notes-v0.0.11.md +0 -0
- /package/docs/{planning → archive/planning}/release-notes-v0.0.12.md +0 -0
- /package/docs/{planning → archive/planning}/release-notes-v0.0.13.md +0 -0
- /package/docs/{planning → archive/planning}/web-ui-pass-plan.md +0 -0
- /package/{docs/investigations → src/serve/assets}/curve-terrain.html +0 -0
- /package/{docs/dag → src/serve/assets}/training-inference-map.html +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { MlxArray } from "../../mlx/array";
|
|
2
|
+
import * as ops from "../../mlx/ops";
|
|
3
|
+
import type { Cache } from "../../model/gemma4";
|
|
4
|
+
import type { RuntimeModel } from "../../model/factory";
|
|
5
|
+
import type { Sampler } from "../../sampler";
|
|
6
|
+
import type { DraftProvider, DraftSource } from "../../spec/source";
|
|
7
|
+
import { runtimeConfig, type RuntimeConfig } from "../../runtime-config";
|
|
8
|
+
import type { MlxModelMemory } from "./autoregressive";
|
|
9
|
+
import type { SpeculativeTransaction } from "../../inference/rollback";
|
|
10
|
+
import { bindCacheRollback } from "./rollback";
|
|
11
|
+
import type { GraphDescriptor } from "../../inference/graph";
|
|
12
|
+
import { bindLegacyDraftTarget } from "./draft-target";
|
|
13
|
+
|
|
14
|
+
/** Bound target operations and draft construction for one speculative run.
|
|
15
|
+
* A replacement graph supplies this entire port, including any hidden taps.
|
|
16
|
+
* The verifier never needs a RuntimeModel or an artifact-family check. */
|
|
17
|
+
export interface MlxSpeculativeBinding {
|
|
18
|
+
readonly runtime?: RuntimeConfig;
|
|
19
|
+
readonly memory?: MlxModelMemory;
|
|
20
|
+
readonly descriptor: GraphDescriptor;
|
|
21
|
+
readonly eosTokenIds: readonly number[];
|
|
22
|
+
readonly prefillTailSplit: boolean;
|
|
23
|
+
makeCache(): Cache[];
|
|
24
|
+
openDraft(sampler: Sampler, caches: Cache[]): DraftSource;
|
|
25
|
+
bindRollback(caches: Cache[]): SpeculativeTransaction;
|
|
26
|
+
forward(ids: MlxArray, caches: Cache[], tapLayers?: number[]):
|
|
27
|
+
Promise<{ hidden: MlxArray; ctxML: MlxArray | null }>;
|
|
28
|
+
projectLogits(hidden: MlxArray): MlxArray;
|
|
29
|
+
/** Establish the implementation's verify kernel context; restore on close. */
|
|
30
|
+
pinVerify?(): { close(): void };
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Legacy mutable tap/kernel fields require the gateway's exclusive lease. */
|
|
34
|
+
export function bindLegacySpeculativeModel(model: RuntimeModel, provider: DraftProvider): MlxSpeculativeBinding {
|
|
35
|
+
const runtime = runtimeConfig();
|
|
36
|
+
return {
|
|
37
|
+
runtime,
|
|
38
|
+
memory: model,
|
|
39
|
+
descriptor: Object.freeze({ id: `legacy-spec:${model.config.modelType}`, backend: "mlx",
|
|
40
|
+
graphAbi: "mlx-hidden-bsh-v1", stateAbi: "legacy-cache-array-v1", artifact: "legacy-resident-model" }),
|
|
41
|
+
eosTokenIds: model.config.eosTokenIds,
|
|
42
|
+
prefillTailSplit: runtime.flag("MLX_BUN_PREFILL_TAIL_SPLIT", true),
|
|
43
|
+
makeCache: model.makeCache.bind(model),
|
|
44
|
+
openDraft: (sampler, caches) => provider.open({ sampler, target: bindLegacyDraftTarget(model, caches) }),
|
|
45
|
+
bindRollback: bindCacheRollback,
|
|
46
|
+
forward: (ids, caches, tapLayers) => legacyForwardWithTaps(model, ids, caches, tapLayers),
|
|
47
|
+
projectLogits: model.logitsFromHidden.bind(model),
|
|
48
|
+
...("setSpecKernelPinned" in model ? {
|
|
49
|
+
pinVerify() {
|
|
50
|
+
model.setSpecKernelPinned(true);
|
|
51
|
+
return { close() { model.setSpecKernelPinned(false); } };
|
|
52
|
+
},
|
|
53
|
+
} : {}),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function assertMlxSpeculativeBinding(binding: MlxSpeculativeBinding): void {
|
|
58
|
+
const descriptor = binding.descriptor;
|
|
59
|
+
if (descriptor.backend !== "mlx" || descriptor.graphAbi !== "mlx-hidden-bsh-v1" ||
|
|
60
|
+
descriptor.stateAbi !== "legacy-cache-array-v1")
|
|
61
|
+
throw new Error(`speculative binding ${descriptor.id} has an incompatible backend, graph, or state ABI`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Run one target forward, and when `tapLayers` is set (⟹ a Gemma4 target — a
|
|
65
|
+
* DSpark-style source), also return the captured multi-layer context
|
|
66
|
+
* [1,L,m*H] (tapLayers concatenated on the feature axis; index nLayers is the
|
|
67
|
+
* post-finalNorm sentinel). Non-tapping sources get ctxML=null and never
|
|
68
|
+
* touch model.hiddenTap. Mirrors generate-dflash.ts forwardTapped. */
|
|
69
|
+
async function legacyForwardWithTaps(
|
|
70
|
+
model: RuntimeModel,
|
|
71
|
+
ids: MlxArray,
|
|
72
|
+
caches: Cache[],
|
|
73
|
+
tapLayers: number[] | undefined,
|
|
74
|
+
): Promise<{ hidden: MlxArray; ctxML: MlxArray | null }> {
|
|
75
|
+
if (!tapLayers) {
|
|
76
|
+
const asyncModel = model as RuntimeModel & {
|
|
77
|
+
forwardHiddenAsync?: (
|
|
78
|
+
ids: MlxArray,
|
|
79
|
+
caches: Cache[],
|
|
80
|
+
) => Promise<MlxArray>;
|
|
81
|
+
};
|
|
82
|
+
const hidden = typeof asyncModel.forwardHiddenAsync === "function"
|
|
83
|
+
? await asyncModel.forwardHiddenAsync(ids, caches)
|
|
84
|
+
: model.forwardHidden(ids, caches);
|
|
85
|
+
return { hidden, ctxML: null };
|
|
86
|
+
}
|
|
87
|
+
if (!("hiddenTap" in model)) throw new Error("target graph does not support hidden taps");
|
|
88
|
+
const m = model;
|
|
89
|
+
const previousTap = m.hiddenTap;
|
|
90
|
+
const cap = new Map<number, MlxArray>();
|
|
91
|
+
m.hiddenTap = { layers: new Set(tapLayers), captured: cap };
|
|
92
|
+
let hidden: MlxArray | null = null;
|
|
93
|
+
try {
|
|
94
|
+
hidden = model.forwardHidden(ids, caches);
|
|
95
|
+
const perLayer = tapLayers.map((li) => {
|
|
96
|
+
const a = cap.get(li);
|
|
97
|
+
if (!a) throw new Error(`spec tap: layer ${li} not captured`);
|
|
98
|
+
return a;
|
|
99
|
+
});
|
|
100
|
+
const ctxML = ops.concatAxis(perLayer, 2); // [1,L,m*H]
|
|
101
|
+
for (const [, a] of cap) a.dispose();
|
|
102
|
+
cap.clear(); // consumed — the finally must not double-dispose
|
|
103
|
+
const out = { hidden, ctxML };
|
|
104
|
+
hidden = null; // ownership returned to the caller
|
|
105
|
+
return out;
|
|
106
|
+
} finally {
|
|
107
|
+
// On any throw (forward mid-capture, missing layer, concat), free the
|
|
108
|
+
// partially-captured tap tensors and the orphaned hidden. On success both
|
|
109
|
+
// are already gone (cap cleared, hidden nulled).
|
|
110
|
+
hidden?.dispose();
|
|
111
|
+
for (const [, a] of cap) a.dispose();
|
|
112
|
+
m.hiddenTap = previousTap;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { StateView } from "../../contracts/resources";
|
|
2
|
+
import { disposeResources, ownResource } from "../../engine/resources";
|
|
3
|
+
import type { MlxArray } from "../../mlx/array";
|
|
4
|
+
import type { Cache } from "../../model/gemma4-base";
|
|
5
|
+
|
|
6
|
+
/** Compatibility boundary for legacy state(). Numerical code consumes a lease,
|
|
7
|
+
* never the legacy ownership marker. No copy, evaluation or fence is added. */
|
|
8
|
+
export function leaseCacheState(cache: Cache): StateView<MlxArray> {
|
|
9
|
+
return ownResource<readonly MlxArray[]>(cache.state(), cache.stateNeedsDispose ? disposeResources : () => {});
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Preserve the existing prefill evaluation order: temporary views first,
|
|
13
|
+
* borrowed state second. Partial acquisition releases every acquired view. */
|
|
14
|
+
export function leaseCacheStates(caches: readonly Cache[]): StateView<MlxArray> {
|
|
15
|
+
const leases: StateView<MlxArray>[] = [];
|
|
16
|
+
const close = () => disposeResources(leases.map((lease) => ({ dispose: () => lease.close() })));
|
|
17
|
+
try {
|
|
18
|
+
for (const owned of [true, false]) {
|
|
19
|
+
for (const cache of caches) if (!!cache.stateNeedsDispose === owned) leases.push(leaseCacheState(cache));
|
|
20
|
+
}
|
|
21
|
+
return ownResource(leases.flatMap((lease) => [...lease.borrow()]), close);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
try { close(); } catch (cleanupError) { throw new AggregateError([error, cleanupError], "state view acquisition failed"); }
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createCompletionMethod } from "../../serve/session-completion-engine";
|
|
2
|
+
import type { ExecutionPlanner, InferenceEngine, Timer } from "../../contracts/generation";
|
|
3
|
+
import { createInferenceEngine, type EngineOptions } from "../../engine/engine";
|
|
4
|
+
import { throwIfCancelled } from "../../engine/cancellation";
|
|
5
|
+
import type { GenerateOptions, GenerateStats } from "../../generate";
|
|
6
|
+
import type { GenerationGateway, RequestShape } from "../../serve/generation-gateway";
|
|
7
|
+
|
|
8
|
+
/** Data-only API for text requests whose policy/shape was already
|
|
9
|
+
* resolved by the caller. Native request resources still belong to the prepared
|
|
10
|
+
* completion API; they are deliberately absent from this token API. */
|
|
11
|
+
export type TextGenerationOptions = Omit<GenerateOptions,
|
|
12
|
+
"signal" | "cache" | "grammar" | "fill" | "adapters" | "promptEmbeddings" |
|
|
13
|
+
"imageMask" | "multimodalMask" | "visionPixels" | "onPrefillDone" |
|
|
14
|
+
"onDecodeCheckpoint" | "initialPendingToken" | "initialGeneratedTokens" |
|
|
15
|
+
"originalPromptTokens" | "snapshotAt" | "checkpointEveryTokens"
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
export interface TextGenerationRequest {
|
|
19
|
+
readonly promptIds: readonly number[];
|
|
20
|
+
readonly options: TextGenerationOptions;
|
|
21
|
+
readonly shape: RequestShape;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const hostTimer: Timer = {
|
|
25
|
+
after(milliseconds, callback) {
|
|
26
|
+
const timer = setTimeout(callback, milliseconds);
|
|
27
|
+
return () => { clearTimeout(timer); };
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** Reuses the gateway's placement, exclusive lease, prompt cache, batching,
|
|
32
|
+
* and quant-specific execution. The portable session never imports them.
|
|
33
|
+
* Closing this engine cancels its sessions; it does not dispose a shared gateway. */
|
|
34
|
+
export function createTextInferenceEngine(
|
|
35
|
+
gateway: Pick<GenerationGateway, "place" | "run">,
|
|
36
|
+
options: Omit<EngineOptions, "timer"> & { timer?: Timer } = {},
|
|
37
|
+
): InferenceEngine<TextGenerationRequest, GenerateStats> {
|
|
38
|
+
const planner: ExecutionPlanner<TextGenerationRequest, GenerateStats> = {
|
|
39
|
+
async plan(request, cancellation) {
|
|
40
|
+
throwIfCancelled(cancellation);
|
|
41
|
+
if (request.shape.hasVision || request.shape.hasAdapters || request.shape.hasGrammar)
|
|
42
|
+
throw new Error("native request resources require the prepared completion API");
|
|
43
|
+
const placement = gateway.place(request.shape, request.options);
|
|
44
|
+
const maxTokens = request.options.maxTokens ?? 512;
|
|
45
|
+
return {
|
|
46
|
+
id: `text:${placement.mechanism}`, outputTokenLimit: maxTokens,
|
|
47
|
+
method: createCompletionMethod(gateway, {
|
|
48
|
+
prompt: [...request.promptIds], options: request.options,
|
|
49
|
+
shape: request.shape, placement,
|
|
50
|
+
}),
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
const engine = createInferenceEngine(planner, { ...options, timer: options.timer ?? hostTimer });
|
|
55
|
+
return {
|
|
56
|
+
open(request, control) {
|
|
57
|
+
// Snapshot before demand-start: callers may reuse/mutate request arrays.
|
|
58
|
+
// TextGenerationOptions contains data only; no native handles or callbacks.
|
|
59
|
+
const snapshot = structuredClone(request);
|
|
60
|
+
if (!snapshot.promptIds.length || snapshot.promptIds.some((id) => !Number.isInteger(id) || id < 0 || id > 0xffffffff))
|
|
61
|
+
return Promise.reject(new Error("prompt must contain valid token ids"));
|
|
62
|
+
const maxTokens = snapshot.options.maxTokens ?? 512;
|
|
63
|
+
if (!Number.isSafeInteger(maxTokens) || maxTokens <= 0)
|
|
64
|
+
return Promise.reject(new Error("text generation requires a positive token limit"));
|
|
65
|
+
if ((snapshot.options.topLogprobs ?? 0) > (options.maxTopLogprobs ?? 20))
|
|
66
|
+
return Promise.reject(new Error("top logprobs exceed session delivery capacity"));
|
|
67
|
+
if (control.output === "collect" && (snapshot.options.logprobs || snapshot.options.topLogprobs))
|
|
68
|
+
return Promise.reject(new Error("token logprobs require stream consumption"));
|
|
69
|
+
return engine.open(snapshot, control);
|
|
70
|
+
},
|
|
71
|
+
close: () => engine.close(),
|
|
72
|
+
};
|
|
73
|
+
}
|