{"record":{"id":"ed0bc3a0a2d47405","repo":"hiyouga/LlamaFactory","slug":"please-set-adapter-name-or-path-to-merge-adapters","errorCode":null,"errorMessage":"Please set adapter_name_or_path to merge adapters into base model.","messagePattern":"Please set adapter_name_or_path to merge adapters into base model\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/llamafactory/v1/plugins/model_plugins/peft.py","lineNumber":314,"sourceCode":"    )\n\n    return model\n\n\ndef merge_and_export_model(args: InputArgument = None):\n    model_args, _, _, _ = get_args(args)\n\n    raw_config = model_args.peft_config\n    if raw_config is None:\n        raise ValueError(\"Please specify peft_config to merge and export model.\")\n    if raw_config.name != \"lora\":\n        raise ValueError(\"Currently merge and export model function is only supported for lora.\")\n\n    export_peft_config = PeftPlugin.parse_params(raw_config, LoraParams)\n    if export_peft_config.export_dir is None:\n        raise ValueError(\"Please specify export_dir.\")\n    if export_peft_config.adapter_name_or_path is None:\n        raise ValueError(\"Please set adapter_name_or_path to merge adapters into base model.\")\n\n    logger.info_rank0(\"Loading model for export...\")\n    model_engine = ModelEngine(model_args, is_train=False)\n    model = model_engine.model\n    tokenizer = model_engine.processor\n\n    if export_peft_config.infer_dtype == \"auto\":\n        if model.config.torch_dtype == torch.float32 and torch.cuda.is_bf16_supported():\n            model = model.to(torch.bfloat16)\n            logger.info_rank0(\"Converted model to bfloat16.\")\n    else:\n        target_dtype = getattr(torch, export_peft_config.infer_dtype)\n        model = model.to(target_dtype)\n        logger.info_rank0(f\"Converted model to {export_peft_config.infer_dtype}.\")\n\n    logger.info_rank0(f\"Exporting model to {export_peft_config.export_dir}...\")\n    model.save_pretrained(\n        export_peft_config.export_dir,","sourceCodeStart":296,"sourceCodeEnd":332,"githubUrl":"https://github.com/hiyouga/LlamaFactory/blob/f28afaf6355af515454dfb16c97d728307c93897/src/llamafactory/v1/plugins/model_plugins/peft.py#L296-L332","documentation":"Merging adapters requires loading the LoRA weights onto the base model; merge_and_export_model therefore requires adapter_name_or_path inside the peft_config. Without an adapter there is nothing to merge and the call is rejected. This is separate from training-time adapter paths in model args.","triggerScenarios":"Export config has peft_config.name=lora and export_dir set, but no adapter_name_or_path inside peft_config.","commonSituations":"User lists adapter paths only at the top level (model_args.adapter_name_or_path) or in a training section, not inside the peft_config used for export; or points to an output_dir without choosing the checkpoint subdir.","solutions":["Set adapter_name_or_path inside peft_config to the saved adapter directory (e.g. outputs/sft/checkpoint-500)","Point at the specific checkpoint folder that contains adapter_model.safetensors, not the run root","For multiple adapters, provide the list in the order they were trained"],"exampleFix":"# before\npeft_config:\n  name: lora\n  export_dir: outputs/merged\n\n# after\npeft_config:\n  name: lora\n  export_dir: outputs/merged\n  adapter_name_or_path: outputs/sft/checkpoint-500","handlingStrategy":"validation","validationCode":"pc = raw.get(\"peft_config\", {})\nadapter = pc.get(\"adapter_name_or_path\")\nassert adapter and os.path.isdir(adapter) and any(\"adapter_model\" in f for f in os.listdir(adapter)), \\\n    \"adapter_name_or_path must point at a saved LoRA checkpoint dir\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Point at checkpoint-N dirs containing adapter_model.safetensors","Validate adapter dirs exist before launching long export jobs"],"tags":["peft","export","lora","configuration"],"backgroundTag":null,"analyzedSha":"f28afaf6355af515454dfb16c97d728307c93897","analyzedAt":"2026-08-14T21:57:28.298Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}