@mlx-bun/inference 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +1475 -2
- package/THIRD_PARTY_NOTICES.md +3404 -0
- package/dist/native/libmlx_bun_ane.dylib +0 -0
- package/dist/native/libmlx_bun_expert_io.dylib +0 -0
- package/dist/native/mlx-bun-frame-extract +0 -0
- package/examples/fit-model.ts +25 -0
- package/examples/qwen3-forward.ts +42 -0
- package/examples/qwen3-generate.ts +28 -0
- package/examples/trellis-expand.ts +23 -0
- package/package.json +129 -4
- package/src/adapters/available.ts +110 -0
- package/src/adapters/index.ts +3 -0
- package/src/adapters/manager.ts +316 -0
- package/src/artifacts/auxiliary-files.ts +45 -0
- package/src/artifacts/config-dialects.ts +94 -0
- package/src/artifacts/config.ts +341 -0
- package/src/artifacts/draft-vocabulary.ts +30 -0
- package/src/artifacts/expert-offload-build.ts +75 -0
- package/src/artifacts/expert-offload.ts +89 -0
- package/src/artifacts/experts/index.ts +3 -0
- package/src/artifacts/experts/io.ts +386 -0
- package/src/artifacts/experts/residency.ts +1134 -0
- package/src/artifacts/experts/usage.ts +415 -0
- package/src/artifacts/fingerprint.ts +44 -0
- package/src/artifacts/glm52/container.ts +305 -0
- package/src/artifacts/glm52/expert-layout.ts +249 -0
- package/src/artifacts/glm52/index.ts +7 -0
- package/src/artifacts/glm52/kernel-layout.ts +124 -0
- package/src/artifacts/glm52/layout.ts +152 -0
- package/src/artifacts/glm52/memory.ts +500 -0
- package/src/artifacts/glm52/resident-weights.ts +135 -0
- package/src/artifacts/glm52/weights.ts +503 -0
- package/src/artifacts/glm52-config.ts +262 -0
- package/src/artifacts/identity.ts +94 -0
- package/src/artifacts/index.ts +15 -0
- package/src/artifacts/mmap.ts +90 -0
- package/src/artifacts/safetensors-writer.ts +249 -0
- package/src/artifacts/safetensors.ts +164 -0
- package/src/artifacts/turboquant-fold.ts +42 -0
- package/src/artifacts/weight-audit.ts +43 -0
- package/src/artifacts/weights.ts +255 -0
- package/src/contracts/index.ts +2 -0
- package/src/contracts/mlx/attention.ts +8 -0
- package/src/contracts/mlx/cache.ts +510 -0
- package/src/contracts/mlx/checkpoint.ts +10 -0
- package/src/contracts/mlx/draft-checkpoint.ts +14 -0
- package/src/contracts/mlx/draft-projection.ts +27 -0
- package/src/contracts/mlx/draft-target.ts +84 -0
- package/src/contracts/mlx/drafter.ts +176 -0
- package/src/contracts/mlx/forward-work.ts +23 -0
- package/src/contracts/mlx/glm52-weights.ts +25 -0
- package/src/contracts/mlx/graph.ts +309 -0
- package/src/contracts/mlx/head.ts +6 -0
- package/src/contracts/mlx/index.ts +15 -0
- package/src/contracts/mlx/kv-codec.ts +9 -0
- package/src/contracts/mlx/media.ts +113 -0
- package/src/contracts/mlx/positions.ts +16 -0
- package/src/contracts/mlx/row-table.ts +2 -0
- package/src/contracts/mlx/trainable.ts +103 -0
- package/src/contracts/mlx/whisper.ts +96 -0
- package/src/contracts/portable/composition.ts +106 -0
- package/src/contracts/portable/denoising.ts +17 -0
- package/src/contracts/portable/execution.ts +79 -0
- package/src/contracts/portable/generation.ts +103 -0
- package/src/contracts/portable/graph.ts +80 -0
- package/src/contracts/portable/index.ts +15 -0
- package/src/contracts/portable/memory-plan.ts +26 -0
- package/src/contracts/portable/object-cache.ts +8 -0
- package/src/contracts/portable/prefill.ts +63 -0
- package/src/contracts/portable/prefix-cache.ts +33 -0
- package/src/contracts/portable/prompt.ts +2 -0
- package/src/contracts/portable/resources.ts +25 -0
- package/src/contracts/portable/rollback.ts +7 -0
- package/src/contracts/portable/sampling.ts +44 -0
- package/src/contracts/portable/scheduling.ts +54 -0
- package/src/contracts/portable/token-delivery.ts +4 -0
- package/src/contracts/portable/tsconfig.json +14 -0
- package/src/embeddings/index.ts +1 -0
- package/src/embeddings/text.ts +85 -0
- package/src/execution/admission.ts +59 -0
- package/src/execution/batch-group.ts +1240 -0
- package/src/execution/batch-types.ts +225 -0
- package/src/execution/cancellation.ts +38 -0
- package/src/execution/continuation-request.ts +45 -0
- package/src/execution/continuation-types.ts +10 -0
- package/src/execution/coordinator.ts +70 -0
- package/src/execution/denoising-group.ts +180 -0
- package/src/execution/engine.ts +56 -0
- package/src/execution/fill-group.ts +505 -0
- package/src/execution/fit.ts +184 -0
- package/src/execution/gateway-binding.ts +178 -0
- package/src/execution/grammar-group.ts +224 -0
- package/src/execution/index.ts +18 -0
- package/src/execution/methods.ts +75 -0
- package/src/execution/mixed-iteration.ts +96 -0
- package/src/execution/plan.ts +65 -0
- package/src/execution/prefill-cohort.ts +100 -0
- package/src/execution/prefill-rows.ts +263 -0
- package/src/execution/request-policy.ts +19 -0
- package/src/execution/row-sampling.ts +49 -0
- package/src/execution/scheduler.ts +92 -0
- package/src/execution/session.ts +247 -0
- package/src/execution/speculative-group.ts +797 -0
- package/src/execution/tasks.ts +44 -0
- package/src/generation/autoregressive.ts +840 -0
- package/src/generation/bindings/autoregressive.ts +104 -0
- package/src/generation/bindings/denoising.ts +60 -0
- package/src/generation/bindings/prefill-policy.ts +36 -0
- package/src/generation/checkpoint-identity.ts +60 -0
- package/src/generation/denoising.ts +85 -0
- package/src/generation/diffusion.ts +583 -0
- package/src/generation/fill/echo-index.ts +188 -0
- package/src/generation/fill/index.ts +3 -0
- package/src/generation/fill/proposal.ts +69 -0
- package/src/generation/fill/schema-rows.ts +506 -0
- package/src/generation/fill/session.ts +464 -0
- package/src/generation/fill/tool-boundary.ts +103 -0
- package/src/generation/fill-append.ts +58 -0
- package/src/generation/generate.ts +44 -0
- package/src/generation/grammar-step.ts +39 -0
- package/src/generation/index.ts +14 -0
- package/src/generation/phase-dispatch.ts +115 -0
- package/src/generation/prefill.ts +33 -0
- package/src/generation/result.ts +49 -0
- package/src/generation/scopes.ts +157 -0
- package/src/generation/speculative/acceptance.ts +41 -0
- package/src/generation/speculative/adaptive-draft-gate.ts +166 -0
- package/src/generation/speculative/bindings/assistant-rows.ts +102 -0
- package/src/generation/speculative/bindings/autoregressive-rows.ts +124 -0
- package/src/generation/speculative/bindings/binding.ts +106 -0
- package/src/generation/speculative/bindings/deepspec-rows.ts +33 -0
- package/src/generation/speculative/bindings/draft-target.ts +10 -0
- package/src/generation/speculative/bindings/glm52-mtp-rows.ts +128 -0
- package/src/generation/speculative/bindings/projected-context-rows.ts +78 -0
- package/src/generation/speculative/bindings/projected-draft-rows.ts +95 -0
- package/src/generation/speculative/bindings/qwen-mtp-rows.ts +336 -0
- package/src/generation/speculative/bindings/two-model-rows.ts +63 -0
- package/src/generation/speculative/cache-identity.ts +16 -0
- package/src/generation/speculative/draft-kind.ts +149 -0
- package/src/generation/speculative/draft-policy.ts +41 -0
- package/src/generation/speculative/draft-registry.ts +118 -0
- package/src/generation/speculative/draft-vocab.ts +110 -0
- package/src/generation/speculative/index.ts +17 -0
- package/src/generation/speculative/output.ts +49 -0
- package/src/generation/speculative/round.ts +307 -0
- package/src/generation/speculative/source.ts +144 -0
- package/src/generation/speculative/sources/assistant-source.ts +64 -0
- package/src/generation/speculative/sources/deepspec-source.ts +70 -0
- package/src/generation/speculative/sources/dflash-source.ts +84 -0
- package/src/generation/speculative/sources/dflash2-source.ts +86 -0
- package/src/generation/speculative/sources/glm52-mtp-source.ts +66 -0
- package/src/generation/speculative/sources/ngram-source.ts +165 -0
- package/src/generation/speculative/sources/qwen-mtp-source.ts +154 -0
- package/src/generation/speculative/sources/two-model.ts +75 -0
- package/src/generation/types.ts +194 -0
- package/src/index.ts +20 -0
- package/src/input/audio/audiotoolbox.ts +112 -0
- package/src/input/audio/decode.ts +133 -0
- package/src/input/audio/features.ts +202 -0
- package/src/input/audio/index.ts +6 -0
- package/src/input/audio/transcode.ts +67 -0
- package/src/input/audio/whisper-mel.ts +185 -0
- package/src/input/audio/whisper-tokenizer.ts +238 -0
- package/src/input/chat-template.ts +389 -0
- package/src/input/index.ts +6 -0
- package/src/input/media-fetch.ts +439 -0
- package/src/input/packed-mixed.ts +43 -0
- package/src/input/special-tokens.ts +75 -0
- package/src/input/token-groups.ts +49 -0
- package/src/input/tokenizer.ts +336 -0
- package/src/input/tool-call.ts +689 -0
- package/src/input/vision/index.ts +3 -0
- package/src/input/vision/preprocess.ts +247 -0
- package/src/input/vision/prompt.ts +398 -0
- package/src/input/vision/qwen3vl-preprocess.ts +409 -0
- package/src/input/vision/qwen3vl-prompt.ts +237 -0
- package/src/input/vision/video-frames.ts +100 -0
- package/src/kernels/ane/fill.ts +101 -0
- package/src/kernels/ane/linear.ts +416 -0
- package/src/kernels/attention/flash.ts +694 -0
- package/src/kernels/attention/kvq4-decode.ts +155 -0
- package/src/kernels/attention/masks.ts +40 -0
- package/src/kernels/attention/multi-query.ts +193 -0
- package/src/kernels/attention/paged.ts +130 -0
- package/src/kernels/delta/gated.ts +306 -0
- package/src/kernels/delta/index.ts +3 -0
- package/src/kernels/delta/silu-rms-heads.ts +69 -0
- package/src/kernels/delta/state.ts +74 -0
- package/src/kernels/gated-rms-norm.ts +64 -0
- package/src/kernels/glm52/layout.ts +37 -0
- package/src/kernels/glm52/streamed-experts.ts +360 -0
- package/src/kernels/logits.ts +38 -0
- package/src/kernels/quantization/affine-row.ts +154 -0
- package/src/kernels/quantization/affine-rows.ts +36 -0
- package/src/kernels/quantization/affine-split-mma.ts +144 -0
- package/src/kernels/quantization/affine3-mma.ts +117 -0
- package/src/kernels/quantization/affine3-rows.ts +103 -0
- package/src/kernels/quantization/affine4-mma.ts +113 -0
- package/src/kernels/quantization/affine4-rows.ts +102 -0
- package/src/kernels/residual-rms-norm.ts +65 -0
- package/src/kernels/sampling/index.ts +2 -0
- package/src/kernels/sampling/normalized-argmax.ts +116 -0
- package/src/kernels/sampling/token-bitmask.ts +52 -0
- package/src/kernels/softcap.ts +35 -0
- package/src/kernels/trellis/codebook.ts +123 -0
- package/src/kernels/trellis/down-codebook.ts +184 -0
- package/src/kernels/trellis/down-factored.ts +180 -0
- package/src/kernels/trellis/down-k3-interleaved-factored.ts +146 -0
- package/src/kernels/trellis/down-mma-wide.ts +195 -0
- package/src/kernels/trellis/down-mma.ts +145 -0
- package/src/kernels/trellis/expand.ts +42 -0
- package/src/kernels/trellis/gate-up-codebook-mma.ts +141 -0
- package/src/kernels/trellis/gate-up-codebook.ts +137 -0
- package/src/kernels/trellis/gate-up-factored.ts +197 -0
- package/src/kernels/trellis/gate-up-mma-wide.ts +147 -0
- package/src/kernels/trellis/gate-up-mma.ts +148 -0
- package/src/kernels/trellis/gate-up.ts +248 -0
- package/src/kernels/trellis/geometry.ts +22 -0
- package/src/kernels/trellis/index.ts +103 -0
- package/src/kernels/trellis/launch.ts +12 -0
- package/src/kernels/trellis/mixed-gate-up-factored.ts +119 -0
- package/src/kernels/trellis/mixed-gate-up.ts +146 -0
- package/src/kernels/trellis/qualified.ts +34 -0
- package/src/kernels/trellis/reduce.ts +150 -0
- package/src/kernels/trellis/scatter.ts +407 -0
- package/src/kernels/trellis/splitk-prefill.ts +152 -0
- package/src/kernels/trellis/tiled-prefill.ts +131 -0
- package/src/kernels/trellis/vector-expand.ts +58 -0
- package/src/kernels/trellis/wide-prefill.ts +89 -0
- package/src/kernels/turboquant/decode.ts +82 -0
- package/src/kernels/turboquant/index.ts +5 -0
- package/src/kernels/turboquant/inverse.ts +122 -0
- package/src/kernels/turboquant/ops.ts +860 -0
- package/src/kernels/turboquant/signs.ts +130 -0
- package/src/kernels/turboquant/tables.ts +124 -0
- package/src/layers/affine-verify-linear.ts +75 -0
- package/src/layers/ane-prefill-split.ts +283 -0
- package/src/layers/compiled-normalization.ts +41 -0
- package/src/layers/delta-heads.ts +23 -0
- package/src/layers/dense-embedding.ts +29 -0
- package/src/layers/dense-linear.ts +32 -0
- package/src/layers/dequantized-linear.ts +72 -0
- package/src/layers/folded-attention.ts +42 -0
- package/src/layers/geglu.ts +130 -0
- package/src/layers/helpers.ts +7 -0
- package/src/layers/index.ts +36 -0
- package/src/layers/kv4-decode-attention.ts +15 -0
- package/src/layers/layer-norm.ts +24 -0
- package/src/layers/loading.ts +92 -0
- package/src/layers/lora.ts +150 -0
- package/src/layers/normalization.ts +9 -0
- package/src/layers/prefix-layout.ts +33 -0
- package/src/layers/quantized-append-attention.ts +32 -0
- package/src/layers/quantized-attention.ts +353 -0
- package/src/layers/quantized-embedding.ts +39 -0
- package/src/layers/quantized-linear.ts +137 -0
- package/src/layers/quantized-switch-linear.ts +37 -0
- package/src/layers/qwen-append.ts +12 -0
- package/src/layers/qwen-mrope.ts +238 -0
- package/src/layers/rope-2d.ts +110 -0
- package/src/layers/rope.ts +389 -0
- package/src/layers/swiglu.ts +23 -0
- package/src/layers/trellis-codebook-down.ts +52 -0
- package/src/layers/trellis-codebook-gate-up.ts +42 -0
- package/src/layers/trellis-down.ts +117 -0
- package/src/layers/trellis-gate-up.ts +71 -0
- package/src/layers/trellis-linear.ts +211 -0
- package/src/layers/trellis-prompt.ts +102 -0
- package/src/layers/trellis-reduce-gate-up.ts +73 -0
- package/src/layers/trellis-scatter-down.ts +98 -0
- package/src/models/ane-install.ts +74 -0
- package/src/models/audio/conformer.ts +656 -0
- package/src/models/cache-composition.ts +44 -0
- package/src/models/capabilities.ts +89 -0
- package/src/models/chat-template.ts +10 -0
- package/src/models/composition.ts +107 -0
- package/src/models/diffusion-gemma/experts.ts +59 -0
- package/src/models/diffusion-gemma/family.ts +21 -0
- package/src/models/diffusion-gemma/model.ts +900 -0
- package/src/models/diffusion-gemma/vision.ts +549 -0
- package/src/models/drafter-loaders.ts +49 -0
- package/src/models/drafters.ts +39 -0
- package/src/models/factory.ts +351 -0
- package/src/models/families.ts +70 -0
- package/src/models/family.ts +125 -0
- package/src/models/gemma4/assistant-target.ts +46 -0
- package/src/models/gemma4/assistant.ts +327 -0
- package/src/models/gemma4/blocks.ts +755 -0
- package/src/models/gemma4/compiled-decode.ts +452 -0
- package/src/models/gemma4/family.ts +39 -0
- package/src/models/gemma4/gemma4-12b.ts +677 -0
- package/src/models/gemma4/gemma4-26b.ts +544 -0
- package/src/models/gemma4/gemma4-e4b.ts +599 -0
- package/src/models/gemma4/graphs.ts +147 -0
- package/src/models/gemma4/media.ts +88 -0
- package/src/models/gemma4/model.ts +860 -0
- package/src/models/gemma4/serving-blocks.ts +72 -0
- package/src/models/gemma4/trainable.ts +186 -0
- package/src/models/gemma4/written-blocks.ts +232 -0
- package/src/models/gemma4/written-forward.ts +159 -0
- package/src/models/gemma4/written-input.ts +29 -0
- package/src/models/glm52/atlas.ts +507 -0
- package/src/models/glm52/coupling.ts +388 -0
- package/src/models/glm52/dsa.ts +601 -0
- package/src/models/glm52/family.ts +20 -0
- package/src/models/glm52/mla.ts +812 -0
- package/src/models/glm52/model.ts +1127 -0
- package/src/models/glm52/moe.ts +223 -0
- package/src/models/glm52/mtp.ts +60 -0
- package/src/models/glm52/pilot.ts +537 -0
- package/src/models/glm52/reference.ts +445 -0
- package/src/models/glm52/residency.ts +557 -0
- package/src/models/glm52/streamed-experts.ts +447 -0
- package/src/models/graph.ts +59 -0
- package/src/models/implementation.ts +230 -0
- package/src/models/index.ts +15 -0
- package/src/models/media-input.ts +15 -0
- package/src/models/memory-plan.ts +39 -0
- package/src/models/minicpm5/family.ts +29 -0
- package/src/models/minicpm5/model.ts +394 -0
- package/src/models/minicpm5/trainable.ts +90 -0
- package/src/models/profile.ts +337 -0
- package/src/models/qwen/blocks.ts +658 -0
- package/src/models/qwen/checkpoint.ts +190 -0
- package/src/models/qwen/families.ts +57 -0
- package/src/models/qwen/media-input.ts +161 -0
- package/src/models/qwen/mtp.ts +101 -0
- package/src/models/qwen/qwen3-moe.ts +355 -0
- package/src/models/qwen/qwen3.ts +323 -0
- package/src/models/qwen/qwen38-27b-trellis-m1max.ts +1532 -0
- package/src/models/qwen/qwen38-27b-trellis-m4pro.ts +1092 -0
- package/src/models/qwen/qwen3_5.ts +433 -0
- package/src/models/qwen/written-layers.ts +285 -0
- package/src/models/row-table.ts +1 -0
- package/src/models/runtime.ts +73 -0
- package/src/models/speculative/deepspec-artifact.ts +10 -0
- package/src/models/speculative/deepspec.ts +744 -0
- package/src/models/speculative/dflash.ts +553 -0
- package/src/models/speculative/dflash2-artifact.ts +9 -0
- package/src/models/speculative/dflash2-operations.ts +1 -0
- package/src/models/speculative/dflash2.ts +576 -0
- package/src/models/speculative/loader.ts +29 -0
- package/src/models/support.ts +79 -0
- package/src/models/universal/archs.ts +365 -0
- package/src/models/universal/blocks.ts +479 -0
- package/src/models/universal/dense.ts +255 -0
- package/src/models/universal/family.ts +17 -0
- package/src/models/vision/qwen3vl.ts +566 -0
- package/src/models/vision/siglip.ts +520 -0
- package/src/models/vision/unified.ts +176 -0
- package/src/models/whisper/family.ts +19 -0
- package/src/models/whisper/fast.ts +734 -0
- package/src/models/whisper/model.ts +430 -0
- package/src/runtime/compiled-trace.ts +16 -0
- package/src/runtime/config.ts +77 -0
- package/src/runtime/expert-trace.ts +71 -0
- package/src/runtime/graph-forward.ts +65 -0
- package/src/runtime/integers.ts +6 -0
- package/src/runtime/native.ts +16 -0
- package/src/runtime/resources.ts +53 -0
- package/src/runtime/row-operations.ts +42 -0
- package/src/runtime/trace.ts +161 -0
- package/src/sampling/curve.ts +122 -0
- package/src/sampling/draft.ts +55 -0
- package/src/sampling/extras.ts +45 -0
- package/src/sampling/filters.ts +134 -0
- package/src/sampling/grammar.ts +630 -0
- package/src/sampling/hlg.ts +290 -0
- package/src/sampling/index.ts +9 -0
- package/src/sampling/processors.ts +142 -0
- package/src/sampling/sampler.ts +120 -0
- package/src/sampling/step.ts +343 -0
- package/src/sampling/types.ts +161 -0
- package/src/sampling/window-filters.ts +46 -0
- package/src/scoring/decisions.ts +96 -0
- package/src/scoring/full-sequence.ts +103 -0
- package/src/scoring/index.ts +9 -0
- package/src/scoring/kl.ts +29 -0
- package/src/scoring/perplexity.ts +165 -0
- package/src/scoring/response-logps.ts +65 -0
- package/src/state/affine-attention.ts +180 -0
- package/src/state/attachment.ts +68 -0
- package/src/state/attention-read.ts +215 -0
- package/src/state/batched-kv.ts +294 -0
- package/src/state/batched-mask.ts +445 -0
- package/src/state/batched-quant.ts +389 -0
- package/src/state/batched-quantized-kv.ts +209 -0
- package/src/state/batched-rotating-quant.ts +457 -0
- package/src/state/batched-rotating-state.ts +149 -0
- package/src/state/batched-rotating.ts +430 -0
- package/src/state/batched-row-storage.ts +179 -0
- package/src/state/batched-ssm.ts +54 -0
- package/src/state/batched-turboquant-kv.ts +144 -0
- package/src/state/bf16-first-kv.ts +663 -0
- package/src/state/cache-service.ts +592 -0
- package/src/state/capabilities.ts +65 -0
- package/src/state/checkpoint.ts +46 -0
- package/src/state/continuation-persistence.ts +126 -0
- package/src/state/decode-step-inputs.ts +31 -0
- package/src/state/decoded-kv-donor.ts +12 -0
- package/src/state/delayed-quantized-kv.ts +141 -0
- package/src/state/delayed-rotating-quantized-kv.ts +178 -0
- package/src/state/delayed-turboquant-kv.ts +123 -0
- package/src/state/durability.ts +214 -0
- package/src/state/encoder-cache.ts +26 -0
- package/src/state/full-kv-row-append.ts +33 -0
- package/src/state/full-kv-row-donor.ts +54 -0
- package/src/state/full-prefill-padding.ts +56 -0
- package/src/state/full-prefill-row.ts +112 -0
- package/src/state/full-transitioning-kv-rows.ts +70 -0
- package/src/state/glm52-cache.ts +783 -0
- package/src/state/grouped-heads-kv4-cache.ts +26 -0
- package/src/state/index.ts +38 -0
- package/src/state/kv-attention-view.ts +77 -0
- package/src/state/kv-budget.ts +14 -0
- package/src/state/kv-scheme.ts +315 -0
- package/src/state/kv-storage.ts +57 -0
- package/src/state/kv-tensor-rows.ts +212 -0
- package/src/state/kv.ts +324 -0
- package/src/state/kv4-head256-cache.ts +46 -0
- package/src/state/latent-legos.ts +895 -0
- package/src/state/layout.ts +277 -0
- package/src/state/leases.ts +26 -0
- package/src/state/paged/cache.ts +689 -0
- package/src/state/paged/codec.ts +36 -0
- package/src/state/paged/rows.ts +223 -0
- package/src/state/persistence-types.ts +173 -0
- package/src/state/persistence-worker.ts +83 -0
- package/src/state/persistence.ts +1036 -0
- package/src/state/persistence.worker.d.ts +3 -0
- package/src/state/persistence.worker.js +264 -0
- package/src/state/prefix-cache.ts +685 -0
- package/src/state/quantized-kv.ts +369 -0
- package/src/state/quantized-tensor.ts +26 -0
- package/src/state/request-policy.ts +48 -0
- package/src/state/retention-policy.ts +37 -0
- package/src/state/rollback.ts +131 -0
- package/src/state/rotating-kv-donor.ts +35 -0
- package/src/state/rotating-kv-layout.ts +341 -0
- package/src/state/rotating-kv.ts +529 -0
- package/src/state/rotating-quantized-kv.ts +616 -0
- package/src/state/rotating-row-transaction.ts +35 -0
- package/src/state/rows.ts +104 -0
- package/src/state/softcap-attention.ts +118 -0
- package/src/state/speculative/glm52-mtp-state.ts +38 -0
- package/src/state/speculative/qwen-mtp-state.ts +34 -0
- package/src/state/speculative-rotating-kv.ts +113 -0
- package/src/state/ssd-cache.ts +434 -0
- package/src/state/ssm-prefill-padding.ts +39 -0
- package/src/state/ssm.ts +422 -0
- package/src/state/target-layout.ts +7 -0
- package/src/state/tiered-prefix-cache.ts +45 -0
- package/src/state/training-cache.ts +300 -0
- package/src/state/transitioning-kv-rows.ts +267 -0
- package/src/state/turboquant-attention.ts +97 -0
- package/src/state/turboquant-codec.ts +90 -0
- package/src/state/turboquant-kv.ts +442 -0
- package/src/state/views.ts +26 -0
- package/src/transcription/index.ts +3 -0
- package/src/transcription/silero-vad.ts +379 -0
- package/src/transcription/whisper/decode.ts +773 -0
- package/src/transcription/whisper/format.ts +74 -0
- package/src/transcription/whisper/index.ts +4 -0
- package/src/transcription/whisper/timing.ts +274 -0
- package/src/transcription/whisper/transcribe.ts +394 -0
- package/src/transcription/whisper/types.ts +22 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import type { ModelConfig } from "../../artifacts/config";
|
|
2
|
+
import type { Weights } from "../../artifacts/weights";
|
|
3
|
+
import { WeightAudit } from "../../artifacts/weight-audit";
|
|
4
|
+
import { MlxArray } from "@mlx-bun/mlx/array";
|
|
5
|
+
import { Dtype, deviceArchitecture } from "@mlx-bun/mlx/ffi";
|
|
6
|
+
import * as ops from "@mlx-bun/mlx/ops";
|
|
7
|
+
import type { Cache } from "../../contracts/mlx/cache";
|
|
8
|
+
import type { MlxCacheLayer, MlxSequenceRange, MlxRowTable, MlxCapturingForward, MlxDeclaredGraph, MlxHeadForward, MlxPromptRange, MlxTokenPhases } from "../../contracts/mlx/graph";
|
|
9
|
+
import type { GraphDeclaration } from "../../contracts/portable/graph";
|
|
10
|
+
import { logitSoftcap } from "../../kernels/logits";
|
|
11
|
+
import { qualifiedRepresentations, tiledTrellisPrefillEligible, splitKTrellisPrefillEligible } from "../../kernels/trellis/index";
|
|
12
|
+
import { disposing } from "../../layers/helpers";
|
|
13
|
+
import { LoraState } from "../../layers/lora";
|
|
14
|
+
import { QuantizedLinear } from "../../layers/quantized-linear";
|
|
15
|
+
import { TrellisLinear } from "../../layers/trellis-linear";
|
|
16
|
+
import { TrellisTiledPrompt, TrellisSplitKPrompt, type RowProjection } from "../../layers/trellis-prompt";
|
|
17
|
+
import { NoRope, UniversalRope } from "../../layers/rope";
|
|
18
|
+
import { loadEmbedding, loadLayerNorm, loadLinear, loadRmsNorm, type AnyEmbedding, type AnyLinear, type AnyNorm } from "../../layers/loading";
|
|
19
|
+
import { cleanupFailure } from "../../runtime/resources";
|
|
20
|
+
import { ORDINARY_VERIFICATION, declareGraph } from "../capabilities";
|
|
21
|
+
import { DEFAULT_PHASE_ROWS, rowTableFrom, type ReadPhase } from "../graph";
|
|
22
|
+
import { cacheRead, type AttentionReadStrategy } from "../qwen/blocks";
|
|
23
|
+
import { genericArgsFor, universalCacheWindows, universalMaskRecipe, type UniversalArgs } from "./archs";
|
|
24
|
+
import { UniversalLayer, softcapRead, buildRope, stockProjection, packedProjection, expandedProjection, projectionFacts, normType } from "./blocks";
|
|
25
|
+
export { UniversalAttention, UniversalLayer, UniversalMLP, type SwigluFn } from "./blocks";
|
|
26
|
+
|
|
27
|
+
export class UniversalDenseModel implements MlxDeclaredGraph, MlxTokenPhases {
|
|
28
|
+
readonly config: ModelConfig;
|
|
29
|
+
readonly args: UniversalArgs;
|
|
30
|
+
readonly weightsBytes: number;
|
|
31
|
+
readonly prefixBase = "model";
|
|
32
|
+
readonly loraState = new LoraState();
|
|
33
|
+
readonly embed: AnyEmbedding;
|
|
34
|
+
readonly layers: UniversalLayer[];
|
|
35
|
+
readonly finalNorm: AnyNorm;
|
|
36
|
+
readonly lmHead: AnyLinear | null;
|
|
37
|
+
readonly sharedRope: UniversalRope;
|
|
38
|
+
readonly ropes: UniversalRope[];
|
|
39
|
+
/** Whether every attention layer, as bound, reads encoded (affine) KV views. */
|
|
40
|
+
readonly encodedKvAttention: boolean;
|
|
41
|
+
readonly #views: readonly {from:number;to:number;layers:readonly UniversalLayer[];head:MlxHeadForward}[];
|
|
42
|
+
readonly sequenceLogits: readonly import("../../contracts/mlx/graph").MlxHeadRange[];
|
|
43
|
+
logitsFromHidden?: MlxHeadForward;
|
|
44
|
+
|
|
45
|
+
/** A graph whose attention softcaps its scores verifies ordinary rounds only
|
|
46
|
+
* (its layers read dense K/V through the softcapped read). */
|
|
47
|
+
get graphCapabilities(): GraphDeclaration {
|
|
48
|
+
return declareGraph(this.encodedKvAttention === false ? { speculation: ORDINARY_VERIFICATION } : {});
|
|
49
|
+
}
|
|
50
|
+
// Cache layout and each layer's read come from the same descriptor facts,
|
|
51
|
+
// bound at construction; later edits to `args` cannot make them disagree.
|
|
52
|
+
readonly #cacheWindows: readonly (number | null)[];
|
|
53
|
+
|
|
54
|
+
constructor(weights: Weights, config: ModelConfig, args?: UniversalArgs, maxPhaseRows = DEFAULT_PHASE_ROWS, device = deviceArchitecture()) {
|
|
55
|
+
const representations = qualifiedRepresentations(device);
|
|
56
|
+
const a = args ?? genericArgsFor(config);
|
|
57
|
+
if (!a)
|
|
58
|
+
throw new Error(`UniversalDenseModel: no descriptor for model_type ${config.modelType}`);
|
|
59
|
+
this.config = config;
|
|
60
|
+
this.args = a;
|
|
61
|
+
this.#cacheWindows = universalCacheWindows(a);
|
|
62
|
+
// Each layer's read: the cache's own read, or the softcapped read over plain
|
|
63
|
+
// KV with the layer group's window (gemma2: create_attention_mask(...,
|
|
64
|
+
// return_array=True) materializes the causal mask). The cache's own read
|
|
65
|
+
// builds the mask the cache answers for its query count, so array masks
|
|
66
|
+
// without a score softcap have no read here.
|
|
67
|
+
const recipe = universalMaskRecipe(a);
|
|
68
|
+
const softcap = a.attnLogitSoftcap;
|
|
69
|
+
if (softcap === null && recipe.array)
|
|
70
|
+
throw new Error(`UniversalDenseModel: ${a.modelType} asks for array masks without a score softcap; ` +
|
|
71
|
+
"the composed attention reads take the cache's own mask (state/softcap-attention.ts reads array masks)");
|
|
72
|
+
const reads = (layer: number): AttentionReadStrategy => softcap === null ? cacheRead
|
|
73
|
+
: softcapRead(softcap, recipe.slidingLayers[layer] ? recipe.window : null, recipe.array);
|
|
74
|
+
this.weightsBytes = [...weights.shards.files.values()]
|
|
75
|
+
.reduce((acc, f) => acc + f.mmap.size, 0);
|
|
76
|
+
|
|
77
|
+
const audit = new WeightAudit();
|
|
78
|
+
this.embed = loadEmbedding(weights, "model.embed_tokens", config, audit);
|
|
79
|
+
// One rope instance shared by every rope-bearing layer (identical
|
|
80
|
+
// params ⇒ identical table); NoPE layers (smollm3) get the no-op.
|
|
81
|
+
this.sharedRope = buildRope(a);
|
|
82
|
+
const noRope = new NoRope();
|
|
83
|
+
this.ropes = Array.from({ length: a.numHiddenLayers }, (_, i) =>
|
|
84
|
+
a.noRopeLayers && a.noRopeLayers[i] === 0 ? noRope : this.sharedRope,
|
|
85
|
+
);
|
|
86
|
+
this.layers = Array.from(
|
|
87
|
+
{ length: a.numHiddenLayers },
|
|
88
|
+
(_, i) => new UniversalLayer(weights, config, `model.layers.${i}`, a, this.ropes[i]!, audit, reads(i), representations),
|
|
89
|
+
);
|
|
90
|
+
this.encodedKvAttention = this.layers.every(layer => layer.attn.softcap === null);
|
|
91
|
+
this.finalNorm = a.norm === "layernorm"
|
|
92
|
+
? loadLayerNorm(weights, "model.norm", a.normEps, audit)
|
|
93
|
+
: loadRmsNorm(weights, "model.norm", a.normEps, a.norm === "rmsnorm_plus_one", audit);
|
|
94
|
+
this.lmHead = a.tieWordEmbeddings
|
|
95
|
+
? null
|
|
96
|
+
: loadLinear(weights, "lm_head", config, audit, representations);
|
|
97
|
+
|
|
98
|
+
// Load-time weight audit: unconsumed tensors (outside the arch's
|
|
99
|
+
// sanitize drops) are a LOAD ERROR, never a silently-wrong model.
|
|
100
|
+
audit.finish(weights, a.dropWeightPatterns);
|
|
101
|
+
|
|
102
|
+
using probeIds=ops.zeros([1,1],Dtype.int32), probeEmbedding=this.#embed(probeIds);
|
|
103
|
+
const facts=projectionFacts(this.layers,probeEmbedding.dtype,a.hiddenSize);
|
|
104
|
+
const finalType=normType(this.finalNorm,facts.output,a.hiddenSize);
|
|
105
|
+
if (this.lmHead) facts.types.set(this.lmHead,finalType);
|
|
106
|
+
const narrow=(base:AnyLinear):RowProjection=>base instanceof TrellisLinear ? packedProjection(base) : stockProjection(base);
|
|
107
|
+
const five=(base:AnyLinear):RowProjection=> {
|
|
108
|
+
if (!(base instanceof TrellisLinear)) return stockProjection(base);
|
|
109
|
+
const dtype=facts.types.get(base)!;
|
|
110
|
+
return tiledTrellisPrefillEligible(base.geometry,5,dtype,representations.widePrefill) ? new TrellisTiledPrompt(base)
|
|
111
|
+
: splitKTrellisPrefillEligible(base.geometry,5,dtype) ? new TrellisSplitKPrompt(base) : expandedProjection(base);
|
|
112
|
+
};
|
|
113
|
+
const nine=(base:AnyLinear):RowProjection=>base instanceof TrellisLinear
|
|
114
|
+
? tiledTrellisPrefillEligible(base.geometry,9,facts.types.get(base)!,representations.widePrefill) ? new TrellisTiledPrompt(base) : expandedProjection(base)
|
|
115
|
+
: stockProjection(base);
|
|
116
|
+
const sixteen=(base:AnyLinear):RowProjection=>base instanceof TrellisLinear
|
|
117
|
+
? tiledTrellisPrefillEligible(base.geometry,16,facts.types.get(base)!,representations.widePrefill) ? new TrellisTiledPrompt(base) : expandedProjection(base)
|
|
118
|
+
: stockProjection(base);
|
|
119
|
+
const expanded=(base:AnyLinear):RowProjection=>base instanceof TrellisLinear ? expandedProjection(base) : stockProjection(base);
|
|
120
|
+
const bind=(from:number,to:number,project:(base:AnyLinear)=>RowProjection)=> {
|
|
121
|
+
// Views inherit the owning block's norms, rope, audit-derived facts and
|
|
122
|
+
// adapter carriers. Only projection call ports are replaced.
|
|
123
|
+
const layers=this.layers.map(base=> {
|
|
124
|
+
const attn=Object.assign(Object.create(base.attn),{qProj:base.attn.qProj && project(base.attn.qProj),kProj:base.attn.kProj && project(base.attn.kProj),
|
|
125
|
+
vProj:base.attn.vProj && project(base.attn.vProj),qkvProj:base.attn.qkvProj && project(base.attn.qkvProj),oProj:project(base.attn.oProj)});
|
|
126
|
+
const mlp=Object.assign(Object.create(base.mlp),{gate:base.mlp.gate && project(base.mlp.gate),up:base.mlp.up && project(base.mlp.up),
|
|
127
|
+
gateUp:base.mlp.gateUp && project(base.mlp.gateUp),down:project(base.mlp.down)});
|
|
128
|
+
return Object.assign(Object.create(base),{attn,mlp}) as UniversalLayer;
|
|
129
|
+
});
|
|
130
|
+
const head=this.lmHead ? project(this.lmHead) : null;
|
|
131
|
+
return {from,to,layers,head:(hidden:MlxArray)=>this.#finishLogits(hidden,head)};
|
|
132
|
+
};
|
|
133
|
+
this.#views=[bind(1,4,narrow),bind(5,8,five),bind(9,15,nine),bind(16,32,sixteen),bind(33,Infinity,expanded)];
|
|
134
|
+
if (!(this.lmHead instanceof TrellisLinear)) this.logitsFromHidden=this.#views[0]!.head;
|
|
135
|
+
const head=(view:{head:MlxHeadForward}):MlxHeadForward=>this.logitsFromHidden
|
|
136
|
+
? hidden=>this.logitsFromHidden!(hidden) : view.head;
|
|
137
|
+
this.prompt=this.#views.map(view=>({from:view.from,to:view.to,operation:(ids,cache)=>this.forwardLayers(this.#embed(ids),cache,"window",view.layers)}));
|
|
138
|
+
this.multiSequencePrompt=this.prompt;
|
|
139
|
+
this.promptChunk=this.prompt;
|
|
140
|
+
this.multiSequencePromptChunk=this.multiSequencePrompt;
|
|
141
|
+
this.appendKnown=this.#views.map(view=>({from:view.from,to:view.to,operation:(ids,cache)=>this.forwardLayers(this.#embed(ids),cache,"window",view.layers)}));
|
|
142
|
+
const expandedView=this.#views.at(-1)!;
|
|
143
|
+
const decodeExpanded:MlxCapturingForward=(ids,cache)=>this.forwardLayers(this.#embed(ids),cache,"decode",expandedView.layers);
|
|
144
|
+
const verifyExpanded:MlxCapturingForward=(ids,cache)=>this.forwardLayers(this.#embed(ids),cache,"window",expandedView.layers);
|
|
145
|
+
// Admission caps do not remove the component's distinct 1–32 row forms.
|
|
146
|
+
this.decode=Object.freeze({...rowTableFrom<MlxCapturingForward>(rows=>{
|
|
147
|
+
const view=this.#views.find(view=>rows>=view.from && rows<=view.to)!;
|
|
148
|
+
return (ids,cache)=>this.forwardLayers(this.#embed(ids),cache,"decode",view.layers);
|
|
149
|
+
},Math.max(32,maxPhaseRows)),default:decodeExpanded});
|
|
150
|
+
this.verify=Object.freeze({...rowTableFrom<MlxCapturingForward>(rows=>{
|
|
151
|
+
const view=this.#views.find(view=>rows>=view.from && rows<=view.to)!;
|
|
152
|
+
return (ids,cache)=>this.forwardLayers(this.#embed(ids),cache,"window",view.layers);
|
|
153
|
+
},Math.max(32,maxPhaseRows)),default:verifyExpanded});
|
|
154
|
+
this.logits=Object.freeze({...rowTableFrom(rows=>head(this.#views.find(view=>rows>=view.from && rows<=view.to)!),Math.max(32,maxPhaseRows)),default:head(expandedView)});
|
|
155
|
+
this.sequence=this.#views.map(view=>({from:view.from,to:view.to,operation:(ids,cache)=>this.forwardLayers(this.#embed(ids),cache,"window",view.layers)}));
|
|
156
|
+
this.sequenceLogits=this.#views.map(view=>({from:view.from,to:view.to,operation:head(view)}));
|
|
157
|
+
|
|
158
|
+
this.cacheLayers = this.#cacheWindows.map(window=>window ? {kind:"sliding" as const,window}:{kind:"full" as const,turboQuant:"dense" as const});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** LoRA hot-swap targets — quantized linears only (dense checkpoints
|
|
162
|
+
* serve without adapter support at Tier-0), read at load. */
|
|
163
|
+
loraTargets(): Map<string, QuantizedLinear | TrellisLinear> {
|
|
164
|
+
const out = new Map<string, QuantizedLinear | TrellisLinear>();
|
|
165
|
+
const put = (path: string, lin: QuantizedLinear | TrellisLinear | null) => {
|
|
166
|
+
if (lin) out.set(path, lin);
|
|
167
|
+
};
|
|
168
|
+
for (let i = 0; i < this.layers.length; i++) {
|
|
169
|
+
const { attn, mlp } = this.layers[i]!;
|
|
170
|
+
const p = `model.layers.${i}`;
|
|
171
|
+
put(`${p}.self_attn.q_proj`, attn.adapters.q);
|
|
172
|
+
put(`${p}.self_attn.k_proj`, attn.adapters.k);
|
|
173
|
+
put(`${p}.self_attn.v_proj`, attn.adapters.v);
|
|
174
|
+
put(`${p}.self_attn.qkv_proj`, attn.adapters.qkv);
|
|
175
|
+
put(`${p}.self_attn.o_proj`, attn.adapters.o);
|
|
176
|
+
put(`${p}.mlp.gate_proj`, mlp.adapters.gate);
|
|
177
|
+
put(`${p}.mlp.up_proj`, mlp.adapters.up);
|
|
178
|
+
put(`${p}.mlp.gate_up_proj`, mlp.adapters.gateUp);
|
|
179
|
+
put(`${p}.mlp.down_proj`, mlp.adapters.down);
|
|
180
|
+
}
|
|
181
|
+
return out;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Releases the rope frequency table it built (a scaled rope's); the weights are its owner's. */
|
|
185
|
+
dispose(): void { this.sharedRope.dispose(); }
|
|
186
|
+
|
|
187
|
+
/** One cache per layer (a ring on a sliding layer with a window), sharing
|
|
188
|
+
* one mask memo. The full-attention caches' TurboQuant read is dense
|
|
189
|
+
* (`denseTurboQuantKernels`): the read decodes keys and values first (the
|
|
190
|
+
* softcapped read attends the decoded window). */
|
|
191
|
+
readonly cacheLayers: readonly MlxCacheLayer[];
|
|
192
|
+
readonly sequence: readonly MlxSequenceRange[];
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
/** One whole chunk of a prompt; rows are sequences times the chunk size. The GPU is this graph's one unit. */
|
|
196
|
+
readonly prompt: readonly MlxPromptRange[];
|
|
197
|
+
readonly multiSequencePrompt: readonly MlxPromptRange[];
|
|
198
|
+
readonly promptChunk: readonly MlxPromptRange[];
|
|
199
|
+
readonly multiSequencePromptChunk: readonly MlxPromptRange[];
|
|
200
|
+
|
|
201
|
+
/** Known tokens: this graph declares no committed spans, so they read as a window. */
|
|
202
|
+
readonly appendKnown: import("../../contracts/mlx/graph").MlxKnownOperations;
|
|
203
|
+
|
|
204
|
+
/** Each row count names its fixed output head. */
|
|
205
|
+
readonly logits: MlxRowTable<MlxHeadForward>;
|
|
206
|
+
|
|
207
|
+
/** One new token per sequence: `ids` [sequences, 1]. */
|
|
208
|
+
readonly decode: MlxRowTable<MlxCapturingForward>;
|
|
209
|
+
|
|
210
|
+
/** A speculative window of depth + 1 positions per sequence. This graph
|
|
211
|
+
* declares no hidden-layer taps, so `capture` is always null. */
|
|
212
|
+
readonly verify: MlxRowTable<MlxCapturingForward>;
|
|
213
|
+
|
|
214
|
+
/** Token embeddings, scaled where the descriptor scales them (owned). */
|
|
215
|
+
#embed(ids: MlxArray): MlxArray {
|
|
216
|
+
const h = this.embed.encode(ids);
|
|
217
|
+
return this.args.embedMultiplier !== null ? disposing(h, ops.mulScalar(h, this.args.embedMultiplier)) : h;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/** The decoder over `h0` (consumed), every block reading its cache for
|
|
221
|
+
* `phase`. This call owns h0 and each intermediate hidden state, and
|
|
222
|
+
* releases them on failure as on success; an execution failure stays the
|
|
223
|
+
* primary error. */
|
|
224
|
+
protected forwardLayers(h0: MlxArray, cache: Cache[], phase: ReadPhase, layers: readonly UniversalLayer[] = this.layers): MlxArray {
|
|
225
|
+
let cur = h0;
|
|
226
|
+
try {
|
|
227
|
+
for (let i = 0; i < this.layers.length; i++) {
|
|
228
|
+
const next = layers[i]!.forward(cur, cache[i]!, phase);
|
|
229
|
+
const done = cur;
|
|
230
|
+
cur = next;
|
|
231
|
+
done.dispose();
|
|
232
|
+
}
|
|
233
|
+
} catch (error) {
|
|
234
|
+
return cleanupFailure(error, () => cur.dispose());
|
|
235
|
+
}
|
|
236
|
+
let out: MlxArray;
|
|
237
|
+
try { out = this.finalNorm.forward(cur); }
|
|
238
|
+
catch (error) { return cleanupFailure(error, () => cur.dispose()); }
|
|
239
|
+
try { cur.dispose(); }
|
|
240
|
+
catch (error) { return cleanupFailure(error, () => out.dispose()); }
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
#finishLogits(h: MlxArray, head: RowProjection | null): MlxArray {
|
|
245
|
+
let logits = head ? head.forward(h) : this.embed.asLinear(h);
|
|
246
|
+
if (this.args.finalLogitSoftcap !== null)
|
|
247
|
+
logits = disposing(logits, logitSoftcap(logits, this.args.finalLogitSoftcap));
|
|
248
|
+
if (this.args.logitsDivisor !== null) {
|
|
249
|
+
const d = ops.scalarLike(this.args.logitsDivisor, logits);
|
|
250
|
+
logits = disposing(logits, ops.div(logits, d));
|
|
251
|
+
d.dispose();
|
|
252
|
+
}
|
|
253
|
+
return logits;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { L1, defineFamily } from "../family";
|
|
2
|
+
import { GENERIC_MODEL_TYPES, genericArgsFor, remapModelType } from "./archs";
|
|
3
|
+
|
|
4
|
+
/** Tier-0: every architecture with a descriptor in the universal table (L1
|
|
5
|
+
* only). The last family in the registry, so a targeted family always wins. */
|
|
6
|
+
export const UNIVERSAL_FAMILY = defineFamily({
|
|
7
|
+
graph: "universal-dense",
|
|
8
|
+
accepts: config => genericArgsFor(config) !== null,
|
|
9
|
+
hasModelType: modelType => GENERIC_MODEL_TYPES.has(remapModelType(modelType)),
|
|
10
|
+
tier: "generic",
|
|
11
|
+
loader: "safetensors",
|
|
12
|
+
loop: "autoregressive",
|
|
13
|
+
fidelity: L1,
|
|
14
|
+
specialization: "generic",
|
|
15
|
+
profileId: "universal-dense",
|
|
16
|
+
capabilities: ["universal-dense-graph"],
|
|
17
|
+
});
|