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,78 +0,0 @@
|
|
|
1
|
-
// GENERATED-ADJACENT source module — part of the src/web/src/* split (plan
|
|
2
|
-
// §7/§9 Phase 3, §6.6 "app-aware assistant"). Built into src/web/app.js by
|
|
3
|
-
// scripts/build-web.ts.
|
|
4
|
-
//
|
|
5
|
-
// Shared route IDs keep browser navigation and server validation in agreement.
|
|
6
|
-
// Spotlight selectors and overlay IDs belong to the browser.
|
|
7
|
-
|
|
8
|
-
/** A hash-routed page (shell.ts's Route union, minus "routes" — the DAG
|
|
9
|
-
* diagram tab isn't a useful assistant destination and is itself
|
|
10
|
-
* feature-detected/hidden when unavailable). */
|
|
11
|
-
import { APP_ROUTE_IDS as ROUTE_IDS } from "../../contracts/pi";
|
|
12
|
-
export { ROUTE_IDS };
|
|
13
|
-
export type RouteId = (typeof ROUTE_IDS)[number];
|
|
14
|
-
|
|
15
|
-
/** A non-route overlay/panel the assistant can navigate to or spotlight
|
|
16
|
-
* within. Opening one of these does not change location.hash. */
|
|
17
|
-
export const VIEW_IDS = ["memory-panel", "hub-panel", "settings", "adapters-panel"] as const;
|
|
18
|
-
export type ViewId = (typeof VIEW_IDS)[number];
|
|
19
|
-
|
|
20
|
-
export function isRouteId(v: string): v is RouteId {
|
|
21
|
-
return (ROUTE_IDS as readonly string[]).includes(v);
|
|
22
|
-
}
|
|
23
|
-
export function isViewId(v: string): v is ViewId {
|
|
24
|
-
return (VIEW_IDS as readonly string[]).includes(v);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** Human labels for routes, used in the "unknown route" tool-error message
|
|
28
|
-
* and nowhere else — kept tiny on purpose. */
|
|
29
|
-
export const ROUTE_LABELS: Record<RouteId, string> = {
|
|
30
|
-
chat: "Chat",
|
|
31
|
-
quantize: "Quantize",
|
|
32
|
-
finetune: "Fine-tune",
|
|
33
|
-
dataset: "Build Dataset",
|
|
34
|
-
status: "Status",
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
/** A curated spotlight target: a stable id -> the selector to highlight +
|
|
38
|
-
* a human label for the popover title, plus which route/view it lives on
|
|
39
|
-
* (spotlight_ui navigates there first if the browser isn't already on it).
|
|
40
|
-
* This is the "catalog target" resolution path in resolve-spotlight.ts's
|
|
41
|
-
* terms — the fallback when ref/label/selector don't resolve from the live
|
|
42
|
-
* DOM or the last uiSnapshot. Anchors added to app.html via data-spotlight
|
|
43
|
-
* in this same wave; ids are stable and boring (element id minus "chat-"
|
|
44
|
-
* prefix noise where it reads fine either way). */
|
|
45
|
-
export interface SpotlightTarget {
|
|
46
|
-
selector: string;
|
|
47
|
-
label: string;
|
|
48
|
-
route?: RouteId;
|
|
49
|
-
view?: ViewId;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export const SPOTLIGHT_TARGETS: Record<string, SpotlightTarget> = {
|
|
53
|
-
composer: { selector: "#chat-box", label: "Message box", route: "chat" },
|
|
54
|
-
send: { selector: "#chat-send", label: "Send", route: "chat" },
|
|
55
|
-
"new-chat": { selector: "#chat-new", label: "New chat", route: "chat" },
|
|
56
|
-
"session-search": { selector: "#chat-sess-search", label: "Search chats", route: "chat" },
|
|
57
|
-
"sampling-pill": { selector: "#chat-sampling", label: "Sampling", route: "chat" },
|
|
58
|
-
"prompt-pill": { selector: "#chat-sysprompt", label: "System prompt", route: "chat" },
|
|
59
|
-
"adapter-select": { selector: "#chat-adapter", label: "LoRA adapter", route: "chat" },
|
|
60
|
-
"memory-entry": { selector: "#chat-memory-entry", label: "Memory", route: "chat" },
|
|
61
|
-
"developer-toggle": { selector: "#nav-developer", label: "Developer toggle" },
|
|
62
|
-
"model-picker": { selector: "#nav-model", label: "Active model" },
|
|
63
|
-
"hub-browse": { selector: "#model-pop-browse", label: "Browse models", view: "hub-panel" },
|
|
64
|
-
"quantize-source": { selector: "#q-model", label: "Source model", route: "quantize" },
|
|
65
|
-
"finetune-base": { selector: "#f-model", label: "Base model", route: "finetune" },
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export function getSpotlightTarget(id: string): SpotlightTarget | null {
|
|
69
|
-
return SPOTLIGHT_TARGETS[id] ?? null;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Resolve a free-form route/page string (either a bare route id or a
|
|
73
|
-
* "#/route" hash) the way navigate_app's tool param is described to the
|
|
74
|
-
* model. Returns null for anything not in ROUTE_IDS. */
|
|
75
|
-
export function resolveRouteId(routeOrPage: string): RouteId | null {
|
|
76
|
-
const bare = routeOrPage.trim().replace(/^#\/?/, "");
|
|
77
|
-
return isRouteId(bare) ? bare : null;
|
|
78
|
-
}
|
package/src/web/src/voice.ts
DELETED
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
// Hold-to-talk voice input for the composer: microphone → 16 kHz float32
|
|
2
|
-
// (an AudioContext opened at 16 kHz lets the browser resample the mic) →
|
|
3
|
-
// 250 ms chunks streamed to /v1/audio/sessions/<id>/audio while the button
|
|
4
|
-
// is held → finish on release → transcript inserted at the caret. Works
|
|
5
|
-
// with ANY served chat model: transcription is the Whisper companion, not
|
|
6
|
-
// the chat model's audio input. Shown only when `ready.transcription` is
|
|
7
|
-
// true (composer.ts updateAttachHint).
|
|
8
|
-
|
|
9
|
-
import { $, toast } from "./shell";
|
|
10
|
-
|
|
11
|
-
const SAMPLE_RATE = 16_000;
|
|
12
|
-
const CHUNK_SECONDS = 0.25;
|
|
13
|
-
|
|
14
|
-
interface Take {
|
|
15
|
-
id: string;
|
|
16
|
-
ctx: AudioContext;
|
|
17
|
-
stream: MediaStream;
|
|
18
|
-
node: ScriptProcessorNode;
|
|
19
|
-
pending: Float32Array[];
|
|
20
|
-
pendingLen: number;
|
|
21
|
-
sending: Promise<void>;
|
|
22
|
-
failed: string | null;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let take: Take | null = null;
|
|
26
|
-
let starting = false;
|
|
27
|
-
|
|
28
|
-
async function postChunk(id: string, pcm: Float32Array): Promise<void> {
|
|
29
|
-
const r = await fetch(`/v1/audio/sessions/${id}/audio`, {
|
|
30
|
-
method: "POST", headers: { "content-type": "audio/pcm;rate=16000" },
|
|
31
|
-
body: new Uint8Array(pcm.buffer.slice(pcm.byteOffset, pcm.byteOffset + pcm.byteLength) as ArrayBuffer),
|
|
32
|
-
});
|
|
33
|
-
if (!r.ok) throw new Error(`audio chunk rejected (${r.status})`);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function flush(t: Take): void {
|
|
37
|
-
if (t.pendingLen === 0) return;
|
|
38
|
-
const buf = new Float32Array(t.pendingLen);
|
|
39
|
-
let o = 0;
|
|
40
|
-
for (const p of t.pending) { buf.set(p, o); o += p.length; }
|
|
41
|
-
t.pending = []; t.pendingLen = 0;
|
|
42
|
-
t.sending = t.sending.then(() => postChunk(t.id, buf)).catch((e) => { t.failed = (e as Error).message; });
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async function begin(btn: HTMLButtonElement): Promise<void> {
|
|
46
|
-
if (take || starting) return;
|
|
47
|
-
starting = true;
|
|
48
|
-
btn.classList.add("busy");
|
|
49
|
-
try {
|
|
50
|
-
const r = await fetch("/v1/audio/sessions", {
|
|
51
|
-
method: "POST", headers: { "content-type": "application/json" },
|
|
52
|
-
body: JSON.stringify({ vad: true, vad_min_speech_ms: 120, temperature: 0 }),
|
|
53
|
-
});
|
|
54
|
-
if (!r.ok) throw new Error(r.status === 503 ? "no Whisper model on this server" : `session failed (${r.status})`);
|
|
55
|
-
const { id } = await r.json() as { id: string };
|
|
56
|
-
const stream = await navigator.mediaDevices.getUserMedia({ audio: { channelCount: 1, echoCancellation: true, noiseSuppression: true } });
|
|
57
|
-
const ctx = new AudioContext({ sampleRate: SAMPLE_RATE });
|
|
58
|
-
const src = ctx.createMediaStreamSource(stream);
|
|
59
|
-
// ScriptProcessorNode is deprecated but universally available and enough
|
|
60
|
-
// for 16 kHz mono capture; an AudioWorklet needs a separately served file.
|
|
61
|
-
const node = ctx.createScriptProcessor(4096, 1, 1);
|
|
62
|
-
const t: Take = { id, ctx, stream, node, pending: [], pendingLen: 0, sending: Promise.resolve(), failed: null };
|
|
63
|
-
node.onaudioprocess = (e) => {
|
|
64
|
-
if (take !== t) return;
|
|
65
|
-
const data = e.inputBuffer.getChannelData(0);
|
|
66
|
-
t.pending.push(new Float32Array(data));
|
|
67
|
-
t.pendingLen += data.length;
|
|
68
|
-
if (t.pendingLen >= SAMPLE_RATE * CHUNK_SECONDS) flush(t);
|
|
69
|
-
};
|
|
70
|
-
src.connect(node);
|
|
71
|
-
node.connect(ctx.destination); // required for onaudioprocess to fire in some browsers
|
|
72
|
-
take = t;
|
|
73
|
-
btn.classList.add("recording");
|
|
74
|
-
} catch (e) {
|
|
75
|
-
toast(`Voice input failed: ${(e as Error).message}`, "err");
|
|
76
|
-
} finally {
|
|
77
|
-
starting = false;
|
|
78
|
-
btn.classList.remove("busy");
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async function end(btn: HTMLButtonElement, box: HTMLTextAreaElement): Promise<void> {
|
|
83
|
-
const t = take;
|
|
84
|
-
if (!t) return;
|
|
85
|
-
take = null;
|
|
86
|
-
btn.classList.remove("recording");
|
|
87
|
-
btn.classList.add("busy");
|
|
88
|
-
try {
|
|
89
|
-
t.node.disconnect();
|
|
90
|
-
for (const track of t.stream.getTracks()) track.stop();
|
|
91
|
-
void t.ctx.close();
|
|
92
|
-
flush(t);
|
|
93
|
-
await t.sending;
|
|
94
|
-
if (t.failed) throw new Error(t.failed);
|
|
95
|
-
const r = await fetch(`/v1/audio/sessions/${t.id}/finish`, { method: "POST" });
|
|
96
|
-
if (!r.ok) throw new Error(`transcription failed (${r.status})`);
|
|
97
|
-
const body = await r.json() as { text: string; mlx_bun?: { vad?: { speech: boolean } } };
|
|
98
|
-
const text = (body.text || "").trim();
|
|
99
|
-
if (!text) { toast(body.mlx_bun?.vad?.speech === false ? "No speech detected" : "Nothing transcribed", ""); return; }
|
|
100
|
-
insertAtCaret(box, text);
|
|
101
|
-
} catch (e) {
|
|
102
|
-
toast(`Voice input failed: ${(e as Error).message}`, "err");
|
|
103
|
-
} finally {
|
|
104
|
-
btn.classList.remove("busy");
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
function insertAtCaret(box: HTMLTextAreaElement, text: string): void {
|
|
109
|
-
const start = box.selectionStart ?? box.value.length;
|
|
110
|
-
const endPos = box.selectionEnd ?? start;
|
|
111
|
-
const before = box.value.slice(0, start);
|
|
112
|
-
const after = box.value.slice(endPos);
|
|
113
|
-
const lead = before.length && !/\s$/.test(before) ? " " : "";
|
|
114
|
-
const trail = after.length && !/^\s/.test(after) ? " " : "";
|
|
115
|
-
box.value = before + lead + text + trail + after;
|
|
116
|
-
const caret = (before + lead + text + trail).length;
|
|
117
|
-
box.setSelectionRange(caret, caret);
|
|
118
|
-
box.dispatchEvent(new Event("input", { bubbles: true }));
|
|
119
|
-
box.focus();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/** Wire hold-to-talk on `btn`: pointer hold, or Space/Enter held while focused. */
|
|
123
|
-
export function initVoiceInput(btn: HTMLButtonElement, box: HTMLTextAreaElement): void {
|
|
124
|
-
if (!btn) return;
|
|
125
|
-
if (!navigator.mediaDevices?.getUserMedia) { btn.title = "Microphone capture needs a secure context (https or localhost)"; }
|
|
126
|
-
btn.addEventListener("pointerdown", (e) => { e.preventDefault(); btn.setPointerCapture(e.pointerId); void begin(btn); });
|
|
127
|
-
const release = () => { void end(btn, box); };
|
|
128
|
-
btn.addEventListener("pointerup", release);
|
|
129
|
-
btn.addEventListener("pointercancel", release);
|
|
130
|
-
btn.addEventListener("lostpointercapture", release);
|
|
131
|
-
let keyHeld = false;
|
|
132
|
-
btn.addEventListener("keydown", (e) => {
|
|
133
|
-
if ((e.key === " " || e.key === "Enter") && !keyHeld) { e.preventDefault(); keyHeld = true; void begin(btn); }
|
|
134
|
-
});
|
|
135
|
-
btn.addEventListener("keyup", (e) => {
|
|
136
|
-
if ((e.key === " " || e.key === "Enter") && keyHeld) { e.preventDefault(); keyHeld = false; release(); }
|
|
137
|
-
});
|
|
138
|
-
btn.addEventListener("blur", () => { if (keyHeld) { keyHeld = false; release(); } });
|
|
139
|
-
// expose for tests / the palette
|
|
140
|
-
($ as unknown as { voice?: unknown }).voice = { begin: () => begin(btn), end: () => end(btn, box) };
|
|
141
|
-
}
|
package/src/web/vendor/README.md
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# src/web/vendor/ — vendored, no-CDN web assets
|
|
2
|
-
|
|
3
|
-
Assets here are bundled locally and served same-origin by `src/server.ts`
|
|
4
|
-
(`GET /assets/<name>`, `with { type: "text" }` import — same pattern as
|
|
5
|
-
`src/web/app.html` itself). Nothing in this app loads a script or
|
|
6
|
-
stylesheet from a CDN; this directory is where that tradeoff lives.
|
|
7
|
-
|
|
8
|
-
## hljs.js — syntax highlighting
|
|
9
|
-
|
|
10
|
-
`hljs.js` is [highlight.js](https://github.com/highlightjs/highlight.js)
|
|
11
|
-
(BSD-3-Clause, license text in `hljs-LICENSE`) core engine + a curated
|
|
12
|
-
language set: javascript/typescript, python, bash/shell, json, html/xml,
|
|
13
|
-
css, c/cpp, rust, go, sql, yaml, markdown, diff, plaintext. Registered
|
|
14
|
-
languages expose themselves as `class="language-<name>"` on `<code>`
|
|
15
|
-
elements — see `mdCodeBlock()` and `highlightIn()` in `app.html`.
|
|
16
|
-
|
|
17
|
-
To rebuild (e.g. to bump the version or change the language set):
|
|
18
|
-
|
|
19
|
-
```sh
|
|
20
|
-
mkdir /tmp/hljs-build && cd /tmp/hljs-build
|
|
21
|
-
npm init -y
|
|
22
|
-
npm install highlight.js@<version> --no-save
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Write an `entry.js` that imports `highlight.js/lib/core` and
|
|
26
|
-
`highlight.js/lib/languages/<lang>` for each language you want, calling
|
|
27
|
-
`hljs.registerLanguage(name, lang)` for each (see mlx-bun's own build log /
|
|
28
|
-
commit that introduced this file for the exact entry.js used), then:
|
|
29
|
-
|
|
30
|
-
```sh
|
|
31
|
-
globalThis.hljs = hljs; # inside entry.js, after registering
|
|
32
|
-
bun build ./entry.js --minify --outfile=hljs.bundle.js
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Prepend a short license/provenance header comment (BSD-3-Clause,
|
|
36
|
-
upstream URL, rebuild instructions — copy the one already at the top of
|
|
37
|
-
`hljs.js`) and copy the result over `src/web/vendor/hljs.js`.
|
|
38
|
-
|
|
39
|
-
**Size discipline:** the hygiene gate (`scripts/check-hygiene.ts`) fails
|
|
40
|
-
any tracked file over 1 MB unless it's on the explicit allowlist. The
|
|
41
|
-
current bundle (core + 14 languages) is ~83 KB — comfortably under the
|
|
42
|
-
cap. If you add enough languages to bust 1 MB, either trim the language
|
|
43
|
-
list or add a justified, size-capped `ALLOW` entry in
|
|
44
|
-
`scripts/check-hygiene.ts` (see the existing entries there for the
|
|
45
|
-
pattern) — don't silently let it grow past the cap.
|
|
46
|
-
|
|
47
|
-
`hljs-theme.css` is NOT generated from highlight.js's stock themes — it's
|
|
48
|
-
hand-written, mapping the standard `hljs-*` token classes onto mlx-bun's
|
|
49
|
-
own design tokens (see the file's own header comment) so code blocks match
|
|
50
|
-
the app's palette in both light and dark.
|
|
51
|
-
|
|
52
|
-
## KaTeX (math) — deliberately not vendored
|
|
53
|
-
|
|
54
|
-
Investigated for the same treatment; skipped. KaTeX's CSS depends on its
|
|
55
|
-
own bundled math font (`dist/fonts/`, ~60 files / ~1.1 MB of woff2/woff/ttf)
|
|
56
|
-
for correct glyph metrics — there's no clean "system font fallback" path
|
|
57
|
-
that renders math correctly. Vendoring it would mean adding ~1 MB of
|
|
58
|
-
binary font files, which the hygiene gate is specifically designed to keep
|
|
59
|
-
out of this repo (see `scripts/check-hygiene.ts`'s header). Needs the
|
|
60
|
-
build-step/asset-hosting decision from `docs/design/web-chat-redesign.md`
|
|
61
|
-
§7 before it's worth revisiting.
|
package/src/web-assets.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
// Embedded web app — the unified SPA (chat / quantize / finetune /
|
|
2
|
-
// dataset / status). `with { type: "text" }` inlines the file in both
|
|
3
|
-
// `bun run` and the compiled single binary. bun-types types *.html
|
|
4
|
-
// imports as HTMLBundle (the html loader), but the text attribute makes
|
|
5
|
-
// the runtime value a string — hence the double cast.
|
|
6
|
-
import appHtml from "./web/app.html" with { type: "text" };
|
|
7
|
-
import curveDesignerHtml from "./lab/curve/curve-designer.html" with { type: "text" };
|
|
8
|
-
// Vendored, no-CDN static assets referenced by app.html (convention: any
|
|
9
|
-
// self-contained JS/CSS too big to inline gets `with { type: "text" }`
|
|
10
|
-
// imported here and served under /assets/<name>; see src/web/vendor/README
|
|
11
|
-
// for how hljs.js was built). Add new vendored assets the same way.
|
|
12
|
-
import hljsJs from "./web/vendor/hljs.js" with { type: "text" };
|
|
13
|
-
import hljsCss from "./web/vendor/hljs-theme.css" with { type: "text" };
|
|
14
|
-
// The frontend bundle (plan §7/§9 Phase 2 module split): GENERATED from
|
|
15
|
-
// src/web/src/*.ts by `bun scripts/build-web.ts` — see that file's header
|
|
16
|
-
// and tests/using/web-build.test.ts (the freshness gate). Same
|
|
17
|
-
// with { type: "text" } + /assets/<name> pattern as the vendored assets
|
|
18
|
-
// above; app.html's <script defer src="/assets/app.js"> loads it.
|
|
19
|
-
import appJs from "./web/app.js" with { type: "text" };
|
|
20
|
-
// PWA installability (plan §9 Phase 3, beat-matrix Axis 10): a manifest +
|
|
21
|
-
// a single inline SVG icon (no binary PNGs — the hygiene gate forbids
|
|
22
|
-
// tracked binary files; some browsers won't show an SVG app icon, which is
|
|
23
|
-
// an accepted tradeoff, see docs/reference/server-config.md) + a shell-
|
|
24
|
-
// only service worker. Same with { type: "text" } + /assets/<name>-shaped
|
|
25
|
-
// pattern as the vendored assets above; see src/web/sw.js's header for why
|
|
26
|
-
// it deliberately does NOT cache API/WS traffic.
|
|
27
|
-
import manifestWebmanifest from "./web/manifest.webmanifest" with { type: "text" };
|
|
28
|
-
import iconSvg from "./web/icon.svg" with { type: "text" };
|
|
29
|
-
import swJs from "./web/sw.js" with { type: "text" };
|
|
30
|
-
const APP_PAGE = appHtml as unknown as string;
|
|
31
|
-
const HLJS_JS = hljsJs as unknown as string;
|
|
32
|
-
const HLJS_CSS = hljsCss as unknown as string;
|
|
33
|
-
const APP_JS = appJs as unknown as string;
|
|
34
|
-
const MANIFEST_WEBMANIFEST = manifestWebmanifest as unknown as string;
|
|
35
|
-
const ICON_SVG = iconSvg as unknown as string;
|
|
36
|
-
const SW_JS = swJs as unknown as string;
|
|
37
|
-
const CURVE_PAGE = curveDesignerHtml as unknown as string;
|
|
38
|
-
export const STATIC_ROUTE_ASSETS = {
|
|
39
|
-
appPage: APP_PAGE,
|
|
40
|
-
appJs: APP_JS,
|
|
41
|
-
hljsJs: HLJS_JS,
|
|
42
|
-
hljsCss: HLJS_CSS,
|
|
43
|
-
manifest: MANIFEST_WEBMANIFEST,
|
|
44
|
-
iconSvg: ICON_SVG,
|
|
45
|
-
serviceWorker: SW_JS,
|
|
46
|
-
curvePage: CURVE_PAGE,
|
|
47
|
-
};
|