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
package/src/fit.ts
DELETED
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
// Memory contracts — `mlx-bun fit`. Every term is deterministic:
|
|
2
|
-
// weights — safetensors byte sizes (registry)
|
|
3
|
-
// KV bytes/token — config: layers × kv_heads × head_dim × bytes;
|
|
4
|
-
// sliding-window layers saturate at the window
|
|
5
|
-
// prefill transient — chunk size we choose × calibrated bytes/token
|
|
6
|
-
// machine — RAM (queried) + Metal wired ceiling fraction
|
|
7
|
-
//
|
|
8
|
-
// Calibration constants come from measured runs on the reference M4 Pro
|
|
9
|
-
// (see PLAN.md baselines; eval DB validates predictions against peaks).
|
|
10
|
-
|
|
11
|
-
import { totalmem } from "node:os";
|
|
12
|
-
import type { ModelConfig } from "./config";
|
|
13
|
-
import type { MemoryPlan } from "./admission-plan";
|
|
14
|
-
import {
|
|
15
|
-
kvBytesAt,
|
|
16
|
-
kvQuantBytesPerElement,
|
|
17
|
-
sdpaFallbackBytes,
|
|
18
|
-
type KvSchemeOptions,
|
|
19
|
-
} from "./kv-scheme";
|
|
20
|
-
|
|
21
|
-
export { kvBytesAt, kvQuantBytesPerElement, sdpaFallbackBytes } from "./kv-scheme";
|
|
22
|
-
export type FitKvScheme = KvSchemeOptions;
|
|
23
|
-
|
|
24
|
-
/** Decode-efficiency vs theoretical bandwidth ceiling, measured on the
|
|
25
|
-
* reference machine (24.9 tok/s vs 30.3 ceiling @600 ctx). */
|
|
26
|
-
export const DECODE_EFFICIENCY = 0.82;
|
|
27
|
-
/** MoE decode efficiency vs the active-bytes ceiling. RECALIBRATED from
|
|
28
|
-
* the Phase 15 cleared-machine matrix: 26B-A4B measured 54.5 tok/s
|
|
29
|
-
* (python 55.7 — parity) vs ~71 tok/s raw ceiling → 0.76. The earlier
|
|
30
|
-
* 0.42 came from a session where BOTH stacks were memory-degraded
|
|
31
|
-
* (32.3/33.0 "parity" — equally wrong, mutually consistent). */
|
|
32
|
-
export const MOE_DECODE_EFFICIENCY = 0.76;
|
|
33
|
-
/** Prefill transient bytes per chunk token (measured: ~1.1 GB @ 2048). */
|
|
34
|
-
export const TRANSIENT_PER_TOKEN = 0.55e6;
|
|
35
|
-
/** Fraction of unified RAM usable as GPU working set (Metal's
|
|
36
|
-
* recommendedMaxWorkingSetSize is ~75% on consumer SKUs). */
|
|
37
|
-
export const WIRED_FRACTION = 0.75;
|
|
38
|
-
export const DEFAULT_CHUNK = 2048;
|
|
39
|
-
|
|
40
|
-
export interface MachineSpec {
|
|
41
|
-
name: string;
|
|
42
|
-
ramBytes: number;
|
|
43
|
-
bandwidthGBs: number;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/** Representative Apple Silicon SKUs (memory bandwidth GB/s). */
|
|
47
|
-
export const APPLE_SKUS: { chip: string; bandwidthGBs: number; ramOptions: number[] }[] = [
|
|
48
|
-
{ chip: "M1", bandwidthGBs: 68, ramOptions: [8, 16] },
|
|
49
|
-
{ chip: "M1 Pro", bandwidthGBs: 200, ramOptions: [16, 32] },
|
|
50
|
-
{ chip: "M1 Max", bandwidthGBs: 400, ramOptions: [32, 64] },
|
|
51
|
-
{ chip: "M1 Ultra", bandwidthGBs: 800, ramOptions: [64, 128] },
|
|
52
|
-
{ chip: "M2", bandwidthGBs: 100, ramOptions: [8, 16, 24] },
|
|
53
|
-
{ chip: "M2 Pro", bandwidthGBs: 200, ramOptions: [16, 32] },
|
|
54
|
-
{ chip: "M2 Max", bandwidthGBs: 400, ramOptions: [32, 64, 96] },
|
|
55
|
-
{ chip: "M2 Ultra", bandwidthGBs: 800, ramOptions: [64, 128, 192] },
|
|
56
|
-
{ chip: "M3", bandwidthGBs: 100, ramOptions: [8, 16, 24] },
|
|
57
|
-
{ chip: "M3 Pro", bandwidthGBs: 150, ramOptions: [18, 36] },
|
|
58
|
-
{ chip: "M3 Max", bandwidthGBs: 400, ramOptions: [36, 48, 64, 96, 128] },
|
|
59
|
-
{ chip: "M3 Ultra", bandwidthGBs: 819, ramOptions: [96, 256, 512] },
|
|
60
|
-
{ chip: "M4", bandwidthGBs: 120, ramOptions: [16, 24, 32] },
|
|
61
|
-
{ chip: "M4 Pro", bandwidthGBs: 273, ramOptions: [24, 48] },
|
|
62
|
-
{ chip: "M4 Max", bandwidthGBs: 546, ramOptions: [36, 48, 64, 128] },
|
|
63
|
-
];
|
|
64
|
-
|
|
65
|
-
/** Chip name from sysctl ("M1 Max") + its bandwidth from APPLE_SKUS. */
|
|
66
|
-
export function detectChip(): { name: string | null; bandwidthGBs: number | null } {
|
|
67
|
-
try {
|
|
68
|
-
const proc = Bun.spawnSync(["sysctl", "-n", "machdep.cpu.brand_string"]);
|
|
69
|
-
const name = proc.stdout.toString().trim().replace(/^Apple\s+/, "");
|
|
70
|
-
if (!name) return { name: null, bandwidthGBs: null };
|
|
71
|
-
const sku = APPLE_SKUS.find((s) => s.chip === name);
|
|
72
|
-
return { name, bandwidthGBs: sku?.bandwidthGBs ?? null };
|
|
73
|
-
} catch {
|
|
74
|
-
return { name: null, bandwidthGBs: null };
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export function thisMachine(bandwidthGBs?: number): MachineSpec {
|
|
79
|
-
// Default bandwidth: the detected chip's table entry; 273 (M4 Pro, the
|
|
80
|
-
// original dev machine) only as the last resort.
|
|
81
|
-
const bw = bandwidthGBs ?? detectChip().bandwidthGBs ?? 273;
|
|
82
|
-
return { name: "this machine", ramBytes: totalmem(), bandwidthGBs: bw };
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** The default model everywhere — e4b. Fits comfortably on every supported
|
|
86
|
-
* Mac (including 24 GB), loads fast, and is a heavily-used primary model.
|
|
87
|
-
* Override with an explicit query (e.g. `mlx-bun serve 12B`). */
|
|
88
|
-
export const DEFAULT_REPO_ID = "mlx-community/gemma-4-e4b-it-OptiQ-4bit";
|
|
89
|
-
|
|
90
|
-
/** Recommended first model. e4b for every machine by default: the old
|
|
91
|
-
* per-tier sizing reached 12B/26B on larger Macs and pushed 24 GB machines
|
|
92
|
-
* into memory pressure (a 26B is ~18 GB). The tiered sizing is preserved in
|
|
93
|
-
* largestRecommendedRepoId for callers that explicitly want the biggest fit. */
|
|
94
|
-
export function recommendedRepoId(_ramBytes = totalmem()): string {
|
|
95
|
-
return DEFAULT_REPO_ID;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/** Largest Gemma a RAM tier can comfortably hold. NOT the default (see
|
|
99
|
-
* recommendedRepoId) — kept available for explicit "biggest model" opt-in. */
|
|
100
|
-
export function largestRecommendedRepoId(ramBytes = totalmem()): string {
|
|
101
|
-
const gb = ramBytes / 2 ** 30;
|
|
102
|
-
if (gb >= 48) return "mlx-community/gemma-4-26B-A4B-it-OptiQ-4bit";
|
|
103
|
-
if (gb >= 24) return "mlx-community/gemma-4-12B-it-OptiQ-4bit";
|
|
104
|
-
return DEFAULT_REPO_ID;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/** Fraction of RAM an *auto-selected* model may occupy and still leave the
|
|
108
|
-
* machine usable for other apps (browser, editor, Photoshop). Deliberately
|
|
109
|
-
* stricter than WIRED_FRACTION: auto-pick must never grab a "dedicate the
|
|
110
|
-
* whole machine" model — e.g. the 26B (~17 GB) on a 24 GB Mac — those stay
|
|
111
|
-
* an explicit `--query` choice. The same model clears this budget on a
|
|
112
|
-
* big-RAM Mac, so it remains auto-eligible there (RAM-relative by design). */
|
|
113
|
-
export const COEXIST_FRACTION = 0.6;
|
|
114
|
-
|
|
115
|
-
export interface AutoPickCandidate {
|
|
116
|
-
repoId: string;
|
|
117
|
-
sizeBytes: number;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Pick the model to auto-load when the user gives no query:
|
|
122
|
-
* 1. the default (e4b) if downloaded and it fits at all;
|
|
123
|
-
* 2. else the largest model that still leaves coexistence headroom;
|
|
124
|
-
* 3. else (last resort) the largest model that fits at all — so a user
|
|
125
|
-
* whose only model is a heavy one still gets it.
|
|
126
|
-
* Pure: the caller supplies the fit predicates, so this is unit-tested
|
|
127
|
-
* without touching the registry or loading configs.
|
|
128
|
-
*/
|
|
129
|
-
export function chooseAutoModel<T extends AutoPickCandidate>(
|
|
130
|
-
candidates: T[],
|
|
131
|
-
defaultRepoId: string,
|
|
132
|
-
fitsFullBudget: (c: T) => boolean,
|
|
133
|
-
fitsCoexistBudget: (c: T) => boolean,
|
|
134
|
-
): T | undefined {
|
|
135
|
-
const preferred = candidates.find((c) => c.repoId === defaultRepoId);
|
|
136
|
-
if (preferred && fitsFullBudget(preferred)) return preferred;
|
|
137
|
-
const bySizeDesc = [...candidates].sort((a, b) => b.sizeBytes - a.sizeBytes);
|
|
138
|
-
return bySizeDesc.find(fitsCoexistBudget) ?? bySizeDesc.find(fitsFullBudget);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
export interface FitReport extends MemoryPlan {
|
|
142
|
-
readonly strategy: "generic-kv";
|
|
143
|
-
readonly predictedDecodeTps: number;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export function fit(
|
|
147
|
-
config: ModelConfig,
|
|
148
|
-
weightsBytes: number,
|
|
149
|
-
ctx: number,
|
|
150
|
-
machine: MachineSpec = thisMachine(),
|
|
151
|
-
chunk: number = DEFAULT_CHUNK,
|
|
152
|
-
/** Bytes of `.experts.` tensors (registry). MoE decode reads only
|
|
153
|
-
* top_k/num_experts of them per token; residency still needs all. */
|
|
154
|
-
expertsBytes = 0,
|
|
155
|
-
/** Explicit memory budget in bytes (admission control). When set it
|
|
156
|
-
* replaces the machine-derived usable ceiling (ram × WIRED_FRACTION)
|
|
157
|
-
* outright — the budget IS the usable envelope. */
|
|
158
|
-
usableBytes?: number,
|
|
159
|
-
/** Active KV-quant scheme; a quantized cache holds more context in the
|
|
160
|
-
* same budget, so the solved ceiling (and admission) must bill it. */
|
|
161
|
-
kvScheme?: FitKvScheme,
|
|
162
|
-
): FitReport {
|
|
163
|
-
const usable = usableBytes ?? machine.ramBytes * WIRED_FRACTION;
|
|
164
|
-
// Prefill transient = the calibrated per-chunk-token constant + the
|
|
165
|
-
// SDPA-fallback scores tensor (heads × min(chunk, ctx) × ctx × 2 B) for
|
|
166
|
-
// attention layers whose head dim MLX cannot fuse (kv-scheme.ts). The
|
|
167
|
-
// second term is what grows with context on Qwen3.x (head_dim 256) and
|
|
168
|
-
// Gemma 4 (256/512) and was unbilled before 2026-09-08.
|
|
169
|
-
const transientAt = (n: number) =>
|
|
170
|
-
Math.min(chunk, n) * TRANSIENT_PER_TOKEN + sdpaFallbackBytes(config, chunk, n);
|
|
171
|
-
const transient = transientAt(ctx);
|
|
172
|
-
const kv = kvBytesAt(config, ctx, kvScheme);
|
|
173
|
-
const total = weightsBytes + kv + transient;
|
|
174
|
-
|
|
175
|
-
// solve max context: weights + kv(n) + transient(n) ≤ usable. The same
|
|
176
|
-
// formula `fits` uses, so the solved ceiling always fits. It is monotone
|
|
177
|
-
// in n (KV linear, sliding saturating at the window, scores quadratic
|
|
178
|
-
// below the chunk then linear), so bisect over [0, maxPositionEmbeddings].
|
|
179
|
-
const totalAt = (n: number) => weightsBytes + kvBytesAt(config, n, kvScheme) + transientAt(n);
|
|
180
|
-
let maxCtx = 0;
|
|
181
|
-
{
|
|
182
|
-
let lo = 0;
|
|
183
|
-
let hi = Math.max(0, Math.floor(config.text.maxPositionEmbeddings));
|
|
184
|
-
if (totalAt(hi) <= usable) lo = hi;
|
|
185
|
-
else {
|
|
186
|
-
// invariant: totalAt(lo) ≤ usable (lo = 0 may itself not fit → 0)
|
|
187
|
-
if (totalAt(0) > usable) hi = 0;
|
|
188
|
-
while (hi - lo > 1) {
|
|
189
|
-
const mid = Math.floor((lo + hi) / 2);
|
|
190
|
-
if (totalAt(mid) <= usable) lo = mid;
|
|
191
|
-
else hi = mid;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
maxCtx = lo;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
// decode reads all weights + the KV cache once per token — except MoE
|
|
198
|
-
// expert weights, where only top_k of num_experts are touched per token
|
|
199
|
-
const t = config.text;
|
|
200
|
-
const isMoe = t.enableMoeBlock && t.numExperts > 0;
|
|
201
|
-
const expertsSkipped = isMoe
|
|
202
|
-
? expertsBytes * (1 - t.topKExperts / t.numExperts)
|
|
203
|
-
: 0;
|
|
204
|
-
const bytesPerToken = weightsBytes - expertsSkipped + kv;
|
|
205
|
-
const predictedDecodeTps =
|
|
206
|
-
((machine.bandwidthGBs * 1e9) / bytesPerToken) *
|
|
207
|
-
(isMoe ? MOE_DECODE_EFFICIENCY : DECODE_EFFICIENCY);
|
|
208
|
-
|
|
209
|
-
return {
|
|
210
|
-
schemaVersion: 1,
|
|
211
|
-
strategy: "generic-kv",
|
|
212
|
-
fits: total <= usable,
|
|
213
|
-
contextTokens: ctx,
|
|
214
|
-
weightsBytes,
|
|
215
|
-
kvBytes: kv,
|
|
216
|
-
transientBytes: transient,
|
|
217
|
-
reserveBytes: 0,
|
|
218
|
-
totalBytes: total,
|
|
219
|
-
usableBytes: usable,
|
|
220
|
-
maxSafeContext: maxCtx,
|
|
221
|
-
predictedDecodeTps,
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/** The SKU matrix: which Apple Silicon configs run this model at `ctx`. */
|
|
226
|
-
export function skuMatrix(
|
|
227
|
-
config: ModelConfig, weightsBytes: number, ctx: number, expertsBytes = 0,
|
|
228
|
-
kvScheme?: FitKvScheme,
|
|
229
|
-
): { sku: string; ramGB: number; fits: boolean; maxContext: number; decodeTps: number }[] {
|
|
230
|
-
const rows: ReturnType<typeof skuMatrix> = [];
|
|
231
|
-
for (const sku of APPLE_SKUS) {
|
|
232
|
-
for (const ram of sku.ramOptions) {
|
|
233
|
-
const m: MachineSpec = {
|
|
234
|
-
name: `${sku.chip} ${ram}GB`,
|
|
235
|
-
ramBytes: ram * 2 ** 30,
|
|
236
|
-
bandwidthGBs: sku.bandwidthGBs,
|
|
237
|
-
};
|
|
238
|
-
const r = fit(config, weightsBytes, ctx, m, DEFAULT_CHUNK, expertsBytes, undefined, kvScheme);
|
|
239
|
-
rows.push({
|
|
240
|
-
sku: sku.chip,
|
|
241
|
-
ramGB: ram,
|
|
242
|
-
fits: r.fits,
|
|
243
|
-
maxContext: r.maxSafeContext,
|
|
244
|
-
decodeTps: r.predictedDecodeTps,
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
return rows;
|
|
249
|
-
}
|