mlx-bun 0.5.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 +1449 -109
- 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 +7 -5
- 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 +10 -10
- package/src/{serve → server}/chat-stage.ts +14 -14
- package/src/{client.ts → server/client.ts} +28 -2
- package/src/{serve → server}/completion-executor.ts +33 -41
- 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 +25 -82
- 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 +6 -8
- package/src/{serve → server}/request-prep.ts +47 -50
- 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 -107
- package/docs/archive/hlg-sampling.md +0 -350
- package/docs/archive/investigations/audio-input-plan.md +0 -356
- package/docs/archive/investigations/benchmark-ledger-through-v0.4.0.md +0 -3617
- 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/release-notes-v0.4.0.md +0 -45
- package/docs/archive/planning/release-notes-v0.5.0.md +0 -37
- 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 -2054
- package/docs/design/decode-speed-program.md +0 -2404
- package/docs/design/dreaming-nightly-pipeline.md +0 -684
- package/docs/design/generic-model-support.md +0 -821
- package/docs/design/kv-cache.md +0 -993
- package/docs/design/orpo-training.md +0 -680
- package/docs/design/speculative-decoding.md +0 -2129
- package/docs/design/turboquant.md +0 -2225
- package/docs/design/unified-engine-frontier-plan.md +0 -1987
- package/docs/design/web-chat-redesign.md +0 -695
- package/docs/planning/PRODUCT_ROADMAP.md +0 -593
- package/docs/planning/ResearchTopics.md +0 -119
- package/docs/planning/public-readiness-handoff.md +0 -244
- package/docs/planning/public-readiness.md +0 -149
- package/docs/planning/video-series.md +0 -421
- package/docs/reference/benchmarks.md +0 -3587
- package/docs/reference/cli.md +0 -646
- package/docs/reference/distribution.md +0 -380
- package/docs/reference/environment.md +0 -494
- package/docs/reference/glossary.md +0 -39
- package/docs/reference/library-api.md +0 -688
- package/docs/reference/memory.md +0 -260
- package/docs/reference/models.md +0 -346
- package/docs/reference/server-api.md +0 -1945
- package/docs/reference/server-config.md +0 -973
- package/docs/reference/training.md +0 -462
- package/docs/reference/troubleshooting.md +0 -158
- package/src/admission-plan.ts +0 -18
- package/src/audio/audiotoolbox.ts +0 -112
- package/src/audio/conformer.ts +0 -655
- package/src/audio/decode.ts +0 -133
- package/src/audio/features.ts +0 -202
- package/src/audio/mic-capture.ts +0 -98
- package/src/audio/silero-vad.ts +0 -379
- package/src/audio/transcode.ts +0 -67
- package/src/audio/whisper-decode.ts +0 -774
- package/src/audio/whisper-fast.ts +0 -732
- package/src/audio/whisper-format.ts +0 -73
- package/src/audio/whisper-mel.ts +0 -185
- package/src/audio/whisper-timing.ts +0 -274
- package/src/audio/whisper-tokenizer.ts +0 -239
- package/src/audio/whisper-transcribe.ts +0 -410
- 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 -129
- package/src/backends/mlx/batch-group.ts +0 -1874
- 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 -107
- 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/encoder-cache.ts +0 -25
- package/src/backends/mlx/evaluation.ts +0 -105
- package/src/backends/mlx/fill-append.ts +0 -58
- package/src/backends/mlx/fill-group.ts +0 -497
- 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 -174
- 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 -161
- 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/mixed-iteration.ts +0 -62
- package/src/backends/mlx/model-prompt.ts +0 -178
- package/src/backends/mlx/model-serving.ts +0 -80
- package/src/backends/mlx/paged-cache-codec.ts +0 -27
- package/src/backends/mlx/prefill-cohort.ts +0 -100
- package/src/backends/mlx/prefill-policy.ts +0 -26
- package/src/backends/mlx/prefill-rows.ts +0 -244
- package/src/backends/mlx/prefill.ts +0 -33
- package/src/backends/mlx/projected-context-rows.ts +0 -72
- package/src/backends/mlx/prompt-input.ts +0 -29
- package/src/backends/mlx/qwen-prompt-input.ts +0 -40
- package/src/backends/mlx/request-policy.ts +0 -20
- package/src/backends/mlx/request-state-policy.ts +0 -54
- package/src/backends/mlx/rollback.ts +0 -92
- package/src/backends/mlx/row-sampling.ts +0 -49
- package/src/backends/mlx/serial-executor.ts +0 -251
- package/src/backends/mlx/speculative-group.ts +0 -438
- package/src/backends/mlx/speculative-round.ts +0 -161
- package/src/backends/mlx/speculative.ts +0 -131
- 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 -173
- package/src/chat-template.ts +0 -382
- package/src/cli.ts +0 -3490
- package/src/config.ts +0 -399
- package/src/contracts/completion.ts +0 -16
- package/src/contracts/execution.ts +0 -70
- package/src/contracts/generation.ts +0 -103
- package/src/contracts/host.ts +0 -7
- package/src/contracts/object-cache.ts +0 -8
- package/src/contracts/pi-provider.ts +0 -30
- package/src/contracts/pi.ts +0 -261
- package/src/contracts/prefix-cache.ts +0 -33
- package/src/contracts/resources.ts +0 -25
- package/src/contracts/sampling.ts +0 -23
- package/src/contracts/scheduling.ts +0 -54
- 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 -64
- package/src/engine/execution-tasks.ts +0 -44
- package/src/engine/namespaced-cache.ts +0 -13
- package/src/engine/resources.ts +0 -53
- package/src/engine/scheduler.ts +0 -92
- 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 -463
- 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 -1352
- package/src/grammar.ts +0 -604
- 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 -45
- 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 -279
- package/src/kv-store.ts +0 -1135
- package/src/lab/README.md +0 -22
- 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-attention.ts +0 -117
- package/src/lab/paged-kv/paged-kv-rows.ts +0 -111
- package/src/lab/paged-kv/paged-kv.ts +0 -336
- package/src/library.ts +0 -40
- package/src/lora.ts +0 -408
- package/src/md-modules.d.ts +0 -54
- 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 -425
- 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 -531
- package/src/mlx/materialize.ts +0 -23
- package/src/mlx/metal-kernel.ts +0 -159
- package/src/mlx/normalized-argmax.ts +0 -116
- package/src/mlx/ops.ts +0 -1108
- 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 -94
- 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 -57
- package/src/model/diffusion-gemma.ts +0 -1026
- package/src/model/factory.ts +0 -215
- package/src/model/fingerprint.ts +0 -45
- 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 -2370
- package/src/model/gemma4.ts +0 -1395
- 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 -70
- package/src/model/minicpm5.ts +0 -376
- package/src/model/profile.ts +0 -468
- package/src/model/quantized-append-attention.ts +0 -31
- 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 -250
- package/src/model/qwen3.ts +0 -277
- package/src/model/qwen3_5-checkpoint.ts +0 -164
- package/src/model/qwen3_5.ts +0 -881
- 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 -110
- package/src/model/token-groups.ts +0 -66
- 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 -89
- 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/model/whisper.ts +0 -435
- package/src/native/expert_io.c +0 -523
- package/src/native/frame_extract.swift +0 -140
- package/src/native/mic_capture.swift +0 -92
- package/src/native-pack.ts +0 -163
- 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 -1940
- package/src/preflight.ts +0 -158
- package/src/prompt-cache.ts +0 -682
- 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 -77
- package/src/safetensors.ts +0 -165
- package/src/sampler.ts +0 -1012
- 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/audio-routes.ts +0 -323
- 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 -537
- 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 -49
- package/src/serve/model-host.ts +0 -511
- package/src/serve/parent-application.ts +0 -56
- package/src/serve/prompt-response-trace.ts +0 -161
- 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/serve/transcription-server.ts +0 -64
- package/src/serve/transcription-service.ts +0 -502
- package/src/server.ts +0 -1282
- package/src/spec/assistant-rows.ts +0 -93
- 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 -318
- package/src/spec/glm52-mtp-state.ts +0 -33
- package/src/spec/ngram-source.ts +0 -226
- 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 -230
- package/src/spec/qwen-mtp-source.ts +0 -386
- package/src/spec/qwen-mtp-state.ts +0 -30
- package/src/spec/serve-loop.ts +0 -587
- package/src/spec/source.ts +0 -228
- package/src/spec/two-model-rows.ts +0 -62
- package/src/spec/two-model.ts +0 -113
- package/src/ssd-cache.ts +0 -431
- package/src/ssd-durability.ts +0 -209
- package/src/storage/host-buffer.ts +0 -24
- package/src/storage/kv-writer.ts +0 -83
- package/src/storage/kv-writer.worker.js +0 -264
- package/src/storage/retention-policy.ts +0 -37
- package/src/tiered-prompt-cache.ts +0 -45
- 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 -176
- package/src/vision/preprocess.ts +0 -247
- package/src/vision/prompt.ts +0 -409
- package/src/vision/qwen3vl-preprocess.ts +0 -409
- package/src/vision/qwen3vl-prompt.ts +0 -233
- package/src/vision/qwen3vl-tower.ts +0 -566
- package/src/vision/siglip.ts +0 -607
- package/src/vision/video-frames.ts +0 -148
- package/src/web/app.html +0 -2155
- package/src/web/app.js +0 -5863
- 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 -1060
- package/src/web/src/composer.ts +0 -962
- 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/src/voice.ts +0 -141
- 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/{serve → server}/generated-token-history.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,46 +0,0 @@
|
|
|
1
|
-
import type { MlxArray } from "../../mlx/array";
|
|
2
|
-
import { Dtype } from "../../mlx/ffi";
|
|
3
|
-
import * as ops from "../../mlx/ops";
|
|
4
|
-
import type { Cache, KvDonorAttention } from "../../model/gemma4-base";
|
|
5
|
-
import { captureKvDonorAttention } from "../../model/kv-attention-view";
|
|
6
|
-
import type { AssistantAttention } from "../../spec/drafter";
|
|
7
|
-
import { disposeResources } from "../../engine/resources";
|
|
8
|
-
|
|
9
|
-
/** Bind captured cache validity to Q-only attention. Encoded layouts can
|
|
10
|
-
* supply this same numerical port without changing the draft graph. */
|
|
11
|
-
export function readAssistantDonors(sliding: Cache, full: Cache) {
|
|
12
|
-
const views: KvDonorAttention[] = [], masks: MlxArray[] = [];
|
|
13
|
-
const dispose = () => disposeResources([...masks, ...views]);
|
|
14
|
-
try {
|
|
15
|
-
for (const cache of [sliding, full]) views.push(captureKvDonorAttention(cache));
|
|
16
|
-
const bind = (view: KvDonorAttention): AssistantAttention => {
|
|
17
|
-
// All draft steps borrow the same target snapshot. Build each validity
|
|
18
|
-
// mask once, then reuse it across matching layers and the entire chain.
|
|
19
|
-
const byWindow = new Map<number | null, MlxArray | null>();
|
|
20
|
-
return { attend(query, scale, window) {
|
|
21
|
-
if (!byWindow.has(window)) {
|
|
22
|
-
const width = view.width, B = view.offsets.length;
|
|
23
|
-
const starts = view.starts.map((start, row) => Math.max(start,
|
|
24
|
-
window === null ? start : view.ends[row]! - window));
|
|
25
|
-
let mask: MlxArray | null = null;
|
|
26
|
-
if (starts.some(start => start !== 0) || view.ends.some(end => end !== width)) {
|
|
27
|
-
using columns = ops.arange(0, width, 1, Dtype.int32);
|
|
28
|
-
using lower = ops.fromInt32(starts, [B, 1, 1, 1]);
|
|
29
|
-
using upper = ops.fromInt32([...view.ends], [B, 1, 1, 1]);
|
|
30
|
-
using before = ops.less(columns, lower);
|
|
31
|
-
using after = ops.greaterEqual(columns, upper);
|
|
32
|
-
using invalid = ops.logicalOr(before, after);
|
|
33
|
-
using floats = invalid.astype(view.dtype);
|
|
34
|
-
mask = ops.mulScalar(floats, -1e9);
|
|
35
|
-
masks.push(mask);
|
|
36
|
-
}
|
|
37
|
-
byWindow.set(window, mask);
|
|
38
|
-
}
|
|
39
|
-
const mask = byWindow.get(window)!;
|
|
40
|
-
return view.attend(query, scale, { mode: mask ? "array" : "", arr: mask });
|
|
41
|
-
} };
|
|
42
|
-
};
|
|
43
|
-
return { positions: views[0]!.offsets.map(offset => offset - 1),
|
|
44
|
-
sliding: bind(views[0]!), full: bind(views[1]!), dispose };
|
|
45
|
-
} catch (error) { dispose(); throw error; }
|
|
46
|
-
}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import type { MlxArray } from "../../mlx/array";
|
|
2
|
-
import * as ops from "../../mlx/ops";
|
|
3
|
-
import type { AutoregressiveGraph } from "../../inference/graph";
|
|
4
|
-
import type { Cache, BatchableCache, PaddedPrefillCache } from "../../model/gemma4-base";
|
|
5
|
-
import type { DraftRowSampling } from "../../spec/source";
|
|
6
|
-
import { toLogprobs } from "../../sampler";
|
|
7
|
-
import { disposeResources } from "../../engine/resources";
|
|
8
|
-
import { MlxStateRows } from "./state-rows";
|
|
9
|
-
import type { PreparedStateChange } from "../../contracts/resources";
|
|
10
|
-
import { evalCacheState } from "./prefill";
|
|
11
|
-
|
|
12
|
-
export interface MlxDraftLayout extends BatchableCache, PaddedPrefillCache {
|
|
13
|
-
makeEmptyBatch(): MlxDraftLayout;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/** The draft graph and sampler operate at B. State snapshots own rewind and
|
|
17
|
-
* membership independently of the graph, target verifier and scheduler. */
|
|
18
|
-
export class MlxAutoregressiveDraftRows {
|
|
19
|
-
#history: MlxStateRows[] = [];
|
|
20
|
-
#drafts: number[][] = [];
|
|
21
|
-
#depth = 0;
|
|
22
|
-
#pendingLast: Array<number | null>;
|
|
23
|
-
constructor(readonly graph: AutoregressiveGraph<MlxArray, Cache[], MlxArray>,
|
|
24
|
-
readonly state: MlxStateRows<MlxDraftLayout>, readonly sampling: DraftRowSampling | null) {
|
|
25
|
-
this.#pendingLast = Array.from({ length: state.rowCount }, () => null);
|
|
26
|
-
}
|
|
27
|
-
get pendingLast(): readonly (number | null)[] { return this.#pendingLast; }
|
|
28
|
-
prepareAppend(rows: readonly (readonly Cache[])[], pending: readonly (number | null)[]): PreparedStateChange {
|
|
29
|
-
const state = this.state.prepareAppendMany(rows), next = [...this.#pendingLast, ...pending];
|
|
30
|
-
return { commit: () => { state.commit(); this.#pendingLast = next; }, dispose: () => state.dispose() };
|
|
31
|
-
}
|
|
32
|
-
filterRows(keep: readonly number[]): void {
|
|
33
|
-
this.state.filterRows(keep); this.#pendingLast = keep.map(row => this.#pendingLast[row]!);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async #forward(ids: MlxArray, lengths?: readonly number[]): Promise<MlxArray> {
|
|
37
|
-
const width = ids.shape[1]!, padded = lengths?.some(length => length !== width);
|
|
38
|
-
if (padded) for (const cache of this.state.caches) cache.preparePrefill({
|
|
39
|
-
lengths: [...lengths!], rightPadding: lengths!.map(length => width - length),
|
|
40
|
-
});
|
|
41
|
-
const hidden = await this.graph.forwardHidden(ids, this.state.caches);
|
|
42
|
-
try {
|
|
43
|
-
if (padded) for (const cache of this.state.caches) cache.finalizePrefill();
|
|
44
|
-
return hidden;
|
|
45
|
-
} catch (error) { hidden.dispose(); throw error; }
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** A restored full-accept boundary may have one unprocessed draft token.
|
|
49
|
-
* Combine it with the incoming block on device, retaining per-row lengths. */
|
|
50
|
-
async prefill(tokens: MlxArray): Promise<void> {
|
|
51
|
-
const [B, N] = tokens.shape as [number, number];
|
|
52
|
-
if (this.#pendingLast.some(token => token !== null)) {
|
|
53
|
-
using previous = ops.fromInt32(this.#pendingLast.map(token => token ?? 0), [B, 1]);
|
|
54
|
-
using joined = ops.concatAxis([previous, tokens], 1);
|
|
55
|
-
const lengths = this.#pendingLast.map(token => N + Number(token !== null));
|
|
56
|
-
using indices = ops.fromInt32(lengths.flatMap(length => Array.from({ length: N + 1 },
|
|
57
|
-
(_, position) => length === N + 1 ? position : Math.min(position + 1, N))), [B, N + 1]);
|
|
58
|
-
using inputs = ops.takeAlongAxis(joined, indices, 1);
|
|
59
|
-
(await this.#forward(inputs, lengths)).dispose();
|
|
60
|
-
} else (await this.#forward(tokens)).dispose();
|
|
61
|
-
this.#pendingLast.fill(null); this.materialize();
|
|
62
|
-
}
|
|
63
|
-
materialize(): void { evalCacheState(this.state.caches); }
|
|
64
|
-
|
|
65
|
-
async draft(pending: readonly number[], depth: number, steps: readonly number[]): Promise<number[][]> {
|
|
66
|
-
this.#releaseHistory();
|
|
67
|
-
this.#depth = depth;
|
|
68
|
-
const tokens: MlxArray[] = [];
|
|
69
|
-
const feeds = pending.map((token, row) => this.#pendingLast[row] == null ? [token] : [this.#pendingLast[row]!, token]);
|
|
70
|
-
const lengths = feeds.map(feed => feed.length), width = Math.max(...lengths);
|
|
71
|
-
let ids = ops.fromInt32(feeds.flatMap(feed => [...feed, ...Array(width - feed.length).fill(0)]), [pending.length, width]);
|
|
72
|
-
try {
|
|
73
|
-
// With zero proposals, consume the pending input to keep companion
|
|
74
|
-
// coverage aligned with the target's one-token verification.
|
|
75
|
-
for (let position = 0; position < Math.max(1, depth); position++) {
|
|
76
|
-
const padded = position === 0 && lengths.some(length => length !== width);
|
|
77
|
-
using hidden = await this.#forward(ids, position === 0 ? lengths : undefined);
|
|
78
|
-
this.#history.push(this.state.clone());
|
|
79
|
-
if (depth === 0) break;
|
|
80
|
-
using selection = padded ? ops.fromInt32(lengths.map(length => length - 1), [pending.length, 1, 1]) : null;
|
|
81
|
-
using selected = selection ? ops.takeAlongAxis(hidden, selection, 1) : null;
|
|
82
|
-
using logits = this.graph.projectLogits(selected ?? hidden, { type: "last" });
|
|
83
|
-
using flat = ops.reshape(logits, [pending.length, logits.shape.at(-1)!]);
|
|
84
|
-
using logprobs = toLogprobs(flat);
|
|
85
|
-
const token = this.sampling!.sample(logprobs, steps.map(step => step + position));
|
|
86
|
-
tokens.push(token);
|
|
87
|
-
ids.dispose(); ids = ops.reshape(token, [pending.length, 1]);
|
|
88
|
-
}
|
|
89
|
-
if (depth === 0) this.#drafts = pending.map(() => []);
|
|
90
|
-
else {
|
|
91
|
-
using packed = ops.concatAxis(tokens, 0);
|
|
92
|
-
const values = packed.toIntTokens();
|
|
93
|
-
this.#drafts = pending.map((_, row) => Array.from({ length: depth },
|
|
94
|
-
(_, position) => values[position * pending.length + row]!));
|
|
95
|
-
}
|
|
96
|
-
return this.#drafts;
|
|
97
|
-
} catch (error) { this.#releaseHistory(); throw error; }
|
|
98
|
-
finally { ids.dispose(); disposeResources(tokens); }
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/** Preserve mlx-lm's full-accept re-feed shape: the final draft remains
|
|
102
|
-
* pending and joins the next target token in one forward. Recurrent state
|
|
103
|
-
* uses saved boundaries, never trimming. The lag is companion state. */
|
|
104
|
-
async commit(accepted: readonly number[]): Promise<void> {
|
|
105
|
-
const selected: Cache[][] = [];
|
|
106
|
-
try {
|
|
107
|
-
if (!accepted.every(count => count >= this.#depth - 1)) {
|
|
108
|
-
for (const [row, count] of accepted.entries())
|
|
109
|
-
selected.push(this.#history[Math.min(count, Math.max(0, this.#depth - 1))]!.extractRow(row));
|
|
110
|
-
this.state.mergeRows(selected);
|
|
111
|
-
}
|
|
112
|
-
} finally { disposeResources(selected.flat()); this.#releaseHistory(); }
|
|
113
|
-
|
|
114
|
-
this.#pendingLast = accepted.map((count, row) => this.#depth > 0 && count === this.#depth ? this.#drafts[row]!.at(-1)! : null);
|
|
115
|
-
this.#drafts = []; this.#depth = 0;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
#releaseHistory(): void { disposeResources(this.#history.splice(0)); }
|
|
119
|
-
dispose(): void { this.#releaseHistory(); this.#drafts = []; this.state.dispose(); }
|
|
120
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import type { AutoregressiveGraph } from "../../inference/graph";
|
|
2
|
-
import type { MlxArray } from "../../mlx/array";
|
|
3
|
-
import type { Cache, Gemma4Model } from "../../model/gemma4";
|
|
4
|
-
import type { RuntimeModel } from "../../model/factory";
|
|
5
|
-
import { CompiledDecode } from "../../model/compiled-decode";
|
|
6
|
-
import { runtimeConfig, type RuntimeConfig } from "../../runtime-config";
|
|
7
|
-
import { bindMlxGraph } from "./graph";
|
|
8
|
-
import type { PrefillPolicy } from "../../inference/prefill";
|
|
9
|
-
import { resolveMlxPrefillPolicy } from "./prefill-policy";
|
|
10
|
-
import type { KvSchemeOptions } from "../../kv-scheme";
|
|
11
|
-
|
|
12
|
-
/** One declaration shared by planning and both native execution lanes. */
|
|
13
|
-
export function legacyCompiledDecodeAvailable(model: RuntimeModel): boolean {
|
|
14
|
-
return model.config?.modelType?.startsWith("gemma4") === true && !model.config.text.enableMoeBlock;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface MlxModelMemory {
|
|
18
|
-
readonly weightsBytes: number;
|
|
19
|
-
readonly expertRuntime?: {
|
|
20
|
-
readonly plan: { readonly plannedBytes: number };
|
|
21
|
-
flushUsage?: () => void;
|
|
22
|
-
finishUsage?: () => Promise<void>;
|
|
23
|
-
} | null;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface MlxDecodeStep {
|
|
27
|
-
/** Consume one pending token and advance state once. Returned arrays belong
|
|
28
|
-
* to the caller. null permits ordinary graph execution and MUST leave state
|
|
29
|
-
* unchanged. Errors propagate unless this implementation can roll back. */
|
|
30
|
-
tryStep(token: MlxArray, state: Cache[]): { logits: MlxArray; evalWith: MlxArray[] } | null;
|
|
31
|
-
/** Release per-run workspaces after pending outputs are dropped and before
|
|
32
|
-
* cache disposal. Wait for native work if releasing requires completion. */
|
|
33
|
-
close(): void | Promise<void>;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** Model-owned execution for committed tokens. Recheck the chunk limit after
|
|
37
|
-
* each forward: native arithmetic can change at a cache-length boundary. */
|
|
38
|
-
export interface MlxTokenAppend {
|
|
39
|
-
/** Affine formats whose committed append retains one-token arithmetic. */
|
|
40
|
-
readonly affineKvBits?: readonly number[];
|
|
41
|
-
readonly turboQuantFormats?: readonly { readonly kBits: number; readonly vBits: number }[];
|
|
42
|
-
/** Maximum positions per row at this cohort size; omitted rows means B=1. */
|
|
43
|
-
maxChunkSize(state: readonly Cache[], rows?: number): number;
|
|
44
|
-
forwardHidden(ids: MlxArray, state: Cache[]): MlxArray | Promise<MlxArray>;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** The model declares which codecs retain its committed-span arithmetic. */
|
|
48
|
-
export function supportsCommittedAppendCache(
|
|
49
|
-
append: Pick<MlxTokenAppend, "affineKvBits" | "turboQuantFormats"> | null | undefined,
|
|
50
|
-
options: Pick<KvSchemeOptions, "kvBits" | "kvConfig" | "turboQuant">,
|
|
51
|
-
): boolean {
|
|
52
|
-
if (options.turboQuant) return !!append?.turboQuantFormats?.some(format =>
|
|
53
|
-
format.kBits === options.turboQuant!.kBits && format.vBits === options.turboQuant!.vBits);
|
|
54
|
-
return options.kvConfig?.length
|
|
55
|
-
? options.kvConfig.every(layer => append?.affineKvBits?.includes(layer.bits))
|
|
56
|
-
: !options.kvBits || !!append?.affineKvBits?.includes(options.kvBits);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/** One replaceable binding owns all graph-specific operations used by the AR
|
|
60
|
-
* loop. The current method requires MLX tensors and the legacy Cache[] ABI.
|
|
61
|
-
* Weights are borrowed for the binding's lifetime; generated caches are owned
|
|
62
|
-
* by the run. Caller-provided caches and media remain borrowed. */
|
|
63
|
-
export interface MlxAutoregressiveBinding {
|
|
64
|
-
readonly runtime?: RuntimeConfig;
|
|
65
|
-
readonly prefillPolicy?: PrefillPolicy;
|
|
66
|
-
readonly graph: AutoregressiveGraph<MlxArray, Cache[], MlxArray>;
|
|
67
|
-
readonly eosTokenIds: readonly number[];
|
|
68
|
-
readonly memory: MlxModelMemory;
|
|
69
|
-
readonly adapters?: { active: string[] };
|
|
70
|
-
makeCache(): Cache[];
|
|
71
|
-
forwardEmbeddings?(
|
|
72
|
-
embeddings: MlxArray, state: Cache[], imageMask: MlxArray | null,
|
|
73
|
-
ids: MlxArray, multimodalMask: MlxArray | null,
|
|
74
|
-
): MlxArray;
|
|
75
|
-
/** Called once after prefill. A compiled/fused decoder belongs to THIS graph,
|
|
76
|
-
* never to a model inferred from a name or inherited by a replacement. */
|
|
77
|
-
createDecode?(policy: { hasAdapters: boolean; pagedKv: boolean }): MlxDecodeStep | null;
|
|
78
|
-
createAppend?(policy: { hasAdapters: boolean; pagedKv: boolean }): MlxTokenAppend | null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/** Keep concrete model and compiled-decode decisions at the legacy boundary. */
|
|
82
|
-
export function bindLegacyAutoregressiveModel(model: RuntimeModel): MlxAutoregressiveBinding {
|
|
83
|
-
const runtime = runtimeConfig();
|
|
84
|
-
return {
|
|
85
|
-
runtime,
|
|
86
|
-
prefillPolicy: resolveMlxPrefillPolicy(model.config, runtime),
|
|
87
|
-
graph: bindMlxGraph<Cache[]>(model, {
|
|
88
|
-
id: `legacy:${model.config.modelType}`, artifact: "legacy-resident-model",
|
|
89
|
-
stateAbi: "legacy-cache-array-v1", // not a persistence identity
|
|
90
|
-
}),
|
|
91
|
-
eosTokenIds: model.config.eosTokenIds,
|
|
92
|
-
memory: model,
|
|
93
|
-
adapters: model.loraState,
|
|
94
|
-
makeCache: model.makeCache.bind(model),
|
|
95
|
-
forwardEmbeddings: model.forwardEmbeddings?.bind(model),
|
|
96
|
-
createAppend: "createAppend" in model ? model.createAppend.bind(model) : undefined,
|
|
97
|
-
createDecode(policy) {
|
|
98
|
-
// Preserve the existing Gemma path and exclusions. MoE shapeless replay
|
|
99
|
-
// retraces growing windows; adapters would bake residuals into the tape.
|
|
100
|
-
if (!runtime.flag("MLX_BUN_COMPILED_DECODE", true) || policy.hasAdapters || policy.pagedKv ||
|
|
101
|
-
!legacyCompiledDecodeAvailable(model))
|
|
102
|
-
return null;
|
|
103
|
-
let compiled: CompiledDecode | null = CompiledDecode.for(model as Gemma4Model);
|
|
104
|
-
return {
|
|
105
|
-
tryStep(token, state) {
|
|
106
|
-
if (!compiled || !CompiledDecode.supports(state)) return null;
|
|
107
|
-
try { return compiled.step(token, state); }
|
|
108
|
-
catch (error) {
|
|
109
|
-
// CompiledDecode restores committed writes on failure, so retrying
|
|
110
|
-
// this token through the ordinary graph is safe. Other decoders
|
|
111
|
-
// must establish that guarantee themselves before returning null.
|
|
112
|
-
compiled = null;
|
|
113
|
-
console.warn(`compiled decode disabled for this generation: ${error}`);
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
|
-
// Compiled closures belong to the model's existing unload lifecycle.
|
|
118
|
-
close() { compiled = null; },
|
|
119
|
-
};
|
|
120
|
-
},
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export function assertMlxAutoregressiveBinding(binding: MlxAutoregressiveBinding): void {
|
|
125
|
-
const descriptor = binding.graph.descriptor;
|
|
126
|
-
if (descriptor.backend !== "mlx" || descriptor.graphAbi !== "mlx-hidden-bsh-v1" ||
|
|
127
|
-
descriptor.stateAbi !== "legacy-cache-array-v1")
|
|
128
|
-
throw new Error(`AR binding ${descriptor.id} has an incompatible backend, graph, or state ABI`);
|
|
129
|
-
}
|