mlx-bun 0.4.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1453 -88
- package/THIRD_PARTY_NOTICES.md +882 -0
- package/bin/mlx-bun.convert.mjs +4 -0
- package/bin/mlx-bun.fuse.mjs +4 -0
- package/bin/mlx-bun.generate.mjs +4 -0
- package/bin/mlx-bun.lora.mjs +4 -0
- package/bin/mlx-bun.mjs +13 -21
- package/bin/mlx-bun.server.mjs +4 -0
- package/bin/mlx-bun.upload.mjs +4 -0
- package/dist/web/app.js +9584 -0
- package/package.json +50 -53
- package/src/cli/ane-install.ts +76 -0
- package/src/cli/args.ts +179 -0
- package/src/cli/engine-entry.ts +68 -0
- package/src/cli/inference.ts +214 -0
- package/src/cli/job-entry.ts +97 -0
- package/src/cli/library-host.ts +117 -0
- package/src/cli/main.ts +57 -0
- package/src/cli/memory-engine.ts +163 -0
- package/src/cli/memory.ts +36 -0
- package/src/cli/mlx-lm-aliases.ts +309 -0
- package/src/cli/model-choice.ts +33 -0
- package/src/cli/model-selection.ts +84 -0
- package/src/cli/module-host.ts +11 -0
- package/src/cli/module-verbs.ts +50 -0
- package/src/cli/numerical-policy.ts +12 -0
- package/src/cli/perplexity.ts +89 -0
- package/src/cli/serve-host.ts +423 -0
- package/src/cli/serve-isolated.ts +217 -0
- package/src/cli/serve-options.ts +106 -0
- package/src/cli/serve-state.ts +205 -0
- package/src/cli/serve.ts +500 -0
- package/src/cli/served-model-host.ts +102 -0
- package/src/cli/server-entry.ts +148 -0
- package/src/cli/serving-unit.ts +177 -0
- package/src/{tui.ts → cli/terminal.ts} +13 -8
- package/src/cli/worker-adapters.ts +34 -0
- package/src/cli/worker-entry.ts +272 -0
- package/src/cli/worker-unit.ts +179 -0
- package/src/engine/adapter-operation.ts +26 -0
- package/src/engine/cache-services.ts +114 -0
- package/src/engine/completion.ts +39 -0
- package/src/engine/generation-gateway.ts +358 -0
- package/src/engine/index.ts +59 -0
- package/src/engine/kv-budget.ts +120 -0
- package/src/engine/media-preparation.ts +232 -0
- package/src/engine/model-binding.ts +24 -0
- package/src/engine/model-host.ts +513 -0
- package/src/engine/model-serving.ts +89 -0
- package/src/{serve → engine}/preparation.ts +10 -8
- package/src/{serve → engine}/session-completion-engine.ts +6 -6
- package/src/engine/telemetry.ts +109 -0
- package/src/hub/downloads.ts +116 -0
- package/src/jobs/db.ts +16 -7
- package/src/jobs/events.ts +29 -0
- package/src/jobs/executable.ts +5 -0
- package/src/jobs/host.ts +51 -0
- package/src/jobs/in-process.ts +55 -0
- package/src/{contracts/jobs.ts → jobs/protocol.ts} +7 -9
- package/src/jobs/runner.ts +150 -231
- package/src/jobs/service.ts +75 -0
- package/src/jobs/sse.ts +59 -23
- package/src/jobs/worker-memory.ts +46 -0
- package/src/jobs/worker-process.ts +163 -0
- package/src/jobs/worker-supervisor.ts +258 -0
- package/src/modules.ts +58 -0
- package/src/publishing/catalog-hub.ts +18 -0
- package/src/publishing/credentials.ts +31 -0
- package/src/publishing/upload.ts +37 -0
- package/src/residency/leased-adapters.ts +21 -0
- package/src/residency/local-records.ts +16 -0
- package/src/residency/model-residency.ts +405 -0
- package/src/residency/record-index.ts +28 -0
- package/src/residency/resident-estimate.ts +50 -0
- package/src/{anthropic.ts → server/anthropic.ts} +3 -81
- package/src/server/cache-routes.ts +36 -0
- package/src/{serve → server}/chat-request.ts +12 -10
- package/src/{serve → server}/chat-stage.ts +27 -22
- package/src/{client.ts → server/client.ts} +28 -2
- package/src/{serve → server}/completion-executor.ts +42 -42
- package/src/server/decision-body.ts +55 -0
- package/src/server/decision-routes.ts +134 -0
- package/src/server/decision-wire.ts +228 -0
- package/src/{serve → server}/discovery-routes.ts +42 -83
- package/src/server/generated-token-history.ts +57 -0
- package/src/{serve → server}/http.ts +25 -13
- package/src/{serve → server}/inference-request.ts +5 -5
- package/src/server/job-routes.ts +20 -0
- package/src/server/media-prompt.ts +63 -0
- package/src/server/memory-completion-client.ts +46 -0
- package/src/server/model-routes.ts +192 -0
- package/src/{serve → server}/openai-wire.ts +3 -2
- package/src/{serve → server}/pipeline.ts +1 -1
- package/src/server/prompt-builder.ts +13 -0
- package/src/server/prompt-contracts.ts +17 -0
- package/src/server/proxy-routes.ts +187 -0
- package/src/server/publishing-routes.ts +41 -0
- package/src/{serve → server}/request-plan.ts +8 -8
- package/src/{serve → server}/request-prep.ts +82 -68
- package/src/{serve → server}/responses-client.ts +30 -13
- package/src/{responses.ts → server/responses.ts} +12 -93
- package/src/server/routes.ts +205 -0
- package/src/server/start.ts +72 -0
- package/src/server/status-routes.ts +108 -0
- package/src/{serve → server}/text-completion-stage.ts +25 -4
- package/src/server/text-prompt.ts +12 -0
- package/src/{serve → server}/token-streams.ts +36 -38
- package/src/server/worker-routes.ts +311 -0
- package/src/storage/paths.ts +61 -0
- package/src/web/assets.ts +37 -0
- package/src/web/{src → browser}/api.ts +5 -23
- package/src/web/browser/chat-host.ts +17 -0
- package/src/web/browser/installed-panels.ts +6 -0
- package/src/web/browser/main.ts +55 -0
- package/src/web/browser/markdown.ts +279 -0
- package/src/web/browser/memory-panel.ts +9 -0
- package/src/web/browser/palette.ts +64 -0
- package/src/web/browser/protocol.ts +13 -0
- package/src/web/browser/shell.ts +467 -0
- package/src/web/{src → browser}/status.ts +32 -36
- package/src/web/build.ts +51 -0
- package/src/web/public/app.html +1054 -0
- package/src/web/{sw.js → public/sw.js} +4 -3
- package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
- package/src/web/{vendor → public/vendor}/hljs.js +2 -2
- package/THIRD_PARTY_LICENSES.md +0 -51
- package/docs/README.md +0 -94
- package/docs/archive/hlg-sampling.md +0 -350
- package/docs/archive/investigations/audio-input-plan.md +0 -356
- package/docs/archive/investigations/chunk-finetune-experiment.md +0 -84
- package/docs/archive/investigations/colibri-glm52-port.md +0 -1486
- package/docs/archive/investigations/colibri-oracle-pin.md +0 -1284
- package/docs/archive/investigations/curve-bisector-routing.md +0 -123
- package/docs/archive/investigations/decode-roofline-lookagain.md +0 -348
- package/docs/archive/investigations/diffusion-gemma-port.md +0 -602
- package/docs/archive/investigations/dspark-handoff.md +0 -224
- package/docs/archive/investigations/expert-offload-single-user-moe.md +0 -292
- package/docs/archive/investigations/faithful-l1-consolidation.md +0 -310
- package/docs/archive/investigations/hlg-sampling-investigation.md +0 -970
- package/docs/archive/investigations/indexshare-performance-spike.md +0 -357
- package/docs/archive/investigations/kernel-perf-review-2026-07.md +0 -171
- package/docs/archive/investigations/lab-build-journal.md +0 -157
- package/docs/archive/investigations/minicpm5-decode-megakernel.md +0 -489
- package/docs/archive/investigations/openjarvis-fit.md +0 -198
- package/docs/archive/investigations/openwiki-evaluation.md +0 -249
- package/docs/archive/investigations/optimization_plan.md +0 -346
- package/docs/archive/investigations/orpo-base-uf-experiment-and-directions.md +0 -120
- package/docs/archive/investigations/orpo-flash-cce-pin-leak.md +0 -167
- package/docs/archive/investigations/orpo-uf-testing-handoff.md +0 -126
- package/docs/archive/investigations/pareto-specialized-runtime-findings.md +0 -92
- package/docs/archive/investigations/pi-builtin-investigation.md +0 -308
- package/docs/archive/investigations/pre-colibri-stabilization.md +0 -329
- package/docs/archive/investigations/qwen38-27b-campaign-log.md +0 -1092
- package/docs/archive/investigations/segmented-backward-handoff.md +0 -148
- package/docs/archive/investigations/starter-model-port-handoff.md +0 -342
- package/docs/archive/investigations/steel-flash-cce-handoff.md +0 -489
- package/docs/archive/investigations/the-dreaming-handoff.md +0 -141
- package/docs/archive/investigations/trainer-validation-experiment.md +0 -173
- package/docs/archive/planning/chat-ui-vision-memory-first.md +0 -199
- package/docs/archive/planning/chat-ui-vision.md +0 -50
- package/docs/archive/planning/chunk-task-roadmap.md +0 -77
- package/docs/archive/planning/curve-sampler-research-plan.md +0 -331
- package/docs/archive/planning/journal.md +0 -316
- package/docs/archive/planning/memory-docs-and-dag-plan.md +0 -194
- package/docs/archive/planning/pi-integration-review.md +0 -178
- package/docs/archive/planning/release-notes-v0.0.10.md +0 -57
- package/docs/archive/planning/release-notes-v0.0.11.md +0 -239
- package/docs/archive/planning/release-notes-v0.0.12.md +0 -80
- package/docs/archive/planning/release-notes-v0.0.13.md +0 -77
- package/docs/archive/planning/release-notes-v0.0.9.md +0 -122
- package/docs/archive/planning/release-notes-v0.2.0.md +0 -49
- package/docs/archive/planning/release-notes-v0.3.0.md +0 -35
- package/docs/archive/planning/web-ui-pass-plan.md +0 -213
- package/docs/archive/planning/website-readme-pass-plan.md +0 -224
- package/docs/design/batching.md +0 -1841
- package/docs/design/decode-speed-program.md +0 -2349
- package/docs/design/dreaming-nightly-pipeline.md +0 -684
- package/docs/design/generic-model-support.md +0 -705
- package/docs/design/kv-cache.md +0 -824
- package/docs/design/orpo-training.md +0 -680
- package/docs/design/speculative-decoding.md +0 -1990
- package/docs/design/turboquant.md +0 -2212
- package/docs/design/unified-engine-frontier-plan.md +0 -1880
- package/docs/design/web-chat-redesign.md +0 -695
- package/docs/planning/PRODUCT_ROADMAP.md +0 -594
- package/docs/planning/ResearchTopics.md +0 -119
- package/docs/planning/release-notes-v0.4.0.md +0 -45
- package/docs/planning/video-series.md +0 -421
- package/docs/reference/benchmarks.md +0 -3613
- package/docs/reference/cli.md +0 -585
- package/docs/reference/distribution.md +0 -355
- package/docs/reference/environment.md +0 -398
- package/docs/reference/glossary.md +0 -39
- package/docs/reference/library-api.md +0 -674
- package/docs/reference/memory.md +0 -260
- package/docs/reference/models.md +0 -334
- package/docs/reference/server-api.md +0 -1775
- package/docs/reference/server-config.md +0 -846
- package/docs/reference/training.md +0 -462
- package/docs/reference/troubleshooting.md +0 -158
- package/src/admission-plan.ts +0 -18
- package/src/audio/conformer.ts +0 -647
- package/src/audio/decode.ts +0 -133
- package/src/audio/features.ts +0 -202
- package/src/audio/transcode.ts +0 -67
- package/src/backends/mlx/assistant-target.ts +0 -46
- package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
- package/src/backends/mlx/autoregressive.ts +0 -108
- package/src/backends/mlx/batch-group.ts +0 -1790
- package/src/backends/mlx/cache-attachment.ts +0 -67
- package/src/backends/mlx/cache-layout.ts +0 -31
- package/src/backends/mlx/checkpoint-state.ts +0 -53
- package/src/backends/mlx/continuation-persistence.ts +0 -106
- package/src/backends/mlx/continuation-request.ts +0 -43
- package/src/backends/mlx/continuation.ts +0 -77
- package/src/backends/mlx/diffusion.ts +0 -39
- package/src/backends/mlx/draft-target.ts +0 -32
- package/src/backends/mlx/evaluation.ts +0 -105
- package/src/backends/mlx/fill-append.ts +0 -45
- package/src/backends/mlx/full-kv-row-append.ts +0 -32
- package/src/backends/mlx/full-kv-row-donor.ts +0 -54
- package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
- package/src/backends/mlx/gateway-binding.ts +0 -130
- package/src/backends/mlx/graph.ts +0 -38
- package/src/backends/mlx/kv-codec.ts +0 -9
- package/src/backends/mlx/kv-maintenance.ts +0 -133
- package/src/backends/mlx/kv-tensor-rows.ts +0 -212
- package/src/backends/mlx/memory-client.ts +0 -189
- package/src/backends/mlx/methods.ts +0 -90
- package/src/backends/mlx/model-prompt.ts +0 -164
- package/src/backends/mlx/model-serving.ts +0 -79
- package/src/backends/mlx/prefill-cohort.ts +0 -89
- package/src/backends/mlx/prefill-rows.ts +0 -200
- package/src/backends/mlx/prefill.ts +0 -33
- package/src/backends/mlx/projected-context-rows.ts +0 -72
- package/src/backends/mlx/request-policy.ts +0 -20
- package/src/backends/mlx/request-state-policy.ts +0 -41
- package/src/backends/mlx/rollback.ts +0 -89
- package/src/backends/mlx/row-sampling.ts +0 -49
- package/src/backends/mlx/serial-executor.ts +0 -242
- package/src/backends/mlx/speculative-group.ts +0 -359
- package/src/backends/mlx/speculative-round.ts +0 -161
- package/src/backends/mlx/speculative.ts +0 -114
- package/src/backends/mlx/state-rows.ts +0 -104
- package/src/backends/mlx/state-views.ts +0 -46
- package/src/backends/mlx/target-layout-capability.ts +0 -35
- package/src/backends/mlx/text-engine.ts +0 -73
- package/src/backends/mlx/transitioning-kv-rows.ts +0 -165
- package/src/chat-template.ts +0 -382
- package/src/cli.ts +0 -3168
- package/src/config.ts +0 -399
- package/src/contracts/completion.ts +0 -16
- package/src/contracts/execution.ts +0 -60
- package/src/contracts/generation.ts +0 -103
- package/src/contracts/host.ts +0 -7
- package/src/contracts/pi-provider.ts +0 -30
- package/src/contracts/pi.ts +0 -259
- package/src/contracts/prefix-cache.ts +0 -23
- package/src/contracts/resources.ts +0 -25
- package/src/contracts/sampling.ts +0 -23
- package/src/contracts/scheduling.ts +0 -45
- package/src/contracts/tsconfig.json +0 -14
- package/src/dataset/generators.ts +0 -1087
- package/src/dataset/index.ts +0 -12
- package/src/dataset/job.ts +0 -81
- package/src/dataset/llm.ts +0 -71
- package/src/dataset/registry.ts +0 -528
- package/src/diffusion/diffusion-generate.ts +0 -507
- package/src/download.ts +0 -505
- package/src/embed.ts +0 -77
- package/src/engine/admission.ts +0 -59
- package/src/engine/cancellation.ts +0 -38
- package/src/engine/engine.ts +0 -56
- package/src/engine/execution-coordinator.ts +0 -70
- package/src/engine/execution-plan.ts +0 -53
- package/src/engine/resources.ts +0 -53
- package/src/engine/scheduler.ts +0 -72
- package/src/engine/session.ts +0 -247
- package/src/eval/README.md +0 -130
- package/src/eval/ifeval.ts +0 -81
- package/src/eval/kl-prompts.ts +0 -29
- package/src/eval/kl.ts +0 -590
- package/src/eval/perplexity.ts +0 -164
- package/src/eval/quality-db.ts +0 -92
- package/src/eval/reference-logits.ts +0 -207
- package/src/eval/runner.ts +0 -124
- package/src/eval/score.ts +0 -49
- package/src/eval/tasks/bfcl.ts +0 -535
- package/src/eval/tasks/gsm8k.ts +0 -98
- package/src/eval/tasks/hashhop.ts +0 -139
- package/src/eval/tasks/humaneval.ts +0 -275
- package/src/eval/tasks/ifeval.ts +0 -525
- package/src/eval/tasks/mmlu.ts +0 -157
- package/src/eval/ultrafeedback.ts +0 -60
- package/src/evaldb.ts +0 -199
- package/src/expert-io.ts +0 -393
- package/src/expert-offload-build.ts +0 -77
- package/src/expert-offload.ts +0 -76
- package/src/expert-residency.ts +0 -1134
- package/src/expert-usage.ts +0 -415
- package/src/fill/echo-index.ts +0 -188
- package/src/fill/fill-session.ts +0 -452
- package/src/fill/proposal.ts +0 -68
- package/src/fill/schema-rows.ts +0 -506
- package/src/fill/tool-boundary.ts +0 -103
- package/src/fit.ts +0 -249
- package/src/generate.ts +0 -1346
- package/src/grammar.ts +0 -591
- package/src/harness-pi.ts +0 -184
- package/src/hf-push.ts +0 -628
- package/src/hub-rest.ts +0 -242
- package/src/index.ts +0 -63
- package/src/inference/denoising.ts +0 -17
- package/src/inference/draft-acceptance.ts +0 -41
- package/src/inference/draft-output.ts +0 -49
- package/src/inference/graph.ts +0 -33
- package/src/inference/prefill.ts +0 -39
- package/src/inference/rollback.ts +0 -7
- package/src/jobs/index.ts +0 -31
- package/src/jobs/job-entry.ts +0 -107
- package/src/jobs/task-client.ts +0 -19
- package/src/jobs/types.ts +0 -2
- package/src/kv-scheme.ts +0 -257
- package/src/kv-store.ts +0 -1099
- package/src/lab/README.md +0 -18
- package/src/lab/curve/curve-designer.html +0 -303
- package/src/lab/curve/curve-sampler.ts +0 -122
- package/src/lab/expert-trace/expert-trace.ts +0 -69
- package/src/lab/paged-kv/paged-kv-rows.ts +0 -83
- package/src/lab/paged-kv/paged-kv.ts +0 -270
- package/src/library.ts +0 -40
- package/src/lora.ts +0 -408
- package/src/md-modules.d.ts +0 -49
- package/src/media-fetch.ts +0 -442
- package/src/memory/article.ts +0 -558
- package/src/memory/chunk-validation.ts +0 -150
- package/src/memory/chunk.ts +0 -318
- package/src/memory/cluster.ts +0 -351
- package/src/memory/coverage.ts +0 -134
- package/src/memory/crosslink.ts +0 -0
- package/src/memory/db.ts +0 -253
- package/src/memory/entity.ts +0 -203
- package/src/memory/gate.ts +0 -187
- package/src/memory/history.ts +0 -152
- package/src/memory/ingest.ts +0 -335
- package/src/memory/model.ts +0 -183
- package/src/memory/normalize.ts +0 -671
- package/src/memory/parse.ts +0 -22
- package/src/memory/pipeline.ts +0 -275
- package/src/memory/prompts.ts +0 -65
- package/src/memory/query.ts +0 -334
- package/src/memory/reconcile.ts +0 -734
- package/src/memory/redirect.ts +0 -108
- package/src/memory/reindex.ts +0 -325
- package/src/memory/resolve.ts +0 -307
- package/src/memory/rest.ts +0 -245
- package/src/memory/route.ts +0 -272
- package/src/memory/schedule.ts +0 -165
- package/src/memory/stages.ts +0 -777
- package/src/memory/synthesize.ts +0 -1638
- package/src/memory/tools.ts +0 -749
- package/src/memory/vault.ts +0 -1194
- package/src/memory/wikify.ts +0 -1064
- package/src/mlx/array.ts +0 -388
- package/src/mlx/autograd.ts +0 -304
- package/src/mlx/checkpoint.ts +0 -149
- package/src/mlx/compile.ts +0 -168
- package/src/mlx/custom-vjp.ts +0 -188
- package/src/mlx/ffi.ts +0 -512
- package/src/mlx/materialize.ts +0 -23
- package/src/mlx/metal-kernel.ts +0 -159
- package/src/mlx/ops.ts +0 -1021
- package/src/mlx/quantized-rows.ts +0 -36
- package/src/mlx/token-bitmask.ts +0 -52
- package/src/mlx/turboquant-kv-decode.ts +0 -82
- package/src/mlx/turboquant-kv-inverse.ts +0 -122
- package/src/mlx/turboquant-ops.ts +0 -861
- package/src/mlx/turboquant-tables.ts +0 -237
- package/src/mmap.ts +0 -90
- package/src/model/artifact-identity.ts +0 -73
- package/src/model/batched-kv.ts +0 -235
- package/src/model/batched-mask.ts +0 -279
- package/src/model/batched-quant.ts +0 -212
- package/src/model/batched-quantized-kv.ts +0 -144
- package/src/model/batched-rotating-quant.ts +0 -353
- package/src/model/batched-rotating-state.ts +0 -149
- package/src/model/batched-rotating.ts +0 -338
- package/src/model/batched-row-storage.ts +0 -179
- package/src/model/batched-ssm.ts +0 -52
- package/src/model/batched-turboquant-kv.ts +0 -93
- package/src/model/compiled-decode.ts +0 -712
- package/src/model/decoded-kv-donor.ts +0 -12
- package/src/model/delayed-quantized-kv.ts +0 -72
- package/src/model/delayed-rotating-quantized-kv.ts +0 -93
- package/src/model/delayed-turboquant-kv.ts +0 -55
- package/src/model/diffusion-gemma.ts +0 -1026
- package/src/model/factory.ts +0 -189
- package/src/model/fingerprint.ts +0 -33
- package/src/model/flash-attention.ts +0 -694
- package/src/model/full-prefill-padding.ts +0 -56
- package/src/model/full-prefill-row.ts +0 -105
- package/src/model/gemma4-base.ts +0 -2351
- package/src/model/gemma4.ts +0 -1315
- package/src/model/generated/gemma4-12b.ts +0 -429
- package/src/model/generated/gemma4-26b.ts +0 -448
- package/src/model/generated/gemma4-e4b.ts +0 -717
- package/src/model/generated/index.ts +0 -18
- package/src/model/glm52-atlas.ts +0 -511
- package/src/model/glm52-cache.ts +0 -792
- package/src/model/glm52-config.ts +0 -262
- package/src/model/glm52-container.ts +0 -305
- package/src/model/glm52-coupling.ts +0 -388
- package/src/model/glm52-dsa.ts +0 -606
- package/src/model/glm52-expert-layout.ts +0 -253
- package/src/model/glm52-layout.ts +0 -152
- package/src/model/glm52-memory.ts +0 -500
- package/src/model/glm52-mla.ts +0 -792
- package/src/model/glm52-moe.ts +0 -223
- package/src/model/glm52-pilot.ts +0 -537
- package/src/model/glm52-reference.ts +0 -445
- package/src/model/glm52-residency.ts +0 -557
- package/src/model/glm52-resident-weights.ts +0 -135
- package/src/model/glm52-streamed-experts.ts +0 -453
- package/src/model/glm52-streamed-metal.ts +0 -610
- package/src/model/glm52-weights.ts +0 -503
- package/src/model/glm52.ts +0 -1132
- package/src/model/implementation.ts +0 -69
- package/src/model/kv-attention-view.ts +0 -67
- package/src/model/minicpm5.ts +0 -376
- package/src/model/profile.ts +0 -443
- package/src/model/qwen-append.ts +0 -12
- package/src/model/qwen-conv.ts +0 -52
- package/src/model/qwen3-delta-state.ts +0 -74
- package/src/model/qwen3-delta.ts +0 -451
- package/src/model/qwen3-moe.ts +0 -404
- package/src/model/qwen3-mrope.ts +0 -252
- package/src/model/qwen3.ts +0 -277
- package/src/model/qwen3_5-checkpoint.ts +0 -164
- package/src/model/qwen3_5.ts +0 -819
- package/src/model/rotating-kv-donor.ts +0 -35
- package/src/model/rotating-kv-layout.ts +0 -262
- package/src/model/rotating-row-transaction.ts +0 -35
- package/src/model/speculative-rotating-kv.ts +0 -101
- package/src/model/ssm-prefill-padding.ts +0 -39
- package/src/model/support.ts +0 -102
- package/src/model/trellis-balanced-scatter.ts +0 -51
- package/src/model/trellis-linear.ts +0 -672
- package/src/model/trellis-shared-m.ts +0 -151
- package/src/model/trellis-shared-scatter.ts +0 -144
- package/src/model/trellis-splitk-prefill.ts +0 -158
- package/src/model/trellis-tiled-prefill.ts +0 -136
- package/src/model/trellis-vector-expand.ts +0 -62
- package/src/model/trellis-wide-prefill.ts +0 -94
- package/src/model/turboquant-codec.ts +0 -83
- package/src/model/universal/archs.ts +0 -332
- package/src/model/universal/dense.ts +0 -612
- package/src/model/universal/modules.ts +0 -170
- package/src/model/universal/rope.ts +0 -381
- package/src/native/expert_io.c +0 -523
- package/src/native/frame_extract.swift +0 -140
- package/src/native-pack.ts +0 -162
- package/src/pi-provider.ts +0 -53
- package/src/pi-session.ts +0 -81
- package/src/pi-terminal.ts +0 -274
- package/src/pi-web.ts +0 -1932
- package/src/preflight.ts +0 -158
- package/src/prompt-cache.ts +0 -460
- package/src/quantize/allocator.ts +0 -627
- package/src/quantize/atomic-output.ts +0 -38
- package/src/quantize/calibration.ts +0 -181
- package/src/quantize/config-writer.ts +0 -145
- package/src/quantize/index.ts +0 -84
- package/src/quantize/job.ts +0 -162
- package/src/quantize/quantizer.ts +0 -666
- package/src/quantize/rotate.ts +0 -603
- package/src/quantize/safetensors-writer.ts +0 -249
- package/src/quantize/sensitivity.ts +0 -216
- package/src/quantize/trellis.ts +0 -586
- package/src/quantize/weight-transform.ts +0 -292
- package/src/registry.ts +0 -602
- package/src/runtime-config.ts +0 -81
- package/src/safetensors.ts +0 -158
- package/src/sampler.ts +0 -1011
- package/src/serve/admin-routes.ts +0 -184
- package/src/serve/assets/curve-terrain.html +0 -105
- package/src/serve/assets/training-inference-map.html +0 -575
- package/src/serve/aux-routes.ts +0 -132
- package/src/serve/batch-scheduler.ts +0 -8
- package/src/serve/checkpoint-identity.ts +0 -64
- package/src/serve/generation-gateway.ts +0 -496
- package/src/serve/isolate.ts +0 -609
- package/src/serve/kv-budget.ts +0 -14
- package/src/serve/lab-routes.ts +0 -341
- package/src/serve/lane-registry.ts +0 -45
- package/src/serve/model-admin-routes.ts +0 -155
- package/src/serve/model-binding.ts +0 -43
- package/src/serve/model-host.ts +0 -511
- package/src/serve/parent-application.ts +0 -56
- package/src/serve/prompt-response-trace.ts +0 -147
- package/src/serve/response-lease.ts +0 -24
- package/src/serve/session-search.ts +0 -326
- package/src/serve/static-routes.ts +0 -101
- package/src/server.ts +0 -1314
- package/src/spec/assistant-rows.ts +0 -92
- package/src/spec/assistant-source.ts +0 -126
- package/src/spec/cache-identity.ts +0 -22
- package/src/spec/deepspec-rows.ts +0 -29
- package/src/spec/deepspec-source.ts +0 -145
- package/src/spec/dflash-source.ts +0 -149
- package/src/spec/drafter.ts +0 -304
- package/src/spec/dspark/ab-stats.ts +0 -136
- package/src/spec/dspark/calibration.ts +0 -112
- package/src/spec/dspark/data-dflash.ts +0 -156
- package/src/spec/dspark/data.ts +0 -201
- package/src/spec/dspark/deepspec-module.ts +0 -776
- package/src/spec/dspark/generate-dflash.ts +0 -245
- package/src/spec/dspark/generate.ts +0 -290
- package/src/spec/dspark/loader.ts +0 -23
- package/src/spec/dspark/loss.ts +0 -213
- package/src/spec/dspark/module-dflash.ts +0 -560
- package/src/spec/dspark/module.ts +0 -540
- package/src/spec/dspark/quantize-drafter.ts +0 -91
- package/src/spec/dspark/sample.ts +0 -112
- package/src/spec/generate.ts +0 -276
- package/src/spec/glm52-mtp-graph.ts +0 -29
- package/src/spec/glm52-mtp-rows.ts +0 -132
- package/src/spec/glm52-mtp-source.ts +0 -317
- package/src/spec/glm52-mtp-state.ts +0 -33
- package/src/spec/ngram-source.ts +0 -204
- package/src/spec/projected-draft-rows.ts +0 -73
- package/src/spec/qwen-mtp-module.ts +0 -171
- package/src/spec/qwen-mtp-rows.ts +0 -219
- package/src/spec/qwen-mtp-source.ts +0 -383
- package/src/spec/qwen-mtp-state.ts +0 -30
- package/src/spec/serve-loop.ts +0 -585
- package/src/spec/source.ts +0 -215
- package/src/spec/two-model-rows.ts +0 -61
- package/src/spec/two-model.ts +0 -113
- package/src/ssd-cache.ts +0 -372
- package/src/ssd-durability.ts +0 -211
- package/src/tokenizer.ts +0 -335
- package/src/tool-approvals.ts +0 -131
- package/src/tool-call.ts +0 -695
- package/src/train/dataset.ts +0 -484
- package/src/train/diffusion-lora.ts +0 -216
- package/src/train/export.ts +0 -32
- package/src/train/flash-cce.ts +0 -1234
- package/src/train/forward.ts +0 -266
- package/src/train/fuse.ts +0 -243
- package/src/train/index.ts +0 -46
- package/src/train/job.ts +0 -205
- package/src/train/lora-params.ts +0 -254
- package/src/train/loss.ts +0 -1591
- package/src/train/merge.ts +0 -195
- package/src/train/optimizer.ts +0 -183
- package/src/train/prefix-shared.ts +0 -490
- package/src/train/rank.ts +0 -137
- package/src/train/segmented.ts +0 -1828
- package/src/train/steel-qmm-header.ts +0 -1461
- package/src/train/trainer.ts +0 -1221
- package/src/train/watch.ts +0 -542
- package/src/vision/diffusion-vision.ts +0 -620
- package/src/vision/embedder.ts +0 -168
- package/src/vision/preprocess.ts +0 -247
- package/src/vision/prompt.ts +0 -373
- package/src/vision/qwen3vl-preprocess.ts +0 -409
- package/src/vision/qwen3vl-prompt.ts +0 -196
- package/src/vision/qwen3vl-tower.ts +0 -555
- package/src/vision/siglip.ts +0 -599
- package/src/vision/video-frames.ts +0 -148
- package/src/web/app.html +0 -2143
- package/src/web/app.js +0 -5703
- package/src/web/skills/memory/SKILL.md +0 -120
- package/src/web/skills/web-research/SKILL.md +0 -46
- package/src/web/skills.ts +0 -97
- package/src/web/src/adapters-panel.ts +0 -288
- package/src/web/src/assistant.ts +0 -451
- package/src/web/src/chat.ts +0 -1057
- package/src/web/src/composer.ts +0 -959
- package/src/web/src/dataset.ts +0 -132
- package/src/web/src/finetune.ts +0 -267
- package/src/web/src/hub.ts +0 -428
- package/src/web/src/main.ts +0 -98
- package/src/web/src/markdown.ts +0 -0
- package/src/web/src/memory-panel.ts +0 -572
- package/src/web/src/model-picker.ts +0 -159
- package/src/web/src/palette.ts +0 -346
- package/src/web/src/protocol.ts +0 -26
- package/src/web/src/quantize.ts +0 -167
- package/src/web/src/rag.ts +0 -274
- package/src/web/src/sessions.ts +0 -469
- package/src/web/src/shell.ts +0 -804
- package/src/web/src/ui-catalog.ts +0 -78
- package/src/web/vendor/README.md +0 -61
- package/src/web-assets.ts +0 -47
- package/src/web-tools.ts +0 -478
- package/src/weights.ts +0 -255
- /package/src/{serve → server}/completion-sink.ts +0 -0
- /package/src/web/{icon.svg → public/icon.svg} +0 -0
- /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
- /package/src/web/{vendor → public/vendor}/hljs-LICENSE +0 -0
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
// Paged KV cache — vLLM-style block-pool storage behind the standard Cache
|
|
2
|
-
// interface (docs/design/kv-cache.md). OPTIONAL and default-off
|
|
3
|
-
// (`--paged-kv` / GenerateOptions.pagedKv); Gemma4-family plain full-attention
|
|
4
|
-
// layers, bf16 only. PagedKvRows composes independent pools at B1/B>1.
|
|
5
|
-
//
|
|
6
|
-
// Storage: K/V live in fixed-size per-layer pool tensors
|
|
7
|
-
// [numBlocks, H_kv, blockSize, headDim]; a host-side block table maps the
|
|
8
|
-
// sequence's logical block order to physical pool slots. Writes go through
|
|
9
|
-
// ops.sliceUpdate into the tail block; reads gather the occupied blocks
|
|
10
|
-
// back into ONE contiguous [1, H, S, D] pair (ops.takeAxis over the pool's
|
|
11
|
-
// block axis + transpose + reshape) and hand that to the unchanged
|
|
12
|
-
// ops.sdpa call site — identical bytes to what a plain KVCache would have
|
|
13
|
-
// fetched, so the paged path is gated bit-exact, not KL-tolerated
|
|
14
|
-
// (tests/parity/paged-kv-parity.test.ts). The gather IS the cost: a full K/V copy
|
|
15
|
-
// per step, pure bandwidth tax at batch=1 — v1 ships the abstraction for
|
|
16
|
-
// the batched/CoW follow-ups, not a speed win (see the design doc's
|
|
17
|
-
// Motivation, which says this honestly).
|
|
18
|
-
//
|
|
19
|
-
// Deliberately NOT a KVCache subclass (the TurboQuantKVCache reasoning):
|
|
20
|
-
// compiled graph adapters exclude the changing block-list geometry. The
|
|
21
|
-
// cache-layout binding supplies dynamic rows independently of scheduling.
|
|
22
|
-
|
|
23
|
-
import { MlxArray } from "../../mlx/array";
|
|
24
|
-
import { Dtype } from "../../mlx/ffi";
|
|
25
|
-
import * as ops from "../../mlx/ops";
|
|
26
|
-
import { createCausalMask, type Cache, type Mask } from "../../model/gemma4-base";
|
|
27
|
-
|
|
28
|
-
/** Typed pool-exhaustion error: a generation outgrew its pool. Sizing from
|
|
29
|
-
* prompt+maxTokens at construction makes this unreachable in practice;
|
|
30
|
-
* it exists so an accounting bug is a clear throw, never silent
|
|
31
|
-
* truncation or an allocator OOM (the byte-capped-not-count-capped
|
|
32
|
-
* lesson). */
|
|
33
|
-
export class PagedPoolExhausted extends Error {
|
|
34
|
-
constructor(numBlocks: number) {
|
|
35
|
-
super(`paged KV pool exhausted (${numBlocks} blocks) — capacity accounting bug`);
|
|
36
|
-
this.name = "PagedPoolExhausted";
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** Per-layer block arena. One K and one V pool tensor, mlx-owned
|
|
41
|
-
* (ops.zeros — no host-pointer alignment/dtor hazards), shaped
|
|
42
|
-
* [numBlocks, H, blockSize, D]. alloc()/free() manage physical slot
|
|
43
|
-
* indices; the owning PagedKVCache writes/gathers through the pool. */
|
|
44
|
-
export class BlockPool {
|
|
45
|
-
keys: MlxArray;
|
|
46
|
-
values: MlxArray;
|
|
47
|
-
readonly numBlocks: number;
|
|
48
|
-
readonly blockSize: number;
|
|
49
|
-
#free: number[];
|
|
50
|
-
|
|
51
|
-
constructor(opts: {
|
|
52
|
-
numBlocks: number;
|
|
53
|
-
blockSize: number;
|
|
54
|
-
numKvHeads: number;
|
|
55
|
-
headDim: number;
|
|
56
|
-
/** V head dim when it differs from K's (attention_k_eq_v models don't
|
|
57
|
-
* reach v1's gemma4 scope, but the pool stays shape-honest). */
|
|
58
|
-
vHeadDim?: number;
|
|
59
|
-
dtype: Dtype;
|
|
60
|
-
}, source?: BlockPool) {
|
|
61
|
-
this.numBlocks = opts.numBlocks;
|
|
62
|
-
this.blockSize = opts.blockSize;
|
|
63
|
-
this.keys = source ? ops.contiguous(source.keys) : ops.zeros(
|
|
64
|
-
[opts.numBlocks, opts.numKvHeads, opts.blockSize, opts.headDim], opts.dtype);
|
|
65
|
-
this.values = source ? ops.contiguous(source.values) : ops.zeros(
|
|
66
|
-
[opts.numBlocks, opts.numKvHeads, opts.blockSize, opts.vHeadDim ?? opts.headDim],
|
|
67
|
-
opts.dtype);
|
|
68
|
-
// LIFO free list, low indices first — deterministic layout for tests.
|
|
69
|
-
this.#free = source ? [...source.#free] : Array.from({ length: opts.numBlocks }, (_, i) => opts.numBlocks - 1 - i);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Independent ownership and allocation metadata over immutable MLX buffers.
|
|
73
|
-
* Functional writes detach storage while another snapshot retains it. */
|
|
74
|
-
clone(): BlockPool {
|
|
75
|
-
return new BlockPool({ numBlocks: this.numBlocks, blockSize: this.blockSize,
|
|
76
|
-
numKvHeads: this.keys.shape[1]!, headDim: this.keys.shape[3]!,
|
|
77
|
-
vHeadDim: this.values.shape[3]!, dtype: this.keys.dtype }, this);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
get freeBlocks(): number {
|
|
81
|
-
return this.#free.length;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
alloc(): number {
|
|
85
|
-
const idx = this.#free.pop();
|
|
86
|
-
if (idx === undefined) throw new PagedPoolExhausted(this.numBlocks);
|
|
87
|
-
return idx;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
free(physIdx: number): void {
|
|
91
|
-
this.#free.push(physIdx);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/** Write `k`/`v` ([1, H, l, D], l ≤ blockSize − within) into physical
|
|
95
|
-
* block `physIdx` starting at row `within`. Functional slice_update:
|
|
96
|
-
* the pool tensors are single-referenced here, so mlx donates the
|
|
97
|
-
* buffer and the write is in-place in the steady state. */
|
|
98
|
-
writeBlock(physIdx: number, k: MlxArray, v: MlxArray, within: number): void {
|
|
99
|
-
const l = k.shape[2]!;
|
|
100
|
-
const [, H, , kD] = this.keys.shape as [number, number, number, number];
|
|
101
|
-
const vD = this.values.shape[3]!;
|
|
102
|
-
const k2 = ops.sliceUpdate(
|
|
103
|
-
this.keys, k, [physIdx, 0, within, 0], [physIdx + 1, H, within + l, kD]);
|
|
104
|
-
this.keys.dispose();
|
|
105
|
-
this.keys = k2;
|
|
106
|
-
const v2 = ops.sliceUpdate(
|
|
107
|
-
this.values, v, [physIdx, 0, within, 0], [physIdx + 1, H, within + l, vD]);
|
|
108
|
-
this.values.dispose();
|
|
109
|
-
this.values = v2;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/** Gather `blockTable`'s blocks in logical order into one contiguous
|
|
113
|
-
* [1, H, nb·blockSize, D] pair (the fetch copy). Caller owns both. */
|
|
114
|
-
gather(blockTable: number[]): [MlxArray, MlxArray] {
|
|
115
|
-
const idx = MlxArray.fromInt32(Int32Array.from(blockTable), [blockTable.length]);
|
|
116
|
-
const pick = (pool: MlxArray): MlxArray => {
|
|
117
|
-
const took = ops.takeAxis(pool, idx, 0); // [nb, H, bs, D]
|
|
118
|
-
const [nb, H, bs, D] = took.shape as [number, number, number, number];
|
|
119
|
-
const t = ops.transposeAxes(took, [1, 0, 2, 3]); // [H, nb, bs, D] (view)
|
|
120
|
-
took.dispose();
|
|
121
|
-
const out = ops.reshape(t, [1, H, nb * bs, D]); // materializes seq order
|
|
122
|
-
t.dispose();
|
|
123
|
-
return out;
|
|
124
|
-
};
|
|
125
|
-
const k = pick(this.keys);
|
|
126
|
-
const v = pick(this.values);
|
|
127
|
-
idx.dispose();
|
|
128
|
-
return [k, v];
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
dispose(): void {
|
|
132
|
-
this.keys.dispose();
|
|
133
|
-
this.values.dispose();
|
|
134
|
-
this.#free = [];
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/** Cache implementation over a BlockPool. Same values as a plain KVCache
|
|
139
|
-
* at every step (parity-gated); only the physical arrangement differs.
|
|
140
|
-
* The pool allocates lazily on the first write (KVCache's lazy-alloc
|
|
141
|
-
* shape): head count / head dims / dtype come from the first k/v pair,
|
|
142
|
-
* so the wiring (maybePageKv) needs no per-model shape plumbing. */
|
|
143
|
-
export class PagedKVCache implements Cache {
|
|
144
|
-
/** Distinct storage kind; the row adapter preserves its block pools. */
|
|
145
|
-
signature(): string { return "kv:paged"; }
|
|
146
|
-
/** Matches KVCache.STEP: v1's growth granularity is a permutation of
|
|
147
|
-
* today's 256-token step into fixed reusable slots, not a new tuning
|
|
148
|
-
* axis (--paged-kv-block-size overrides for experiments). */
|
|
149
|
-
static readonly DEFAULT_BLOCK_SIZE = 256;
|
|
150
|
-
/** Compiled-decode trace adapters never wrap paged caches (see Cache);
|
|
151
|
-
* always unset here. */
|
|
152
|
-
readonly ropeOffsetArr?: MlxArray;
|
|
153
|
-
offset = 0;
|
|
154
|
-
/** Logical block order → physical pool slot. */
|
|
155
|
-
blockTable: number[] = [];
|
|
156
|
-
pool: BlockPool | null = null;
|
|
157
|
-
|
|
158
|
-
constructor(
|
|
159
|
-
/** Tokens this cache must be able to hold (prompt + maxTokens). */
|
|
160
|
-
readonly capacityTokens: number,
|
|
161
|
-
readonly blockSize: number,
|
|
162
|
-
) {}
|
|
163
|
-
|
|
164
|
-
clone(): PagedKVCache {
|
|
165
|
-
const copy = new PagedKVCache(this.capacityTokens, this.blockSize);
|
|
166
|
-
copy.offset = this.offset;
|
|
167
|
-
copy.blockTable = [...this.blockTable];
|
|
168
|
-
copy.pool = this.pool?.clone() ?? null;
|
|
169
|
-
return copy;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
get #blockSize(): number {
|
|
173
|
-
return this.blockSize;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
/** Blocks needed to hold `n` tokens. */
|
|
177
|
-
#blocksFor(n: number): number {
|
|
178
|
-
return Math.ceil(n / this.#blockSize);
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
updateAndFetch(k: MlxArray, v: MlxArray): [MlxArray, MlxArray] {
|
|
182
|
-
const L = k.shape[2]!;
|
|
183
|
-
const [, H, , kD] = k.shape as [number, number, number, number];
|
|
184
|
-
const vD = v.shape[3]!;
|
|
185
|
-
if (!this.pool)
|
|
186
|
-
this.pool = new BlockPool({
|
|
187
|
-
numBlocks: poolBlocksFor(this.capacityTokens, this.blockSize),
|
|
188
|
-
blockSize: this.blockSize,
|
|
189
|
-
numKvHeads: H,
|
|
190
|
-
headDim: kD,
|
|
191
|
-
vHeadDim: vD,
|
|
192
|
-
dtype: k.dtype,
|
|
193
|
-
});
|
|
194
|
-
// Write, splitting the incoming L along block boundaries. Blocks past
|
|
195
|
-
// the current tail allocate from the free list as they're reached.
|
|
196
|
-
let written = 0;
|
|
197
|
-
while (written < L) {
|
|
198
|
-
const pos = this.offset + written;
|
|
199
|
-
const bi = Math.floor(pos / this.#blockSize);
|
|
200
|
-
const within = pos % this.#blockSize;
|
|
201
|
-
while (this.blockTable.length <= bi) this.blockTable.push(this.pool.alloc());
|
|
202
|
-
const l = Math.min(this.#blockSize - within, L - written);
|
|
203
|
-
// Full-range pieces skip the slice (fresh-view slice would be a
|
|
204
|
-
// gratuitous op); partial pieces slice the [written, written+l) rows.
|
|
205
|
-
if (l === L && written === 0) {
|
|
206
|
-
this.pool.writeBlock(this.blockTable[bi]!, k, v, within);
|
|
207
|
-
} else {
|
|
208
|
-
const kp = k.slice([0, 0, written, 0], [1, H, written + l, kD]);
|
|
209
|
-
const vp = v.slice([0, 0, written, 0], [1, H, written + l, vD]);
|
|
210
|
-
this.pool.writeBlock(this.blockTable[bi]!, kp, vp, within);
|
|
211
|
-
kp.dispose();
|
|
212
|
-
vp.dispose();
|
|
213
|
-
}
|
|
214
|
-
written += l;
|
|
215
|
-
}
|
|
216
|
-
this.offset += L;
|
|
217
|
-
|
|
218
|
-
// Fetch: gather occupied blocks contiguous, slice to the live prefix.
|
|
219
|
-
const nb = this.#blocksFor(this.offset);
|
|
220
|
-
const [gk, gv] = this.pool.gather(this.blockTable.slice(0, nb));
|
|
221
|
-
const keys = gk.slice([0, 0, 0, 0], [1, H, this.offset, kD]);
|
|
222
|
-
const values = gv.slice([0, 0, 0, 0], [1, H, this.offset, vD]);
|
|
223
|
-
gk.dispose();
|
|
224
|
-
gv.dispose();
|
|
225
|
-
return [keys, values];
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/** Same mask policy as KVCache.makeMask (it reads only offset). */
|
|
229
|
-
makeMask(N: number, windowSize: number | null): Mask {
|
|
230
|
-
if (N === 1) return { mode: "", arr: null };
|
|
231
|
-
if (windowSize === null) return { mode: "causal", arr: null };
|
|
232
|
-
if (this.offset === 0 && N <= windowSize) return { mode: "causal", arr: null };
|
|
233
|
-
return { mode: "array", arr: createCausalMask(N, this.offset, windowSize) };
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/** Pool tensors — what a prefill-chunk boundary must materialize.
|
|
237
|
-
* NOT prompt-cache-compatible in v1 (cloneKvCaches never sees paged
|
|
238
|
-
* caches; the serve lane bypasses take/put for paged requests). */
|
|
239
|
-
state(): MlxArray[] {
|
|
240
|
-
return this.pool ? [this.pool.keys, this.pool.values] : [];
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
isTrimmable(): boolean {
|
|
244
|
-
return true;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/** Rewind the last n tokens and return now-unoccupied tail blocks to
|
|
248
|
-
* the free list. Stale bytes past offset are never read (fetch slices
|
|
249
|
-
* to offset; writes cover exact ranges) — the KVCache padding
|
|
250
|
-
* invariant, block-shaped. */
|
|
251
|
-
trim(n: number): void {
|
|
252
|
-
this.offset = Math.max(0, this.offset - n);
|
|
253
|
-
const need = this.#blocksFor(this.offset);
|
|
254
|
-
while (this.blockTable.length > need) this.pool!.free(this.blockTable.pop()!);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
dispose(): void {
|
|
258
|
-
// The cache owns its pool in v1 (one sequence per pool).
|
|
259
|
-
this.pool?.dispose();
|
|
260
|
-
this.pool = null;
|
|
261
|
-
this.blockTable = [];
|
|
262
|
-
this.offset = 0;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/** Size a pool for one request: capacity tokens rounded up to whole
|
|
267
|
-
* blocks. Exported for the wiring in generate.ts (maybePageKv). */
|
|
268
|
-
export function poolBlocksFor(capacityTokens: number, blockSize: number): number {
|
|
269
|
-
return Math.max(1, Math.ceil(capacityTokens / blockSize));
|
|
270
|
-
}
|
package/src/library.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/** CPU-safe high-level entry. Native modules load only after bootstrap. */
|
|
2
|
-
export { createInferenceEngine } from "./engine/engine";
|
|
3
|
-
export { CancellationSource } from "./engine/cancellation";
|
|
4
|
-
export { createCompletionClient, createDirectHost } from "./client";
|
|
5
|
-
export type * from "./contracts/generation";
|
|
6
|
-
export type * from "./contracts/completion";
|
|
7
|
-
export type * from "./contracts/host";
|
|
8
|
-
|
|
9
|
-
/** Install/locate the native pack before importing the compatibility API. */
|
|
10
|
-
export async function initializeMlx(): Promise<typeof import("./index")> {
|
|
11
|
-
const { ensureNativeRuntime } = await import("./native-pack");
|
|
12
|
-
await ensureNativeRuntime();
|
|
13
|
-
return import("./index");
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/** Own one local worker. Model resolution and native initialization remain in
|
|
17
|
-
* the existing CLI; importing this module does not start it or download weights. */
|
|
18
|
-
export async function openIsolatedHost(model: string, options: {
|
|
19
|
-
arguments?: readonly string[];
|
|
20
|
-
command?: readonly string[];
|
|
21
|
-
readyTimeoutMs?: number;
|
|
22
|
-
} = {}): Promise<import("./contracts/host").EngineHost<Request, Response>> {
|
|
23
|
-
const { EngineChild } = await import("./serve/isolate");
|
|
24
|
-
const { tmpdir } = await import("node:os");
|
|
25
|
-
const { join } = await import("node:path");
|
|
26
|
-
const { fileURLToPath } = await import("node:url");
|
|
27
|
-
const source = fileURLToPath(new URL("./cli.ts", import.meta.url));
|
|
28
|
-
if (!options.command && source.includes("$bunfs"))
|
|
29
|
-
throw new Error("a compiled library consumer must supply the mlx-bun executable as command");
|
|
30
|
-
const command = options.command ?? [process.execPath, source];
|
|
31
|
-
if (!command.length) throw new Error("engine command must not be empty");
|
|
32
|
-
const socketPath = join(tmpdir(), `mlx-bun-library-${crypto.randomUUID()}.sock`);
|
|
33
|
-
const host = new EngineChild({
|
|
34
|
-
argv: [...command,
|
|
35
|
-
"serve", "--model", model, ...options.arguments ?? [], "--unix", socketPath, "--no-open"],
|
|
36
|
-
socketPath, readyTimeoutMs: options.readyTimeoutMs,
|
|
37
|
-
});
|
|
38
|
-
try { await host.ready; return host; }
|
|
39
|
-
catch (error) { await host.close(); throw error; }
|
|
40
|
-
}
|