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,194 +0,0 @@
|
|
|
1
|
-
# Memory docs organization + DAG-view refresh — review & plan
|
|
2
|
-
|
|
3
|
-
Status: **proposal**, 2026-07-01. Read-only review; nothing here has been
|
|
4
|
-
executed. Two mandates: (A) get the Dreaming doc set into an organized state,
|
|
5
|
-
(B) assess and plan the refresh of the parity-tier DAG view. Josh's live,
|
|
6
|
-
uncommitted edits (`dreaming-nightly-pipeline.md` + the two SUPERSEDED banners)
|
|
7
|
-
are treated as the direction of record and untouched.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## A. The Dreaming doc set
|
|
12
|
-
|
|
13
|
-
### A.1 Inventory — role and verdict per doc
|
|
14
|
-
|
|
15
|
-
| Doc | Role | State (verified 2026-07-01) | Verdict |
|
|
16
|
-
|---|---|---|---|
|
|
17
|
-
| `docs/design/dreaming-nightly-pipeline.md` (new, uncommitted) | **CANONICAL system design** — pipeline, fixed principles, decisions-overridden table, work plan | Current; self-declares supersession over master-plan / memory-synthesis / handoff | **Keep as the hub.** It's already the entry point by construction. |
|
|
18
|
-
| `docs/design/the-dreaming-master-plan.md` | Execution spec (P0–P10 task DAG, port-source map, schemas) | Bannered PARTIALLY SUPERSEDED (Josh's edit). Carries no as-built state — a reader can't tell P0–P9 are DONE | Keep, banner is right. **Add a one-line as-built note** ("built through P9; live state in STATUS.md") so the task list reads as history+reference, not TODO. |
|
|
19
|
-
| `docs/design/the-dreaming-handoff.md` | Session log / live handoff (2026-06-28) | **Stale as a handoff:** cursor 720 (now 900/2096 paused), "everything is uncommitted" (merged 2026-07-01), "wire through persistent server" (in-process gateway landed instead), batch default (now 1). Lessons §1–8 remain valuable | **Demote to historical.** Banner: "Session log 2026-06-28 — live state is STATUS.md § THE DREAMING; the numbered LEARNED/CORRECTED list remains load-bearing." Stop maintaining two live handoffs. |
|
|
20
|
-
| `docs/design/memory-synthesis.md` | M1 design, 1st iteration (embeddings, section-route) | Bannered SUPERSEDED (Josh's edit) | Keep for history. No further action. |
|
|
21
|
-
| `docs/design/bucketing-stage.md` | Classify-stage design (2026-06-26) | **No banner.** Core content (embeddings as candidate-narrower) is dead under "no embeddings anywhere"; the binary-question ladder survives inside the nightly BUCKET stage | **Needs a SUPERSEDED banner** (same shape as memory-synthesis's): dead = embedding narrower + silhouette; survives = capacity-by-decomposition, one-binary-question-at-a-time. |
|
|
22
|
-
| `docs/design/write-pipeline-entity.md` | Entity-keyed routing design (2026-06-26); itself "supersedes bucket-centric routing" | **No banner.** Half-dead: pure entity ROUTE (no bucket layer) is replaced by BUCKET→RESOLVE; the personal-notability checklist is dead. Survives: articles-are-THINGS, name/alias/category lookup, no-embeddings routing | **Needs a PARTIALLY SUPERSEDED banner** mapping survives/dead — otherwise its own "supersedes bucketing" claim inverts the actual chain for a newcomer. |
|
|
23
|
-
| `docs/design/memory-system.md` | M0 substrate design (vault, read tools, CLI, scheduling, consent) | **Status header is FALSE**: "synthesize is currently a safe no-op stub", "stage modules throw if called" — the pipeline is built and has produced 677+ articles. Directly contradicts `docs/reference/memory.md`. The four-adapter table + "Next implementation steps" describe the abandoned M1 sketch | **Fix the header + scope it down.** Retitle scope to "M0 substrate: vault + read path (landed)"; delete or banner the "Synthesis pipeline design (M1/M2)" and "Next implementation steps" sections, pointing at dreaming-nightly-pipeline. The substrate half (storage layout, tools, skill, scheduling, consent) is still the best writeup of the read side — keep it. |
|
|
24
|
-
| `docs/design/memory-inference-path.md` | Inference-path rework: design + measured verification | Accurate, self-bannered (BUILT + VERIFIED; batching measured a loss). It's really an investigation record | Fine as-is. Optional (low priority): move to `docs/archive/investigations/` where measured-experiment records live. |
|
|
25
|
-
| `docs/reference/memory.md` | User-facing reference | Mostly current (synthesize description matches as-built stages; status truth fixed 2026-07-01). **But** the "Synthesis roadmap" section still tells the old four-named-LoRA / HF-adapter-pack story (memory-bucket/memory-synthesis/memory-editor LoRAs "distributed from Hugging Face") — not the plan of record (`memory-<stage>` convention, only `memory-chunk` exists, base+policy otherwise) | **Rewrite the roadmap section** to the as-built stage list + the `memory-<stage>` adapter convention; update stage names again when BUCKET/RESOLVE land. |
|
|
26
|
-
| `STATUS.md` § THE DREAMING | Live state | Current and correct (batch default 1, third-person fix merged, import paused at cursor 900/2096, inference-path landed) | Keep as the ONLY live-state location. |
|
|
27
|
-
|
|
28
|
-
### A.2 Contradictions / staleness found (the concrete list)
|
|
29
|
-
|
|
30
|
-
1. **memory-system.md vs reference/memory.md** — "synthesize is a no-op stub"
|
|
31
|
-
vs "runs the full local synthesis DAG". Two tracked docs, opposite claims.
|
|
32
|
-
Worst offender; fix first.
|
|
33
|
-
2. **Stage-name drift across four vocabularies:**
|
|
34
|
-
- memory-system: `ingest→chunk→cluster→synthesize→wikify→changelog`
|
|
35
|
-
- memory-synthesis: `CHUNK→FILTER→CLASSIFY→SYNTHESIZE→NORMALIZE→WIKIFY`
|
|
36
|
-
- as-built (`stages.ts`, handoff, reference): `segment→extract→route→create/patch→reconcile→link→wikify`
|
|
37
|
-
- canonical target (nightly pipeline): `SEGMENT→BUCKET→RESOLVE→SYNTHESIZE→gates→RECONCILE→LINK→NORMALIZE→EDITORIAL`
|
|
38
|
-
Rule going forward: **reference/memory.md speaks as-built; dreaming-nightly-pipeline speaks target**; every other doc is history and says so.
|
|
39
|
-
3. **Unbannered middle links of the supersession chain**: the chain is
|
|
40
|
-
memory-synthesis → bucketing-stage → write-pipeline-entity → master-plan →
|
|
41
|
-
nightly-pipeline, and only the first and fourth links carry banners.
|
|
42
|
-
bucketing-stage still presents embeddings as production machinery;
|
|
43
|
-
write-pipeline-entity still presents the notability checklist.
|
|
44
|
-
4. **Two live handoffs** (the-dreaming-handoff.md and STATUS.md § Dreaming)
|
|
45
|
-
with diverged facts (cursor 720 vs 900; uncommitted vs merged).
|
|
46
|
-
5. **Four-adapter product story duplicated** (memory-system.md AND
|
|
47
|
-
reference/memory.md) vs the actual `memory-<stage>`-iff-exists convention.
|
|
48
|
-
6. **CLAUDE.md doc map out of sync**: `dreaming-nightly-pipeline.md`,
|
|
49
|
-
`generic-model-support.md`, `mlx-lm-tool-parity-plan.md`,
|
|
50
|
-
`batching-v2-plan.md` are on disk but absent from the doc-map lists.
|
|
51
|
-
|
|
52
|
-
### A.3 Proposed end-state
|
|
53
|
-
|
|
54
|
-
No renames, no folder moves, no merges mid-flight (the import is paused
|
|
55
|
-
mid-run and the nightly doc is uncommitted). Organization = **banners +
|
|
56
|
-
one scope-fix + one hub table + reading order**, all cheap and link-stable:
|
|
57
|
-
|
|
58
|
-
1. **Canonical entry point: `dreaming-nightly-pipeline.md`.** Add a short
|
|
59
|
-
"Doc family" table at its top covering ALL of: master-plan (task refs),
|
|
60
|
-
handoff (history), memory-synthesis / bucketing-stage /
|
|
61
|
-
write-pipeline-entity (history), memory-system (M0 substrate),
|
|
62
|
-
memory-inference-path (inference seam), reference/memory.md (user-facing),
|
|
63
|
-
STATUS.md (live state). Today it names only three of these.
|
|
64
|
-
2. **Banner the two unbannered history docs** (bucketing-stage,
|
|
65
|
-
write-pipeline-entity) with survives/dead maps as in A.1.
|
|
66
|
-
3. **Fix memory-system.md's header + amputate its M1 sketch** (A.1 row).
|
|
67
|
-
4. **Demote the-dreaming-handoff.md to a dated session log** pointing at
|
|
68
|
-
STATUS.md; add the as-built one-liner to the master plan.
|
|
69
|
-
5. **Rewrite reference/memory.md's roadmap section** to as-built.
|
|
70
|
-
6. **Sync the CLAUDE.md doc map** (A.2 item 6).
|
|
71
|
-
|
|
72
|
-
**Newcomer reading order** (to be stated in the nightly doc's family table):
|
|
73
|
-
1. `docs/reference/memory.md` — what it is, how to use it
|
|
74
|
-
2. `docs/design/dreaming-nightly-pipeline.md` — the canonical design +
|
|
75
|
-
decisions-overridden table
|
|
76
|
-
3. `STATUS.md` § THE DREAMING — where it stands, what's next
|
|
77
|
-
4. `docs/design/the-dreaming-master-plan.md` — per-task file/port/schema
|
|
78
|
-
references (respect the banner)
|
|
79
|
-
5. History, only for archaeology: memory-synthesis → bucketing-stage →
|
|
80
|
-
write-pipeline-entity → the-dreaming-handoff → memory-inference-path
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## B. The DAG view (docs/dag/training-inference-map.html + parity-tier-dag.md)
|
|
85
|
-
|
|
86
|
-
> **2026-07-05 annotation:** the Phase-1 deletion pass
|
|
87
|
-
> ([unified-engine-frontier-plan.md §6](../design/unified-engine-frontier-plan.md))
|
|
88
|
-
> deleted the perf-kernel, fused-decode, and fused-swiglu/geglu kernels and
|
|
89
|
-
> removed `--l3` as a product mode (output-changing experiments are Lab items
|
|
90
|
-
> now). The `perfKernelEnabled()` / `fusedDecodeSdpa` / `fusedSwiglu` route
|
|
91
|
-
> predicates referenced in this section (and the map's n92/n95 branches) no
|
|
92
|
-
> longer exist in the code; treat those mentions as the pre-deletion snapshot.
|
|
93
|
-
|
|
94
|
-
### B.1 What exists today
|
|
95
|
-
|
|
96
|
-
- **parity-tier-dag.md** — the framework doc. **Already refreshed 2026-07-01**:
|
|
97
|
-
it carries the corrected lever table (perf-kernel = L3/opt-in, off in bare
|
|
98
|
-
`--l2`), the f1bf5cc post-mortem, and the two-axes rule. Not stale.
|
|
99
|
-
- **training-inference-map.html** — a hand-authored cytoscape control-flow map,
|
|
100
|
-
**MiniCPM5-1B only**, two tabs (inference ~150 nodes: generate loop → forward
|
|
101
|
-
→ attention → sdpa dispatch → tiled/unfused kernels → KV bf16/quant →
|
|
102
|
-
sampler; training ~90 nodes: step loop → segmented/prefix → SFT/DPO/ORPO loss
|
|
103
|
-
heads incl. flash-CCE → AdamW → metrics). Every node carries a hardcoded
|
|
104
|
-
`file:line`. Branch edges carry the exact flag/predicate
|
|
105
|
-
(`perfKernelEnabled()`, `fusedSdpaSupported`, `MLX_BUN_TRAIN_ATTN`, …).
|
|
106
|
-
- **Gap vs its own billing:** PLAN.md and parity-tier-dag.md call it
|
|
107
|
-
"tier-tagged" — it is **not**. Nodes are colored by *subsystem*; no node
|
|
108
|
-
carries an L1/L2/L3 tag. The tier story exists only in prose.
|
|
109
|
-
|
|
110
|
-
### B.2 Staleness after 2026-07-01
|
|
111
|
-
|
|
112
|
-
| Area | What changed | Map impact |
|
|
113
|
-
|---|---|---|
|
|
114
|
-
| L2 tier contract (commit `381382c`) | `TIERS.l2.perf → false`; bare `--l2` = stock unfused L=1 decode; perf kernel is L3/`--l3` | The `perfKernelEnabled()` branch (n92→n95) still exists, so the *structure* is right — but nothing in the map encodes tier presets, so the map can't show that `--l2` and `--l3` now take different sdpa routes. This is exactly the "for each config, how is it actually running" question the map is supposed to answer. |
|
|
115
|
-
| Sampling processors (2026-07-01) | L1-faithful min_p / XTC / presence+frequency penalties / logit_bias landed end-to-end | Sampler subtree (n177–n194) shows only curve/HLG/topP/topK/temp — the new mlx-lm-parity processor chain is absent. |
|
|
116
|
-
| Training `sft_scope` (d32fe32) | ORPO chosen-NLL default `full` (prompt+response token-mean CE), `response` = legacy | ORPO loss subtree (t46/t55) has no sft_scope branch. |
|
|
117
|
-
| Tier-0 generic models (9bd9f1b) | `UniversalDenseModel`, 11 archs, factory ladder dedicated→generated→generic→reject | **Absent entirely.** The map is titled MiniCPM5-1B; no model-dispatch view exists at all (no gemma4 generated specializations, no Qwen3/3.5, no DiffusionGemma denoising route, no batching lane either). |
|
|
118
|
-
| Line numbers | ~3 weeks of commits incl. today's uncommitted gemma4-base.ts / cli.ts edits | Every `file:line` is drift-suspect; they were the map's credibility feature. |
|
|
119
|
-
|
|
120
|
-
### B.3 Refresh plan — three deliverables, ordered by value/effort
|
|
121
|
-
|
|
122
|
-
**B3.1 Minimal manual patch to un-stale the current HTML (~0.5 day).**
|
|
123
|
-
Keep it hand-authored, make it honest:
|
|
124
|
-
1. Header banner: "hand-authored snapshot 2026-06-21, MiniCPM5-1B; line
|
|
125
|
-
numbers approximate; tier semantics in parity-tier-dag.md".
|
|
126
|
-
2. **Add real tier tags** — a `tier` field per node + border color. Even
|
|
127
|
-
tagging just the dispatch nodes delivers the promised feature: `n87
|
|
128
|
-
ops.sdpa` (bf16) = L1 · `n83/n98` quantizedSdpa/tiled = L2 · `n92/n95`
|
|
129
|
-
perf-kernel/fusedDecodeSdpa = **L3 opt-in, off in bare `--l2` (381382c)**
|
|
130
|
-
· `n22/n27/n28` compiled-decode = tier-preserving (bit-exact) ·
|
|
131
|
-
flash-CCE/ORPO/segmented/prefix training nodes = L3.
|
|
132
|
-
3. Sampler: insert one node before the temp/topP chain — "logits processors
|
|
133
|
-
(mlx-lm L1): repetition/presence/frequency · logit_bias · min_p · XTC".
|
|
134
|
-
4. Training: add the `sft_scope full|response` branch at the ORPO chosen-NLL
|
|
135
|
-
node.
|
|
136
|
-
5. Add a tiny third tab "model dispatch" (~10 nodes): the `factory.ts`
|
|
137
|
-
ladder — DiffusionGemma → MiniCPM5 → Qwen3.5 → Qwen3 → gemma4
|
|
138
|
-
generated/monolith → **UniversalDense (Tier-0, 11 archs, L1-gated)** →
|
|
139
|
-
reject.
|
|
140
|
-
|
|
141
|
-
**B3.2 Runtime route explainer (recommended first "derive from code" step,
|
|
142
|
-
~1 day).** Josh's ask is literally "for each model and config, how it is
|
|
143
|
-
actually running" — the cheapest ground-truth answer is not static analysis
|
|
144
|
-
but a CLI verb, e.g. `mlx-bun route <model> [--l1|--l2] [--kv-quant …]`,
|
|
145
|
-
that:
|
|
146
|
-
- runs `applyDecodeRoute()` (cli.ts:723 — the TIERS preset table is already a
|
|
147
|
-
machine-readable matrix), loads **config only** (no weights),
|
|
148
|
-
- evaluates the actual exported predicates (`NO_FUSED_SDPA`,
|
|
149
|
-
`CompiledDecode.for` eligibility, kv-quant resolution, factory ladder
|
|
150
|
-
selection — the old perf-kernel/fused-decode/fused-swiglu predicates were
|
|
151
|
-
deleted 2026-07-05),
|
|
152
|
-
- prints the resolved route as a tree/JSON: which model class, which sdpa
|
|
153
|
-
path, which kernels, which tier each hop sits in, and **which flag would
|
|
154
|
-
change each hop**.
|
|
155
|
-
Correct by construction (it calls the same functions the server calls), zero
|
|
156
|
-
drift, and it answers per-model × per-config today. The HTML map becomes the
|
|
157
|
-
anatomy poster; this verb is the live X-ray.
|
|
158
|
-
|
|
159
|
-
**B3.3 Derived DAG + CI parity gate (the two open PLAN boxes, ~2–4 days).**
|
|
160
|
-
What "derive the DAG from code" concretely means here:
|
|
161
|
-
- **Roots are curated, extraction is mechanical.** A bun generator script
|
|
162
|
-
(ts-morph / TS compiler API) walks from a small fixed root list —
|
|
163
|
-
`generate()`, `createModel()`, the trainer step, `sampleStep`, each model's
|
|
164
|
-
`quantizedSdpa`/attention dispatch — and records: every branch on a
|
|
165
|
-
`process.env.MLX_BUN_*` read or an exported `*Enabled()`/`*Supported()`
|
|
166
|
-
call, plus call edges between the roots' subgraphs. Nodes get
|
|
167
|
-
`{id, label, file, line}` extracted from the AST (line numbers can never
|
|
168
|
-
drift again). Output: `docs/dag/dag.json`, one graph per model class
|
|
169
|
-
(the factory ladder gives the model dimension).
|
|
170
|
-
- **Tier tags live in a checked-in sidecar** (`docs/dag/tiers.json`:
|
|
171
|
-
`node → {tier, oracleTest}`) merged into the JSON at generation time. The
|
|
172
|
-
generator fails if a tagged node vanished (renames get caught).
|
|
173
|
-
- **CI gate**: a workflow step asserts every **L1-tagged** node names an
|
|
174
|
-
`oracleTest` file that exists and passes (`bun test <file>`); an L1 node
|
|
175
|
-
without a passing bit-exact test fails CI or must be re-tagged no-oracle
|
|
176
|
-
(Lab-gated). This is
|
|
177
|
-
PLAN's "the oracle is the gate becomes a check" box — and it composes with
|
|
178
|
-
STATUS finding #4 (no CI at all): land the `tsc + bun test` gate first,
|
|
179
|
-
hang the L1-tag check off it.
|
|
180
|
-
- **Rendering**: keep the existing cytoscape HTML shell; replace the
|
|
181
|
-
hardcoded `INFER`/`TRAIN` consts with the generated JSON (inlined by the
|
|
182
|
-
generator so the file stays a self-contained artifact).
|
|
183
|
-
- **Deliberate non-goal**: fully deriving the fine-grained *op-level* nodes
|
|
184
|
-
(the tiled-sdpa online-softmax internals, AdamW math). That's 1–2 weeks of
|
|
185
|
-
static-analysis plumbing for content that changes rarely. Two-level design
|
|
186
|
-
instead: derived flag/route/dispatch graph (auto, CI-checked) + the
|
|
187
|
-
hand-authored op subgraphs kept as leaf expansions, refreshed manually.
|
|
188
|
-
|
|
189
|
-
**Sequencing:** B3.1 now (un-stale the artifact) → B3.2 (the per-model/config
|
|
190
|
-
truth Josh asked for) → B3.3 (kills the hand-authored map and closes the two
|
|
191
|
-
PLAN checkboxes). The fourth PLAN box (rationalize the flag surface) falls out
|
|
192
|
-
of B3.2+B3.3: once every flag maps to a route edge in the JSON, the
|
|
193
|
-
always-on / knob / parity⇄opt classification in parity-tier-dag.md §"Why this
|
|
194
|
-
matters" can be generated instead of argued.
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
# pi integration review — internal embeds + `harness pi` (2026-07-01)
|
|
2
|
-
|
|
3
|
-
Read-only audit of the pi surface: `mlx-bun pi` (src/pi-terminal.ts, in-process
|
|
4
|
-
InteractiveMode), the shared provider wiring (src/pi-provider.ts), the web
|
|
5
|
-
embed (src/pi-web.ts), `mlx-bun harness pi` (src/harness-pi.ts), and the docs
|
|
6
|
-
that describe them. Every claim below was verified in the current source
|
|
7
|
-
(post-8ee691d, working tree of 2026-07-01); the localhost/loopback behavior was
|
|
8
|
-
verified empirically with Bun on this machine.
|
|
9
|
-
|
|
10
|
-
Stale-memory corrections first (priors that are NO LONGER true):
|
|
11
|
-
- `harness pi` does **not** write `~/.pi/agent/models.json` — it generates a
|
|
12
|
-
self-contained extension at `~/.pi/agent/extensions/mlx-bun-provider.ts`
|
|
13
|
-
that calls `pi.registerProvider()` with live `/v1/models` discovery.
|
|
14
|
-
- Tool-call parsing is **not** Gemma-only anymore: src/tool-call.ts also parses
|
|
15
|
-
OpenAI-JSON `<tool_call>`, Qwen `<function=name><parameter=…>`, and MiniCPM5
|
|
16
|
-
`<function name=…><param name=…>` from decoded text (buffered-text mode).
|
|
17
|
-
- The old `by_bits`/bitsMap and double-BOS issues are fixed and stayed fixed.
|
|
18
|
-
|
|
19
|
-
## Ranked fix list
|
|
20
|
-
|
|
21
|
-
### 1. HIGH — Web chat advertises memory tools it filtered out
|
|
22
|
-
`src/pi-web.ts:568` passes `tools: [...WELCOME_TOOLS]` (= `["read","web_search"]`,
|
|
23
|
-
line 68) to `createAgentSessionFromServices`, but `src/pi-web.ts:534` appends
|
|
24
|
-
`surface.memoryHint` to the system prompt and `surface.skillPaths` includes the
|
|
25
|
-
bundled `memory` skill (surface built at :528 with memory auto-detect). pi
|
|
26
|
-
treats the `tools` list as an allowlist, so when a vault exists the prompt and
|
|
27
|
-
skill instruct the model to call `memory_resolve` / `memory_read` /
|
|
28
|
-
`memory_section` — tools pi filtered out of the session. Every such call fails.
|
|
29
|
-
The intent that they be reachable is visible at `src/pi-web.ts:57`
|
|
30
|
-
(`READ_ONLY_TOOLS` already auto-allows `MEMORY_TOOL_NAMES`/`REFERENCE_TOOL_NAMES`,
|
|
31
|
-
imported at :47). The terminal embed does this correctly
|
|
32
|
-
(`src/pi-terminal.ts:157` uses `surface.tools`).
|
|
33
|
-
**Fix (pi-web.ts:568):**
|
|
34
|
-
`tools: [...WELCOME_TOOLS, ...(surface.memoryEnabled ? [...MEMORY_TOOL_NAMES, ...REFERENCE_TOOL_NAMES] : [])]`
|
|
35
|
-
— or, if the 1B welcome assistant must stay two-tool, build the surface with
|
|
36
|
-
`memory: "off"` so the hint and skill disappear too. Add a pi-web test either
|
|
37
|
-
way (tests/pi-web.test.ts has no memory coverage today).
|
|
38
|
-
|
|
39
|
-
### 2. HIGH — `harness pi` maps EVERY /v1/models row to id `"local"` (duplicate models)
|
|
40
|
-
`/v1/models` now returns the served model FIRST **plus every other servable
|
|
41
|
-
registry model** (src/server.ts:1479–1499). Both consumers still assume the old
|
|
42
|
-
single-entry shape:
|
|
43
|
-
- `src/harness-pi.ts:76–81` (`fetchServerModels`) maps all rows;
|
|
44
|
-
- the generated extension (`renderPiExtension`, src/harness-pi.ts:116–125) and
|
|
45
|
-
the baked fallback (`modelEntry`, :140–151) register one pi model per row,
|
|
46
|
-
**all with id `local`** — N duplicate ids, N−1 of which name models the
|
|
47
|
-
single-model server is not actually serving.
|
|
48
|
-
Side effects: `installPiExtension`'s `bakedModels` and the CLI's
|
|
49
|
-
"server live · …" line print the whole registry; `src/cli.ts:1615`
|
|
50
|
-
("reusing running server at … (…)") lists every downloaded model as if served.
|
|
51
|
-
`tests/harness-pi.test.ts` stubs a single-row /v1/models, so this is untested.
|
|
52
|
-
**Fix:** in `fetchServerModels`, keep only the served entry — the first row is
|
|
53
|
-
the served model and is the only one carrying the capability extras
|
|
54
|
-
(`context_window`, `reasoning`); e.g. `body.data?.[0]` (or filter rows that
|
|
55
|
-
have `context_window`). Same filter inside the generated extension's live
|
|
56
|
-
fetch. Update cli.ts:1615/1668 to label `models[0]` as served. Extend the
|
|
57
|
-
harness test with a multi-row stub.
|
|
58
|
-
|
|
59
|
-
### 3. HIGH — Tier-0 generics (and plain Qwen3 chat) get Gemma's token sentinels
|
|
60
|
-
`toolStreamMode` (src/server.ts:1175–1183) returns `"gemma-sentinel"` for every
|
|
61
|
-
model that isn't MiniCPM5/Qwen3.5 — including the new universal-dense generics
|
|
62
|
-
(llama, qwen2, qwen3, gemma1/2, phi3, olmo2, glm4, granite, starcoder2,
|
|
63
|
-
smollm3 — src/model/universal/archs.ts, served via src/model/factory.ts:42–45)
|
|
64
|
-
and plain Qwen3. In that mode `ToolAwareStream.push` (src/server.ts:500–509)
|
|
65
|
-
unconditionally interprets token ids 48/49/100/101 as tool/channel sentinels.
|
|
66
|
-
Those ids are Gemma-4 special tokens (src/tool-call.ts:9–23); on any other
|
|
67
|
-
tokenizer they're ordinary low-id vocab entries, so a generic model emitting
|
|
68
|
-
one silently reroutes all subsequent output into a phantom tool segment or
|
|
69
|
-
"reasoning". It also means generics never reach `parseGeneratedToolCalls`
|
|
70
|
-
(buffered-text), so tool calling is broken for them — and pi always sends
|
|
71
|
-
tools, and `mlx-bun pi -q <generic>` is a supported path now.
|
|
72
|
-
**Fix (src/server.ts:1180–1182):** make gemma-sentinel the *family-gated*
|
|
73
|
-
branch, not the default:
|
|
74
|
-
```ts
|
|
75
|
-
if (ctx.model.config.modelType.startsWith("gemma4")) return "gemma-sentinel";
|
|
76
|
-
return tools?.length ? "buffered-text" : "plain";
|
|
77
|
-
```
|
|
78
|
-
(`ctx.template.thinkingFormat === "gemma-channel"` is an alternative key, but
|
|
79
|
-
DiffusionGemma forces it null while still being gemma-family, so prefer
|
|
80
|
-
modelType.) Buffered-text already handles the OpenAI-JSON `<tool_call>` shape
|
|
81
|
-
most generic templates emit; models whose format isn't covered fail soft
|
|
82
|
-
(markup stays in content) instead of corrupting the stream.
|
|
83
|
-
|
|
84
|
-
### 4. MEDIUM — vision capability never reaches the pi terminal or external pi
|
|
85
|
-
`/v1/models` doesn't advertise vision (src/server.ts:1479–1485: only
|
|
86
|
-
`context_window` + `reasoning`), `RunEmbeddedPiOptions` has no `vision` field
|
|
87
|
-
and `src/cli.ts:1670` passes none, so `mlx-bun pi` on gemma-4-e4b — the
|
|
88
|
-
*default* model, vision-capable — registers `input: ["text"]`
|
|
89
|
-
(src/pi-provider.ts:100) and images are unusable in the TUI. The harness
|
|
90
|
-
extension is hardcoded `input: ["text"]` too (src/harness-pi.ts:121, :146).
|
|
91
|
-
Only pi-web wires it (src/pi-web.ts:491–495, from `ctx.vision || ctx.loadVision`
|
|
92
|
-
via createServer). The `input` flag MUST match the real model (pi-ai
|
|
93
|
-
content-parts vs string serialization — pi-provider.ts:44–49), so this needs
|
|
94
|
-
the real signal, not a default.
|
|
95
|
-
**Fix:** add `vision: !!(ctx.vision || ctx.loadVision)` to the served entry in
|
|
96
|
-
/v1/models; carry it through `ServerModel`/`fetchServerModels`,
|
|
97
|
-
`renderPiExtension`/`modelEntry` (`input: m.vision ? ["text","image"] : ["text"]`),
|
|
98
|
-
`RunEmbeddedPiOptions`, and the cli `pi` case.
|
|
99
|
-
|
|
100
|
-
### 5. MEDIUM — harness extension drifted from buildPiProvider on compat flags
|
|
101
|
-
The internal provider sets `compat: { supportsDeveloperRole: false, … }`
|
|
102
|
-
(src/pi-provider.ts:89–92); the generated extension sets only `thinkingFormat`
|
|
103
|
-
for reasoning models (src/harness-pi.ts:120, :145). Currently masked because
|
|
104
|
-
the server remaps `developer` → `system` (src/server.ts:743–760), but the two
|
|
105
|
-
paths are documented as "kept aligned" (pi-provider.ts:20–22, harness-pi.ts
|
|
106
|
-
header) and have drifted. **Fix:** emit the same
|
|
107
|
-
`supportsDeveloperRole: false` block in `renderPiExtension`/`modelEntry`.
|
|
108
|
-
|
|
109
|
-
### 6. MEDIUM — `memory_status` tells the built-in agent synthesis doesn't exist
|
|
110
|
-
`src/memory/tools.ts:571–572` hardcodes
|
|
111
|
-
`"last synthesis: not available yet (M1 synthesis is stubbed)"` and
|
|
112
|
-
`"synthesis: M1 stub (manual/nightly writes are not implemented yet)"`.
|
|
113
|
-
Synthesis is live: `mlx-bun memory synthesize` runs the full DAG
|
|
114
|
-
(src/cli.ts:2508ff) and the nightly launchd job runs it
|
|
115
|
-
(src/memory/schedule.ts:66–72). The pi session will confidently tell the user
|
|
116
|
-
the feature doesn't exist. **Fix:** drop the stub lines; report real state
|
|
117
|
-
(e.g. last synthesis run from the synthesis DB / vault git log, and
|
|
118
|
-
"run: mlx-bun memory synthesize").
|
|
119
|
-
|
|
120
|
-
### 7. MEDIUM — docs/reference/memory.md contradicts itself
|
|
121
|
-
Line 9: "Synthesis is scaffolded but still a no-op M1 stub" vs line 41
|
|
122
|
-
("**`memory synthesize` writes to your vault.** It runs the full local
|
|
123
|
-
synthesis DAG …") and line 77 ("Synthesis is live today"). Fix line 9 (and the
|
|
124
|
-
line-53 "last-synthesis placeholder" wording once #6 lands).
|
|
125
|
-
|
|
126
|
-
### 8. LOW — server-api.md pi section omits `harness pi`
|
|
127
|
-
docs/reference/server-api.md:462–477 documents only the manual
|
|
128
|
-
`~/.pi/agent/models.json` route (which also bakes a concrete model id — the
|
|
129
|
-
staleness problem the `local` id exists to solve). Add: the supported
|
|
130
|
-
one-command path is `mlx-bun harness pi` (extension + live discovery +
|
|
131
|
-
`--remove` undo), manual models.json as the fallback.
|
|
132
|
-
|
|
133
|
-
### 9. LOW — three base-URL spellings for one loopback server
|
|
134
|
-
pi-web uses `http://127.0.0.1:${port}/v1` (src/pi-web.ts:487); the cli `pi`
|
|
135
|
-
probe/provider uses `http://localhost:${port}/v1` (src/cli.ts:1610, also the
|
|
136
|
-
serve preflight at :1215); harness `DEFAULT_BASE_URL` is
|
|
137
|
-
`http://localhost:8080/v1` (src/harness-pi.ts:25). Functionally coherent today
|
|
138
|
-
— verified empirically: Bun's fetch to `localhost` reaches both a
|
|
139
|
-
127.0.0.1-bound and a ::1-bound server — and the port sweep from 8ee691d is
|
|
140
|
-
clean (no live `8090` outside historical artifacts). But the harness extension
|
|
141
|
-
runs under the *user's pi* (node/jiti, not Bun), so standardize on
|
|
142
|
-
`127.0.0.1` (the actual default bind) everywhere to be resolver-proof.
|
|
143
|
-
|
|
144
|
-
### 10. LOW — `mlx-bun pi` arg edges (flag-strip itself is clean)
|
|
145
|
-
Verified complete: `OURS_VAL`/`OURS_BOOL` (src/cli.ts:1575–1582) cover every
|
|
146
|
-
flag read by `serverRuntimeFlags`/`applyDecodeRoute`/`mountStartupAdapter`/
|
|
147
|
-
`resolveModelAuto` (cross-checked flag-by-flag); `opt()` only supports
|
|
148
|
-
space-separated values repo-wide so there's no `--flag=value` bypass; the
|
|
149
|
-
"ignoring …" notice on server reuse works; `harness pi` passes nothing through
|
|
150
|
-
to pi (no leak path). Two edges remain:
|
|
151
|
-
- `parsePiArgs` (src/pi-terminal.ts:237–242) drops an unknown flag but keeps
|
|
152
|
-
its **value** as message text: `mlx-bun pi --resume abc123` starts a chat
|
|
153
|
-
with the message "abc123". Either swallow the next token for unknown
|
|
154
|
-
`--flags` or warn that the flag was ignored.
|
|
155
|
-
- `RunEmbeddedPiOptions.verbose` (src/pi-terminal.ts:97) is never settable —
|
|
156
|
-
parsePiArgs doesn't recognize `--verbose`. Wire it or delete it.
|
|
157
|
-
|
|
158
|
-
## Verified-good (no action)
|
|
159
|
-
- **Compat flags per model**: `buildPiProvider` derives `reasoning` →
|
|
160
|
-
`thinkingFormat: "qwen-chat-template"` from `ctx.template.supportsThinking`,
|
|
161
|
-
which is detected generically from the template source (`enable_thinking` +
|
|
162
|
-
`<think>`/`<|channel>`, src/chat-template.ts:143–159) — covers Gemma,
|
|
163
|
-
MiniCPM5, Qwen3.5, and Tier-0 generics with think-tag templates alike; the
|
|
164
|
-
server honors `chat_template_kwargs.enable_thinking` and `reasoning_effort`
|
|
165
|
-
with one precedence function (src/server.ts:1101–1108).
|
|
166
|
-
- **Wire contract**: pi's OpenAI `tool_calls` shape is produced for both the
|
|
167
|
-
sentinel and buffered-text parsers (src/server.ts:548–575, 1916–1923,
|
|
168
|
-
1989–2003), `finish_reason: "tool_calls"` included; `developer` role remapped.
|
|
169
|
-
- **Isolation**: both embeds use in-memory auth/registry (no ~/.pi cross-talk),
|
|
170
|
-
own agent dirs (`~/.mlx-bun/pi`, `~/.mlx-bun/pi-sessions`), `noExtensions/
|
|
171
|
-
noSkills/noPromptTemplates/noThemes`, curated skills only.
|
|
172
|
-
- **Server ownership**: `pi`-started servers are `owner: "pi-session"` and the
|
|
173
|
-
reuse path warns when attaching to another session's server (cli.ts:1624–1631).
|
|
174
|
-
- **Memory read tools vs current vault code**: all imports
|
|
175
|
-
(vault/query/article/schedule) exist and match; terminal surface exposes them
|
|
176
|
-
correctly; FIND→READ contract intact. Only the status text (#6) is stale.
|
|
177
|
-
- **contextWindow fallbacks**: missing `max_position_embeddings` degrades to
|
|
178
|
-
32768 at every consumer (`?? 32768` / `?? DEFAULT_CONTEXT_WINDOW`).
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# mlx-bun v0.0.10 — batching parity, SSD KV cache, sharper serving
|
|
2
|
-
|
|
3
|
-
## Highlights
|
|
4
|
-
|
|
5
|
-
**Concurrent serving now matches the fastest MLX batching servers.** With
|
|
6
|
-
`--batch 4`, aggregate throughput at 4 parallel requests is at parity with
|
|
7
|
-
(or ahead of) oMLX on every shared model we benchmarked on an M1 Max —
|
|
8
|
-
MiniCPM5-1B 349 vs 339 tok/s, gemma-4-e4b within 3%, Qwen3.5-4B within 1% —
|
|
9
|
-
with 2–3× better time-to-first-token under load, and per-token SSE
|
|
10
|
-
streaming (no burst batching of your tokens).
|
|
11
|
-
|
|
12
|
-
- **Qwen3.5 joins the batch lane.** Hybrid gated-DeltaNet (SSM) caches grew
|
|
13
|
-
the dynamic-batching ops; the batched decode path is verified
|
|
14
|
-
token-for-token identical against mlx-lm's B=2 batched oracle.
|
|
15
|
-
- **Sampler features batch too.** Repetition/presence/frequency penalties,
|
|
16
|
-
`logit_bias`, `min_p`, and XTC now run per-row inside the batch instead
|
|
17
|
-
of forcing requests onto the serial path. (Qwen3.5 ships a default
|
|
18
|
-
repetition penalty — before this fix it silently serialized every
|
|
19
|
-
request under `--batch N`.)
|
|
20
|
-
|
|
21
|
-
**SSD cold tier for the prompt cache** (`--ssd-cache <dir>`). Long-context
|
|
22
|
-
prefix KV now spills to disk on eviction, is snapshotted after requests
|
|
23
|
-
settle, and **survives server restarts**: re-attaching a 13.7k-token
|
|
24
|
-
coding-agent conversation went from a 12.1 s full re-prefill to a 0.24 s
|
|
25
|
-
zero-copy mmap restore in our measurements — with 0% steady-state decode
|
|
26
|
-
overhead (nothing runs on the token loop). Entries are keyed by model
|
|
27
|
-
fingerprint + KV scheme + tokenizer hash + adapter namespace; corrupt or
|
|
28
|
-
incompatible files self-quarantine; the tier is always safe to delete.
|
|
29
|
-
Companion flags: `--ssd-cache-max <GB>` (default 32), `--ssd-cache-verify`.
|
|
30
|
-
|
|
31
|
-
## Fixes
|
|
32
|
-
|
|
33
|
-
- `serve`/`benchmark` now honor `--model <path-or-query>` as an explicit
|
|
34
|
-
override (it was previously accepted but ignored — auto-pick could
|
|
35
|
-
silently load a different model). A directory containing `config.json`
|
|
36
|
-
loads directly from that path.
|
|
37
|
-
- The server stays responsive during long serial generations: `/stats`,
|
|
38
|
-
`/health`, and new connections previously stalled until the generation
|
|
39
|
-
finished (measured 2.5 s on a 512-token run); they now answer in tens of
|
|
40
|
-
milliseconds, with no measurable decode cost.
|
|
41
|
-
|
|
42
|
-
## Internals
|
|
43
|
-
|
|
44
|
-
- KV persistence format v2: all cache kinds round-trip (bf16, per-layer
|
|
45
|
-
quantized, sliding-window, quantized sliding-window, SSM), with
|
|
46
|
-
integrity hashes, invalidation metadata, and atomic writes.
|
|
47
|
-
- Golden `.bin` parity fixtures are no longer tracked in git (they are
|
|
48
|
-
machine-specific and regenerable); JSON manifests remain.
|
|
49
|
-
- New design docs: `docs/design/omlx-adoption-map.md` (feature adoption
|
|
50
|
-
scoreboard), `docs/design/batching-perf-path.md`,
|
|
51
|
-
`docs/design/ssd-kv-cold-tier.md`.
|
|
52
|
-
|
|
53
|
-
Full details and measured numbers: STATUS.md and the design docs above.
|
|
54
|
-
Credit where due: the SSD-tier and batching comparisons were driven by
|
|
55
|
-
studying [oMLX](https://github.com/jundot/omlx) (Apache 2.0) — a strong
|
|
56
|
-
project whose ideas we benchmarked and adapted where they made mlx-bun
|
|
57
|
-
faster.
|