Source code for slicktune.objectives

"""Training objectives (what the model learns)."""

from __future__ import annotations

from dataclasses import dataclass, field

from slicktune.types import Objective


[docs] @dataclass(frozen=True, kw_only=True) class SFTObjective(Objective): """Supervised fine-tuning on instruction / chat pairs.""" name: str = field(default="sft", init=False)
[docs] def required_columns(self) -> list[str]: """Return required dataset columns for SFT. Returns ------- list[str] Chat ``messages`` column name. """ return ["messages"]
[docs] @dataclass(frozen=True, kw_only=True) class DPOObjective(Objective): """Direct Preference Optimization (TRL :class:`~trl.DPOTrainer`). Parameters ---------- beta : float, optional KL penalty coefficient, by default 0.1. loss_type : str, optional TRL DPO loss type, by default ``\"sigmoid\"``. """ name: str = field(default="dpo", init=False) beta: float = 0.1 loss_type: str = "sigmoid"
[docs] def required_columns(self) -> list[str]: """Return required preference columns. Returns ------- list[str] Preference triple column names. """ return ["prompt", "chosen", "rejected"]
[docs] @dataclass(frozen=True, kw_only=True) class ORPOObjective(Objective): """Odds Ratio Preference Optimization (TRL experimental ORPO). Parameters ---------- beta : float, optional Odds-ratio penalty coefficient, by default 0.1. """ name: str = field(default="orpo", init=False) beta: float = 0.1
[docs] def required_columns(self) -> list[str]: """Return required preference columns. Returns ------- list[str] Preference triple column names (same shape as DPO). """ return ["prompt", "chosen", "rejected"]
[docs] @dataclass(frozen=True, kw_only=True) class KTOObjective(Objective): """Kahneman–Tversky Optimization (TRL :class:`~trl.KTOTrainer`). Parameters ---------- beta : float, optional KL penalty coefficient, by default 0.1. desirable_weight : float, optional Weight for desirable (``label=True``) examples, by default 1.0. undesirable_weight : float, optional Weight for undesirable (``label=False``) examples, by default 1.0. """ name: str = field(default="kto", init=False) beta: float = 0.1 desirable_weight: float = 1.0 undesirable_weight: float = 1.0
[docs] def required_columns(self) -> list[str]: """Return required KTO columns. Returns ------- list[str] Unpaired preference column names. """ return ["prompt", "completion", "label"]
__all__ = ["DPOObjective", "KTOObjective", "ORPOObjective", "SFTObjective"]