{"record":{"id":"314013f6b7ce964c","repo":"sgl-project/sglang","slug":"conflicting-safetensors-lora-alpha-metadata-decl","errorCode":null,"errorMessage":"conflicting safetensors LoRA alpha metadata: {declared}","messagePattern":"conflicting safetensors LoRA alpha metadata: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/pipelines_core/lora/peft_adapter.py","lineNumber":72,"sourceCode":"        if not _has_unambiguous_global_alpha(file):\n            return None\n    declared = []\n    for key in _SAFETENSORS_ALPHA_KEYS:\n        value = metadata.get(key)\n        if value is None:\n            continue\n        try:\n            numeric = float(value)\n        except (TypeError, ValueError) as error:\n            raise ValueError(\n                f\"safetensors metadata {key!r} must be a positive integer\"\n            ) from error\n        if not math.isfinite(numeric) or numeric <= 0 or not numeric.is_integer():\n            raise ValueError(f\"safetensors metadata {key!r} must be a positive integer\")\n        declared.append((key, int(numeric)))\n    values = {value for _, value in declared}\n    if len(values) > 1:\n        raise ValueError(f\"conflicting safetensors LoRA alpha metadata: {declared}\")\n    return declared[0][1] if declared else None\n\n\ndef load_peft_config(weight_path: str) -> dict[str, Any]:\n    path = Path(weight_path).with_name(\"adapter_config.json\")\n    config = {}\n    if path.is_file():\n        with path.open(encoding=\"utf-8\") as file:\n            config = json.load(file)\n    if not isinstance(config, dict):\n        raise ValueError(\"PEFT adapter_config.json must contain a JSON object\")\n    metadata_alpha = _load_safetensors_lora_alpha(weight_path)\n    config_alpha = get_peft_lora_alpha(config)\n    if (\n        metadata_alpha is not None\n        and config_alpha is not None\n        and metadata_alpha != config_alpha\n    ):","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/lora/peft_adapter.py#L54-L90","documentation":"When multiple alpha-like metadata keys in the safetensors header parse successfully but disagree (e.g. 'lora_alpha': 16 and 'ss_network_alpha': 8), _load_safetensors_lora_alpha raises rather than guessing. The declared list of (key, value) pairs is included in the message. This guards against silently applying the wrong LoRA scale.","triggerScenarios":"An adapter file carrying two or more recognized alpha metadata keys with different positive-integer values, loaded via load_peft_config / load_lora_adapter.","commonSituations":"Adapters converted between kohya (ss_network_alpha) and PEFT (lora_alpha) conventions where one key was updated but not the other; merging metadata from multiple sources when packaging an adapter.","solutions":["Open the file's metadata and pick the correct alpha (usually the PEFT 'lora_alpha' if loading as PEFT)","Remove or reconcile the conflicting key so all alpha keys agree","Re-save the safetensors with a single canonical alpha key"],"exampleFix":"# before: metadata {'lora_alpha': '16', 'ss_network_alpha': '8'}\n# after: metadata {'lora_alpha': '16', 'ss_network_alpha': '16'}","handlingStrategy":"validation","validationCode":"with safe_open(path, framework=\"pt\") as f:\n    md = f.metadata() or {}\nalphas = {int(float(v)) for k, v in md.items() if \"alpha\" in k.lower()}\nassert len(alphas) <= 1, f\"conflicting alphas in metadata: {alphas}\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep a single canonical alpha key when repackaging adapters","After format conversion, strip stale alpha keys from the old convention"],"tags":["lora","safetensors","metadata","conflict"],"backgroundTag":"conflicting-model-metadata","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}