mlx-bun 0.5.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1449 -109
- package/THIRD_PARTY_NOTICES.md +882 -0
- package/bin/mlx-bun.convert.mjs +4 -0
- package/bin/mlx-bun.fuse.mjs +4 -0
- package/bin/mlx-bun.generate.mjs +4 -0
- package/bin/mlx-bun.lora.mjs +4 -0
- package/bin/mlx-bun.mjs +13 -21
- package/bin/mlx-bun.server.mjs +4 -0
- package/bin/mlx-bun.upload.mjs +4 -0
- package/dist/web/app.js +9584 -0
- package/package.json +50 -53
- package/src/cli/ane-install.ts +76 -0
- package/src/cli/args.ts +179 -0
- package/src/cli/engine-entry.ts +68 -0
- package/src/cli/inference.ts +214 -0
- package/src/cli/job-entry.ts +97 -0
- package/src/cli/library-host.ts +117 -0
- package/src/cli/main.ts +57 -0
- package/src/cli/memory-engine.ts +163 -0
- package/src/cli/memory.ts +36 -0
- package/src/cli/mlx-lm-aliases.ts +309 -0
- package/src/cli/model-choice.ts +33 -0
- package/src/cli/model-selection.ts +84 -0
- package/src/cli/module-host.ts +11 -0
- package/src/cli/module-verbs.ts +50 -0
- package/src/cli/numerical-policy.ts +12 -0
- package/src/cli/perplexity.ts +89 -0
- package/src/cli/serve-host.ts +423 -0
- package/src/cli/serve-isolated.ts +217 -0
- package/src/cli/serve-options.ts +106 -0
- package/src/cli/serve-state.ts +205 -0
- package/src/cli/serve.ts +500 -0
- package/src/cli/served-model-host.ts +102 -0
- package/src/cli/server-entry.ts +148 -0
- package/src/cli/serving-unit.ts +177 -0
- package/src/{tui.ts → cli/terminal.ts} +13 -8
- package/src/cli/worker-adapters.ts +34 -0
- package/src/cli/worker-entry.ts +272 -0
- package/src/cli/worker-unit.ts +179 -0
- package/src/engine/adapter-operation.ts +26 -0
- package/src/engine/cache-services.ts +114 -0
- package/src/engine/completion.ts +39 -0
- package/src/engine/generation-gateway.ts +358 -0
- package/src/engine/index.ts +59 -0
- package/src/engine/kv-budget.ts +120 -0
- package/src/engine/media-preparation.ts +232 -0
- package/src/engine/model-binding.ts +24 -0
- package/src/engine/model-host.ts +513 -0
- package/src/engine/model-serving.ts +89 -0
- package/src/{serve → engine}/preparation.ts +7 -5
- package/src/{serve → engine}/session-completion-engine.ts +6 -6
- package/src/engine/telemetry.ts +109 -0
- package/src/hub/downloads.ts +116 -0
- package/src/jobs/db.ts +16 -7
- package/src/jobs/events.ts +29 -0
- package/src/jobs/executable.ts +5 -0
- package/src/jobs/host.ts +51 -0
- package/src/jobs/in-process.ts +55 -0
- package/src/{contracts/jobs.ts → jobs/protocol.ts} +7 -9
- package/src/jobs/runner.ts +150 -231
- package/src/jobs/service.ts +75 -0
- package/src/jobs/sse.ts +59 -23
- package/src/jobs/worker-memory.ts +46 -0
- package/src/jobs/worker-process.ts +163 -0
- package/src/jobs/worker-supervisor.ts +258 -0
- package/src/modules.ts +58 -0
- package/src/publishing/catalog-hub.ts +18 -0
- package/src/publishing/credentials.ts +31 -0
- package/src/publishing/upload.ts +37 -0
- package/src/residency/leased-adapters.ts +21 -0
- package/src/residency/local-records.ts +16 -0
- package/src/residency/model-residency.ts +405 -0
- package/src/residency/record-index.ts +28 -0
- package/src/residency/resident-estimate.ts +50 -0
- package/src/{anthropic.ts → server/anthropic.ts} +3 -81
- package/src/server/cache-routes.ts +36 -0
- package/src/{serve → server}/chat-request.ts +10 -10
- package/src/{serve → server}/chat-stage.ts +14 -14
- package/src/{client.ts → server/client.ts} +28 -2
- package/src/{serve → server}/completion-executor.ts +33 -41
- package/src/server/decision-body.ts +55 -0
- package/src/server/decision-routes.ts +134 -0
- package/src/server/decision-wire.ts +228 -0
- package/src/{serve → server}/discovery-routes.ts +25 -82
- package/src/{serve → server}/http.ts +25 -13
- package/src/{serve → server}/inference-request.ts +5 -5
- package/src/server/job-routes.ts +20 -0
- package/src/server/media-prompt.ts +63 -0
- package/src/server/memory-completion-client.ts +46 -0
- package/src/server/model-routes.ts +192 -0
- package/src/{serve → server}/openai-wire.ts +3 -2
- package/src/{serve → server}/pipeline.ts +1 -1
- package/src/server/prompt-builder.ts +13 -0
- package/src/server/prompt-contracts.ts +17 -0
- package/src/server/proxy-routes.ts +187 -0
- package/src/server/publishing-routes.ts +41 -0
- package/src/{serve → server}/request-plan.ts +6 -8
- package/src/{serve → server}/request-prep.ts +47 -50
- package/src/{serve → server}/responses-client.ts +30 -13
- package/src/{responses.ts → server/responses.ts} +12 -93
- package/src/server/routes.ts +205 -0
- package/src/server/start.ts +72 -0
- package/src/server/status-routes.ts +108 -0
- package/src/{serve → server}/text-completion-stage.ts +25 -4
- package/src/server/text-prompt.ts +12 -0
- package/src/{serve → server}/token-streams.ts +36 -38
- package/src/server/worker-routes.ts +311 -0
- package/src/storage/paths.ts +61 -0
- package/src/web/assets.ts +37 -0
- package/src/web/{src → browser}/api.ts +5 -23
- package/src/web/browser/chat-host.ts +17 -0
- package/src/web/browser/installed-panels.ts +6 -0
- package/src/web/browser/main.ts +55 -0
- package/src/web/browser/markdown.ts +279 -0
- package/src/web/browser/memory-panel.ts +9 -0
- package/src/web/browser/palette.ts +64 -0
- package/src/web/browser/protocol.ts +13 -0
- package/src/web/browser/shell.ts +467 -0
- package/src/web/{src → browser}/status.ts +32 -36
- package/src/web/build.ts +51 -0
- package/src/web/public/app.html +1054 -0
- package/src/web/{sw.js → public/sw.js} +4 -3
- package/src/web/{vendor → public/vendor}/hljs-theme.css +2 -2
- package/src/web/{vendor → public/vendor}/hljs.js +2 -2
- package/THIRD_PARTY_LICENSES.md +0 -51
- package/docs/README.md +0 -107
- package/docs/archive/hlg-sampling.md +0 -350
- package/docs/archive/investigations/audio-input-plan.md +0 -356
- package/docs/archive/investigations/benchmark-ledger-through-v0.4.0.md +0 -3617
- package/docs/archive/investigations/chunk-finetune-experiment.md +0 -84
- package/docs/archive/investigations/colibri-glm52-port.md +0 -1486
- package/docs/archive/investigations/colibri-oracle-pin.md +0 -1284
- package/docs/archive/investigations/curve-bisector-routing.md +0 -123
- package/docs/archive/investigations/decode-roofline-lookagain.md +0 -348
- package/docs/archive/investigations/diffusion-gemma-port.md +0 -602
- package/docs/archive/investigations/dspark-handoff.md +0 -224
- package/docs/archive/investigations/expert-offload-single-user-moe.md +0 -292
- package/docs/archive/investigations/faithful-l1-consolidation.md +0 -310
- package/docs/archive/investigations/hlg-sampling-investigation.md +0 -970
- package/docs/archive/investigations/indexshare-performance-spike.md +0 -357
- package/docs/archive/investigations/kernel-perf-review-2026-07.md +0 -171
- package/docs/archive/investigations/lab-build-journal.md +0 -157
- package/docs/archive/investigations/minicpm5-decode-megakernel.md +0 -489
- package/docs/archive/investigations/openjarvis-fit.md +0 -198
- package/docs/archive/investigations/openwiki-evaluation.md +0 -249
- package/docs/archive/investigations/optimization_plan.md +0 -346
- package/docs/archive/investigations/orpo-base-uf-experiment-and-directions.md +0 -120
- package/docs/archive/investigations/orpo-flash-cce-pin-leak.md +0 -167
- package/docs/archive/investigations/orpo-uf-testing-handoff.md +0 -126
- package/docs/archive/investigations/pareto-specialized-runtime-findings.md +0 -92
- package/docs/archive/investigations/pi-builtin-investigation.md +0 -308
- package/docs/archive/investigations/pre-colibri-stabilization.md +0 -329
- package/docs/archive/investigations/qwen38-27b-campaign-log.md +0 -1092
- package/docs/archive/investigations/segmented-backward-handoff.md +0 -148
- package/docs/archive/investigations/starter-model-port-handoff.md +0 -342
- package/docs/archive/investigations/steel-flash-cce-handoff.md +0 -489
- package/docs/archive/investigations/the-dreaming-handoff.md +0 -141
- package/docs/archive/investigations/trainer-validation-experiment.md +0 -173
- package/docs/archive/planning/chat-ui-vision-memory-first.md +0 -199
- package/docs/archive/planning/chat-ui-vision.md +0 -50
- package/docs/archive/planning/chunk-task-roadmap.md +0 -77
- package/docs/archive/planning/curve-sampler-research-plan.md +0 -331
- package/docs/archive/planning/journal.md +0 -316
- package/docs/archive/planning/memory-docs-and-dag-plan.md +0 -194
- package/docs/archive/planning/pi-integration-review.md +0 -178
- package/docs/archive/planning/release-notes-v0.0.10.md +0 -57
- package/docs/archive/planning/release-notes-v0.0.11.md +0 -239
- package/docs/archive/planning/release-notes-v0.0.12.md +0 -80
- package/docs/archive/planning/release-notes-v0.0.13.md +0 -77
- package/docs/archive/planning/release-notes-v0.0.9.md +0 -122
- package/docs/archive/planning/release-notes-v0.2.0.md +0 -49
- package/docs/archive/planning/release-notes-v0.3.0.md +0 -35
- package/docs/archive/planning/release-notes-v0.4.0.md +0 -45
- package/docs/archive/planning/release-notes-v0.5.0.md +0 -37
- package/docs/archive/planning/web-ui-pass-plan.md +0 -213
- package/docs/archive/planning/website-readme-pass-plan.md +0 -224
- package/docs/design/batching.md +0 -2054
- package/docs/design/decode-speed-program.md +0 -2404
- package/docs/design/dreaming-nightly-pipeline.md +0 -684
- package/docs/design/generic-model-support.md +0 -821
- package/docs/design/kv-cache.md +0 -993
- package/docs/design/orpo-training.md +0 -680
- package/docs/design/speculative-decoding.md +0 -2129
- package/docs/design/turboquant.md +0 -2225
- package/docs/design/unified-engine-frontier-plan.md +0 -1987
- package/docs/design/web-chat-redesign.md +0 -695
- package/docs/planning/PRODUCT_ROADMAP.md +0 -593
- package/docs/planning/ResearchTopics.md +0 -119
- package/docs/planning/public-readiness-handoff.md +0 -244
- package/docs/planning/public-readiness.md +0 -149
- package/docs/planning/video-series.md +0 -421
- package/docs/reference/benchmarks.md +0 -3587
- package/docs/reference/cli.md +0 -646
- package/docs/reference/distribution.md +0 -380
- package/docs/reference/environment.md +0 -494
- package/docs/reference/glossary.md +0 -39
- package/docs/reference/library-api.md +0 -688
- package/docs/reference/memory.md +0 -260
- package/docs/reference/models.md +0 -346
- package/docs/reference/server-api.md +0 -1945
- package/docs/reference/server-config.md +0 -973
- package/docs/reference/training.md +0 -462
- package/docs/reference/troubleshooting.md +0 -158
- package/src/admission-plan.ts +0 -18
- package/src/audio/audiotoolbox.ts +0 -112
- package/src/audio/conformer.ts +0 -655
- package/src/audio/decode.ts +0 -133
- package/src/audio/features.ts +0 -202
- package/src/audio/mic-capture.ts +0 -98
- package/src/audio/silero-vad.ts +0 -379
- package/src/audio/transcode.ts +0 -67
- package/src/audio/whisper-decode.ts +0 -774
- package/src/audio/whisper-fast.ts +0 -732
- package/src/audio/whisper-format.ts +0 -73
- package/src/audio/whisper-mel.ts +0 -185
- package/src/audio/whisper-timing.ts +0 -274
- package/src/audio/whisper-tokenizer.ts +0 -239
- package/src/audio/whisper-transcribe.ts +0 -410
- package/src/backends/mlx/assistant-target.ts +0 -46
- package/src/backends/mlx/autoregressive-draft-rows.ts +0 -120
- package/src/backends/mlx/autoregressive.ts +0 -129
- package/src/backends/mlx/batch-group.ts +0 -1874
- package/src/backends/mlx/cache-attachment.ts +0 -67
- package/src/backends/mlx/cache-layout.ts +0 -31
- package/src/backends/mlx/checkpoint-state.ts +0 -53
- package/src/backends/mlx/continuation-persistence.ts +0 -107
- package/src/backends/mlx/continuation-request.ts +0 -43
- package/src/backends/mlx/continuation.ts +0 -77
- package/src/backends/mlx/diffusion.ts +0 -39
- package/src/backends/mlx/draft-target.ts +0 -32
- package/src/backends/mlx/encoder-cache.ts +0 -25
- package/src/backends/mlx/evaluation.ts +0 -105
- package/src/backends/mlx/fill-append.ts +0 -58
- package/src/backends/mlx/fill-group.ts +0 -497
- package/src/backends/mlx/full-kv-row-append.ts +0 -32
- package/src/backends/mlx/full-kv-row-donor.ts +0 -54
- package/src/backends/mlx/full-transitioning-kv-rows.ts +0 -65
- package/src/backends/mlx/gateway-binding.ts +0 -174
- package/src/backends/mlx/graph.ts +0 -38
- package/src/backends/mlx/kv-codec.ts +0 -9
- package/src/backends/mlx/kv-maintenance.ts +0 -161
- package/src/backends/mlx/kv-tensor-rows.ts +0 -212
- package/src/backends/mlx/memory-client.ts +0 -189
- package/src/backends/mlx/methods.ts +0 -90
- package/src/backends/mlx/mixed-iteration.ts +0 -62
- package/src/backends/mlx/model-prompt.ts +0 -178
- package/src/backends/mlx/model-serving.ts +0 -80
- package/src/backends/mlx/paged-cache-codec.ts +0 -27
- package/src/backends/mlx/prefill-cohort.ts +0 -100
- package/src/backends/mlx/prefill-policy.ts +0 -26
- package/src/backends/mlx/prefill-rows.ts +0 -244
- package/src/backends/mlx/prefill.ts +0 -33
- package/src/backends/mlx/projected-context-rows.ts +0 -72
- package/src/backends/mlx/prompt-input.ts +0 -29
- package/src/backends/mlx/qwen-prompt-input.ts +0 -40
- package/src/backends/mlx/request-policy.ts +0 -20
- package/src/backends/mlx/request-state-policy.ts +0 -54
- package/src/backends/mlx/rollback.ts +0 -92
- package/src/backends/mlx/row-sampling.ts +0 -49
- package/src/backends/mlx/serial-executor.ts +0 -251
- package/src/backends/mlx/speculative-group.ts +0 -438
- package/src/backends/mlx/speculative-round.ts +0 -161
- package/src/backends/mlx/speculative.ts +0 -131
- package/src/backends/mlx/state-rows.ts +0 -104
- package/src/backends/mlx/state-views.ts +0 -46
- package/src/backends/mlx/target-layout-capability.ts +0 -35
- package/src/backends/mlx/text-engine.ts +0 -73
- package/src/backends/mlx/transitioning-kv-rows.ts +0 -173
- package/src/chat-template.ts +0 -382
- package/src/cli.ts +0 -3490
- package/src/config.ts +0 -399
- package/src/contracts/completion.ts +0 -16
- package/src/contracts/execution.ts +0 -70
- package/src/contracts/generation.ts +0 -103
- package/src/contracts/host.ts +0 -7
- package/src/contracts/object-cache.ts +0 -8
- package/src/contracts/pi-provider.ts +0 -30
- package/src/contracts/pi.ts +0 -261
- package/src/contracts/prefix-cache.ts +0 -33
- package/src/contracts/resources.ts +0 -25
- package/src/contracts/sampling.ts +0 -23
- package/src/contracts/scheduling.ts +0 -54
- package/src/contracts/tsconfig.json +0 -14
- package/src/dataset/generators.ts +0 -1087
- package/src/dataset/index.ts +0 -12
- package/src/dataset/job.ts +0 -81
- package/src/dataset/llm.ts +0 -71
- package/src/dataset/registry.ts +0 -528
- package/src/diffusion/diffusion-generate.ts +0 -507
- package/src/download.ts +0 -505
- package/src/embed.ts +0 -77
- package/src/engine/admission.ts +0 -59
- package/src/engine/cancellation.ts +0 -38
- package/src/engine/engine.ts +0 -56
- package/src/engine/execution-coordinator.ts +0 -70
- package/src/engine/execution-plan.ts +0 -64
- package/src/engine/execution-tasks.ts +0 -44
- package/src/engine/namespaced-cache.ts +0 -13
- package/src/engine/resources.ts +0 -53
- package/src/engine/scheduler.ts +0 -92
- package/src/engine/session.ts +0 -247
- package/src/eval/README.md +0 -130
- package/src/eval/ifeval.ts +0 -81
- package/src/eval/kl-prompts.ts +0 -29
- package/src/eval/kl.ts +0 -590
- package/src/eval/perplexity.ts +0 -164
- package/src/eval/quality-db.ts +0 -92
- package/src/eval/reference-logits.ts +0 -207
- package/src/eval/runner.ts +0 -124
- package/src/eval/score.ts +0 -49
- package/src/eval/tasks/bfcl.ts +0 -535
- package/src/eval/tasks/gsm8k.ts +0 -98
- package/src/eval/tasks/hashhop.ts +0 -139
- package/src/eval/tasks/humaneval.ts +0 -275
- package/src/eval/tasks/ifeval.ts +0 -525
- package/src/eval/tasks/mmlu.ts +0 -157
- package/src/eval/ultrafeedback.ts +0 -60
- package/src/evaldb.ts +0 -199
- package/src/expert-io.ts +0 -393
- package/src/expert-offload-build.ts +0 -77
- package/src/expert-offload.ts +0 -76
- package/src/expert-residency.ts +0 -1134
- package/src/expert-usage.ts +0 -415
- package/src/fill/echo-index.ts +0 -188
- package/src/fill/fill-session.ts +0 -463
- package/src/fill/proposal.ts +0 -68
- package/src/fill/schema-rows.ts +0 -506
- package/src/fill/tool-boundary.ts +0 -103
- package/src/fit.ts +0 -249
- package/src/generate.ts +0 -1352
- package/src/grammar.ts +0 -604
- package/src/harness-pi.ts +0 -184
- package/src/hf-push.ts +0 -628
- package/src/hub-rest.ts +0 -242
- package/src/index.ts +0 -63
- package/src/inference/denoising.ts +0 -17
- package/src/inference/draft-acceptance.ts +0 -41
- package/src/inference/draft-output.ts +0 -49
- package/src/inference/graph.ts +0 -33
- package/src/inference/prefill.ts +0 -45
- package/src/inference/rollback.ts +0 -7
- package/src/jobs/index.ts +0 -31
- package/src/jobs/job-entry.ts +0 -107
- package/src/jobs/task-client.ts +0 -19
- package/src/jobs/types.ts +0 -2
- package/src/kv-scheme.ts +0 -279
- package/src/kv-store.ts +0 -1135
- package/src/lab/README.md +0 -22
- package/src/lab/curve/curve-designer.html +0 -303
- package/src/lab/curve/curve-sampler.ts +0 -122
- package/src/lab/expert-trace/expert-trace.ts +0 -69
- package/src/lab/paged-kv/paged-attention.ts +0 -117
- package/src/lab/paged-kv/paged-kv-rows.ts +0 -111
- package/src/lab/paged-kv/paged-kv.ts +0 -336
- package/src/library.ts +0 -40
- package/src/lora.ts +0 -408
- package/src/md-modules.d.ts +0 -54
- package/src/media-fetch.ts +0 -442
- package/src/memory/article.ts +0 -558
- package/src/memory/chunk-validation.ts +0 -150
- package/src/memory/chunk.ts +0 -318
- package/src/memory/cluster.ts +0 -351
- package/src/memory/coverage.ts +0 -134
- package/src/memory/crosslink.ts +0 -0
- package/src/memory/db.ts +0 -253
- package/src/memory/entity.ts +0 -203
- package/src/memory/gate.ts +0 -187
- package/src/memory/history.ts +0 -152
- package/src/memory/ingest.ts +0 -335
- package/src/memory/model.ts +0 -183
- package/src/memory/normalize.ts +0 -671
- package/src/memory/parse.ts +0 -22
- package/src/memory/pipeline.ts +0 -275
- package/src/memory/prompts.ts +0 -65
- package/src/memory/query.ts +0 -334
- package/src/memory/reconcile.ts +0 -734
- package/src/memory/redirect.ts +0 -108
- package/src/memory/reindex.ts +0 -325
- package/src/memory/resolve.ts +0 -307
- package/src/memory/rest.ts +0 -245
- package/src/memory/route.ts +0 -272
- package/src/memory/schedule.ts +0 -165
- package/src/memory/stages.ts +0 -777
- package/src/memory/synthesize.ts +0 -1638
- package/src/memory/tools.ts +0 -749
- package/src/memory/vault.ts +0 -1194
- package/src/memory/wikify.ts +0 -1064
- package/src/mlx/array.ts +0 -425
- package/src/mlx/autograd.ts +0 -304
- package/src/mlx/checkpoint.ts +0 -149
- package/src/mlx/compile.ts +0 -168
- package/src/mlx/custom-vjp.ts +0 -188
- package/src/mlx/ffi.ts +0 -531
- package/src/mlx/materialize.ts +0 -23
- package/src/mlx/metal-kernel.ts +0 -159
- package/src/mlx/normalized-argmax.ts +0 -116
- package/src/mlx/ops.ts +0 -1108
- package/src/mlx/quantized-rows.ts +0 -36
- package/src/mlx/token-bitmask.ts +0 -52
- package/src/mlx/turboquant-kv-decode.ts +0 -82
- package/src/mlx/turboquant-kv-inverse.ts +0 -122
- package/src/mlx/turboquant-ops.ts +0 -861
- package/src/mlx/turboquant-tables.ts +0 -237
- package/src/mmap.ts +0 -90
- package/src/model/artifact-identity.ts +0 -73
- package/src/model/batched-kv.ts +0 -235
- package/src/model/batched-mask.ts +0 -279
- package/src/model/batched-quant.ts +0 -212
- package/src/model/batched-quantized-kv.ts +0 -144
- package/src/model/batched-rotating-quant.ts +0 -353
- package/src/model/batched-rotating-state.ts +0 -149
- package/src/model/batched-rotating.ts +0 -338
- package/src/model/batched-row-storage.ts +0 -179
- package/src/model/batched-ssm.ts +0 -52
- package/src/model/batched-turboquant-kv.ts +0 -94
- package/src/model/compiled-decode.ts +0 -712
- package/src/model/decoded-kv-donor.ts +0 -12
- package/src/model/delayed-quantized-kv.ts +0 -72
- package/src/model/delayed-rotating-quantized-kv.ts +0 -93
- package/src/model/delayed-turboquant-kv.ts +0 -57
- package/src/model/diffusion-gemma.ts +0 -1026
- package/src/model/factory.ts +0 -215
- package/src/model/fingerprint.ts +0 -45
- package/src/model/flash-attention.ts +0 -694
- package/src/model/full-prefill-padding.ts +0 -56
- package/src/model/full-prefill-row.ts +0 -105
- package/src/model/gemma4-base.ts +0 -2370
- package/src/model/gemma4.ts +0 -1395
- package/src/model/generated/gemma4-12b.ts +0 -429
- package/src/model/generated/gemma4-26b.ts +0 -448
- package/src/model/generated/gemma4-e4b.ts +0 -717
- package/src/model/generated/index.ts +0 -18
- package/src/model/glm52-atlas.ts +0 -511
- package/src/model/glm52-cache.ts +0 -792
- package/src/model/glm52-config.ts +0 -262
- package/src/model/glm52-container.ts +0 -305
- package/src/model/glm52-coupling.ts +0 -388
- package/src/model/glm52-dsa.ts +0 -606
- package/src/model/glm52-expert-layout.ts +0 -253
- package/src/model/glm52-layout.ts +0 -152
- package/src/model/glm52-memory.ts +0 -500
- package/src/model/glm52-mla.ts +0 -792
- package/src/model/glm52-moe.ts +0 -223
- package/src/model/glm52-pilot.ts +0 -537
- package/src/model/glm52-reference.ts +0 -445
- package/src/model/glm52-residency.ts +0 -557
- package/src/model/glm52-resident-weights.ts +0 -135
- package/src/model/glm52-streamed-experts.ts +0 -453
- package/src/model/glm52-streamed-metal.ts +0 -610
- package/src/model/glm52-weights.ts +0 -503
- package/src/model/glm52.ts +0 -1132
- package/src/model/implementation.ts +0 -69
- package/src/model/kv-attention-view.ts +0 -70
- package/src/model/minicpm5.ts +0 -376
- package/src/model/profile.ts +0 -468
- package/src/model/quantized-append-attention.ts +0 -31
- package/src/model/qwen-append.ts +0 -12
- package/src/model/qwen-conv.ts +0 -52
- package/src/model/qwen3-delta-state.ts +0 -74
- package/src/model/qwen3-delta.ts +0 -451
- package/src/model/qwen3-moe.ts +0 -404
- package/src/model/qwen3-mrope.ts +0 -250
- package/src/model/qwen3.ts +0 -277
- package/src/model/qwen3_5-checkpoint.ts +0 -164
- package/src/model/qwen3_5.ts +0 -881
- package/src/model/rotating-kv-donor.ts +0 -35
- package/src/model/rotating-kv-layout.ts +0 -262
- package/src/model/rotating-row-transaction.ts +0 -35
- package/src/model/speculative-rotating-kv.ts +0 -101
- package/src/model/ssm-prefill-padding.ts +0 -39
- package/src/model/support.ts +0 -110
- package/src/model/token-groups.ts +0 -66
- package/src/model/trellis-balanced-scatter.ts +0 -51
- package/src/model/trellis-linear.ts +0 -672
- package/src/model/trellis-shared-m.ts +0 -151
- package/src/model/trellis-shared-scatter.ts +0 -144
- package/src/model/trellis-splitk-prefill.ts +0 -158
- package/src/model/trellis-tiled-prefill.ts +0 -136
- package/src/model/trellis-vector-expand.ts +0 -62
- package/src/model/trellis-wide-prefill.ts +0 -94
- package/src/model/turboquant-codec.ts +0 -89
- package/src/model/universal/archs.ts +0 -332
- package/src/model/universal/dense.ts +0 -612
- package/src/model/universal/modules.ts +0 -170
- package/src/model/universal/rope.ts +0 -381
- package/src/model/whisper.ts +0 -435
- package/src/native/expert_io.c +0 -523
- package/src/native/frame_extract.swift +0 -140
- package/src/native/mic_capture.swift +0 -92
- package/src/native-pack.ts +0 -163
- package/src/pi-provider.ts +0 -53
- package/src/pi-session.ts +0 -81
- package/src/pi-terminal.ts +0 -274
- package/src/pi-web.ts +0 -1940
- package/src/preflight.ts +0 -158
- package/src/prompt-cache.ts +0 -682
- package/src/quantize/allocator.ts +0 -627
- package/src/quantize/atomic-output.ts +0 -38
- package/src/quantize/calibration.ts +0 -181
- package/src/quantize/config-writer.ts +0 -145
- package/src/quantize/index.ts +0 -84
- package/src/quantize/job.ts +0 -162
- package/src/quantize/quantizer.ts +0 -666
- package/src/quantize/rotate.ts +0 -603
- package/src/quantize/safetensors-writer.ts +0 -249
- package/src/quantize/sensitivity.ts +0 -216
- package/src/quantize/trellis.ts +0 -586
- package/src/quantize/weight-transform.ts +0 -292
- package/src/registry.ts +0 -602
- package/src/runtime-config.ts +0 -77
- package/src/safetensors.ts +0 -165
- package/src/sampler.ts +0 -1012
- package/src/serve/admin-routes.ts +0 -184
- package/src/serve/assets/curve-terrain.html +0 -105
- package/src/serve/assets/training-inference-map.html +0 -575
- package/src/serve/audio-routes.ts +0 -323
- package/src/serve/aux-routes.ts +0 -132
- package/src/serve/batch-scheduler.ts +0 -8
- package/src/serve/checkpoint-identity.ts +0 -64
- package/src/serve/generation-gateway.ts +0 -537
- package/src/serve/isolate.ts +0 -609
- package/src/serve/kv-budget.ts +0 -14
- package/src/serve/lab-routes.ts +0 -341
- package/src/serve/lane-registry.ts +0 -45
- package/src/serve/model-admin-routes.ts +0 -155
- package/src/serve/model-binding.ts +0 -49
- package/src/serve/model-host.ts +0 -511
- package/src/serve/parent-application.ts +0 -56
- package/src/serve/prompt-response-trace.ts +0 -161
- package/src/serve/response-lease.ts +0 -24
- package/src/serve/session-search.ts +0 -326
- package/src/serve/static-routes.ts +0 -101
- package/src/serve/transcription-server.ts +0 -64
- package/src/serve/transcription-service.ts +0 -502
- package/src/server.ts +0 -1282
- package/src/spec/assistant-rows.ts +0 -93
- package/src/spec/assistant-source.ts +0 -126
- package/src/spec/cache-identity.ts +0 -22
- package/src/spec/deepspec-rows.ts +0 -29
- package/src/spec/deepspec-source.ts +0 -145
- package/src/spec/dflash-source.ts +0 -149
- package/src/spec/drafter.ts +0 -304
- package/src/spec/dspark/ab-stats.ts +0 -136
- package/src/spec/dspark/calibration.ts +0 -112
- package/src/spec/dspark/data-dflash.ts +0 -156
- package/src/spec/dspark/data.ts +0 -201
- package/src/spec/dspark/deepspec-module.ts +0 -776
- package/src/spec/dspark/generate-dflash.ts +0 -245
- package/src/spec/dspark/generate.ts +0 -290
- package/src/spec/dspark/loader.ts +0 -23
- package/src/spec/dspark/loss.ts +0 -213
- package/src/spec/dspark/module-dflash.ts +0 -560
- package/src/spec/dspark/module.ts +0 -540
- package/src/spec/dspark/quantize-drafter.ts +0 -91
- package/src/spec/dspark/sample.ts +0 -112
- package/src/spec/generate.ts +0 -276
- package/src/spec/glm52-mtp-graph.ts +0 -29
- package/src/spec/glm52-mtp-rows.ts +0 -132
- package/src/spec/glm52-mtp-source.ts +0 -318
- package/src/spec/glm52-mtp-state.ts +0 -33
- package/src/spec/ngram-source.ts +0 -226
- package/src/spec/projected-draft-rows.ts +0 -73
- package/src/spec/qwen-mtp-module.ts +0 -171
- package/src/spec/qwen-mtp-rows.ts +0 -230
- package/src/spec/qwen-mtp-source.ts +0 -386
- package/src/spec/qwen-mtp-state.ts +0 -30
- package/src/spec/serve-loop.ts +0 -587
- package/src/spec/source.ts +0 -228
- package/src/spec/two-model-rows.ts +0 -62
- package/src/spec/two-model.ts +0 -113
- package/src/ssd-cache.ts +0 -431
- package/src/ssd-durability.ts +0 -209
- package/src/storage/host-buffer.ts +0 -24
- package/src/storage/kv-writer.ts +0 -83
- package/src/storage/kv-writer.worker.js +0 -264
- package/src/storage/retention-policy.ts +0 -37
- package/src/tiered-prompt-cache.ts +0 -45
- package/src/tokenizer.ts +0 -335
- package/src/tool-approvals.ts +0 -131
- package/src/tool-call.ts +0 -695
- package/src/train/dataset.ts +0 -484
- package/src/train/diffusion-lora.ts +0 -216
- package/src/train/export.ts +0 -32
- package/src/train/flash-cce.ts +0 -1234
- package/src/train/forward.ts +0 -266
- package/src/train/fuse.ts +0 -243
- package/src/train/index.ts +0 -46
- package/src/train/job.ts +0 -205
- package/src/train/lora-params.ts +0 -254
- package/src/train/loss.ts +0 -1591
- package/src/train/merge.ts +0 -195
- package/src/train/optimizer.ts +0 -183
- package/src/train/prefix-shared.ts +0 -490
- package/src/train/rank.ts +0 -137
- package/src/train/segmented.ts +0 -1828
- package/src/train/steel-qmm-header.ts +0 -1461
- package/src/train/trainer.ts +0 -1221
- package/src/train/watch.ts +0 -542
- package/src/vision/diffusion-vision.ts +0 -620
- package/src/vision/embedder.ts +0 -176
- package/src/vision/preprocess.ts +0 -247
- package/src/vision/prompt.ts +0 -409
- package/src/vision/qwen3vl-preprocess.ts +0 -409
- package/src/vision/qwen3vl-prompt.ts +0 -233
- package/src/vision/qwen3vl-tower.ts +0 -566
- package/src/vision/siglip.ts +0 -607
- package/src/vision/video-frames.ts +0 -148
- package/src/web/app.html +0 -2155
- package/src/web/app.js +0 -5863
- package/src/web/skills/memory/SKILL.md +0 -120
- package/src/web/skills/web-research/SKILL.md +0 -46
- package/src/web/skills.ts +0 -97
- package/src/web/src/adapters-panel.ts +0 -288
- package/src/web/src/assistant.ts +0 -451
- package/src/web/src/chat.ts +0 -1060
- package/src/web/src/composer.ts +0 -962
- package/src/web/src/dataset.ts +0 -132
- package/src/web/src/finetune.ts +0 -267
- package/src/web/src/hub.ts +0 -428
- package/src/web/src/main.ts +0 -98
- package/src/web/src/markdown.ts +0 -0
- package/src/web/src/memory-panel.ts +0 -572
- package/src/web/src/model-picker.ts +0 -159
- package/src/web/src/palette.ts +0 -346
- package/src/web/src/protocol.ts +0 -26
- package/src/web/src/quantize.ts +0 -167
- package/src/web/src/rag.ts +0 -274
- package/src/web/src/sessions.ts +0 -469
- package/src/web/src/shell.ts +0 -804
- package/src/web/src/ui-catalog.ts +0 -78
- package/src/web/src/voice.ts +0 -141
- package/src/web/vendor/README.md +0 -61
- package/src/web-assets.ts +0 -47
- package/src/web-tools.ts +0 -478
- package/src/weights.ts +0 -255
- /package/src/{serve → server}/completion-sink.ts +0 -0
- /package/src/{serve → server}/generated-token-history.ts +0 -0
- /package/src/web/{icon.svg → public/icon.svg} +0 -0
- /package/src/web/{manifest.webmanifest → public/manifest.webmanifest} +0 -0
- /package/src/web/{vendor → public/vendor}/hljs-LICENSE +0 -0
package/src/config.ts
DELETED
|
@@ -1,399 +0,0 @@
|
|
|
1
|
-
// Model config + quantization metadata reader for the load path.
|
|
2
|
-
// Parses HF config.json (Gemma 4 unified layout: text_config nested),
|
|
3
|
-
// the OptiQ per-layer quantization map, and kv_config.json when present.
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
parseGlm52Config,
|
|
7
|
-
type Glm52Config,
|
|
8
|
-
} from "./model/glm52-config";
|
|
9
|
-
|
|
10
|
-
export interface RopeParams {
|
|
11
|
-
ropeTheta: number;
|
|
12
|
-
ropeType: string;
|
|
13
|
-
partialRotaryFactor: number;
|
|
14
|
-
/** ProportionalRoPE frequency multiplier (rope_utils: factor, default 1). */
|
|
15
|
-
factor: number;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface TextConfig {
|
|
19
|
-
hiddenSize: number;
|
|
20
|
-
numHiddenLayers: number;
|
|
21
|
-
numAttentionHeads: number;
|
|
22
|
-
numKeyValueHeads: number;
|
|
23
|
-
headDim: number;
|
|
24
|
-
/** Global (full-attention) layers can use different KV geometry. */
|
|
25
|
-
numGlobalKeyValueHeads: number;
|
|
26
|
-
globalHeadDim: number;
|
|
27
|
-
attentionKEqV: boolean;
|
|
28
|
-
intermediateSize: number;
|
|
29
|
-
hiddenActivation: string;
|
|
30
|
-
rmsNormEps: number;
|
|
31
|
-
vocabSize: number;
|
|
32
|
-
maxPositionEmbeddings: number;
|
|
33
|
-
slidingWindow: number;
|
|
34
|
-
/** "sliding_attention" | "full_attention" per layer. */
|
|
35
|
-
layerTypes: string[];
|
|
36
|
-
/** e2b/e4b: per-layer input embedding width (0 = disabled). */
|
|
37
|
-
hiddenSizePerLayerInput: number;
|
|
38
|
-
vocabSizePerLayerInput: number;
|
|
39
|
-
/** Trailing layers that share KV with earlier same-type layers. */
|
|
40
|
-
numKvSharedLayers: number;
|
|
41
|
-
/** 26B-A4B MoE block: dense MLP + routed experts per layer. */
|
|
42
|
-
enableMoeBlock: boolean;
|
|
43
|
-
numExperts: number;
|
|
44
|
-
topKExperts: number;
|
|
45
|
-
moeIntermediateSize: number;
|
|
46
|
-
/** Qwen3-MoE sparse-block gating (qwen3_moe): a layer is MoE unless it is
|
|
47
|
-
* in `mlpOnlyLayers` and `(idx+1) % decoderSparseStep == 0` selects it.
|
|
48
|
-
* `normTopkProb` renormalizes the top-k gate weights. Defaults are inert
|
|
49
|
-
* for non-qwen3_moe families. */
|
|
50
|
-
decoderSparseStep: number;
|
|
51
|
-
mlpOnlyLayers: number[];
|
|
52
|
-
normTopkProb: boolean;
|
|
53
|
-
/** Qwen3.5 hybrid (gated-DeltaNet) geometry; 0/false for other families. */
|
|
54
|
-
linearNumValueHeads: number;
|
|
55
|
-
linearNumKeyHeads: number;
|
|
56
|
-
linearKeyHeadDim: number;
|
|
57
|
-
linearValueHeadDim: number;
|
|
58
|
-
linearConvKernelDim: number;
|
|
59
|
-
/** Every `fullAttentionInterval`-th layer is full-attention (Qwen3.5). */
|
|
60
|
-
fullAttentionInterval: number;
|
|
61
|
-
/** Qwen3.5 full-attention output gate: q_proj emits 2× and gates the output. */
|
|
62
|
-
attnOutputGate: boolean;
|
|
63
|
-
/** Rotary fraction of head_dim (Qwen3.5 full attention: 0.25 → 64 of 256). */
|
|
64
|
-
partialRotaryFactor: number;
|
|
65
|
-
ropeParameters: Record<string, RopeParams>;
|
|
66
|
-
finalLogitSoftcapping: number | null;
|
|
67
|
-
tieWordEmbeddings: boolean;
|
|
68
|
-
bosTokenId: number;
|
|
69
|
-
eosTokenId: number | number[];
|
|
70
|
-
/** DiffusionGemma: fixed denoising-canvas length (256). Undefined elsewhere. */
|
|
71
|
-
canvasLength?: number;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export interface QuantSpec {
|
|
75
|
-
bits: number;
|
|
76
|
-
groupSize: number;
|
|
77
|
-
mode: string;
|
|
78
|
-
/** `mode: "trellis"` (packed trellis-coded weights, src/model/trellis-linear.ts):
|
|
79
|
-
* bits = k per weight, groupSize = block T, plus the codec geometry. */
|
|
80
|
-
trellis?: TrellisSpec;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export interface TrellisSpec {
|
|
84
|
-
L: number;
|
|
85
|
-
code: string;
|
|
86
|
-
/** 1 = coded along the input dim (stored [out, in·k/32]); 0 = along the
|
|
87
|
-
* output dim (stored [in, out·k/32], i.e. Wᵀ coded along its last axis). */
|
|
88
|
-
axis: 0 | 1;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export interface QuantizationConfig {
|
|
92
|
-
default: QuantSpec;
|
|
93
|
-
/** Per-module overrides keyed by module path (e.g. "language_model.model.embed_tokens"). */
|
|
94
|
-
perLayer: Map<string, QuantSpec>;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
export interface KvQuantSpec {
|
|
98
|
-
layerIdx: number;
|
|
99
|
-
bits: number;
|
|
100
|
-
groupSize: number;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/** TurboQuant scheme (docs/design/turboquant.md): rotation-based KV
|
|
104
|
-
* quantization, a distinct axis from the uniform/per-layer affine kvQuant
|
|
105
|
-
* above (composes with it in principle; v1 ships as a standalone CLI-only
|
|
106
|
-
* runtime lever, same class as uniform kvBits — see
|
|
107
|
-
* src/generate.ts maybeQuantizeKv). Valid kBits: {2,4,5,8}; vBits:
|
|
108
|
-
* {2,3,4,5,8} (docs/design/turboquant.md's supported Lloyd-Max tables). */
|
|
109
|
-
export interface TurboQuantScheme {
|
|
110
|
-
kBits: number;
|
|
111
|
-
vBits: number;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export const TURBOQUANT_VALID_KBITS = [2, 4, 5, 8] as const;
|
|
115
|
-
export const TURBOQUANT_VALID_VBITS = [2, 3, 4, 5, 8] as const;
|
|
116
|
-
|
|
117
|
-
/** Parse `turbo` / `turbo:k<bits>v<bits>` (default k8v3). Returns null for
|
|
118
|
-
* non-turbo strings (caller falls through to the uniform/config parser);
|
|
119
|
-
* throws Error with a user-facing message for a malformed turbo spec. */
|
|
120
|
-
export function parseTurboQuantScheme(raw: string): TurboQuantScheme | null {
|
|
121
|
-
if (raw !== "turbo" && !raw.startsWith("turbo:")) return null;
|
|
122
|
-
if (raw === "turbo") return { kBits: 8, vBits: 3 };
|
|
123
|
-
const m = /^turbo:k(\d+)v(\d+)$/.exec(raw);
|
|
124
|
-
if (!m) throw new Error(`--kv-quant turbo spec must look like "turbo:k<bits>v<bits>" (got "${raw}")`);
|
|
125
|
-
const kBits = Number(m[1]);
|
|
126
|
-
const vBits = Number(m[2]);
|
|
127
|
-
if (!(TURBOQUANT_VALID_KBITS as readonly number[]).includes(kBits))
|
|
128
|
-
throw new Error(`--kv-quant turbo: kBits must be one of ${TURBOQUANT_VALID_KBITS.join(",")} (got ${kBits})`);
|
|
129
|
-
if (!(TURBOQUANT_VALID_VBITS as readonly number[]).includes(vBits))
|
|
130
|
-
throw new Error(`--kv-quant turbo: vBits must be one of ${TURBOQUANT_VALID_VBITS.join(",")} (got ${vBits})`);
|
|
131
|
-
return { kBits, vBits };
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export interface ModelConfig {
|
|
135
|
-
modelDir: string;
|
|
136
|
-
modelType: string;
|
|
137
|
-
architectures: string[];
|
|
138
|
-
dtype: string;
|
|
139
|
-
text: TextConfig;
|
|
140
|
-
quantization: QuantizationConfig | null;
|
|
141
|
-
kvQuant: KvQuantSpec[] | null;
|
|
142
|
-
hasVisionSidecar: boolean;
|
|
143
|
-
eosTokenIds: number[];
|
|
144
|
-
raw: Record<string, unknown>;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function parseRope(raw: Record<string, any>): Record<string, RopeParams> {
|
|
148
|
-
const out: Record<string, RopeParams> = {};
|
|
149
|
-
for (const [kind, p] of Object.entries(raw ?? {})) {
|
|
150
|
-
// transformers ≥5.10 configs mix flat scalars into the per-attention-type
|
|
151
|
-
// map (`rope_parameters: { full_attention: {...}, rope_theta: null,
|
|
152
|
-
// rope_type: "default", ... }` — the DeepSpec drafter ships this shape);
|
|
153
|
-
// only object entries are attention-type params.
|
|
154
|
-
if (!p || typeof p !== "object") continue;
|
|
155
|
-
out[kind] = {
|
|
156
|
-
ropeTheta: p.rope_theta,
|
|
157
|
-
ropeType: p.rope_type ?? "default",
|
|
158
|
-
partialRotaryFactor: p.partial_rotary_factor ?? 1.0,
|
|
159
|
-
factor: p.factor ?? 1.0,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
return out;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export function parseQuantization(raw: Record<string, any> | undefined): QuantizationConfig | null {
|
|
166
|
-
if (!raw) return null;
|
|
167
|
-
const def: QuantSpec = {
|
|
168
|
-
bits: raw.bits,
|
|
169
|
-
groupSize: raw.group_size,
|
|
170
|
-
mode: raw.mode ?? "affine",
|
|
171
|
-
};
|
|
172
|
-
const perLayer = new Map<string, QuantSpec>();
|
|
173
|
-
for (const [key, value] of Object.entries(raw)) {
|
|
174
|
-
if (key === "bits" || key === "group_size" || key === "mode") continue;
|
|
175
|
-
if (typeof value === "object" && value !== null) {
|
|
176
|
-
const spec: QuantSpec = {
|
|
177
|
-
bits: (value as any).bits ?? def.bits,
|
|
178
|
-
groupSize: (value as any).group_size ?? def.groupSize,
|
|
179
|
-
mode: (value as any).mode ?? def.mode,
|
|
180
|
-
};
|
|
181
|
-
const tr = (value as any).trellis;
|
|
182
|
-
if (spec.mode === "trellis") {
|
|
183
|
-
if (!tr || typeof tr !== "object") throw new Error(`quantization.${key}: mode "trellis" needs a trellis {L, code, axis} block`);
|
|
184
|
-
spec.trellis = { L: Number(tr.L), code: String(tr.code ?? "1mad"), axis: tr.axis === 0 ? 0 : 1 };
|
|
185
|
-
}
|
|
186
|
-
perLayer.set(key, spec);
|
|
187
|
-
} else if (value === false) {
|
|
188
|
-
// mlx convention: `"layer": false` means not quantized
|
|
189
|
-
perLayer.set(key, { bits: 0, groupSize: 0, mode: "none" });
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
return { default: def, perLayer };
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/** Quant spec for a module path, or null if the module is unquantized. */
|
|
196
|
-
export function quantFor(q: QuantizationConfig | null, modulePath: string): QuantSpec | null {
|
|
197
|
-
if (!q) return null;
|
|
198
|
-
const spec = q.perLayer.get(modulePath) ?? q.default;
|
|
199
|
-
return spec.mode === "none" ? null : spec;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/** DiffusionGemma's config.json ships only token ids + canvas_length + the
|
|
203
|
-
* quant map — the architecture dims live in optiq's `config.py` TextConfig
|
|
204
|
-
* defaults (and layer_types / rope_parameters are computed in __post_init__).
|
|
205
|
-
* We reproduce those defaults in snake_case so the generic parser below picks
|
|
206
|
-
* them up; any field actually present in config.json still overrides. Source:
|
|
207
|
-
* optiq/vlm/_mlxvlm/models/diffusion_gemma/config.py. */
|
|
208
|
-
function diffusionGemmaRawDefaults(): Record<string, any> {
|
|
209
|
-
const numLayers = 30;
|
|
210
|
-
const pattern = ["sliding_attention", "sliding_attention", "sliding_attention",
|
|
211
|
-
"sliding_attention", "sliding_attention", "full_attention"];
|
|
212
|
-
const layer_types = Array.from({ length: numLayers }, (_, i) => pattern[i % pattern.length]);
|
|
213
|
-
layer_types[numLayers - 1] = "full_attention"; // last forced full
|
|
214
|
-
return {
|
|
215
|
-
hidden_size: 2816,
|
|
216
|
-
num_hidden_layers: numLayers,
|
|
217
|
-
num_attention_heads: 16,
|
|
218
|
-
num_key_value_heads: 8,
|
|
219
|
-
num_global_key_value_heads: 2,
|
|
220
|
-
head_dim: 256,
|
|
221
|
-
global_head_dim: 512,
|
|
222
|
-
intermediate_size: 2112,
|
|
223
|
-
moe_intermediate_size: 704,
|
|
224
|
-
hidden_activation: "gelu_pytorch_tanh",
|
|
225
|
-
rms_norm_eps: 1e-6,
|
|
226
|
-
vocab_size: 262144,
|
|
227
|
-
max_position_embeddings: 262144,
|
|
228
|
-
sliding_window: 1024,
|
|
229
|
-
layer_types,
|
|
230
|
-
enable_moe_block: true,
|
|
231
|
-
num_experts: 128,
|
|
232
|
-
top_k_experts: 8,
|
|
233
|
-
final_logit_softcapping: 30.0,
|
|
234
|
-
tie_word_embeddings: true,
|
|
235
|
-
bos_token_id: 2,
|
|
236
|
-
eos_token_id: 1,
|
|
237
|
-
rope_parameters: {
|
|
238
|
-
sliding_attention: { rope_type: "default", rope_theta: 10000.0 },
|
|
239
|
-
full_attention: { rope_type: "proportional", partial_rotary_factor: 0.25, rope_theta: 1000000.0 },
|
|
240
|
-
},
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
export async function loadModelConfig(modelDir: string): Promise<ModelConfig> {
|
|
245
|
-
const raw = (await Bun.file(`${modelDir}/config.json`).json()) as Record<string, any>;
|
|
246
|
-
const modelType = raw.model_type;
|
|
247
|
-
const isDiffusion = modelType === "diffusion_gemma";
|
|
248
|
-
const isGlm52 = modelType === "glm_moe_dsa";
|
|
249
|
-
// The converted Colibri artifact keeps stop metadata split across the two
|
|
250
|
-
// HF files. Preserve the old config-only behavior for every other family;
|
|
251
|
-
// GLM-5.2 explicitly unions both lists through its dedicated parser.
|
|
252
|
-
let glm52: Glm52Config | null = null;
|
|
253
|
-
if (isGlm52) {
|
|
254
|
-
const generationFile = Bun.file(`${modelDir}/generation_config.json`);
|
|
255
|
-
const generation = await generationFile.exists()
|
|
256
|
-
? await generationFile.json() as Record<string, any>
|
|
257
|
-
: null;
|
|
258
|
-
glm52 = parseGlm52Config(modelDir, raw, generation);
|
|
259
|
-
}
|
|
260
|
-
// Gemma 4 unified nests the LM config; plain text models keep it at top level.
|
|
261
|
-
// DiffusionGemma keeps it flat too, but omits all dims — backfill from defaults.
|
|
262
|
-
const baseT = (raw.text_config ?? raw) as Record<string, any>;
|
|
263
|
-
const t = isDiffusion ? { ...diffusionGemmaRawDefaults(), ...baseT } : baseT;
|
|
264
|
-
const isLlama = modelType === "llama";
|
|
265
|
-
const isQwen35 = typeof modelType === "string" && modelType.startsWith("qwen3_5");
|
|
266
|
-
// Plain Qwen3 (Qwen3ForCausalLM, e.g. Qwen3-Embedding): a flat HF config with
|
|
267
|
-
// a scalar rope_theta and no rope_parameters map — handled like llama below.
|
|
268
|
-
const isQwen3 = modelType === "qwen3";
|
|
269
|
-
// Qwen3.5 rope_parameters is a flat dict ({type, rope_theta, mrope_section,
|
|
270
|
-
// partial_rotary_factor}), not the gemma per-attention-type map — and
|
|
271
|
-
// type "default" means plain partial nn.RoPE (mrope_section ignored for text).
|
|
272
|
-
const qwenRope = (t.rope_parameters ?? {}) as Record<string, any>;
|
|
273
|
-
// Qwen3.8 adds output_gate_type ("swish"), which every implementation
|
|
274
|
-
// (transformers ground truth, mlx-lm pinned + main) currently ignores —
|
|
275
|
-
// the attention output gate is hardcoded o_proj(out·σ(gate)). Only accept
|
|
276
|
-
// values verified to mean that; an unknown value must fail at load, not
|
|
277
|
-
// silently mis-gate a future checkpoint where the field starts mattering.
|
|
278
|
-
if (isQwen35 && t.output_gate_type != null && t.output_gate_type !== "swish")
|
|
279
|
-
throw new Error(
|
|
280
|
-
`qwen3_5: unverified output_gate_type "${t.output_gate_type}" (only "swish" ` +
|
|
281
|
-
`is verified to mean the standard sigmoid output gate)`,
|
|
282
|
-
);
|
|
283
|
-
|
|
284
|
-
const text: TextConfig = {
|
|
285
|
-
hiddenSize: glm52?.hiddenSize ?? t.hidden_size,
|
|
286
|
-
numHiddenLayers: glm52?.numHiddenLayers ?? t.num_hidden_layers,
|
|
287
|
-
numAttentionHeads: glm52?.numAttentionHeads ?? t.num_attention_heads,
|
|
288
|
-
numKeyValueHeads: glm52?.numKeyValueHeads ?? t.num_key_value_heads,
|
|
289
|
-
headDim: glm52?.qkHeadDim ?? t.head_dim ?? Math.floor(t.hidden_size / t.num_attention_heads),
|
|
290
|
-
numGlobalKeyValueHeads:
|
|
291
|
-
glm52?.numKeyValueHeads ?? t.num_global_key_value_heads ?? t.num_key_value_heads,
|
|
292
|
-
globalHeadDim:
|
|
293
|
-
glm52?.qkHeadDim ??
|
|
294
|
-
t.global_head_dim ??
|
|
295
|
-
t.head_dim ??
|
|
296
|
-
Math.floor(t.hidden_size / t.num_attention_heads),
|
|
297
|
-
attentionKEqV: t.attention_k_eq_v ?? false,
|
|
298
|
-
intermediateSize: glm52?.intermediateSize ?? t.intermediate_size,
|
|
299
|
-
hiddenActivation: t.hidden_activation ?? t.hidden_act ?? "gelu_pytorch_tanh",
|
|
300
|
-
rmsNormEps: glm52?.rmsNormEps ?? t.rms_norm_eps,
|
|
301
|
-
vocabSize: glm52?.vocabSize ?? t.vocab_size,
|
|
302
|
-
maxPositionEmbeddings:
|
|
303
|
-
glm52?.maxPositionEmbeddings ?? t.max_position_embeddings,
|
|
304
|
-
slidingWindow: t.sliding_window ?? 0,
|
|
305
|
-
layerTypes: glm52
|
|
306
|
-
? Array(glm52.numHiddenLayers).fill("full_attention")
|
|
307
|
-
: t.layer_types ?? (isLlama ? Array(t.num_hidden_layers).fill("full_attention") : []),
|
|
308
|
-
hiddenSizePerLayerInput: t.hidden_size_per_layer_input ?? 0,
|
|
309
|
-
vocabSizePerLayerInput:
|
|
310
|
-
t.vocab_size_per_layer_input ?? glm52?.vocabSize ?? t.vocab_size,
|
|
311
|
-
numKvSharedLayers: t.num_kv_shared_layers ?? 0,
|
|
312
|
-
enableMoeBlock: glm52 ? true : t.enable_moe_block ?? false,
|
|
313
|
-
numExperts: glm52?.numRoutedExperts ?? t.num_experts ?? 0,
|
|
314
|
-
// gemma4 uses `top_k_experts`; qwen3_moe uses `num_experts_per_tok`.
|
|
315
|
-
topKExperts:
|
|
316
|
-
glm52?.numExpertsPerToken ?? t.top_k_experts ?? t.num_experts_per_tok ?? 0,
|
|
317
|
-
moeIntermediateSize: glm52?.moeIntermediateSize ?? t.moe_intermediate_size ?? 0,
|
|
318
|
-
decoderSparseStep: glm52 ? 1 : t.decoder_sparse_step ?? 1,
|
|
319
|
-
mlpOnlyLayers: glm52
|
|
320
|
-
? Array.from({ length: glm52.firstKDenseReplace }, (_, layer) => layer)
|
|
321
|
-
: t.mlp_only_layers ?? [],
|
|
322
|
-
normTopkProb: glm52?.normTopkProb ?? t.norm_topk_prob ?? false,
|
|
323
|
-
linearNumValueHeads: t.linear_num_value_heads ?? 0,
|
|
324
|
-
linearNumKeyHeads: t.linear_num_key_heads ?? 0,
|
|
325
|
-
linearKeyHeadDim: t.linear_key_head_dim ?? 0,
|
|
326
|
-
linearValueHeadDim: t.linear_value_head_dim ?? 0,
|
|
327
|
-
linearConvKernelDim: t.linear_conv_kernel_dim ?? 0,
|
|
328
|
-
fullAttentionInterval: t.full_attention_interval ?? 0,
|
|
329
|
-
attnOutputGate: t.attn_output_gate ?? false,
|
|
330
|
-
partialRotaryFactor: glm52
|
|
331
|
-
? glm52.qkRopeHeadDim / glm52.qkHeadDim
|
|
332
|
-
: qwenRope.partial_rotary_factor ?? t.partial_rotary_factor ?? 1.0,
|
|
333
|
-
ropeParameters: glm52
|
|
334
|
-
? {
|
|
335
|
-
full_attention: {
|
|
336
|
-
ropeTheta: glm52.ropeTheta,
|
|
337
|
-
ropeType: "default",
|
|
338
|
-
partialRotaryFactor: glm52.qkRopeHeadDim / glm52.qkHeadDim,
|
|
339
|
-
factor: 1.0,
|
|
340
|
-
},
|
|
341
|
-
}
|
|
342
|
-
: isQwen35
|
|
343
|
-
? {
|
|
344
|
-
full_attention: {
|
|
345
|
-
ropeTheta: qwenRope.rope_theta ?? t.rope_theta ?? 10000,
|
|
346
|
-
ropeType: "default",
|
|
347
|
-
partialRotaryFactor: qwenRope.partial_rotary_factor ?? 1.0,
|
|
348
|
-
factor: 1.0,
|
|
349
|
-
},
|
|
350
|
-
}
|
|
351
|
-
: t.rope_parameters
|
|
352
|
-
? parseRope(t.rope_parameters)
|
|
353
|
-
: isLlama || isQwen3
|
|
354
|
-
? {
|
|
355
|
-
full_attention: {
|
|
356
|
-
ropeTheta: t.rope_theta ?? 10000,
|
|
357
|
-
ropeType: "default",
|
|
358
|
-
partialRotaryFactor: 1.0,
|
|
359
|
-
factor: 1.0,
|
|
360
|
-
},
|
|
361
|
-
}
|
|
362
|
-
: {},
|
|
363
|
-
finalLogitSoftcapping: t.final_logit_softcapping ?? null,
|
|
364
|
-
tieWordEmbeddings: t.tie_word_embeddings ?? raw.tie_word_embeddings ?? false,
|
|
365
|
-
bosTokenId: t.bos_token_id ?? raw.bos_token_id,
|
|
366
|
-
eosTokenId: glm52?.eosTokenIds ?? t.eos_token_id ?? raw.eos_token_id,
|
|
367
|
-
canvasLength: raw.canvas_length ?? t.canvas_length,
|
|
368
|
-
};
|
|
369
|
-
|
|
370
|
-
let kvQuant: KvQuantSpec[] | null = null;
|
|
371
|
-
if (await Bun.file(`${modelDir}/kv_config.json`).exists()) {
|
|
372
|
-
const kv = (await Bun.file(`${modelDir}/kv_config.json`).json()) as any[];
|
|
373
|
-
kvQuant = kv.map((e) => ({
|
|
374
|
-
layerIdx: e.layer_idx,
|
|
375
|
-
bits: e.bits,
|
|
376
|
-
groupSize: e.group_size,
|
|
377
|
-
}));
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
const eos = glm52?.eosTokenIds ?? raw.eos_token_id ?? text.eosTokenId;
|
|
381
|
-
return {
|
|
382
|
-
modelDir,
|
|
383
|
-
modelType,
|
|
384
|
-
architectures: raw.architectures ?? [],
|
|
385
|
-
dtype: raw.dtype ?? "bfloat16",
|
|
386
|
-
text,
|
|
387
|
-
// Colibri's config retains the SOURCE FP8 quantization_config, while the
|
|
388
|
-
// serving shards are converted U8 + `.qs` tensors whose int4/int8/group
|
|
389
|
-
// geometry is inferred and validated by Glm52Container. Advertising the
|
|
390
|
-
// source FP8 block as mlx affine quantization would be actively wrong.
|
|
391
|
-
quantization: glm52
|
|
392
|
-
? null
|
|
393
|
-
: parseQuantization(raw.quantization ?? raw.quantization_config),
|
|
394
|
-
kvQuant,
|
|
395
|
-
hasVisionSidecar: await Bun.file(`${modelDir}/optiq_vision.safetensors`).exists(),
|
|
396
|
-
eosTokenIds: Array.isArray(eos) ? eos : [eos],
|
|
397
|
-
raw,
|
|
398
|
-
};
|
|
399
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { Cancellation } from "./generation";
|
|
2
|
-
|
|
3
|
-
/** Application-facing calls. The implementation owns tokenization, numerical
|
|
4
|
-
* method and transport; callers provide request data and consume results. */
|
|
5
|
-
export interface CompletionClient<Request, Result> {
|
|
6
|
-
complete(request: Request): Promise<Result>;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface BatchCompletionClient<Request, Result> extends CompletionClient<Request, Result> {
|
|
10
|
-
/** Results preserve input order; the implementation chooses execution groups. */
|
|
11
|
-
completeBatch(requests: readonly Request[]): Promise<Result[]>;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface TaskClient<Request, Progress, Result> {
|
|
15
|
-
run(request: Request, report: (progress: Progress) => void, cancellation?: Cancellation): Promise<Result>;
|
|
16
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/** Request facts only. Native resources remain with the preparation owner. */
|
|
2
|
-
export interface ExecutionRequirements {
|
|
3
|
-
readonly hasVision: boolean;
|
|
4
|
-
readonly hasPreparedPrefixIdentity?: boolean;
|
|
5
|
-
readonly hasAdapters: boolean;
|
|
6
|
-
readonly hasRepetitionPenalty: boolean;
|
|
7
|
-
readonly userSeed: boolean;
|
|
8
|
-
readonly kvQuant: boolean;
|
|
9
|
-
readonly turboQuant: boolean;
|
|
10
|
-
readonly hasLogitsExtras: boolean;
|
|
11
|
-
readonly hasGrammar: boolean;
|
|
12
|
-
readonly wantsLogprobs: boolean;
|
|
13
|
-
readonly hasDraft: boolean;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface ExecutionCapabilities {
|
|
17
|
-
readonly method: "autoregressive" | "denoising";
|
|
18
|
-
readonly continuous: boolean;
|
|
19
|
-
readonly quantizedBatch: boolean;
|
|
20
|
-
readonly grammarBatch: boolean;
|
|
21
|
-
readonly adapterBatch?: boolean;
|
|
22
|
-
/** Prepared media can enter the ordinary shared execution group. */
|
|
23
|
-
readonly mediaBatch?: boolean;
|
|
24
|
-
readonly mediaPrefixCache?: boolean;
|
|
25
|
-
readonly pagedBatch?: boolean;
|
|
26
|
-
readonly checkpoints: boolean;
|
|
27
|
-
/** Bound ordinary driver can restore/capture this request configuration. */
|
|
28
|
-
readonly sharedCheckpoints?: boolean;
|
|
29
|
-
/** Model-qualified speculative execution can retain this request's KV codec. */
|
|
30
|
-
readonly speculativeKvQuant?: boolean;
|
|
31
|
-
readonly speculativeTurboQuant?: boolean;
|
|
32
|
-
readonly turboQuantBatch?: boolean;
|
|
33
|
-
readonly speculativeLogprobs?: boolean;
|
|
34
|
-
/** The grouped provider supports the target's mounted adapter context. */
|
|
35
|
-
readonly sharedSpeculativeAdapters?: boolean;
|
|
36
|
-
/** Methods supplied by the model's shared execution binding. */
|
|
37
|
-
readonly groupedMethods?: readonly string[];
|
|
38
|
-
/** A shared method accepts request-owned grammar continuation proposals. */
|
|
39
|
-
readonly sharedGrammarProposals?: boolean;
|
|
40
|
-
/** A grouped method can consume this request's strict known continuations. */
|
|
41
|
-
readonly sharedFill?: boolean;
|
|
42
|
-
/** A mounted provider can consume verified external continuations. */
|
|
43
|
-
readonly sharedSpeculativeEcho?: boolean;
|
|
44
|
-
/** A graph-owned compiled step exists; cache geometry can still decline it. */
|
|
45
|
-
readonly compiledDecode?: boolean;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export interface ExecutionFeatures {
|
|
49
|
-
readonly pagedKv: boolean;
|
|
50
|
-
readonly fill: boolean;
|
|
51
|
-
readonly compiledDecode?: boolean;
|
|
52
|
-
readonly grammarJump?: boolean;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** Selected once; consumers execute/report these values without reselecting. */
|
|
56
|
-
export interface ResolvedExecution {
|
|
57
|
-
/** Implementation-owned method ID. The built-in planner retains its known
|
|
58
|
-
* methods; another model may register a different set without editing this contract. */
|
|
59
|
-
readonly method: string;
|
|
60
|
-
readonly mechanism: "serial" | "continuous";
|
|
61
|
-
readonly pagedKv: boolean;
|
|
62
|
-
readonly promptCache: boolean;
|
|
63
|
-
readonly checkpoint: boolean;
|
|
64
|
-
readonly fill: boolean;
|
|
65
|
-
/** Permission to attempt the bound compiled step, never a promise that
|
|
66
|
-
* every dynamic row/state shape supports replay. */
|
|
67
|
-
readonly compiledDecode: boolean;
|
|
68
|
-
readonly grammarJump: boolean;
|
|
69
|
-
readonly reasons: readonly string[];
|
|
70
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/** Portable execution contracts. No transport, model, tensor, or runtime imports. */
|
|
2
|
-
export type CancelReason = "requested" | "consumer_closed" | "consumer_idle" | "engine_closed";
|
|
3
|
-
|
|
4
|
-
export interface Cancellation {
|
|
5
|
-
readonly reason: CancelReason | undefined;
|
|
6
|
-
/** Invoked immediately when already cancelled. Returns an idempotent unsubscribe. */
|
|
7
|
-
subscribe(listener: (reason: CancelReason) => void): () => void;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface TokenLogprobs {
|
|
11
|
-
/** Selected-token logprob, before sampler truncation. */
|
|
12
|
-
logprob?: number;
|
|
13
|
-
/** Top-k pairs, sorted by descending logprob. */
|
|
14
|
-
top?: { id: number; logprob: number }[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export type GenerationEvent =
|
|
18
|
-
| { readonly type: "committed"; readonly sequence: number;
|
|
19
|
-
readonly tokenIds: readonly number[]; readonly logprobs?: readonly (TokenLogprobs | undefined)[] }
|
|
20
|
-
| { readonly type: "progress"; readonly completed: number; readonly total?: number };
|
|
21
|
-
|
|
22
|
-
/** Methods publish in order and await each publication before publishing again.
|
|
23
|
-
* Only committed tokens cross this boundary. Tentative canvases/drafts stay private. */
|
|
24
|
-
export interface GenerationOutput {
|
|
25
|
-
/** False requests a normal stop. The method must stop publishing and settle
|
|
26
|
-
* its metrics after releasing its private execution state. */
|
|
27
|
-
commit(tokenIds: readonly number[], logprobs?: readonly (TokenLogprobs | undefined)[]): Promise<void | false>;
|
|
28
|
-
progress(completed: number, total?: number): Promise<void>;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface MethodResult<Metrics> {
|
|
32
|
-
readonly finishReason: "stop" | "length";
|
|
33
|
-
readonly metrics: Metrics;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** One attempt's private state, including any pending device work.
|
|
37
|
-
* close must await safe resource release, including on execute failure. */
|
|
38
|
-
export interface MethodRun<Metrics> {
|
|
39
|
-
execute(output: GenerationOutput, cancellation: Cancellation): Promise<MethodResult<Metrics>>;
|
|
40
|
-
close(): Promise<void>;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export interface InferenceMethod<Metrics> {
|
|
44
|
-
readonly id: string;
|
|
45
|
-
/** A rejected creation must release its own partial allocations. */
|
|
46
|
-
createRun(cancellation: Cancellation): Promise<MethodRun<Metrics>>;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface ExecutionPlan<Metrics> {
|
|
50
|
-
readonly id: string;
|
|
51
|
-
readonly outputTokenLimit: number;
|
|
52
|
-
readonly method: InferenceMethod<Metrics>;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface ExecutionPlanner<Request, Metrics> {
|
|
56
|
-
/** Planning selects a bound implementation; it does not allocate device state. */
|
|
57
|
-
plan(request: Request, cancellation: Cancellation): Promise<ExecutionPlan<Metrics>>;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export type GenerationOutcome<Metrics> =
|
|
61
|
-
| { readonly status: "completed"; readonly committedTokens: number;
|
|
62
|
-
readonly output?: Uint32Array; readonly result: MethodResult<Metrics> }
|
|
63
|
-
| { readonly status: "cancelled"; readonly committedTokens: number;
|
|
64
|
-
readonly output?: Uint32Array; readonly reason: CancelReason }
|
|
65
|
-
| { readonly status: "failed"; readonly committedTokens: number;
|
|
66
|
-
readonly output?: Uint32Array; readonly error: { readonly code: string; readonly message: string;
|
|
67
|
-
readonly cleanupError?: string } };
|
|
68
|
-
|
|
69
|
-
export type SessionState = "created" | "preparing" | "running" | "settling" | "terminal";
|
|
70
|
-
|
|
71
|
-
export type RunControl = {
|
|
72
|
-
/** collect returns token IDs; per-token logprobs require stream consumption. */
|
|
73
|
-
readonly output: "stream" | "collect";
|
|
74
|
-
readonly cancellation?: Cancellation;
|
|
75
|
-
} | {
|
|
76
|
-
/** Direct delivery for consumers that already own bounded output storage.
|
|
77
|
-
* The callback is awaited before execution continues; false is a normal
|
|
78
|
-
* token stop. Borrowed arrays are valid until the callback settles. */
|
|
79
|
-
readonly output: "callback";
|
|
80
|
-
readonly onTokens: GenerationOutput["commit"];
|
|
81
|
-
readonly cancellation?: Cancellation;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
export interface GenerationSession<Metrics> {
|
|
85
|
-
readonly id: string;
|
|
86
|
-
readonly state: SessionState;
|
|
87
|
-
/** Single consumer. Stream mode starts on first next(); collect mode has no events. */
|
|
88
|
-
readonly events: AsyncIterable<GenerationEvent>;
|
|
89
|
-
/** Always resolves with one terminal outcome, after native resources are released. */
|
|
90
|
-
readonly result: Promise<GenerationOutcome<Metrics>>;
|
|
91
|
-
cancel(reason?: CancelReason): Promise<void>;
|
|
92
|
-
close(): Promise<void>;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export interface InferenceEngine<Request, Metrics> {
|
|
96
|
-
open(request: Request, control: RunControl): Promise<GenerationSession<Metrics>>;
|
|
97
|
-
close(): Promise<void>;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/** Injected host timer. The portable engine has no DOM/Node/Bun dependency. */
|
|
101
|
-
export interface Timer {
|
|
102
|
-
after(milliseconds: number, callback: () => void): () => void;
|
|
103
|
-
}
|
package/src/contracts/host.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** Transport-specific request/response values stay outside portable policy. */
|
|
2
|
-
export interface EngineHost<Request, Response> {
|
|
3
|
-
readonly ready: Promise<void>;
|
|
4
|
-
forward(request: Request): Promise<Response>;
|
|
5
|
-
/** Stop accepting work and wait until the owned worker has exited. */
|
|
6
|
-
close(): Promise<void>;
|
|
7
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/** Exact reusable work, independent of token-prefix matching. The same cache
|
|
2
|
-
* owner chooses residency and persistence for objects and conversation state. */
|
|
3
|
-
export interface ObjectCache<Value> {
|
|
4
|
-
/** Borrow immutable data through an owned lease. A miss permits recompute. */
|
|
5
|
-
take(key: string): Promise<{ value: Value; dispose(): void } | null>;
|
|
6
|
-
/** Successful return transfers ownership, including immediate eviction. */
|
|
7
|
-
put(key: string, value: Value): void;
|
|
8
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
export interface PiModelOptions {
|
|
2
|
-
name?: string;
|
|
3
|
-
contextWindow?: number;
|
|
4
|
-
maxTokens?: number;
|
|
5
|
-
reasoning?: boolean;
|
|
6
|
-
vision?: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/** Self-contained so the standalone Pi extension can embed the same builder. */
|
|
10
|
-
export function piModelDefinition(options: PiModelOptions = {}) {
|
|
11
|
-
return {
|
|
12
|
-
id: "local",
|
|
13
|
-
name: options.name ?? "mlx-bun (local)",
|
|
14
|
-
api: "openai-completions" as const,
|
|
15
|
-
reasoning: options.reasoning ?? false,
|
|
16
|
-
compat: { supportsDeveloperRole: false, sendSessionAffinityHeaders: true,
|
|
17
|
-
...(options.reasoning ? { thinkingFormat: "qwen-chat-template" as const } : {}) },
|
|
18
|
-
input: (options.vision ? ["text", "image"] : ["text"]) as ("text" | "image")[],
|
|
19
|
-
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
20
|
-
contextWindow: options.contextWindow ?? 32768,
|
|
21
|
-
maxTokens: options.maxTokens ?? 8192,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const PI_PROVIDER_ID = "mlx-bun";
|
|
26
|
-
export const PI_API_KEY = "sk-mlx-bun-local";
|
|
27
|
-
export const PI_LOCAL_MODEL_ID = piModelDefinition().id;
|
|
28
|
-
export const PI_API = piModelDefinition().api;
|
|
29
|
-
export const DEFAULT_CONTEXT_WINDOW = piModelDefinition().contextWindow;
|
|
30
|
-
export const DEFAULT_MAX_TOKENS = piModelDefinition().maxTokens;
|