{"record":{"id":"c277e05b6f6ffdfb","repo":"microsoft/VibeVoice","slug":"unsupported-norm-type-layernorm","errorCode":null,"errorMessage":"Unsupported norm type: {layernorm}","messagePattern":"Unsupported norm type: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"vibevoice/modular/modular_vibevoice_tokenizer.py","lineNumber":740,"sourceCode":"        norm = getattr(config, \"norm\", \"none\")\n        norm_params = getattr(config, \"norm_params\", {})\n        pad_mode = getattr(config, \"pad_mode\", \"reflect\")\n        bias = getattr(config, \"bias\", True)\n        layernorm = getattr(config, \"layernorm\", \"LN\")\n        layernorm_eps = getattr(config, \"layernorm_eps\", 1e-6)\n        layernorm_elementwise_affine = getattr(config, \"layernorm_elementwise_affine\", True)\n        drop_path_rate = getattr(config, \"drop_path_rate\", 0.0)\n        mixer_layer = getattr(config, \"mixer_layer\", \"conv\")\n        layer_scale_init_value = getattr(config, \"layer_scale_init_value\", 0)\n        disable_last_norm = getattr(config, \"disable_last_norm\", False)\n        \n        # determine the norm type based on layernorm\n        if layernorm == 'LN':\n            norm_type = ConvLayerNorm\n        elif layernorm == 'RMSNorm':\n            norm_type = partial(ConvRMSNorm, elementwise_affine=layernorm_elementwise_affine)\n        else:\n            raise ValueError(f\"Unsupported norm type: {layernorm}\")\n        \n        # stem and intermediate downsampling conv layers\n        stem = nn.Sequential(\n                SConv1d(self.channels, self.n_filters, kernel_size, norm=norm, norm_kwargs=norm_params, causal=self.causal, pad_mode=pad_mode, bias=bias),\n            )\n        \n        self.downsample_layers = nn.ModuleList()\n        self.downsample_layers.append(stem)\n        for i in range(len(self.ratios)):\n            in_ch = self.n_filters * (2 ** i)\n            out_ch = self.n_filters * (2 ** (i + 1))\n            downsample_layer = nn.Sequential(\n                SConv1d(in_ch, out_ch, kernel_size=self.ratios[i] * 2, stride=self.ratios[i], causal=self.causal, pad_mode=pad_mode, norm=norm, bias=bias)\n            )\n            self.downsample_layers.append(downsample_layer)\n\n        # configure the transformer blocks\n        layer_type = partial(","sourceCodeStart":722,"sourceCodeEnd":758,"githubUrl":"https://github.com/microsoft/VibeVoice/blob/94da20d98b2fa7688e9cbfaf7692ddb4954f7600/vibevoice/modular/modular_vibevoice_tokenizer.py#L722-L758","documentation":"When building the tokenizer encoder stack (modular_vibevoice_tokenizer.py:740), the normalization class is chosen from the config's layernorm field: 'LN' -> ConvLayerNorm, 'RMSNorm' -> ConvRMSNorm; any other string raises ValueError. This guards the norm-type dispatch before any layers are constructed.","triggerScenarios":"Loading/creating a tokenizer config with layernorm set to anything besides exactly 'LN' or 'RMSNorm' — e.g. 'ln', 'layernorm', 'rms', or an empty string.","commonSituations":"Hand-written or converted config JSON using lowercase names; configs from a fork that renamed the field values; casing drift when merging configs programmatically.","solutions":["Set layernorm to 'LN' or 'RMSNorm' (exact casing) in the tokenizer config.","Normalize incoming values: map 'ln'->'LN', 'rmsnorm'->'RMSNorm' before construction.","Prefer loading the config shipped with the checkpoint rather than editing it.","Validate at config-load time: assert layernorm in {'LN','RMSNorm'} with a helpful message."],"exampleFix":"# before\ncfg[\"layernorm\"] = \"ln\"  # -> ValueError: Unsupported norm type: ln\n\n# after\ncfg[\"layernorm\"] = \"LN\"  # exact supported value","handlingStrategy":"validation","validationCode":"SUPPORTED_NORMS = {\"LN\", \"RMSNorm\"}\nln = getattr(config, \"layernorm\", \"LN\")\nassert ln in SUPPORTED_NORMS, f\"layernorm must be one of {SUPPORTED_NORMS}, got {ln!r}\"","typeGuard":"def is_supported_layernorm(v: object) -> bool:\n    return v in (\"LN\", \"RMSNorm\")","tryCatchPattern":null,"preventionTips":["Use exact casing 'LN' / 'RMSNorm'","Normalize lowercase input from user configs before construction","Lint tokenizer configs in CI"],"tags":["tokenizer","layernorm","configuration","valueerror"],"backgroundTag":null,"analyzedSha":"94da20d98b2fa7688e9cbfaf7692ddb4954f7600","analyzedAt":"2026-08-15T04:12:07.418Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}