@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,677 @@
|
|
|
1
|
+
// Written Gemma 4 12b graph. Layer order and every operation binding are literal.
|
|
2
|
+
import type { MlxArray } from "@mlx-bun/mlx/array";
|
|
3
|
+
import * as ops from "@mlx-bun/mlx/ops";
|
|
4
|
+
import type { ModelConfig } from "../../artifacts/config";
|
|
5
|
+
import type { Weights } from "../../artifacts/weights";
|
|
6
|
+
import type { Cache } from "../../contracts/mlx/cache";
|
|
7
|
+
import type { MlxDeclaredGraph, MlxTokenPhases, MlxRowTable, MlxCapturingForward, MlxHeadForward, MlxPhaseForward, MlxKnownOperations, MlxLayerCapture, MlxPromptRange, MlxMixedRange, MlxPhaseGroup, MlxCacheLayer } from "../../contracts/mlx/graph";
|
|
8
|
+
import type { Vision, MediaSidecarProbes } from "../../contracts/mlx/media";
|
|
9
|
+
import { QuantizedEmbedding } from "../../layers/quantized-embedding";
|
|
10
|
+
import { RMSNorm } from "../../layers/normalization";
|
|
11
|
+
import { LoraState } from "../../layers/lora";
|
|
12
|
+
import { disposing } from "../../layers/helpers";
|
|
13
|
+
import { compiledLogitSoftcap } from "../../kernels/softcap";
|
|
14
|
+
import { logitSoftcap } from "../../kernels/logits";
|
|
15
|
+
import { ownResource, disposeResources } from "../../runtime/resources";
|
|
16
|
+
import { declareGraph } from "../capabilities";
|
|
17
|
+
import { GEMMA_GRAPH_FINGERPRINTS } from "./family";
|
|
18
|
+
import { CompiledDecode } from "./compiled-decode";
|
|
19
|
+
import { bindGemma4MediaInput, gemma4DraftTarget, gemma4MediaEncoders } from "./media";
|
|
20
|
+
import { type Gemma4Phase } from "./blocks";
|
|
21
|
+
import { SlidingAttention, FullAttention, FullKEqVAttention, SharedSlidingAttention, SharedFullAttention, GemmaLayerWeights, GemmaInputLayerWeights, GemmaMoeLayerWeights, GemmaDenseLayer, GemmaInputLayer, GemmaMoeLayer, CompiledGegluMLP, PlainGegluMLP, CompiledGeglu, SortedSwitchGLU, UnsortedSwitchGLU, FixedExperts } from "./written-blocks";
|
|
22
|
+
import { GemmaForwardScope, GemmaInputForwardScope, GemmaMixedScope, ownMixed, donorMixed, sharedMixed, denseLoraTargets, inputLoraTargets, weightBytes, GemmaBuildScope } from "./written-forward";
|
|
23
|
+
export const FINGERPRINT = GEMMA_GRAPH_FINGERPRINTS["12b"];
|
|
24
|
+
|
|
25
|
+
/** One decoder layer as the composition fixes it: its attention type; the layer
|
|
26
|
+
* whose cache it reads (itself when it owns one, else the last donor of its type,
|
|
27
|
+
* whose read it attends in the same forward); that cache's affine width and group
|
|
28
|
+
* under the composition's KV scheme (null: bf16); whether its keys are its values;
|
|
29
|
+
* whether it carries a layer scalar. */
|
|
30
|
+
export interface Gemma4Layer {
|
|
31
|
+
readonly attention: "sliding" | "full";
|
|
32
|
+
readonly cache: number;
|
|
33
|
+
readonly kv: { readonly bits: number; readonly groupSize: number } | null;
|
|
34
|
+
readonly kEqV: boolean;
|
|
35
|
+
readonly layerScalar: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** The artifact's layers and kv_config, from mlx-community/gemma-4-12B-it-OptiQ-4bit@5b1101065d2094c8f12aa87fee80e0afa5b292b7. */
|
|
39
|
+
export const LAYERS: readonly Gemma4Layer[] = Object.freeze([
|
|
40
|
+
/* 0 */ { attention: "sliding", cache: 0, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
41
|
+
/* 1 */ { attention: "sliding", cache: 1, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
42
|
+
/* 2 */ { attention: "sliding", cache: 2, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
43
|
+
/* 3 */ { attention: "sliding", cache: 3, kv: { bits: 8, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
44
|
+
/* 4 */ { attention: "sliding", cache: 4, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
45
|
+
/* 5 */ { attention: "full", cache: 5, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
46
|
+
/* 6 */ { attention: "sliding", cache: 6, kv: { bits: 8, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
47
|
+
/* 7 */ { attention: "sliding", cache: 7, kv: { bits: 8, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
48
|
+
/* 8 */ { attention: "sliding", cache: 8, kv: { bits: 8, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
49
|
+
/* 9 */ { attention: "sliding", cache: 9, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
50
|
+
/* 10 */ { attention: "sliding", cache: 10, kv: { bits: 8, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
51
|
+
/* 11 */ { attention: "full", cache: 11, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
52
|
+
/* 12 */ { attention: "sliding", cache: 12, kv: { bits: 8, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
53
|
+
/* 13 */ { attention: "sliding", cache: 13, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
54
|
+
/* 14 */ { attention: "sliding", cache: 14, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
55
|
+
/* 15 */ { attention: "sliding", cache: 15, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
56
|
+
/* 16 */ { attention: "sliding", cache: 16, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
57
|
+
/* 17 */ { attention: "full", cache: 17, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
58
|
+
/* 18 */ { attention: "sliding", cache: 18, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
59
|
+
/* 19 */ { attention: "sliding", cache: 19, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
60
|
+
/* 20 */ { attention: "sliding", cache: 20, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
61
|
+
/* 21 */ { attention: "sliding", cache: 21, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
62
|
+
/* 22 */ { attention: "sliding", cache: 22, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
63
|
+
/* 23 */ { attention: "full", cache: 23, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
64
|
+
/* 24 */ { attention: "sliding", cache: 24, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
65
|
+
/* 25 */ { attention: "sliding", cache: 25, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
66
|
+
/* 26 */ { attention: "sliding", cache: 26, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
67
|
+
/* 27 */ { attention: "sliding", cache: 27, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
68
|
+
/* 28 */ { attention: "sliding", cache: 28, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
69
|
+
/* 29 */ { attention: "full", cache: 29, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
70
|
+
/* 30 */ { attention: "sliding", cache: 30, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
71
|
+
/* 31 */ { attention: "sliding", cache: 31, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
72
|
+
/* 32 */ { attention: "sliding", cache: 32, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
73
|
+
/* 33 */ { attention: "sliding", cache: 33, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
74
|
+
/* 34 */ { attention: "sliding", cache: 34, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
75
|
+
/* 35 */ { attention: "full", cache: 35, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
76
|
+
/* 36 */ { attention: "sliding", cache: 36, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
77
|
+
/* 37 */ { attention: "sliding", cache: 37, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
78
|
+
/* 38 */ { attention: "sliding", cache: 38, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
79
|
+
/* 39 */ { attention: "sliding", cache: 39, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
80
|
+
/* 40 */ { attention: "sliding", cache: 40, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
81
|
+
/* 41 */ { attention: "full", cache: 41, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
82
|
+
/* 42 */ { attention: "sliding", cache: 42, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
83
|
+
/* 43 */ { attention: "sliding", cache: 43, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
84
|
+
/* 44 */ { attention: "sliding", cache: 44, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
85
|
+
/* 45 */ { attention: "sliding", cache: 45, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
86
|
+
/* 46 */ { attention: "sliding", cache: 46, kv: { bits: 4, groupSize: 64 }, kEqV: false, layerScalar: true },
|
|
87
|
+
/* 47 */ { attention: "full", cache: 47, kv: { bits: 4, groupSize: 64 }, kEqV: true, layerScalar: true },
|
|
88
|
+
]);
|
|
89
|
+
|
|
90
|
+
/** Layers [0, CACHES) own a cache. */
|
|
91
|
+
const CACHES = 48;
|
|
92
|
+
const PREFIX = "language_model.model";
|
|
93
|
+
const FINAL_LOGIT_SOFTCAP = 30;
|
|
94
|
+
|
|
95
|
+
export const DECODE_ROWS = 8;
|
|
96
|
+
export const VERIFY_ROWS = 64;
|
|
97
|
+
|
|
98
|
+
export class Gemma4TwelveB implements MlxDeclaredGraph, MlxTokenPhases {
|
|
99
|
+
readonly prefixBase = PREFIX;
|
|
100
|
+
readonly loraState = new LoraState();
|
|
101
|
+
readonly weightsBytes: number;
|
|
102
|
+
readonly embed: QuantizedEmbedding;
|
|
103
|
+
readonly finalNorm: RMSNorm;
|
|
104
|
+
readonly embedScale: number;
|
|
105
|
+
readonly windowSize: number;
|
|
106
|
+
readonly numDonors = CACHES;
|
|
107
|
+
readonly perLayerWidth = 0;
|
|
108
|
+
readonly graphCapabilities = declareGraph({ media: { input: "embeddings", video: false }, hiddenLayerTaps: true, compiledDecode: true });
|
|
109
|
+
makeCache!: () => Cache[];
|
|
110
|
+
readonly cacheLayers: readonly MlxCacheLayer[];
|
|
111
|
+
readonly layers: readonly GemmaDenseLayer[];
|
|
112
|
+
readonly traceLayers: readonly GemmaDenseLayer[];
|
|
113
|
+
readonly #constants: ReturnType<typeof ownResource<MlxArray[]>>;
|
|
114
|
+
readonly #parts: readonly GemmaLayerWeights[];
|
|
115
|
+
readonly prompt: readonly MlxPromptRange[];
|
|
116
|
+
readonly promptChunk: typeof this.prompt;
|
|
117
|
+
readonly multiSequencePromptChunk: typeof this.multiSequencePrompt;
|
|
118
|
+
readonly multiSequencePrompt: readonly MlxPromptRange[];
|
|
119
|
+
readonly decode: MlxRowTable<MlxCapturingForward>;
|
|
120
|
+
readonly verify: MlxRowTable<MlxCapturingForward>;
|
|
121
|
+
readonly appendKnown: MlxKnownOperations;
|
|
122
|
+
readonly logits: MlxRowTable<MlxHeadForward>;
|
|
123
|
+
readonly mixed: readonly MlxMixedRange[];
|
|
124
|
+
readonly #l0: GemmaDenseLayer;
|
|
125
|
+
readonly #t0: GemmaDenseLayer;
|
|
126
|
+
readonly #l1: GemmaDenseLayer;
|
|
127
|
+
readonly #t1: GemmaDenseLayer;
|
|
128
|
+
readonly #l2: GemmaDenseLayer;
|
|
129
|
+
readonly #t2: GemmaDenseLayer;
|
|
130
|
+
readonly #l3: GemmaDenseLayer;
|
|
131
|
+
readonly #t3: GemmaDenseLayer;
|
|
132
|
+
readonly #l4: GemmaDenseLayer;
|
|
133
|
+
readonly #t4: GemmaDenseLayer;
|
|
134
|
+
readonly #l5: GemmaDenseLayer;
|
|
135
|
+
readonly #t5: GemmaDenseLayer;
|
|
136
|
+
readonly #l6: GemmaDenseLayer;
|
|
137
|
+
readonly #t6: GemmaDenseLayer;
|
|
138
|
+
readonly #l7: GemmaDenseLayer;
|
|
139
|
+
readonly #t7: GemmaDenseLayer;
|
|
140
|
+
readonly #l8: GemmaDenseLayer;
|
|
141
|
+
readonly #t8: GemmaDenseLayer;
|
|
142
|
+
readonly #l9: GemmaDenseLayer;
|
|
143
|
+
readonly #t9: GemmaDenseLayer;
|
|
144
|
+
readonly #l10: GemmaDenseLayer;
|
|
145
|
+
readonly #t10: GemmaDenseLayer;
|
|
146
|
+
readonly #l11: GemmaDenseLayer;
|
|
147
|
+
readonly #t11: GemmaDenseLayer;
|
|
148
|
+
readonly #l12: GemmaDenseLayer;
|
|
149
|
+
readonly #t12: GemmaDenseLayer;
|
|
150
|
+
readonly #l13: GemmaDenseLayer;
|
|
151
|
+
readonly #t13: GemmaDenseLayer;
|
|
152
|
+
readonly #l14: GemmaDenseLayer;
|
|
153
|
+
readonly #t14: GemmaDenseLayer;
|
|
154
|
+
readonly #l15: GemmaDenseLayer;
|
|
155
|
+
readonly #t15: GemmaDenseLayer;
|
|
156
|
+
readonly #l16: GemmaDenseLayer;
|
|
157
|
+
readonly #t16: GemmaDenseLayer;
|
|
158
|
+
readonly #l17: GemmaDenseLayer;
|
|
159
|
+
readonly #t17: GemmaDenseLayer;
|
|
160
|
+
readonly #l18: GemmaDenseLayer;
|
|
161
|
+
readonly #t18: GemmaDenseLayer;
|
|
162
|
+
readonly #l19: GemmaDenseLayer;
|
|
163
|
+
readonly #t19: GemmaDenseLayer;
|
|
164
|
+
readonly #l20: GemmaDenseLayer;
|
|
165
|
+
readonly #t20: GemmaDenseLayer;
|
|
166
|
+
readonly #l21: GemmaDenseLayer;
|
|
167
|
+
readonly #t21: GemmaDenseLayer;
|
|
168
|
+
readonly #l22: GemmaDenseLayer;
|
|
169
|
+
readonly #t22: GemmaDenseLayer;
|
|
170
|
+
readonly #l23: GemmaDenseLayer;
|
|
171
|
+
readonly #t23: GemmaDenseLayer;
|
|
172
|
+
readonly #l24: GemmaDenseLayer;
|
|
173
|
+
readonly #t24: GemmaDenseLayer;
|
|
174
|
+
readonly #l25: GemmaDenseLayer;
|
|
175
|
+
readonly #t25: GemmaDenseLayer;
|
|
176
|
+
readonly #l26: GemmaDenseLayer;
|
|
177
|
+
readonly #t26: GemmaDenseLayer;
|
|
178
|
+
readonly #l27: GemmaDenseLayer;
|
|
179
|
+
readonly #t27: GemmaDenseLayer;
|
|
180
|
+
readonly #l28: GemmaDenseLayer;
|
|
181
|
+
readonly #t28: GemmaDenseLayer;
|
|
182
|
+
readonly #l29: GemmaDenseLayer;
|
|
183
|
+
readonly #t29: GemmaDenseLayer;
|
|
184
|
+
readonly #l30: GemmaDenseLayer;
|
|
185
|
+
readonly #t30: GemmaDenseLayer;
|
|
186
|
+
readonly #l31: GemmaDenseLayer;
|
|
187
|
+
readonly #t31: GemmaDenseLayer;
|
|
188
|
+
readonly #l32: GemmaDenseLayer;
|
|
189
|
+
readonly #t32: GemmaDenseLayer;
|
|
190
|
+
readonly #l33: GemmaDenseLayer;
|
|
191
|
+
readonly #t33: GemmaDenseLayer;
|
|
192
|
+
readonly #l34: GemmaDenseLayer;
|
|
193
|
+
readonly #t34: GemmaDenseLayer;
|
|
194
|
+
readonly #l35: GemmaDenseLayer;
|
|
195
|
+
readonly #t35: GemmaDenseLayer;
|
|
196
|
+
readonly #l36: GemmaDenseLayer;
|
|
197
|
+
readonly #t36: GemmaDenseLayer;
|
|
198
|
+
readonly #l37: GemmaDenseLayer;
|
|
199
|
+
readonly #t37: GemmaDenseLayer;
|
|
200
|
+
readonly #l38: GemmaDenseLayer;
|
|
201
|
+
readonly #t38: GemmaDenseLayer;
|
|
202
|
+
readonly #l39: GemmaDenseLayer;
|
|
203
|
+
readonly #t39: GemmaDenseLayer;
|
|
204
|
+
readonly #l40: GemmaDenseLayer;
|
|
205
|
+
readonly #t40: GemmaDenseLayer;
|
|
206
|
+
readonly #l41: GemmaDenseLayer;
|
|
207
|
+
readonly #t41: GemmaDenseLayer;
|
|
208
|
+
readonly #l42: GemmaDenseLayer;
|
|
209
|
+
readonly #t42: GemmaDenseLayer;
|
|
210
|
+
readonly #l43: GemmaDenseLayer;
|
|
211
|
+
readonly #t43: GemmaDenseLayer;
|
|
212
|
+
readonly #l44: GemmaDenseLayer;
|
|
213
|
+
readonly #t44: GemmaDenseLayer;
|
|
214
|
+
readonly #l45: GemmaDenseLayer;
|
|
215
|
+
readonly #t45: GemmaDenseLayer;
|
|
216
|
+
readonly #l46: GemmaDenseLayer;
|
|
217
|
+
readonly #t46: GemmaDenseLayer;
|
|
218
|
+
readonly #l47: GemmaDenseLayer;
|
|
219
|
+
readonly #t47: GemmaDenseLayer;
|
|
220
|
+
constructor(weights: Weights, readonly config: ModelConfig) {
|
|
221
|
+
using resources = new GemmaBuildScope();
|
|
222
|
+
this.weightsBytes = weightBytes(weights);
|
|
223
|
+
this.embed = QuantizedEmbedding.load(weights, `${PREFIX}.embed_tokens`, config);
|
|
224
|
+
this.finalNorm = new RMSNorm(weights.tensor(`${PREFIX}.norm.weight`), config.text.rmsNormEps);
|
|
225
|
+
this.embedScale = Math.sqrt(config.text.hiddenSize);
|
|
226
|
+
this.windowSize = config.text.slidingWindow;
|
|
227
|
+
const p0 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.0`, new SlidingAttention(weights, config, `${PREFIX}.layers.0.self_attn`)));
|
|
228
|
+
this.#l0 = new GemmaDenseLayer(p0, new CompiledGegluMLP(p0.mlp));
|
|
229
|
+
this.#t0 = new GemmaDenseLayer(p0, new PlainGegluMLP(p0.mlp));
|
|
230
|
+
const p1 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.1`, new SlidingAttention(weights, config, `${PREFIX}.layers.1.self_attn`)));
|
|
231
|
+
this.#l1 = new GemmaDenseLayer(p1, new CompiledGegluMLP(p1.mlp));
|
|
232
|
+
this.#t1 = new GemmaDenseLayer(p1, new PlainGegluMLP(p1.mlp));
|
|
233
|
+
const p2 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.2`, new SlidingAttention(weights, config, `${PREFIX}.layers.2.self_attn`)));
|
|
234
|
+
this.#l2 = new GemmaDenseLayer(p2, new CompiledGegluMLP(p2.mlp));
|
|
235
|
+
this.#t2 = new GemmaDenseLayer(p2, new PlainGegluMLP(p2.mlp));
|
|
236
|
+
const p3 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.3`, new SlidingAttention(weights, config, `${PREFIX}.layers.3.self_attn`)));
|
|
237
|
+
this.#l3 = new GemmaDenseLayer(p3, new CompiledGegluMLP(p3.mlp));
|
|
238
|
+
this.#t3 = new GemmaDenseLayer(p3, new PlainGegluMLP(p3.mlp));
|
|
239
|
+
const p4 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.4`, new SlidingAttention(weights, config, `${PREFIX}.layers.4.self_attn`)));
|
|
240
|
+
this.#l4 = new GemmaDenseLayer(p4, new CompiledGegluMLP(p4.mlp));
|
|
241
|
+
this.#t4 = new GemmaDenseLayer(p4, new PlainGegluMLP(p4.mlp));
|
|
242
|
+
const p5 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.5`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.5.self_attn`)));
|
|
243
|
+
this.#l5 = new GemmaDenseLayer(p5, new CompiledGegluMLP(p5.mlp));
|
|
244
|
+
this.#t5 = new GemmaDenseLayer(p5, new PlainGegluMLP(p5.mlp));
|
|
245
|
+
const p6 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.6`, new SlidingAttention(weights, config, `${PREFIX}.layers.6.self_attn`)));
|
|
246
|
+
this.#l6 = new GemmaDenseLayer(p6, new CompiledGegluMLP(p6.mlp));
|
|
247
|
+
this.#t6 = new GemmaDenseLayer(p6, new PlainGegluMLP(p6.mlp));
|
|
248
|
+
const p7 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.7`, new SlidingAttention(weights, config, `${PREFIX}.layers.7.self_attn`)));
|
|
249
|
+
this.#l7 = new GemmaDenseLayer(p7, new CompiledGegluMLP(p7.mlp));
|
|
250
|
+
this.#t7 = new GemmaDenseLayer(p7, new PlainGegluMLP(p7.mlp));
|
|
251
|
+
const p8 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.8`, new SlidingAttention(weights, config, `${PREFIX}.layers.8.self_attn`)));
|
|
252
|
+
this.#l8 = new GemmaDenseLayer(p8, new CompiledGegluMLP(p8.mlp));
|
|
253
|
+
this.#t8 = new GemmaDenseLayer(p8, new PlainGegluMLP(p8.mlp));
|
|
254
|
+
const p9 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.9`, new SlidingAttention(weights, config, `${PREFIX}.layers.9.self_attn`)));
|
|
255
|
+
this.#l9 = new GemmaDenseLayer(p9, new CompiledGegluMLP(p9.mlp));
|
|
256
|
+
this.#t9 = new GemmaDenseLayer(p9, new PlainGegluMLP(p9.mlp));
|
|
257
|
+
const p10 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.10`, new SlidingAttention(weights, config, `${PREFIX}.layers.10.self_attn`)));
|
|
258
|
+
this.#l10 = new GemmaDenseLayer(p10, new CompiledGegluMLP(p10.mlp));
|
|
259
|
+
this.#t10 = new GemmaDenseLayer(p10, new PlainGegluMLP(p10.mlp));
|
|
260
|
+
const p11 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.11`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.11.self_attn`)));
|
|
261
|
+
this.#l11 = new GemmaDenseLayer(p11, new CompiledGegluMLP(p11.mlp));
|
|
262
|
+
this.#t11 = new GemmaDenseLayer(p11, new PlainGegluMLP(p11.mlp));
|
|
263
|
+
const p12 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.12`, new SlidingAttention(weights, config, `${PREFIX}.layers.12.self_attn`)));
|
|
264
|
+
this.#l12 = new GemmaDenseLayer(p12, new CompiledGegluMLP(p12.mlp));
|
|
265
|
+
this.#t12 = new GemmaDenseLayer(p12, new PlainGegluMLP(p12.mlp));
|
|
266
|
+
const p13 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.13`, new SlidingAttention(weights, config, `${PREFIX}.layers.13.self_attn`)));
|
|
267
|
+
this.#l13 = new GemmaDenseLayer(p13, new CompiledGegluMLP(p13.mlp));
|
|
268
|
+
this.#t13 = new GemmaDenseLayer(p13, new PlainGegluMLP(p13.mlp));
|
|
269
|
+
const p14 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.14`, new SlidingAttention(weights, config, `${PREFIX}.layers.14.self_attn`)));
|
|
270
|
+
this.#l14 = new GemmaDenseLayer(p14, new CompiledGegluMLP(p14.mlp));
|
|
271
|
+
this.#t14 = new GemmaDenseLayer(p14, new PlainGegluMLP(p14.mlp));
|
|
272
|
+
const p15 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.15`, new SlidingAttention(weights, config, `${PREFIX}.layers.15.self_attn`)));
|
|
273
|
+
this.#l15 = new GemmaDenseLayer(p15, new CompiledGegluMLP(p15.mlp));
|
|
274
|
+
this.#t15 = new GemmaDenseLayer(p15, new PlainGegluMLP(p15.mlp));
|
|
275
|
+
const p16 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.16`, new SlidingAttention(weights, config, `${PREFIX}.layers.16.self_attn`)));
|
|
276
|
+
this.#l16 = new GemmaDenseLayer(p16, new CompiledGegluMLP(p16.mlp));
|
|
277
|
+
this.#t16 = new GemmaDenseLayer(p16, new PlainGegluMLP(p16.mlp));
|
|
278
|
+
const p17 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.17`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.17.self_attn`)));
|
|
279
|
+
this.#l17 = new GemmaDenseLayer(p17, new CompiledGegluMLP(p17.mlp));
|
|
280
|
+
this.#t17 = new GemmaDenseLayer(p17, new PlainGegluMLP(p17.mlp));
|
|
281
|
+
const p18 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.18`, new SlidingAttention(weights, config, `${PREFIX}.layers.18.self_attn`)));
|
|
282
|
+
this.#l18 = new GemmaDenseLayer(p18, new CompiledGegluMLP(p18.mlp));
|
|
283
|
+
this.#t18 = new GemmaDenseLayer(p18, new PlainGegluMLP(p18.mlp));
|
|
284
|
+
const p19 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.19`, new SlidingAttention(weights, config, `${PREFIX}.layers.19.self_attn`)));
|
|
285
|
+
this.#l19 = new GemmaDenseLayer(p19, new CompiledGegluMLP(p19.mlp));
|
|
286
|
+
this.#t19 = new GemmaDenseLayer(p19, new PlainGegluMLP(p19.mlp));
|
|
287
|
+
const p20 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.20`, new SlidingAttention(weights, config, `${PREFIX}.layers.20.self_attn`)));
|
|
288
|
+
this.#l20 = new GemmaDenseLayer(p20, new CompiledGegluMLP(p20.mlp));
|
|
289
|
+
this.#t20 = new GemmaDenseLayer(p20, new PlainGegluMLP(p20.mlp));
|
|
290
|
+
const p21 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.21`, new SlidingAttention(weights, config, `${PREFIX}.layers.21.self_attn`)));
|
|
291
|
+
this.#l21 = new GemmaDenseLayer(p21, new CompiledGegluMLP(p21.mlp));
|
|
292
|
+
this.#t21 = new GemmaDenseLayer(p21, new PlainGegluMLP(p21.mlp));
|
|
293
|
+
const p22 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.22`, new SlidingAttention(weights, config, `${PREFIX}.layers.22.self_attn`)));
|
|
294
|
+
this.#l22 = new GemmaDenseLayer(p22, new CompiledGegluMLP(p22.mlp));
|
|
295
|
+
this.#t22 = new GemmaDenseLayer(p22, new PlainGegluMLP(p22.mlp));
|
|
296
|
+
const p23 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.23`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.23.self_attn`)));
|
|
297
|
+
this.#l23 = new GemmaDenseLayer(p23, new CompiledGegluMLP(p23.mlp));
|
|
298
|
+
this.#t23 = new GemmaDenseLayer(p23, new PlainGegluMLP(p23.mlp));
|
|
299
|
+
const p24 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.24`, new SlidingAttention(weights, config, `${PREFIX}.layers.24.self_attn`)));
|
|
300
|
+
this.#l24 = new GemmaDenseLayer(p24, new CompiledGegluMLP(p24.mlp));
|
|
301
|
+
this.#t24 = new GemmaDenseLayer(p24, new PlainGegluMLP(p24.mlp));
|
|
302
|
+
const p25 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.25`, new SlidingAttention(weights, config, `${PREFIX}.layers.25.self_attn`)));
|
|
303
|
+
this.#l25 = new GemmaDenseLayer(p25, new CompiledGegluMLP(p25.mlp));
|
|
304
|
+
this.#t25 = new GemmaDenseLayer(p25, new PlainGegluMLP(p25.mlp));
|
|
305
|
+
const p26 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.26`, new SlidingAttention(weights, config, `${PREFIX}.layers.26.self_attn`)));
|
|
306
|
+
this.#l26 = new GemmaDenseLayer(p26, new CompiledGegluMLP(p26.mlp));
|
|
307
|
+
this.#t26 = new GemmaDenseLayer(p26, new PlainGegluMLP(p26.mlp));
|
|
308
|
+
const p27 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.27`, new SlidingAttention(weights, config, `${PREFIX}.layers.27.self_attn`)));
|
|
309
|
+
this.#l27 = new GemmaDenseLayer(p27, new CompiledGegluMLP(p27.mlp));
|
|
310
|
+
this.#t27 = new GemmaDenseLayer(p27, new PlainGegluMLP(p27.mlp));
|
|
311
|
+
const p28 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.28`, new SlidingAttention(weights, config, `${PREFIX}.layers.28.self_attn`)));
|
|
312
|
+
this.#l28 = new GemmaDenseLayer(p28, new CompiledGegluMLP(p28.mlp));
|
|
313
|
+
this.#t28 = new GemmaDenseLayer(p28, new PlainGegluMLP(p28.mlp));
|
|
314
|
+
const p29 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.29`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.29.self_attn`)));
|
|
315
|
+
this.#l29 = new GemmaDenseLayer(p29, new CompiledGegluMLP(p29.mlp));
|
|
316
|
+
this.#t29 = new GemmaDenseLayer(p29, new PlainGegluMLP(p29.mlp));
|
|
317
|
+
const p30 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.30`, new SlidingAttention(weights, config, `${PREFIX}.layers.30.self_attn`)));
|
|
318
|
+
this.#l30 = new GemmaDenseLayer(p30, new CompiledGegluMLP(p30.mlp));
|
|
319
|
+
this.#t30 = new GemmaDenseLayer(p30, new PlainGegluMLP(p30.mlp));
|
|
320
|
+
const p31 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.31`, new SlidingAttention(weights, config, `${PREFIX}.layers.31.self_attn`)));
|
|
321
|
+
this.#l31 = new GemmaDenseLayer(p31, new CompiledGegluMLP(p31.mlp));
|
|
322
|
+
this.#t31 = new GemmaDenseLayer(p31, new PlainGegluMLP(p31.mlp));
|
|
323
|
+
const p32 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.32`, new SlidingAttention(weights, config, `${PREFIX}.layers.32.self_attn`)));
|
|
324
|
+
this.#l32 = new GemmaDenseLayer(p32, new CompiledGegluMLP(p32.mlp));
|
|
325
|
+
this.#t32 = new GemmaDenseLayer(p32, new PlainGegluMLP(p32.mlp));
|
|
326
|
+
const p33 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.33`, new SlidingAttention(weights, config, `${PREFIX}.layers.33.self_attn`)));
|
|
327
|
+
this.#l33 = new GemmaDenseLayer(p33, new CompiledGegluMLP(p33.mlp));
|
|
328
|
+
this.#t33 = new GemmaDenseLayer(p33, new PlainGegluMLP(p33.mlp));
|
|
329
|
+
const p34 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.34`, new SlidingAttention(weights, config, `${PREFIX}.layers.34.self_attn`)));
|
|
330
|
+
this.#l34 = new GemmaDenseLayer(p34, new CompiledGegluMLP(p34.mlp));
|
|
331
|
+
this.#t34 = new GemmaDenseLayer(p34, new PlainGegluMLP(p34.mlp));
|
|
332
|
+
const p35 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.35`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.35.self_attn`)));
|
|
333
|
+
this.#l35 = new GemmaDenseLayer(p35, new CompiledGegluMLP(p35.mlp));
|
|
334
|
+
this.#t35 = new GemmaDenseLayer(p35, new PlainGegluMLP(p35.mlp));
|
|
335
|
+
const p36 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.36`, new SlidingAttention(weights, config, `${PREFIX}.layers.36.self_attn`)));
|
|
336
|
+
this.#l36 = new GemmaDenseLayer(p36, new CompiledGegluMLP(p36.mlp));
|
|
337
|
+
this.#t36 = new GemmaDenseLayer(p36, new PlainGegluMLP(p36.mlp));
|
|
338
|
+
const p37 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.37`, new SlidingAttention(weights, config, `${PREFIX}.layers.37.self_attn`)));
|
|
339
|
+
this.#l37 = new GemmaDenseLayer(p37, new CompiledGegluMLP(p37.mlp));
|
|
340
|
+
this.#t37 = new GemmaDenseLayer(p37, new PlainGegluMLP(p37.mlp));
|
|
341
|
+
const p38 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.38`, new SlidingAttention(weights, config, `${PREFIX}.layers.38.self_attn`)));
|
|
342
|
+
this.#l38 = new GemmaDenseLayer(p38, new CompiledGegluMLP(p38.mlp));
|
|
343
|
+
this.#t38 = new GemmaDenseLayer(p38, new PlainGegluMLP(p38.mlp));
|
|
344
|
+
const p39 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.39`, new SlidingAttention(weights, config, `${PREFIX}.layers.39.self_attn`)));
|
|
345
|
+
this.#l39 = new GemmaDenseLayer(p39, new CompiledGegluMLP(p39.mlp));
|
|
346
|
+
this.#t39 = new GemmaDenseLayer(p39, new PlainGegluMLP(p39.mlp));
|
|
347
|
+
const p40 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.40`, new SlidingAttention(weights, config, `${PREFIX}.layers.40.self_attn`)));
|
|
348
|
+
this.#l40 = new GemmaDenseLayer(p40, new CompiledGegluMLP(p40.mlp));
|
|
349
|
+
this.#t40 = new GemmaDenseLayer(p40, new PlainGegluMLP(p40.mlp));
|
|
350
|
+
const p41 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.41`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.41.self_attn`)));
|
|
351
|
+
this.#l41 = new GemmaDenseLayer(p41, new CompiledGegluMLP(p41.mlp));
|
|
352
|
+
this.#t41 = new GemmaDenseLayer(p41, new PlainGegluMLP(p41.mlp));
|
|
353
|
+
const p42 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.42`, new SlidingAttention(weights, config, `${PREFIX}.layers.42.self_attn`)));
|
|
354
|
+
this.#l42 = new GemmaDenseLayer(p42, new CompiledGegluMLP(p42.mlp));
|
|
355
|
+
this.#t42 = new GemmaDenseLayer(p42, new PlainGegluMLP(p42.mlp));
|
|
356
|
+
const p43 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.43`, new SlidingAttention(weights, config, `${PREFIX}.layers.43.self_attn`)));
|
|
357
|
+
this.#l43 = new GemmaDenseLayer(p43, new CompiledGegluMLP(p43.mlp));
|
|
358
|
+
this.#t43 = new GemmaDenseLayer(p43, new PlainGegluMLP(p43.mlp));
|
|
359
|
+
const p44 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.44`, new SlidingAttention(weights, config, `${PREFIX}.layers.44.self_attn`)));
|
|
360
|
+
this.#l44 = new GemmaDenseLayer(p44, new CompiledGegluMLP(p44.mlp));
|
|
361
|
+
this.#t44 = new GemmaDenseLayer(p44, new PlainGegluMLP(p44.mlp));
|
|
362
|
+
const p45 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.45`, new SlidingAttention(weights, config, `${PREFIX}.layers.45.self_attn`)));
|
|
363
|
+
this.#l45 = new GemmaDenseLayer(p45, new CompiledGegluMLP(p45.mlp));
|
|
364
|
+
this.#t45 = new GemmaDenseLayer(p45, new PlainGegluMLP(p45.mlp));
|
|
365
|
+
const p46 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.46`, new SlidingAttention(weights, config, `${PREFIX}.layers.46.self_attn`)));
|
|
366
|
+
this.#l46 = new GemmaDenseLayer(p46, new CompiledGegluMLP(p46.mlp));
|
|
367
|
+
this.#t46 = new GemmaDenseLayer(p46, new PlainGegluMLP(p46.mlp));
|
|
368
|
+
const p47 = resources.hold(new GemmaLayerWeights(weights, config, `${PREFIX}.layers.47`, new FullKEqVAttention(weights, config, `${PREFIX}.layers.47.self_attn`)));
|
|
369
|
+
this.#l47 = new GemmaDenseLayer(p47, new CompiledGegluMLP(p47.mlp));
|
|
370
|
+
this.#t47 = new GemmaDenseLayer(p47, new PlainGegluMLP(p47.mlp));
|
|
371
|
+
this.layers = Object.freeze([this.#l0, this.#l1, this.#l2, this.#l3, this.#l4, this.#l5, this.#l6, this.#l7, this.#l8, this.#l9, this.#l10, this.#l11, this.#l12, this.#l13, this.#l14, this.#l15, this.#l16, this.#l17, this.#l18, this.#l19, this.#l20, this.#l21, this.#l22, this.#l23, this.#l24, this.#l25, this.#l26, this.#l27, this.#l28, this.#l29, this.#l30, this.#l31, this.#l32, this.#l33, this.#l34, this.#l35, this.#l36, this.#l37, this.#l38, this.#l39, this.#l40, this.#l41, this.#l42, this.#l43, this.#l44, this.#l45, this.#l46, this.#l47]);
|
|
372
|
+
this.traceLayers = Object.freeze([this.#t0, this.#t1, this.#t2, this.#t3, this.#t4, this.#t5, this.#t6, this.#t7, this.#t8, this.#t9, this.#t10, this.#t11, this.#t12, this.#t13, this.#t14, this.#t15, this.#t16, this.#t17, this.#t18, this.#t19, this.#t20, this.#t21, this.#t22, this.#t23, this.#t24, this.#t25, this.#t26, this.#t27, this.#t28, this.#t29, this.#t30, this.#t31, this.#t32, this.#t33, this.#t34, this.#t35, this.#t36, this.#t37, this.#t38, this.#t39, this.#t40, this.#t41, this.#t42, this.#t43, this.#t44, this.#t45, this.#t46, this.#t47]);
|
|
373
|
+
this.#parts = Object.freeze([p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43, p44, p45, p46, p47]);
|
|
374
|
+
this.#constants = resources.finish();
|
|
375
|
+
this.cacheLayers = Object.freeze([
|
|
376
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
377
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
378
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
379
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
380
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
381
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
382
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
383
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
384
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
385
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
386
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
387
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
388
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
389
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
390
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
391
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
392
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
393
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
394
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
395
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
396
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
397
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
398
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
399
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
400
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
401
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
402
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
403
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
404
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
405
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
406
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
407
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
408
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
409
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
410
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
411
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
412
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
413
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
414
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
415
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
416
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
417
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
418
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
419
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
420
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
421
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
422
|
+
{ kind: "sliding", window: config.text.slidingWindow },
|
|
423
|
+
{ kind: "full", turboQuant: "deferred" },
|
|
424
|
+
]);
|
|
425
|
+
this.prompt = Object.freeze([{ from: 1, to: Infinity, operation: this.#window }]);
|
|
426
|
+
this.promptChunk = this.prompt;
|
|
427
|
+
this.multiSequencePrompt = this.prompt;
|
|
428
|
+
this.multiSequencePromptChunk = this.multiSequencePrompt;
|
|
429
|
+
this.decode = Object.freeze({ 1: this.#decode, 2: this.#decode, 3: this.#decode, 4: this.#decode, 5: this.#decode, 6: this.#decode, 7: this.#decode, 8: this.#decode ,
|
|
430
|
+
default: this.#decode,
|
|
431
|
+
});
|
|
432
|
+
this.verify = Object.freeze({ 1: this.#window, 2: this.#window, 3: this.#window, 4: this.#window, 5: this.#window, 6: this.#window, 7: this.#window, 8: this.#window, 9: this.#window, 10: this.#window, 11: this.#window, 12: this.#window, 13: this.#window, 14: this.#window, 15: this.#window, 16: this.#window, 17: this.#window, 18: this.#window, 19: this.#window, 20: this.#window, 21: this.#window, 22: this.#window, 23: this.#window, 24: this.#window, 25: this.#window, 26: this.#window, 27: this.#window, 28: this.#window, 29: this.#window, 30: this.#window, 31: this.#window, 32: this.#window, 33: this.#window, 34: this.#window, 35: this.#window, 36: this.#window, 37: this.#window, 38: this.#window, 39: this.#window, 40: this.#window, 41: this.#window, 42: this.#window, 43: this.#window, 44: this.#window, 45: this.#window, 46: this.#window, 47: this.#window, 48: this.#window, 49: this.#window, 50: this.#window, 51: this.#window, 52: this.#window, 53: this.#window, 54: this.#window, 55: this.#window, 56: this.#window, 57: this.#window, 58: this.#window, 59: this.#window, 60: this.#window, 61: this.#window, 62: this.#window, 63: this.#window, 64: this.#window ,
|
|
433
|
+
default: this.#window,
|
|
434
|
+
});
|
|
435
|
+
this.appendKnown = [{ from: 1, to: Infinity, operation: this.#known }];
|
|
436
|
+
this.logits = Object.freeze({ 1: this.#head, 2: this.#head, 3: this.#head, 4: this.#head, 5: this.#head, 6: this.#head, 7: this.#head, 8: this.#head, 9: this.#head, 10: this.#head, 11: this.#head, 12: this.#head, 13: this.#head, 14: this.#head, 15: this.#head, 16: this.#head, 17: this.#head, 18: this.#head, 19: this.#head, 20: this.#head, 21: this.#head, 22: this.#head, 23: this.#head, 24: this.#head, 25: this.#head, 26: this.#head, 27: this.#head, 28: this.#head, 29: this.#head, 30: this.#head, 31: this.#head, 32: this.#head, 33: this.#head, 34: this.#head, 35: this.#head, 36: this.#head, 37: this.#head, 38: this.#head, 39: this.#head, 40: this.#head, 41: this.#head, 42: this.#head, 43: this.#head, 44: this.#head, 45: this.#head, 46: this.#head, 47: this.#head, 48: this.#head, 49: this.#head, 50: this.#head, 51: this.#head, 52: this.#head, 53: this.#head, 54: this.#head, 55: this.#head, 56: this.#head, 57: this.#head, 58: this.#head, 59: this.#head, 60: this.#head, 61: this.#head, 62: this.#head, 63: this.#head, 64: this.#head ,
|
|
437
|
+
default: this.#head,
|
|
438
|
+
});
|
|
439
|
+
this.mixed = Object.freeze([{ from: 1, to: Infinity, operation: this.#mixed }]);
|
|
440
|
+
}
|
|
441
|
+
readonly #window = (ids: MlxArray, caches: Cache[], capture: MlxLayerCapture | null): MlxArray => this.#windowHidden(this.#embedTokens(ids), caches, "window", ids, capture);
|
|
442
|
+
#windowHidden(hidden: MlxArray, caches: Cache[], phase: Gemma4Phase, ids: MlxArray, capture: MlxLayerCapture | null): MlxArray {
|
|
443
|
+
using scope = new GemmaForwardScope(hidden, capture, CACHES);
|
|
444
|
+
scope.own(0, this.#l0.forward(scope.hidden, caches[0]!, phase, null));
|
|
445
|
+
scope.own(1, this.#l1.forward(scope.hidden, caches[1]!, phase, null));
|
|
446
|
+
scope.own(2, this.#l2.forward(scope.hidden, caches[2]!, phase, null));
|
|
447
|
+
scope.own(3, this.#l3.forward(scope.hidden, caches[3]!, phase, null));
|
|
448
|
+
scope.own(4, this.#l4.forward(scope.hidden, caches[4]!, phase, null));
|
|
449
|
+
scope.own(5, this.#l5.forward(scope.hidden, caches[5]!, phase, null));
|
|
450
|
+
scope.own(6, this.#l6.forward(scope.hidden, caches[6]!, phase, null));
|
|
451
|
+
scope.own(7, this.#l7.forward(scope.hidden, caches[7]!, phase, null));
|
|
452
|
+
scope.own(8, this.#l8.forward(scope.hidden, caches[8]!, phase, null));
|
|
453
|
+
scope.own(9, this.#l9.forward(scope.hidden, caches[9]!, phase, null));
|
|
454
|
+
scope.own(10, this.#l10.forward(scope.hidden, caches[10]!, phase, null));
|
|
455
|
+
scope.own(11, this.#l11.forward(scope.hidden, caches[11]!, phase, null));
|
|
456
|
+
scope.own(12, this.#l12.forward(scope.hidden, caches[12]!, phase, null));
|
|
457
|
+
scope.own(13, this.#l13.forward(scope.hidden, caches[13]!, phase, null));
|
|
458
|
+
scope.own(14, this.#l14.forward(scope.hidden, caches[14]!, phase, null));
|
|
459
|
+
scope.own(15, this.#l15.forward(scope.hidden, caches[15]!, phase, null));
|
|
460
|
+
scope.own(16, this.#l16.forward(scope.hidden, caches[16]!, phase, null));
|
|
461
|
+
scope.own(17, this.#l17.forward(scope.hidden, caches[17]!, phase, null));
|
|
462
|
+
scope.own(18, this.#l18.forward(scope.hidden, caches[18]!, phase, null));
|
|
463
|
+
scope.own(19, this.#l19.forward(scope.hidden, caches[19]!, phase, null));
|
|
464
|
+
scope.own(20, this.#l20.forward(scope.hidden, caches[20]!, phase, null));
|
|
465
|
+
scope.own(21, this.#l21.forward(scope.hidden, caches[21]!, phase, null));
|
|
466
|
+
scope.own(22, this.#l22.forward(scope.hidden, caches[22]!, phase, null));
|
|
467
|
+
scope.own(23, this.#l23.forward(scope.hidden, caches[23]!, phase, null));
|
|
468
|
+
scope.own(24, this.#l24.forward(scope.hidden, caches[24]!, phase, null));
|
|
469
|
+
scope.own(25, this.#l25.forward(scope.hidden, caches[25]!, phase, null));
|
|
470
|
+
scope.own(26, this.#l26.forward(scope.hidden, caches[26]!, phase, null));
|
|
471
|
+
scope.own(27, this.#l27.forward(scope.hidden, caches[27]!, phase, null));
|
|
472
|
+
scope.own(28, this.#l28.forward(scope.hidden, caches[28]!, phase, null));
|
|
473
|
+
scope.own(29, this.#l29.forward(scope.hidden, caches[29]!, phase, null));
|
|
474
|
+
scope.own(30, this.#l30.forward(scope.hidden, caches[30]!, phase, null));
|
|
475
|
+
scope.own(31, this.#l31.forward(scope.hidden, caches[31]!, phase, null));
|
|
476
|
+
scope.own(32, this.#l32.forward(scope.hidden, caches[32]!, phase, null));
|
|
477
|
+
scope.own(33, this.#l33.forward(scope.hidden, caches[33]!, phase, null));
|
|
478
|
+
scope.own(34, this.#l34.forward(scope.hidden, caches[34]!, phase, null));
|
|
479
|
+
scope.own(35, this.#l35.forward(scope.hidden, caches[35]!, phase, null));
|
|
480
|
+
scope.own(36, this.#l36.forward(scope.hidden, caches[36]!, phase, null));
|
|
481
|
+
scope.own(37, this.#l37.forward(scope.hidden, caches[37]!, phase, null));
|
|
482
|
+
scope.own(38, this.#l38.forward(scope.hidden, caches[38]!, phase, null));
|
|
483
|
+
scope.own(39, this.#l39.forward(scope.hidden, caches[39]!, phase, null));
|
|
484
|
+
scope.own(40, this.#l40.forward(scope.hidden, caches[40]!, phase, null));
|
|
485
|
+
scope.own(41, this.#l41.forward(scope.hidden, caches[41]!, phase, null));
|
|
486
|
+
scope.own(42, this.#l42.forward(scope.hidden, caches[42]!, phase, null));
|
|
487
|
+
scope.own(43, this.#l43.forward(scope.hidden, caches[43]!, phase, null));
|
|
488
|
+
scope.own(44, this.#l44.forward(scope.hidden, caches[44]!, phase, null));
|
|
489
|
+
scope.own(45, this.#l45.forward(scope.hidden, caches[45]!, phase, null));
|
|
490
|
+
scope.own(46, this.#l46.forward(scope.hidden, caches[46]!, phase, null));
|
|
491
|
+
scope.own(47, this.#l47.forward(scope.hidden, caches[47]!, phase, null));
|
|
492
|
+
return scope.finish(48, this.finalNorm.forward(scope.hidden));
|
|
493
|
+
}
|
|
494
|
+
readonly #decode = (ids: MlxArray, caches: Cache[], capture: MlxLayerCapture | null): MlxArray => this.#decodeHidden(this.#embedTokens(ids), caches, "decode", ids, capture);
|
|
495
|
+
#decodeHidden(hidden: MlxArray, caches: Cache[], phase: Gemma4Phase, ids: MlxArray, capture: MlxLayerCapture | null): MlxArray {
|
|
496
|
+
using scope = new GemmaForwardScope(hidden, capture, CACHES);
|
|
497
|
+
scope.own(0, this.#l0.forward(scope.hidden, caches[0]!, phase, null));
|
|
498
|
+
scope.own(1, this.#l1.forward(scope.hidden, caches[1]!, phase, null));
|
|
499
|
+
scope.own(2, this.#l2.forward(scope.hidden, caches[2]!, phase, null));
|
|
500
|
+
scope.own(3, this.#l3.forward(scope.hidden, caches[3]!, phase, null));
|
|
501
|
+
scope.own(4, this.#l4.forward(scope.hidden, caches[4]!, phase, null));
|
|
502
|
+
scope.own(5, this.#l5.forward(scope.hidden, caches[5]!, phase, null));
|
|
503
|
+
scope.own(6, this.#l6.forward(scope.hidden, caches[6]!, phase, null));
|
|
504
|
+
scope.own(7, this.#l7.forward(scope.hidden, caches[7]!, phase, null));
|
|
505
|
+
scope.own(8, this.#l8.forward(scope.hidden, caches[8]!, phase, null));
|
|
506
|
+
scope.own(9, this.#l9.forward(scope.hidden, caches[9]!, phase, null));
|
|
507
|
+
scope.own(10, this.#l10.forward(scope.hidden, caches[10]!, phase, null));
|
|
508
|
+
scope.own(11, this.#l11.forward(scope.hidden, caches[11]!, phase, null));
|
|
509
|
+
scope.own(12, this.#l12.forward(scope.hidden, caches[12]!, phase, null));
|
|
510
|
+
scope.own(13, this.#l13.forward(scope.hidden, caches[13]!, phase, null));
|
|
511
|
+
scope.own(14, this.#l14.forward(scope.hidden, caches[14]!, phase, null));
|
|
512
|
+
scope.own(15, this.#l15.forward(scope.hidden, caches[15]!, phase, null));
|
|
513
|
+
scope.own(16, this.#l16.forward(scope.hidden, caches[16]!, phase, null));
|
|
514
|
+
scope.own(17, this.#l17.forward(scope.hidden, caches[17]!, phase, null));
|
|
515
|
+
scope.own(18, this.#l18.forward(scope.hidden, caches[18]!, phase, null));
|
|
516
|
+
scope.own(19, this.#l19.forward(scope.hidden, caches[19]!, phase, null));
|
|
517
|
+
scope.own(20, this.#l20.forward(scope.hidden, caches[20]!, phase, null));
|
|
518
|
+
scope.own(21, this.#l21.forward(scope.hidden, caches[21]!, phase, null));
|
|
519
|
+
scope.own(22, this.#l22.forward(scope.hidden, caches[22]!, phase, null));
|
|
520
|
+
scope.own(23, this.#l23.forward(scope.hidden, caches[23]!, phase, null));
|
|
521
|
+
scope.own(24, this.#l24.forward(scope.hidden, caches[24]!, phase, null));
|
|
522
|
+
scope.own(25, this.#l25.forward(scope.hidden, caches[25]!, phase, null));
|
|
523
|
+
scope.own(26, this.#l26.forward(scope.hidden, caches[26]!, phase, null));
|
|
524
|
+
scope.own(27, this.#l27.forward(scope.hidden, caches[27]!, phase, null));
|
|
525
|
+
scope.own(28, this.#l28.forward(scope.hidden, caches[28]!, phase, null));
|
|
526
|
+
scope.own(29, this.#l29.forward(scope.hidden, caches[29]!, phase, null));
|
|
527
|
+
scope.own(30, this.#l30.forward(scope.hidden, caches[30]!, phase, null));
|
|
528
|
+
scope.own(31, this.#l31.forward(scope.hidden, caches[31]!, phase, null));
|
|
529
|
+
scope.own(32, this.#l32.forward(scope.hidden, caches[32]!, phase, null));
|
|
530
|
+
scope.own(33, this.#l33.forward(scope.hidden, caches[33]!, phase, null));
|
|
531
|
+
scope.own(34, this.#l34.forward(scope.hidden, caches[34]!, phase, null));
|
|
532
|
+
scope.own(35, this.#l35.forward(scope.hidden, caches[35]!, phase, null));
|
|
533
|
+
scope.own(36, this.#l36.forward(scope.hidden, caches[36]!, phase, null));
|
|
534
|
+
scope.own(37, this.#l37.forward(scope.hidden, caches[37]!, phase, null));
|
|
535
|
+
scope.own(38, this.#l38.forward(scope.hidden, caches[38]!, phase, null));
|
|
536
|
+
scope.own(39, this.#l39.forward(scope.hidden, caches[39]!, phase, null));
|
|
537
|
+
scope.own(40, this.#l40.forward(scope.hidden, caches[40]!, phase, null));
|
|
538
|
+
scope.own(41, this.#l41.forward(scope.hidden, caches[41]!, phase, null));
|
|
539
|
+
scope.own(42, this.#l42.forward(scope.hidden, caches[42]!, phase, null));
|
|
540
|
+
scope.own(43, this.#l43.forward(scope.hidden, caches[43]!, phase, null));
|
|
541
|
+
scope.own(44, this.#l44.forward(scope.hidden, caches[44]!, phase, null));
|
|
542
|
+
scope.own(45, this.#l45.forward(scope.hidden, caches[45]!, phase, null));
|
|
543
|
+
scope.own(46, this.#l46.forward(scope.hidden, caches[46]!, phase, null));
|
|
544
|
+
scope.own(47, this.#l47.forward(scope.hidden, caches[47]!, phase, null));
|
|
545
|
+
return scope.finish(48, this.finalNorm.forward(scope.hidden));
|
|
546
|
+
}
|
|
547
|
+
readonly #traceDecode = (ids: MlxArray, caches: Cache[], capture: MlxLayerCapture | null): MlxArray => this.#traceDecodeHidden(this.#embedTokens(ids), caches, "decode", ids, capture);
|
|
548
|
+
#traceDecodeHidden(hidden: MlxArray, caches: Cache[], phase: Gemma4Phase, ids: MlxArray, capture: MlxLayerCapture | null): MlxArray {
|
|
549
|
+
using scope = new GemmaForwardScope(hidden, capture, CACHES);
|
|
550
|
+
scope.own(0, this.#t0.forward(scope.hidden, caches[0]!, phase, null));
|
|
551
|
+
scope.own(1, this.#t1.forward(scope.hidden, caches[1]!, phase, null));
|
|
552
|
+
scope.own(2, this.#t2.forward(scope.hidden, caches[2]!, phase, null));
|
|
553
|
+
scope.own(3, this.#t3.forward(scope.hidden, caches[3]!, phase, null));
|
|
554
|
+
scope.own(4, this.#t4.forward(scope.hidden, caches[4]!, phase, null));
|
|
555
|
+
scope.own(5, this.#t5.forward(scope.hidden, caches[5]!, phase, null));
|
|
556
|
+
scope.own(6, this.#t6.forward(scope.hidden, caches[6]!, phase, null));
|
|
557
|
+
scope.own(7, this.#t7.forward(scope.hidden, caches[7]!, phase, null));
|
|
558
|
+
scope.own(8, this.#t8.forward(scope.hidden, caches[8]!, phase, null));
|
|
559
|
+
scope.own(9, this.#t9.forward(scope.hidden, caches[9]!, phase, null));
|
|
560
|
+
scope.own(10, this.#t10.forward(scope.hidden, caches[10]!, phase, null));
|
|
561
|
+
scope.own(11, this.#t11.forward(scope.hidden, caches[11]!, phase, null));
|
|
562
|
+
scope.own(12, this.#t12.forward(scope.hidden, caches[12]!, phase, null));
|
|
563
|
+
scope.own(13, this.#t13.forward(scope.hidden, caches[13]!, phase, null));
|
|
564
|
+
scope.own(14, this.#t14.forward(scope.hidden, caches[14]!, phase, null));
|
|
565
|
+
scope.own(15, this.#t15.forward(scope.hidden, caches[15]!, phase, null));
|
|
566
|
+
scope.own(16, this.#t16.forward(scope.hidden, caches[16]!, phase, null));
|
|
567
|
+
scope.own(17, this.#t17.forward(scope.hidden, caches[17]!, phase, null));
|
|
568
|
+
scope.own(18, this.#t18.forward(scope.hidden, caches[18]!, phase, null));
|
|
569
|
+
scope.own(19, this.#t19.forward(scope.hidden, caches[19]!, phase, null));
|
|
570
|
+
scope.own(20, this.#t20.forward(scope.hidden, caches[20]!, phase, null));
|
|
571
|
+
scope.own(21, this.#t21.forward(scope.hidden, caches[21]!, phase, null));
|
|
572
|
+
scope.own(22, this.#t22.forward(scope.hidden, caches[22]!, phase, null));
|
|
573
|
+
scope.own(23, this.#t23.forward(scope.hidden, caches[23]!, phase, null));
|
|
574
|
+
scope.own(24, this.#t24.forward(scope.hidden, caches[24]!, phase, null));
|
|
575
|
+
scope.own(25, this.#t25.forward(scope.hidden, caches[25]!, phase, null));
|
|
576
|
+
scope.own(26, this.#t26.forward(scope.hidden, caches[26]!, phase, null));
|
|
577
|
+
scope.own(27, this.#t27.forward(scope.hidden, caches[27]!, phase, null));
|
|
578
|
+
scope.own(28, this.#t28.forward(scope.hidden, caches[28]!, phase, null));
|
|
579
|
+
scope.own(29, this.#t29.forward(scope.hidden, caches[29]!, phase, null));
|
|
580
|
+
scope.own(30, this.#t30.forward(scope.hidden, caches[30]!, phase, null));
|
|
581
|
+
scope.own(31, this.#t31.forward(scope.hidden, caches[31]!, phase, null));
|
|
582
|
+
scope.own(32, this.#t32.forward(scope.hidden, caches[32]!, phase, null));
|
|
583
|
+
scope.own(33, this.#t33.forward(scope.hidden, caches[33]!, phase, null));
|
|
584
|
+
scope.own(34, this.#t34.forward(scope.hidden, caches[34]!, phase, null));
|
|
585
|
+
scope.own(35, this.#t35.forward(scope.hidden, caches[35]!, phase, null));
|
|
586
|
+
scope.own(36, this.#t36.forward(scope.hidden, caches[36]!, phase, null));
|
|
587
|
+
scope.own(37, this.#t37.forward(scope.hidden, caches[37]!, phase, null));
|
|
588
|
+
scope.own(38, this.#t38.forward(scope.hidden, caches[38]!, phase, null));
|
|
589
|
+
scope.own(39, this.#t39.forward(scope.hidden, caches[39]!, phase, null));
|
|
590
|
+
scope.own(40, this.#t40.forward(scope.hidden, caches[40]!, phase, null));
|
|
591
|
+
scope.own(41, this.#t41.forward(scope.hidden, caches[41]!, phase, null));
|
|
592
|
+
scope.own(42, this.#t42.forward(scope.hidden, caches[42]!, phase, null));
|
|
593
|
+
scope.own(43, this.#t43.forward(scope.hidden, caches[43]!, phase, null));
|
|
594
|
+
scope.own(44, this.#t44.forward(scope.hidden, caches[44]!, phase, null));
|
|
595
|
+
scope.own(45, this.#t45.forward(scope.hidden, caches[45]!, phase, null));
|
|
596
|
+
scope.own(46, this.#t46.forward(scope.hidden, caches[46]!, phase, null));
|
|
597
|
+
scope.own(47, this.#t47.forward(scope.hidden, caches[47]!, phase, null));
|
|
598
|
+
return scope.finish(48, this.finalNorm.forward(scope.hidden));
|
|
599
|
+
}
|
|
600
|
+
readonly #known = (ids: MlxArray, caches: Cache[]) => this.#window(ids, caches, null);
|
|
601
|
+
readonly #head = (hidden: MlxArray) => { const logits = this.embed.asLinear(hidden); return disposing(logits, compiledLogitSoftcap(logits, FINAL_LOGIT_SOFTCAP)); };
|
|
602
|
+
readonly traceLogits = (hidden: MlxArray) => { const logits = this.embed.asLinear(hidden); return disposing(logits, logitSoftcap(logits, FINAL_LOGIT_SOFTCAP)); };
|
|
603
|
+
readonly traceDecode = (ids: MlxArray, caches: Cache[], capture: MlxLayerCapture | null) => this.#traceDecode(ids, caches, capture);
|
|
604
|
+
compiledDecodeStep() { return CompiledDecode.for(this); }
|
|
605
|
+
releaseCompiledDecode(): void { CompiledDecode.release(this); }
|
|
606
|
+
readonly #mixed = (work: Parameters<MlxMixedRange["operation"]>[0]): MlxArray[] => {
|
|
607
|
+
using scope = new GemmaMixedScope(work, ids => this.#embedTokens(ids), CACHES);
|
|
608
|
+
scope.layer(0, (x, group) => ownMixed(this.#l0.forwardAttn(x, group.cache[0]!, group.phase, null)), x => this.#l0.feedforward(x));
|
|
609
|
+
scope.layer(1, (x, group) => ownMixed(this.#l1.forwardAttn(x, group.cache[1]!, group.phase, null)), x => this.#l1.feedforward(x));
|
|
610
|
+
scope.layer(2, (x, group) => ownMixed(this.#l2.forwardAttn(x, group.cache[2]!, group.phase, null)), x => this.#l2.feedforward(x));
|
|
611
|
+
scope.layer(3, (x, group) => ownMixed(this.#l3.forwardAttn(x, group.cache[3]!, group.phase, null)), x => this.#l3.feedforward(x));
|
|
612
|
+
scope.layer(4, (x, group) => ownMixed(this.#l4.forwardAttn(x, group.cache[4]!, group.phase, null)), x => this.#l4.feedforward(x));
|
|
613
|
+
scope.layer(5, (x, group) => ownMixed(this.#l5.forwardAttn(x, group.cache[5]!, group.phase, null)), x => this.#l5.feedforward(x));
|
|
614
|
+
scope.layer(6, (x, group) => ownMixed(this.#l6.forwardAttn(x, group.cache[6]!, group.phase, null)), x => this.#l6.feedforward(x));
|
|
615
|
+
scope.layer(7, (x, group) => ownMixed(this.#l7.forwardAttn(x, group.cache[7]!, group.phase, null)), x => this.#l7.feedforward(x));
|
|
616
|
+
scope.layer(8, (x, group) => ownMixed(this.#l8.forwardAttn(x, group.cache[8]!, group.phase, null)), x => this.#l8.feedforward(x));
|
|
617
|
+
scope.layer(9, (x, group) => ownMixed(this.#l9.forwardAttn(x, group.cache[9]!, group.phase, null)), x => this.#l9.feedforward(x));
|
|
618
|
+
scope.layer(10, (x, group) => ownMixed(this.#l10.forwardAttn(x, group.cache[10]!, group.phase, null)), x => this.#l10.feedforward(x));
|
|
619
|
+
scope.layer(11, (x, group) => ownMixed(this.#l11.forwardAttn(x, group.cache[11]!, group.phase, null)), x => this.#l11.feedforward(x));
|
|
620
|
+
scope.layer(12, (x, group) => ownMixed(this.#l12.forwardAttn(x, group.cache[12]!, group.phase, null)), x => this.#l12.feedforward(x));
|
|
621
|
+
scope.layer(13, (x, group) => ownMixed(this.#l13.forwardAttn(x, group.cache[13]!, group.phase, null)), x => this.#l13.feedforward(x));
|
|
622
|
+
scope.layer(14, (x, group) => ownMixed(this.#l14.forwardAttn(x, group.cache[14]!, group.phase, null)), x => this.#l14.feedforward(x));
|
|
623
|
+
scope.layer(15, (x, group) => ownMixed(this.#l15.forwardAttn(x, group.cache[15]!, group.phase, null)), x => this.#l15.feedforward(x));
|
|
624
|
+
scope.layer(16, (x, group) => ownMixed(this.#l16.forwardAttn(x, group.cache[16]!, group.phase, null)), x => this.#l16.feedforward(x));
|
|
625
|
+
scope.layer(17, (x, group) => ownMixed(this.#l17.forwardAttn(x, group.cache[17]!, group.phase, null)), x => this.#l17.feedforward(x));
|
|
626
|
+
scope.layer(18, (x, group) => ownMixed(this.#l18.forwardAttn(x, group.cache[18]!, group.phase, null)), x => this.#l18.feedforward(x));
|
|
627
|
+
scope.layer(19, (x, group) => ownMixed(this.#l19.forwardAttn(x, group.cache[19]!, group.phase, null)), x => this.#l19.feedforward(x));
|
|
628
|
+
scope.layer(20, (x, group) => ownMixed(this.#l20.forwardAttn(x, group.cache[20]!, group.phase, null)), x => this.#l20.feedforward(x));
|
|
629
|
+
scope.layer(21, (x, group) => ownMixed(this.#l21.forwardAttn(x, group.cache[21]!, group.phase, null)), x => this.#l21.feedforward(x));
|
|
630
|
+
scope.layer(22, (x, group) => ownMixed(this.#l22.forwardAttn(x, group.cache[22]!, group.phase, null)), x => this.#l22.feedforward(x));
|
|
631
|
+
scope.layer(23, (x, group) => ownMixed(this.#l23.forwardAttn(x, group.cache[23]!, group.phase, null)), x => this.#l23.feedforward(x));
|
|
632
|
+
scope.layer(24, (x, group) => ownMixed(this.#l24.forwardAttn(x, group.cache[24]!, group.phase, null)), x => this.#l24.feedforward(x));
|
|
633
|
+
scope.layer(25, (x, group) => ownMixed(this.#l25.forwardAttn(x, group.cache[25]!, group.phase, null)), x => this.#l25.feedforward(x));
|
|
634
|
+
scope.layer(26, (x, group) => ownMixed(this.#l26.forwardAttn(x, group.cache[26]!, group.phase, null)), x => this.#l26.feedforward(x));
|
|
635
|
+
scope.layer(27, (x, group) => ownMixed(this.#l27.forwardAttn(x, group.cache[27]!, group.phase, null)), x => this.#l27.feedforward(x));
|
|
636
|
+
scope.layer(28, (x, group) => ownMixed(this.#l28.forwardAttn(x, group.cache[28]!, group.phase, null)), x => this.#l28.feedforward(x));
|
|
637
|
+
scope.layer(29, (x, group) => ownMixed(this.#l29.forwardAttn(x, group.cache[29]!, group.phase, null)), x => this.#l29.feedforward(x));
|
|
638
|
+
scope.layer(30, (x, group) => ownMixed(this.#l30.forwardAttn(x, group.cache[30]!, group.phase, null)), x => this.#l30.feedforward(x));
|
|
639
|
+
scope.layer(31, (x, group) => ownMixed(this.#l31.forwardAttn(x, group.cache[31]!, group.phase, null)), x => this.#l31.feedforward(x));
|
|
640
|
+
scope.layer(32, (x, group) => ownMixed(this.#l32.forwardAttn(x, group.cache[32]!, group.phase, null)), x => this.#l32.feedforward(x));
|
|
641
|
+
scope.layer(33, (x, group) => ownMixed(this.#l33.forwardAttn(x, group.cache[33]!, group.phase, null)), x => this.#l33.feedforward(x));
|
|
642
|
+
scope.layer(34, (x, group) => ownMixed(this.#l34.forwardAttn(x, group.cache[34]!, group.phase, null)), x => this.#l34.feedforward(x));
|
|
643
|
+
scope.layer(35, (x, group) => ownMixed(this.#l35.forwardAttn(x, group.cache[35]!, group.phase, null)), x => this.#l35.feedforward(x));
|
|
644
|
+
scope.layer(36, (x, group) => ownMixed(this.#l36.forwardAttn(x, group.cache[36]!, group.phase, null)), x => this.#l36.feedforward(x));
|
|
645
|
+
scope.layer(37, (x, group) => ownMixed(this.#l37.forwardAttn(x, group.cache[37]!, group.phase, null)), x => this.#l37.feedforward(x));
|
|
646
|
+
scope.layer(38, (x, group) => ownMixed(this.#l38.forwardAttn(x, group.cache[38]!, group.phase, null)), x => this.#l38.feedforward(x));
|
|
647
|
+
scope.layer(39, (x, group) => ownMixed(this.#l39.forwardAttn(x, group.cache[39]!, group.phase, null)), x => this.#l39.feedforward(x));
|
|
648
|
+
scope.layer(40, (x, group) => ownMixed(this.#l40.forwardAttn(x, group.cache[40]!, group.phase, null)), x => this.#l40.feedforward(x));
|
|
649
|
+
scope.layer(41, (x, group) => ownMixed(this.#l41.forwardAttn(x, group.cache[41]!, group.phase, null)), x => this.#l41.feedforward(x));
|
|
650
|
+
scope.layer(42, (x, group) => ownMixed(this.#l42.forwardAttn(x, group.cache[42]!, group.phase, null)), x => this.#l42.feedforward(x));
|
|
651
|
+
scope.layer(43, (x, group) => ownMixed(this.#l43.forwardAttn(x, group.cache[43]!, group.phase, null)), x => this.#l43.feedforward(x));
|
|
652
|
+
scope.layer(44, (x, group) => ownMixed(this.#l44.forwardAttn(x, group.cache[44]!, group.phase, null)), x => this.#l44.feedforward(x));
|
|
653
|
+
scope.layer(45, (x, group) => ownMixed(this.#l45.forwardAttn(x, group.cache[45]!, group.phase, null)), x => this.#l45.feedforward(x));
|
|
654
|
+
scope.layer(46, (x, group) => ownMixed(this.#l46.forwardAttn(x, group.cache[46]!, group.phase, null)), x => this.#l46.feedforward(x));
|
|
655
|
+
scope.layer(47, (x, group) => ownMixed(this.#l47.forwardAttn(x, group.cache[47]!, group.phase, null)), x => this.#l47.feedforward(x));
|
|
656
|
+
return scope.finish(48, this.finalNorm);
|
|
657
|
+
};
|
|
658
|
+
#embedTokens(ids: MlxArray): MlxArray { const hidden = this.embed.encode(ids); return disposing(hidden, ops.mulScalar(hidden, this.embedScale)); }
|
|
659
|
+
loraTargets() { return denseLoraTargets(this.#parts); }
|
|
660
|
+
materializeGraphConstants(): void { ops.evalAll(this.#constants.borrow()); }
|
|
661
|
+
dispose(): void { this.#constants.close(); }
|
|
662
|
+
bindMediaInput(input: Vision) { return bindGemma4MediaInput(this, input); }
|
|
663
|
+
mediaEncoders(modelDir: string, probes: MediaSidecarProbes) { return gemma4MediaEncoders(this, modelDir, probes); }
|
|
664
|
+
draftTarget(caches: Cache[]) { return gemma4DraftTarget(this, caches); }
|
|
665
|
+
logitsFromHidden(hidden: MlxArray): MlxArray { return this.#head(hidden); }
|
|
666
|
+
readonly mixedSeparate = Object.freeze({
|
|
667
|
+
decode: Object.freeze([{ from: 1, to: Infinity, operation: (group: MlxPhaseGroup) => this.#decode(group.ids, group.state, group.capture) }]),
|
|
668
|
+
window: Object.freeze([{ from: 1, to: Infinity, operation: (group: MlxPhaseGroup) => this.#window(group.ids, group.state, group.capture) }]),
|
|
669
|
+
verify: Object.freeze([{ from: 1, to: Infinity, operation: (group: MlxPhaseGroup) => this.#window(group.ids, group.state, group.capture) }]),
|
|
670
|
+
});
|
|
671
|
+
readonly sequence = Object.freeze([{ from: 1, to: Infinity, operation: (ids: MlxArray, caches: Cache[]) => this.#window(ids, caches, null) }]);
|
|
672
|
+
sequenceHidden(ids: MlxArray, caches: Cache[], _rows: number): MlxArray { return this.#window(ids, caches, null); }
|
|
673
|
+
|
|
674
|
+
readonly mediaPrefill = Object.freeze([{ from: 1, to: Infinity, operation: (embeds: MlxArray, caches: Cache[], bidir: MlxArray | null, ids: MlxArray, multimodal: MlxArray | null) => writtenMedia(this.embedScale, (hidden, cache, phase, tokens) => this.#windowHidden(hidden, cache, phase, tokens, null), embeds, caches, bidir, ids) }]);
|
|
675
|
+
prefillEmbeddings(embeds: MlxArray, caches: Cache[], bidir: MlxArray | null, ids: MlxArray, multimodal: MlxArray | null = null): MlxArray { return this.mediaPrefill[0]!.operation(embeds, caches, bidir, ids, multimodal); }
|
|
676
|
+
}
|
|
677
|
+
import { writtenMedia, writtenInputMedia } from "./written-input";
|