@tryhamster/gerbil 1.10.2 → 1.11.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.
Files changed (49) hide show
  1. package/dist/{architectures-BHkqQ9xp.mjs → architectures-DmZMEFsA.mjs} +652 -9
  2. package/dist/architectures-DmZMEFsA.mjs.map +1 -0
  3. package/dist/cli.mjs +8 -8
  4. package/dist/cli.mjs.map +1 -1
  5. package/dist/frameworks/express.mjs +1 -1
  6. package/dist/frameworks/fastify.mjs +1 -1
  7. package/dist/frameworks/hono.mjs +1 -1
  8. package/dist/frameworks/next.d.mts +2 -2
  9. package/dist/frameworks/next.mjs +1 -1
  10. package/dist/frameworks/trpc.mjs +1 -1
  11. package/dist/{gerbil-PEAdJdsH.d.mts → gerbil-6E0XH_8s.d.mts} +2 -2
  12. package/dist/{gerbil-PEAdJdsH.d.mts.map → gerbil-6E0XH_8s.d.mts.map} +1 -1
  13. package/dist/gerbil-BY5EW-Jk.mjs +4 -0
  14. package/dist/{gerbil-sQ7eqzn3.mjs → gerbil-BpYemKEH.mjs} +5 -4
  15. package/dist/{gerbil-sQ7eqzn3.mjs.map → gerbil-BpYemKEH.mjs.map} +1 -1
  16. package/dist/gpu/hooks.d.mts +1 -1
  17. package/dist/gpu/index.d.mts +1 -1
  18. package/dist/gpu/index.mjs +3 -3
  19. package/dist/{gpu-Ps1eQaXG.mjs → gpu-CzgbyVeq.mjs} +15 -636
  20. package/dist/gpu-CzgbyVeq.mjs.map +1 -0
  21. package/dist/{index-CJux7zbV.d.mts → index-DyqcKFfQ.d.mts} +13 -7
  22. package/dist/{index-CJux7zbV.d.mts.map → index-DyqcKFfQ.d.mts.map} +1 -1
  23. package/dist/index.d.mts +2 -2
  24. package/dist/index.mjs +5 -5
  25. package/dist/integrations/ai-sdk.mjs +1 -1
  26. package/dist/integrations/langchain.mjs +1 -1
  27. package/dist/integrations/llamaindex.mjs +1 -1
  28. package/dist/integrations/mcp.d.mts +2 -2
  29. package/dist/integrations/mcp.mjs +4 -4
  30. package/dist/{mcp-BX-ryGGJ.mjs → mcp-DSpjqWZC.mjs} +3 -3
  31. package/dist/{mcp-BX-ryGGJ.mjs.map → mcp-DSpjqWZC.mjs.map} +1 -1
  32. package/dist/moonshine-stt-CcVt4Vdd.mjs +4 -0
  33. package/dist/{moonshine-stt-BKeD6OYF.mjs → moonshine-stt-CgDXoLFd.mjs} +2 -2
  34. package/dist/{moonshine-stt-BKeD6OYF.mjs.map → moonshine-stt-CgDXoLFd.mjs.map} +1 -1
  35. package/dist/{one-liner-m6NjYWMg.mjs → one-liner-BgNDxJSJ.mjs} +2 -2
  36. package/dist/{one-liner-m6NjYWMg.mjs.map → one-liner-BgNDxJSJ.mjs.map} +1 -1
  37. package/dist/repl-DSK2hDzu.mjs +9 -0
  38. package/dist/skills/index.d.mts +15 -15
  39. package/dist/skills/index.d.mts.map +1 -1
  40. package/dist/skills/index.mjs +3 -3
  41. package/dist/{skills-DZ5OITy0.mjs → skills-Cd75ZGew.mjs} +2 -2
  42. package/dist/{skills-DZ5OITy0.mjs.map → skills-Cd75ZGew.mjs.map} +1 -1
  43. package/dist/tune/index.mjs +1 -1
  44. package/package.json +1 -1
  45. package/dist/architectures-BHkqQ9xp.mjs.map +0 -1
  46. package/dist/gerbil-IqsK32DM.mjs +0 -4
  47. package/dist/gpu-Ps1eQaXG.mjs.map +0 -1
  48. package/dist/moonshine-stt-DKC0PHF_.mjs +0 -4
  49. package/dist/repl-hN4jSHrb.mjs +0 -9
@@ -1,6 +1,6 @@
1
1
  import { i as resolveDefaultRepo, n as OUTETTS_ASSETS, r as OUTETTS_PRESET_VOICES, t as DEFAULT_MODELS } from "./defaults-C_bJK9zs.mjs";
2
- import { E as GEMMA4_VIS_KEYS, S as DEFAULT_GROUP_SIZE, T as DTYPE_BYTES, _ as kaniCosTensor, c as KANI_END_OF_HUMAN, d as buildKaniLayerCosSin, f as computeKaniPositions, g as kaniAttentionLayerIndices, h as generateNanoCodecDecoderGraph, l as KANI_START_OF_HUMAN, m as generateKaniTtsGraph, u as audioTokensToCodes, v as kaniLayerAlpha, w as CANONICAL_KEYS, x as parseKaniConfig, y as kaniSinTensor } from "./architectures-BHkqQ9xp.mjs";
3
- import { C as destroyBuffers, E as verifyGPU, S as createUniformBuffer, T as initGPU, _ as KERNEL_REGISTRY, a as loadModel, b as createBindGroup, c as loadParlerTTS, d as remapPrunedToken, g as Executor, h as fetchAdapter, i as loadKaniTTS, l as quantizeBackboneInt4, m as buildLoRADeltas, r as createKeyMapperForArch, s as loadOuteTTS, u as quantizeKaniBackbone, v as MATMUL_BIAS_F16C_SPEC, w as getOrCreatePipeline, x as createStorageBuffer, y as clearPipelineCache } from "./moonshine-stt-BKeD6OYF.mjs";
2
+ import { A as kaniSinTensor, C as computeKaniPositions, D as kaniAttentionLayerIndices, E as generateNanoCodecDecoderGraph, F as CANONICAL_KEYS, I as DTYPE_BYTES, L as GEMMA4_VIS_KEYS, M as parseKaniConfig, N as DEFAULT_GROUP_SIZE, O as kaniCosTensor, S as buildKaniLayerCosSin, T as generateKaniTtsGraph, a as PARLER_DAC_LATENT_DIM, b as KANI_START_OF_HUMAN, c as PARLER_SAMPLE_RATE, d as generateParlerEncoderGraph, f as parseParlerConfig, i as PARLER_DAC_DECODER_DIM, k as kaniLayerAlpha, l as buildT5RelativeBias, o as PARLER_DECODER_RATES, p as revertDelayPattern, r as PARLER_BOS_TOKEN_ID, s as PARLER_EOS_TOKEN_ID, u as generateParlerDecoderGraph, x as audioTokensToCodes, y as KANI_END_OF_HUMAN } from "./architectures-DmZMEFsA.mjs";
3
+ import { C as destroyBuffers, E as verifyGPU, S as createUniformBuffer, T as initGPU, _ as KERNEL_REGISTRY, a as loadModel, b as createBindGroup, c as loadParlerTTS, d as remapPrunedToken, g as Executor, h as fetchAdapter, i as loadKaniTTS, l as quantizeBackboneInt4, m as buildLoRADeltas, r as createKeyMapperForArch, s as loadOuteTTS, u as quantizeKaniBackbone, v as MATMUL_BIAS_F16C_SPEC, w as getOrCreatePipeline, x as createStorageBuffer, y as clearPipelineCache } from "./moonshine-stt-CgDXoLFd.mjs";
4
4
 
5
5
  //#region src/gpu/architectures/gemma4_vision.ts
6
6
  /**
@@ -3266,633 +3266,6 @@ var OuteTTS = class OuteTTS {
3266
3266
  }
3267
3267
  };
3268
3268
 
3269
- //#endregion
3270
- //#region src/gpu/architectures/parler.ts
3271
- const PARLER_SAMPLE_RATE = 44100;
3272
- const PARLER_NUM_CODEBOOKS = 9;
3273
- const PARLER_DECODER_RATES = [
3274
- 8,
3275
- 8,
3276
- 4,
3277
- 2
3278
- ];
3279
- const PARLER_DAC_LATENT_DIM = 1024;
3280
- const PARLER_DAC_DECODER_DIM = 1536;
3281
- /** Decoder audio-vocab: 1024 codes + eos(1024)+bos(1025)+pad(1024); lm_head vocab. */
3282
- const PARLER_AUDIO_VOCAB = 1088;
3283
- const PARLER_BOS_TOKEN_ID = 1025;
3284
- const PARLER_EOS_TOKEN_ID = 1024;
3285
- const PARLER_PAD_TOKEN_ID = 1024;
3286
- const CAPS = {
3287
- text: true,
3288
- vision: false,
3289
- moe: false
3290
- };
3291
- /** Pull Parler dims from the (nested) HF config. */
3292
- function parseParlerConfig(raw) {
3293
- const te = raw.text_encoder ?? {};
3294
- const dec = raw.decoder ?? {};
3295
- const enc_heads = te.num_heads ?? 16;
3296
- const enc_d_model = te.d_model ?? 1024;
3297
- const dec_heads = dec.num_attention_heads ?? 16;
3298
- return {
3299
- enc_d_model,
3300
- enc_layers: te.num_layers ?? 24,
3301
- enc_heads,
3302
- enc_d_kv: te.d_kv ?? Math.floor(enc_d_model / enc_heads),
3303
- enc_d_ff: te.d_ff ?? 2816,
3304
- enc_vocab: te.vocab_size ?? 32128,
3305
- rel_num_buckets: te.relative_attention_num_buckets ?? 32,
3306
- rel_max_distance: te.relative_attention_max_distance ?? 128,
3307
- ln_eps: te.layer_norm_epsilon ?? 1e-6,
3308
- dec_hidden: dec.hidden_size ?? 1024,
3309
- dec_layers: dec.num_hidden_layers ?? 24,
3310
- dec_heads,
3311
- dec_kv_heads: dec.num_key_value_heads ?? dec_heads,
3312
- dec_ffn: dec.ffn_dim ?? 4096,
3313
- num_codebooks: dec.num_codebooks ?? PARLER_NUM_CODEBOOKS,
3314
- audio_vocab: dec.vocab_size ?? PARLER_AUDIO_VOCAB,
3315
- embed_vocab: (dec.vocab_size ?? PARLER_AUDIO_VOCAB) + 1,
3316
- max_position: dec.max_position_embeddings ?? 4096,
3317
- bos_token_id: dec.bos_token_id ?? PARLER_BOS_TOKEN_ID,
3318
- eos_token_id: dec.eos_token_id ?? PARLER_EOS_TOKEN_ID,
3319
- pad_token_id: dec.pad_token_id ?? PARLER_PAD_TOKEN_ID
3320
- };
3321
- }
3322
- function baseConfig(c, hidden, heads, layers) {
3323
- return {
3324
- hidden_size: hidden,
3325
- num_layers: layers,
3326
- num_heads: heads,
3327
- num_kv_heads: heads,
3328
- head_dim: Math.floor(hidden / heads),
3329
- intermediate_size: c.dec_ffn,
3330
- vocab_size: c.audio_vocab,
3331
- context_length: c.max_position,
3332
- rms_norm_eps: c.ln_eps,
3333
- norm_type: "layernorm",
3334
- rope_base: 0,
3335
- rope_dim: 0,
3336
- kv_layout: "LHSd",
3337
- is_moe: false,
3338
- has_vision_tower: false
3339
- };
3340
- }
3341
- /**
3342
- * T5's bidirectional relative-position bucket (verbatim port of
3343
- * transformers' T5Attention._relative_position_bucket, bidirectional=True).
3344
- * Maps a signed relative position (key − query) to a bucket id in [0, num_buckets).
3345
- */
3346
- function relativePositionBucket(relativePosition, numBuckets, maxDistance) {
3347
- let bucket = 0;
3348
- let n = relativePosition;
3349
- const halfBuckets = Math.floor(numBuckets / 2);
3350
- if (n > 0) bucket += halfBuckets;
3351
- else n = -n;
3352
- const maxExact = Math.floor(halfBuckets / 2);
3353
- const isSmall = n < maxExact;
3354
- let largeVal = maxExact + Math.floor(Math.log(n / maxExact) / Math.log(maxDistance / maxExact) * (halfBuckets - maxExact));
3355
- largeVal = Math.min(largeVal, halfBuckets - 1);
3356
- bucket += isSmall ? n : largeVal;
3357
- return bucket;
3358
- }
3359
- /**
3360
- * Build the dense per-head relative-position bias B[head, q, k] = bias_table[bucket(k-q), head]
3361
- * for a length-S encoder sequence. `biasTable` is the learned
3362
- * relative_attention_bias.weight, row-major [num_buckets, num_heads].
3363
- * Returns a flat Float32Array of length num_heads*S*S (head-major, then q, then k).
3364
- */
3365
- function buildT5RelativeBias(biasTable, numBuckets, maxDistance, numHeads, S) {
3366
- const out = new Float32Array(numHeads * S * S);
3367
- const buckets = new Int32Array(S * S);
3368
- for (let q = 0; q < S; q++) for (let k = 0; k < S; k++) buckets[q * S + k] = relativePositionBucket(k - q, numBuckets, maxDistance);
3369
- for (let h = 0; h < numHeads; h++) {
3370
- const headBase = h * S * S;
3371
- for (let q = 0; q < S; q++) for (let k = 0; k < S; k++) {
3372
- const bucket = buckets[q * S + k];
3373
- out[headBase + q * S + k] = biasTable[bucket * numHeads + h];
3374
- }
3375
- }
3376
- return out;
3377
- }
3378
- /**
3379
- * Build the T5 encoder graph for a concrete description length S. The relative
3380
- * bias `t5_rel_bias` enters as a host-written activation [num_heads, S, S]. Like
3381
- * Moonshine, the graph also pre-projects encoder_out through every decoder layer's
3382
- * encoder_attn.k/v_proj → enc_k_layer{i}/enc_v_layer{i} (frozen cross-attn K/V).
3383
- */
3384
- function generateParlerEncoderGraph(raw, sDesc) {
3385
- const c = parseParlerConfig(raw);
3386
- const H = c.enc_d_model;
3387
- const innerDim = c.enc_heads * c.enc_d_kv;
3388
- const tensors = {};
3389
- const nodes = [];
3390
- const executionOrder = [];
3391
- const addTensor = (t) => {
3392
- tensors[t.name] = t;
3393
- };
3394
- const addNode = (n) => {
3395
- nodes.push(n);
3396
- executionOrder.push(n.id);
3397
- };
3398
- const w = (name, shape) => addTensor({
3399
- name,
3400
- shape,
3401
- dtype: "f32",
3402
- storage: "constant",
3403
- safetensorsKey: name
3404
- });
3405
- const act = (name, shape) => addTensor({
3406
- name,
3407
- shape,
3408
- dtype: "f32",
3409
- storage: "activation"
3410
- });
3411
- const linear = (id, inp, weight, out, K, N) => {
3412
- w(weight, [N, K]);
3413
- addNode({
3414
- id,
3415
- opType: "MatMul",
3416
- inputs: [inp, weight],
3417
- outputs: [out],
3418
- attributes: {
3419
- M_tensor: inp,
3420
- K,
3421
- N
3422
- }
3423
- });
3424
- };
3425
- const t5norm = (id, inp, weight, out) => {
3426
- w(weight, [H]);
3427
- act(out, [sDesc, H]);
3428
- addNode({
3429
- id,
3430
- opType: "RMSNorm",
3431
- inputs: [inp, weight],
3432
- outputs: [out],
3433
- attributes: {
3434
- hidden_size: H,
3435
- eps: c.ln_eps,
3436
- seq_len_tensor: inp
3437
- }
3438
- });
3439
- };
3440
- addTensor({
3441
- name: "input_ids",
3442
- shape: ["T"],
3443
- dtype: "u32",
3444
- storage: "activation"
3445
- });
3446
- addTensor({
3447
- name: "text_encoder.shared.weight",
3448
- shape: [c.enc_vocab, H],
3449
- dtype: "f32",
3450
- storage: "constant",
3451
- safetensorsKey: "text_encoder.shared.weight"
3452
- });
3453
- act("enc_embed", [sDesc, H]);
3454
- addNode({
3455
- id: "enc_embed",
3456
- opType: "Embedding",
3457
- inputs: ["input_ids", "text_encoder.shared.weight"],
3458
- outputs: ["enc_embed"],
3459
- attributes: {
3460
- vocab_size: c.enc_vocab,
3461
- hidden_size: H
3462
- }
3463
- });
3464
- addTensor({
3465
- name: "t5_rel_bias",
3466
- shape: [
3467
- c.enc_heads,
3468
- sDesc,
3469
- sDesc
3470
- ],
3471
- dtype: "f32",
3472
- storage: "activation"
3473
- });
3474
- let prev = "enc_embed";
3475
- for (let i = 0; i < c.enc_layers; i++) {
3476
- const p = `enc${i}`;
3477
- const k = (s) => `text_encoder.encoder.block.${i}.${s}`;
3478
- t5norm(`${p}_norm0`, prev, k("layer.0.layer_norm.weight"), `${p}_n0`);
3479
- act(`${p}_q`, [sDesc, innerDim]);
3480
- act(`${p}_k`, [sDesc, innerDim]);
3481
- act(`${p}_v`, [sDesc, innerDim]);
3482
- linear(`${p}_qp`, `${p}_n0`, k("layer.0.SelfAttention.q.weight"), `${p}_q`, H, innerDim);
3483
- linear(`${p}_kp`, `${p}_n0`, k("layer.0.SelfAttention.k.weight"), `${p}_k`, H, innerDim);
3484
- linear(`${p}_vp`, `${p}_n0`, k("layer.0.SelfAttention.v.weight"), `${p}_v`, H, innerDim);
3485
- act(`${p}_attn`, [sDesc, innerDim]);
3486
- addNode({
3487
- id: `${p}_sa`,
3488
- opType: "T5Attention",
3489
- inputs: [
3490
- `${p}_q`,
3491
- `${p}_k`,
3492
- `${p}_v`,
3493
- "t5_rel_bias"
3494
- ],
3495
- outputs: [`${p}_attn`],
3496
- attributes: {
3497
- num_heads: c.enc_heads,
3498
- head_dim: c.enc_d_kv,
3499
- S: sDesc
3500
- }
3501
- });
3502
- act(`${p}_o`, [sDesc, H]);
3503
- linear(`${p}_op`, `${p}_attn`, k("layer.0.SelfAttention.o.weight"), `${p}_o`, innerDim, H);
3504
- act(`${p}_res0`, [sDesc, H]);
3505
- addNode({
3506
- id: `${p}_add0`,
3507
- opType: "Add",
3508
- inputs: [prev, `${p}_o`],
3509
- outputs: [`${p}_res0`],
3510
- attributes: {
3511
- count_tensor: prev,
3512
- hidden_size: H
3513
- }
3514
- });
3515
- t5norm(`${p}_norm1`, `${p}_res0`, k("layer.1.layer_norm.weight"), `${p}_n1`);
3516
- act(`${p}_wi0`, [sDesc, c.enc_d_ff]);
3517
- act(`${p}_wi1`, [sDesc, c.enc_d_ff]);
3518
- linear(`${p}_wi0p`, `${p}_n1`, k("layer.1.DenseReluDense.wi_0.weight"), `${p}_wi0`, H, c.enc_d_ff);
3519
- linear(`${p}_wi1p`, `${p}_n1`, k("layer.1.DenseReluDense.wi_1.weight"), `${p}_wi1`, H, c.enc_d_ff);
3520
- act(`${p}_gelu`, [sDesc, c.enc_d_ff]);
3521
- addNode({
3522
- id: `${p}_act`,
3523
- opType: "GELU",
3524
- inputs: [`${p}_wi0`],
3525
- outputs: [`${p}_gelu`],
3526
- attributes: { count_tensor: `${p}_wi0` }
3527
- });
3528
- act(`${p}_gated`, [sDesc, c.enc_d_ff]);
3529
- addNode({
3530
- id: `${p}_gate`,
3531
- opType: "Mul",
3532
- inputs: [`${p}_gelu`, `${p}_wi1`],
3533
- outputs: [`${p}_gated`],
3534
- attributes: {
3535
- count_tensor: `${p}_gelu`,
3536
- hidden_size: c.enc_d_ff
3537
- }
3538
- });
3539
- act(`${p}_wo`, [sDesc, H]);
3540
- linear(`${p}_wop`, `${p}_gated`, k("layer.1.DenseReluDense.wo.weight"), `${p}_wo`, c.enc_d_ff, H);
3541
- act(`${p}_res1`, [sDesc, H]);
3542
- addNode({
3543
- id: `${p}_add1`,
3544
- opType: "Add",
3545
- inputs: [`${p}_res0`, `${p}_wo`],
3546
- outputs: [`${p}_res1`],
3547
- attributes: {
3548
- count_tensor: `${p}_res0`,
3549
- hidden_size: H
3550
- }
3551
- });
3552
- prev = `${p}_res1`;
3553
- }
3554
- w("text_encoder.encoder.final_layer_norm.weight", [H]);
3555
- act("encoder_out", [sDesc, H]);
3556
- addNode({
3557
- id: "enc_final_norm",
3558
- opType: "RMSNorm",
3559
- inputs: [prev, "text_encoder.encoder.final_layer_norm.weight"],
3560
- outputs: ["encoder_out"],
3561
- attributes: {
3562
- hidden_size: H,
3563
- eps: c.ln_eps,
3564
- seq_len_tensor: prev
3565
- }
3566
- });
3567
- const outputs = ["encoder_out"];
3568
- for (let i = 0; i < c.dec_layers; i++) {
3569
- const kw = `decoder.model.decoder.layers.${i}.encoder_attn.k_proj.weight`;
3570
- const vw = `decoder.model.decoder.layers.${i}.encoder_attn.v_proj.weight`;
3571
- w(kw, [H, H]);
3572
- w(vw, [H, H]);
3573
- const encK = `enc_k_layer${i}`;
3574
- const encV = `enc_v_layer${i}`;
3575
- act(encK, [sDesc, H]);
3576
- act(encV, [sDesc, H]);
3577
- addNode({
3578
- id: `enc_kproj${i}`,
3579
- opType: "MatMul",
3580
- inputs: ["encoder_out", kw],
3581
- outputs: [encK],
3582
- attributes: {
3583
- M_tensor: "encoder_out",
3584
- K: H,
3585
- N: H
3586
- }
3587
- });
3588
- addNode({
3589
- id: `enc_vproj${i}`,
3590
- opType: "MatMul",
3591
- inputs: ["encoder_out", vw],
3592
- outputs: [encV],
3593
- attributes: {
3594
- M_tensor: "encoder_out",
3595
- K: H,
3596
- N: H
3597
- }
3598
- });
3599
- outputs.push(encK, encV);
3600
- }
3601
- return {
3602
- architecture: "ParlerTextEncoder",
3603
- config: baseConfig(c, H, c.enc_heads, c.enc_layers),
3604
- capabilities: CAPS,
3605
- tensors,
3606
- nodes,
3607
- executionOrder,
3608
- inputs: ["input_ids", "t5_rel_bias"],
3609
- outputs
3610
- };
3611
- }
3612
- /**
3613
- * Build the Parler decoder graph for a single decode step (T=1). The host supplies:
3614
- * - `dec_input_embed` [1, H]: the SUMMED 9-codebook embedding of the current step's
3615
- * codes PLUS the sinusoidal position (computed host-side from embed_tokens +
3616
- * embed_positions, since the 9-way embedding sum is cheap on the host and avoids
3617
- * 9 Embedding ops + an Add tree per step).
3618
- * - `enc_k_layer{i}` / `enc_v_layer{i}`: frozen cross-attn K/V from the encoder.
3619
- * Output: 9 logit rows `logits_cb{c}` [1, audio_vocab] (one per codebook head).
3620
- *
3621
- * The prompt prefix (transcript) is handled by prefilling its embeddings through the
3622
- * SAME graph before audio decode begins (the driver feeds the prompt rows first, with
3623
- * their sinusoidal positions, so the self-attn KV-cache holds [prompt ++ audio]).
3624
- */
3625
- function generateParlerDecoderGraph(raw, sEnc) {
3626
- const c = parseParlerConfig(raw);
3627
- const H = c.dec_hidden;
3628
- const heads = c.dec_heads;
3629
- const headDim = Math.floor(H / heads);
3630
- const tensors = {};
3631
- const nodes = [];
3632
- const executionOrder = [];
3633
- const addTensor = (t) => {
3634
- tensors[t.name] = t;
3635
- };
3636
- const addNode = (n) => {
3637
- nodes.push(n);
3638
- executionOrder.push(n.id);
3639
- };
3640
- const w = (name, shape) => addTensor({
3641
- name,
3642
- shape,
3643
- dtype: "f32",
3644
- storage: "constant",
3645
- safetensorsKey: name
3646
- });
3647
- const act = (name, shape) => addTensor({
3648
- name,
3649
- shape,
3650
- dtype: "f32",
3651
- storage: "activation"
3652
- });
3653
- const linear = (id, inp, weight, out, K, N) => {
3654
- w(weight, [N, K]);
3655
- addNode({
3656
- id,
3657
- opType: "MatMul",
3658
- inputs: [inp, weight],
3659
- outputs: [out],
3660
- attributes: {
3661
- M_tensor: inp,
3662
- K,
3663
- N
3664
- }
3665
- });
3666
- };
3667
- const layernorm = (id, inp, prefix, out) => {
3668
- w(`${prefix}.weight`, [H]);
3669
- w(`${prefix}.bias`, [H]);
3670
- act(out, ["T", H]);
3671
- addNode({
3672
- id,
3673
- opType: "LayerNorm",
3674
- inputs: [
3675
- inp,
3676
- `${prefix}.weight`,
3677
- `${prefix}.bias`
3678
- ],
3679
- outputs: [out],
3680
- attributes: {
3681
- hidden_size: H,
3682
- eps: c.ln_eps,
3683
- seq_len_tensor: inp,
3684
- has_bias: true
3685
- }
3686
- });
3687
- };
3688
- const inputs = ["dec_input_embed"];
3689
- addTensor({
3690
- name: "dec_input_embed",
3691
- shape: ["T", H],
3692
- dtype: "f32",
3693
- storage: "activation"
3694
- });
3695
- let prev = "dec_input_embed";
3696
- for (let i = 0; i < c.dec_layers; i++) {
3697
- const p = `dec${i}`;
3698
- const lk = `decoder.model.decoder.layers.${i}`;
3699
- layernorm(`${p}_n1`, prev, `${lk}.self_attn_layer_norm`, `${p}_ln1`);
3700
- act(`${p}_q`, ["T", H]);
3701
- act(`${p}_k`, ["T", H]);
3702
- act(`${p}_v`, ["T", H]);
3703
- linear(`${p}_qp`, `${p}_ln1`, `${lk}.self_attn.q_proj.weight`, `${p}_q`, H, H);
3704
- linear(`${p}_kp`, `${p}_ln1`, `${lk}.self_attn.k_proj.weight`, `${p}_k`, H, H);
3705
- linear(`${p}_vp`, `${p}_ln1`, `${lk}.self_attn.v_proj.weight`, `${p}_v`, H, H);
3706
- addTensor({
3707
- name: `${p}_kcache`,
3708
- shape: ["L_max", H],
3709
- dtype: "f32",
3710
- storage: "kv_cache"
3711
- });
3712
- addTensor({
3713
- name: `${p}_vcache`,
3714
- shape: ["L_max", H],
3715
- dtype: "f32",
3716
- storage: "kv_cache"
3717
- });
3718
- addNode({
3719
- id: `${p}_kappend`,
3720
- opType: "KVCacheAppend",
3721
- inputs: [`${p}_k`],
3722
- outputs: [`${p}_kcache`],
3723
- attributes: {
3724
- width: H,
3725
- T_tensor: `${p}_k`
3726
- }
3727
- });
3728
- addNode({
3729
- id: `${p}_vappend`,
3730
- opType: "KVCacheAppend",
3731
- inputs: [`${p}_v`],
3732
- outputs: [`${p}_vcache`],
3733
- attributes: {
3734
- width: H,
3735
- T_tensor: `${p}_v`
3736
- }
3737
- });
3738
- act(`${p}_sa`, ["T", H]);
3739
- addNode({
3740
- id: `${p}_self_attn`,
3741
- opType: "Attention",
3742
- inputs: [
3743
- `${p}_q`,
3744
- `${p}_kcache`,
3745
- `${p}_vcache`
3746
- ],
3747
- outputs: [`${p}_sa`],
3748
- attributes: {
3749
- hidden_size: H,
3750
- num_q_heads: heads,
3751
- num_kv_heads: c.dec_kv_heads,
3752
- head_dim: headDim,
3753
- causal: true,
3754
- layer_index: i
3755
- }
3756
- });
3757
- act(`${p}_sao`, ["T", H]);
3758
- linear(`${p}_sap`, `${p}_sa`, `${lk}.self_attn.out_proj.weight`, `${p}_sao`, H, H);
3759
- act(`${p}_res1`, ["T", H]);
3760
- addNode({
3761
- id: `${p}_add1`,
3762
- opType: "Add",
3763
- inputs: [prev, `${p}_sao`],
3764
- outputs: [`${p}_res1`],
3765
- attributes: {
3766
- count_tensor: prev,
3767
- hidden_size: H
3768
- }
3769
- });
3770
- layernorm(`${p}_n2`, `${p}_res1`, `${lk}.encoder_attn_layer_norm`, `${p}_ln2`);
3771
- act(`${p}_cq`, ["T", H]);
3772
- linear(`${p}_cqp`, `${p}_ln2`, `${lk}.encoder_attn.q_proj.weight`, `${p}_cq`, H, H);
3773
- const encK = `enc_k_layer${i}`;
3774
- const encV = `enc_v_layer${i}`;
3775
- act(encK, [sEnc, H]);
3776
- act(encV, [sEnc, H]);
3777
- inputs.push(encK, encV);
3778
- act(`${p}_ca`, ["T", H]);
3779
- addNode({
3780
- id: `${p}_cross_attn`,
3781
- opType: "CrossAttention",
3782
- inputs: [
3783
- `${p}_cq`,
3784
- encK,
3785
- encV
3786
- ],
3787
- outputs: [`${p}_ca`],
3788
- attributes: {
3789
- num_q_heads: heads,
3790
- num_kv_heads: c.dec_kv_heads,
3791
- head_dim: headDim
3792
- }
3793
- });
3794
- act(`${p}_cao`, ["T", H]);
3795
- linear(`${p}_cap`, `${p}_ca`, `${lk}.encoder_attn.out_proj.weight`, `${p}_cao`, H, H);
3796
- act(`${p}_res2`, ["T", H]);
3797
- addNode({
3798
- id: `${p}_add2`,
3799
- opType: "Add",
3800
- inputs: [`${p}_res1`, `${p}_cao`],
3801
- outputs: [`${p}_res2`],
3802
- attributes: {
3803
- count_tensor: `${p}_res1`,
3804
- hidden_size: H
3805
- }
3806
- });
3807
- layernorm(`${p}_n3`, `${p}_res2`, `${lk}.final_layer_norm`, `${p}_ln3`);
3808
- act(`${p}_fc1`, ["T", c.dec_ffn]);
3809
- linear(`${p}_fc1p`, `${p}_ln3`, `${lk}.fc1.weight`, `${p}_fc1`, H, c.dec_ffn);
3810
- act(`${p}_gelu`, ["T", c.dec_ffn]);
3811
- addNode({
3812
- id: `${p}_act`,
3813
- opType: "GeluErf",
3814
- inputs: [`${p}_fc1`],
3815
- outputs: [`${p}_gelu`],
3816
- attributes: { count_tensor: `${p}_fc1` }
3817
- });
3818
- act(`${p}_fc2`, ["T", H]);
3819
- linear(`${p}_fc2p`, `${p}_gelu`, `${lk}.fc2.weight`, `${p}_fc2`, c.dec_ffn, H);
3820
- act(`${p}_res3`, ["T", H]);
3821
- addNode({
3822
- id: `${p}_add3`,
3823
- opType: "Add",
3824
- inputs: [`${p}_res2`, `${p}_fc2`],
3825
- outputs: [`${p}_res3`],
3826
- attributes: {
3827
- count_tensor: `${p}_res2`,
3828
- hidden_size: H
3829
- }
3830
- });
3831
- prev = `${p}_res3`;
3832
- }
3833
- layernorm("dec_final_norm", prev, "decoder.model.decoder.layer_norm", "dec_normed");
3834
- act("dec_last", [1, H]);
3835
- addNode({
3836
- id: "slice_last",
3837
- opType: "SliceLastRow",
3838
- inputs: ["dec_normed"],
3839
- outputs: ["dec_last"],
3840
- attributes: { width: H }
3841
- });
3842
- const outputs = [];
3843
- for (let cb = 0; cb < c.num_codebooks; cb++) {
3844
- const headW = `decoder.lm_heads.${cb}.weight`;
3845
- w(headW, [c.audio_vocab, H]);
3846
- const logit = `logits_cb${cb}`;
3847
- act(logit, [1, c.audio_vocab]);
3848
- addNode({
3849
- id: `lm_head${cb}`,
3850
- opType: "MatMul",
3851
- inputs: ["dec_last", headW],
3852
- outputs: [logit],
3853
- attributes: {
3854
- M_tensor: "dec_last",
3855
- K: H,
3856
- N: c.audio_vocab
3857
- }
3858
- });
3859
- outputs.push(logit);
3860
- }
3861
- return {
3862
- architecture: "ParlerTTSDecoder",
3863
- config: baseConfig(c, H, heads, c.dec_layers),
3864
- capabilities: CAPS,
3865
- tensors,
3866
- nodes,
3867
- executionOrder,
3868
- inputs,
3869
- outputs
3870
- };
3871
- }
3872
- /**
3873
- * Apply the Parler/MusicGen delay pattern to a [numCodebooks, T] code grid produced
3874
- * by AR decode. During generation, codebook `i` is delayed by `i` steps: at decode
3875
- * step t the model emits, for each codebook i, the code for ACOUSTIC frame (t − i).
3876
- * To recover the aligned acoustic grid we simply read codebook i's stream starting
3877
- * at offset i. This returns the de-delayed [numCodebooks, frames] grid (codebook-major)
3878
- * ready for the DAC decoder, where frames = T − (numCodebooks − 1).
3879
- *
3880
- * `delayed` is codebook-major [numCodebooks, T] (delayed[i*T + t]).
3881
- */
3882
- function revertDelayPattern(delayed, numCodebooks, T) {
3883
- const frames = T - (numCodebooks - 1);
3884
- if (frames <= 0) return {
3885
- codes: new Uint32Array(0),
3886
- frames: 0
3887
- };
3888
- const codes = new Uint32Array(numCodebooks * frames);
3889
- for (let i = 0; i < numCodebooks; i++) for (let f = 0; f < frames; f++) codes[i * frames + f] = delayed[i * T + (f + i)];
3890
- return {
3891
- codes,
3892
- frames
3893
- };
3894
- }
3895
-
3896
3269
  //#endregion
3897
3270
  //#region src/gpu/parler-tts.ts
3898
3271
  /**
@@ -3918,12 +3291,18 @@ function revertDelayPattern(delayed, numCodebooks, T) {
3918
3291
  * 4. Revert the delay pattern → [9, frames] code grid → shared DAC decode → 44.1 kHz
3919
3292
  * PCM (tanh applied host-side).
3920
3293
  *
3921
- * STATUS — FIRST IMPLEMENTATION. Typechecks + builds. The end-to-end run is GPU-
3922
- * contended on the dev box, so coherence is pending a final reference check once the
3923
- * GPU frees up (the T5 encoder cosine + a decoder forward should be diffed vs
3924
- * transformers ParlerTTSForConditionalGeneration; see scripts/engine/parler-*-ref.py
3925
- * stubs). The architecture, weight layout, tokenization, delay pattern, and DAC config
3926
- * are all verified against the live config.json + safetensors header.
3294
+ * STATUS — WIRED + RUNS END-TO-END. Typechecks + builds, and the full pipeline runs
3295
+ * on Dawn (node): parler-tts/parler-tts-mini-v1 loads, the T5 encoder runs, the prompt
3296
+ * prefills, the 9-codebook delay-pattern AR loop decodes, and the shared DAC decoder
3297
+ * produces finite, non-silent, in-range 44.1 kHz PCM (verified via
3298
+ * scripts/engine/test-parler-speak.mjs). Reached from the high-level engine through
3299
+ * `g.speak(text, { model: DEFAULT_MODELS.ttsParler, describeVoice })`, which routes
3300
+ * Parler repos here directly (bypassing the single-graph text loader, the same way
3301
+ * MoonshineSTT is reached for STT). A bit-exact reference diff vs transformers
3302
+ * ParlerTTSForConditionalGeneration (T5 encoder cosine + a decoder forward; see
3303
+ * scripts/engine/parler-*-ref.py stubs) remains as a follow-up for numerical parity.
3304
+ * The architecture, weight layout, tokenization, delay pattern, and DAC config are all
3305
+ * verified against the live config.json + safetensors header.
3927
3306
  */
3928
3307
  const MAP_MODE_READ$1 = 1;
3929
3308
  /** Default voice description when the caller doesn't supply one. */
@@ -7343,4 +6722,4 @@ var WebGPUEngine = class WebGPUEngine {
7343
6722
 
7344
6723
  //#endregion
7345
6724
  export { dequantizeGemma4VisionProjection as A, audioTokensToDacCodes as C, parseOuteTtsConfig as D, generateOuteTtsBackboneGraph as E, generateGemma4VisionGraph as M, patchGemma4VisionClips as N, KaniTTS as O, resolveGemma4VisionInfo as P, loadOuteSpeaker as S, generateDacSpeechDecoderGraph as T, smartResize as _, buildGemma4PosEmbeds as a, OuteTTS as b, buildMRoPECosSin as c, buildPositionIds as d, buildRotaryCosSin as f, preprocessImageGemma4 as g, preprocessImage as h, buildGemma4PoolMatrix as i, dequantizeMLXProjection as j, generateQwen3_5VisionGraph as k, buildMRoPEPositionIds as l, mropeFreqDims as m, GEMMA4_IMAGE_PROCESSOR as n, buildGemma4RotaryCosSin as o, buildVisionPositionTensors as p, QWEN3_5_IMAGE_PROCESSOR as r, buildGemma4VisionPositionTensors as s, WebGPUEngine as t, buildPosEmbeds as u, VisionExecutor as v, dacOutputLength as w, buildOutePromptString as x, ParlerTTS as y };
7346
- //# sourceMappingURL=gpu-Ps1eQaXG.mjs.map
6725
+ //# sourceMappingURL=gpu-CzgbyVeq.mjs.map