{"record":{"id":"7540c900d31febfc","repo":"hiyouga/LlamaFactory","slug":"unknown-loss-type-self-loss-type","errorCode":null,"errorMessage":"Unknown loss type: {self.loss_type}.","messagePattern":"Unknown loss type: (.+?)\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"src/llamafactory/train/dpo/trainer.py","lineNumber":201,"sourceCode":"            -(self.beta * rejected_logratios - delta)\n        )\n        return bco_loss\n\n    def compute_preference_loss(\n        self,\n        policy_chosen_logps: \"torch.Tensor\",\n        policy_rejected_logps: \"torch.Tensor\",\n        reference_chosen_logps: Optional[\"torch.Tensor\"],\n        reference_rejected_logps: Optional[\"torch.Tensor\"],\n    ) -> tuple[\"torch.Tensor\", \"torch.Tensor\", \"torch.Tensor\"]:\n        r\"\"\"Compute loss for preference learning.\"\"\"\n        if not self.finetuning_args.use_ref_model:\n            if self.loss_type == \"orpo\":\n                losses = self.odds_ratio_loss(policy_chosen_logps, policy_rejected_logps)\n            elif self.loss_type == \"simpo\":\n                losses = self.simpo_loss(policy_chosen_logps, policy_rejected_logps)\n            else:\n                raise NotImplementedError(f\"Unknown loss type: {self.loss_type}.\")\n\n            chosen_rewards = self.beta * policy_chosen_logps.to(self.accelerator.device).detach()\n            rejected_rewards = self.beta * policy_rejected_logps.to(self.accelerator.device).detach()\n        else:\n            losses, chosen_rewards, rejected_rewards = self.dpo_loss(\n                policy_chosen_logps, policy_rejected_logps, reference_chosen_logps, reference_rejected_logps\n            )\n\n            if self.bco_gemma > 1e-6:\n                bco_losses = self.bco_loss(\n                    policy_chosen_logps, policy_rejected_logps, reference_chosen_logps, reference_rejected_logps\n                )\n                losses = (losses + bco_losses * self.bco_gemma) / (1.0 + self.bco_gemma)  # re-weight W_p and W_q\n\n        return losses, chosen_rewards, rejected_rewards\n\n    @override\n    def concatenated_forward(","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/hiyouga/LlamaFactory/blob/f28afaf6355af515454dfb16c97d728307c93897/src/llamafactory/train/dpo/trainer.py#L183-L219","documentation":"Error \"Unknown loss type: {self.loss_type}.\" thrown in hiyouga/LlamaFactory.","triggerScenarios":"Thrown at src/llamafactory/train/dpo/trainer.py:201 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set pref_loss to a supported loss type for the chosen reference-model mode (e.g. sigmoid, hinge, ipo, kto_pair with a ref model, or orpo/simpo without a ref model)."],"exampleFix":"pref_loss: sigmoid","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f28afaf6355af515454dfb16c97d728307c93897","analyzedAt":"2026-08-14T21:57:28.298Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}