Spaces:
Running
Running
| // SWA Unmasker (v0.7.0 anti-bullshit pack #1) | |
| // Pure logic — no human-readable strings. Returns structured warnings/reco | |
| // codes + params; main.js does the i18n lookup so EN/ES/FR/ZH all work. | |
| // Conservative multi-hop bound for SWA models. Empirically the effective | |
| // "reasoning" context is roughly 2× the window, NOT window × n_layers | |
| // (which is the theoretical upper bound but breaks down past a few hops). | |
| const SWA_MULTIHOP_FACTOR = 2; | |
| export function unmaskConfig(config) { | |
| const out = { | |
| declaredContext: config.max_position_embeddings ?? null, | |
| effectiveContext: null, | |
| verdict: "honest", | |
| ratio: 1.0, | |
| flags: { | |
| hasSWA: false, | |
| swaWindow: null, | |
| hasYaRN: false, | |
| yarnFactor: null, | |
| yarnOriginal: null, | |
| ropeScalingType: null, | |
| hasGQA: false, | |
| n_kv_heads: config.num_key_value_heads ?? config.num_attention_heads ?? null, | |
| n_attn_heads: config.num_attention_heads ?? null, | |
| n_layers: config.num_hidden_layers ?? null, | |
| rope_theta: config.rope_theta ?? null, | |
| d_head: null, | |
| }, | |
| warnings: [], // each: { code, params } | |
| recoCode: null, | |
| recoParams: {}, | |
| }; | |
| if (out.flags.n_attn_heads && out.flags.n_kv_heads) { | |
| out.flags.hasGQA = out.flags.n_kv_heads < out.flags.n_attn_heads; | |
| } | |
| if (config.hidden_size && out.flags.n_attn_heads) { | |
| out.flags.d_head = config.hidden_size / out.flags.n_attn_heads; | |
| } | |
| // SWA: explicit sliding_window field (Mistral, Gemma-2). Some configs set | |
| // it to null or to max_pe — treat as "no SWA" in those cases. | |
| const sw = config.sliding_window; | |
| if (typeof sw === "number" && sw > 0 | |
| && (!out.declaredContext || sw < out.declaredContext)) { | |
| out.flags.hasSWA = true; | |
| out.flags.swaWindow = sw; | |
| } | |
| // RoPE scaling (YaRN / linear / dynamic NTK). Only flag if factor > 1. | |
| const rs = config.rope_scaling; | |
| if (rs && typeof rs === "object") { | |
| out.flags.ropeScalingType = rs.type ?? rs.rope_type ?? null; | |
| out.flags.yarnFactor = rs.factor ?? null; | |
| out.flags.yarnOriginal = rs.original_max_position_embeddings ?? null; | |
| if (out.flags.ropeScalingType && out.flags.yarnFactor && out.flags.yarnFactor > 1) { | |
| out.flags.hasYaRN = true; | |
| } | |
| } | |
| // Compute verdict | |
| if (out.flags.hasSWA) { | |
| const multiHop = out.flags.swaWindow * SWA_MULTIHOP_FACTOR; | |
| out.effectiveContext = Math.min(multiHop, out.declaredContext ?? multiHop); | |
| out.ratio = out.declaredContext ? out.effectiveContext / out.declaredContext : 1.0; | |
| // <= 0.25 catches the canonical Mistral case (window=4096, declared=32768, ratio=0.25 exact) | |
| out.verdict = out.ratio <= 0.25 ? "severely_inflated" : "inflated"; | |
| out.warnings.push( | |
| { code: "swa_window", params: { window: out.flags.swaWindow } }, | |
| { code: "multihop", params: { multiHop, factor: SWA_MULTIHOP_FACTOR } }, | |
| ); | |
| out.recoCode = out.verdict; | |
| out.recoParams = { | |
| effective: out.effectiveContext, | |
| declared: out.declaredContext, | |
| }; | |
| } else if (out.flags.hasYaRN) { | |
| out.verdict = "yarn_extended"; | |
| const orig = out.flags.yarnOriginal | |
| ?? (out.declaredContext ? out.declaredContext / out.flags.yarnFactor : null); | |
| out.effectiveContext = out.declaredContext; | |
| out.ratio = 1.0; | |
| out.warnings.push( | |
| { code: "yarn", params: { type: out.flags.ropeScalingType, factor: out.flags.yarnFactor, original: orig ? Math.round(orig) : null, declared: out.declaredContext } }, | |
| { code: "yarn_advice", params: {} }, | |
| ); | |
| out.recoCode = "yarn_extended"; | |
| out.recoParams = { declared: out.declaredContext }; | |
| } else if (out.declaredContext) { | |
| out.effectiveContext = out.declaredContext; | |
| out.verdict = "honest"; | |
| out.recoCode = "honest"; | |
| out.recoParams = { declared: out.declaredContext }; | |
| } else { | |
| out.verdict = "unknown"; | |
| out.recoCode = "unknown"; | |
| out.recoParams = {}; | |
| } | |
| // KV-cache compression hint for small d_head + GQA — independent of verdict | |
| if (out.flags.hasGQA && out.flags.d_head && out.flags.d_head < 64) { | |
| out.warnings.push({ code: "gqa_small_dhead", params: { d_head: out.flags.d_head } }); | |
| } | |
| return out; | |
| } | |