""" User-defined KTO strategies """ # pylint: disable=duplicate-code def default(cfg, dataset_idx=0, **kwargs): # pylint: disable=unused-argument ds_cfg = cfg["datasets"][dataset_idx]["type"] if not isinstance(ds_cfg, dict): raise ValueError( f"User-defined dataset type must be a dictionary. Got: {ds_cfg}" ) field_prompt = ds_cfg.get("field_prompt", "prompt") field_system = ds_cfg.get("field_system", "system") field_completion = ds_cfg.get("field_completion", "completion") field_label = ds_cfg.get("field_label", "label") prompt_format = ds_cfg.get("prompt_format") if not prompt_format: prompt_format = "{" + field_prompt + "}" completion_format = ds_cfg.get("completion_format") if not completion_format: chosen_format = "{" + field_completion + "}" def transform_fn(sample): if ( "{" + field_system + "}" in prompt_format and field_system in sample and sample[field_system] ): sample["prompt"] = prompt_format.format( system=sample[field_system], prompt=sample[field_prompt] ) else: sample["prompt"] = prompt_format.format(prompt=sample["prompt"]) sample["completion"] = chosen_format.format(chosen=sample[field_completion]) sample["label"] = sample[field_label] return sample return transform_fn