Alignment Losses¶
xaytune supports six alignment methods. Each has a dedicated loss function and can be selected via create_alignment_loss_fn().
| Method | Function | Paper |
|---|---|---|
| DPO | dpo_loss |
Rafailov et al., 2023 |
| SimPO | simpo_loss |
Meng et al., 2024 |
| ORPO | orpo_loss |
Hong et al., 2024 |
| GRPO | grpo_loss |
Shao et al., 2024 |
| PPO | ppo_clip_loss |
Schulman et al., 2017 |
| REINFORCE | reinforce_loss |
Williams, 1992 |
Loss Dispatch¶
create_alignment_loss_fn(*, method, ref_model=None, beta=0.1, kl_coeff=0.04, lambda_weight=1.0, gamma=0.5, clip_eps=0.2)
¶
Create a loss function for the given alignment method.
Returns a callable (model, batch, outputs) -> loss that handles
forward passes on chosen/rejected pairs and reference model inference.
Source code in xaytune/recipes/align/loss_dispatch.py
is_alignment_method(method)
¶
DPO¶
dpo_loss(*, policy_chosen_logps, policy_rejected_logps, ref_chosen_logps, ref_rejected_logps, beta=0.1)
¶
Compute Direct Preference Optimization loss (Rafailov et al., 2023).
Source code in xaytune/recipes/align/dpo.py
SimPO¶
simpo_loss(*, policy_chosen_logps, policy_rejected_logps, chosen_lengths, rejected_lengths, beta=2.0, gamma=0.5)
¶
Compute Simple Preference Optimization loss (Meng et al., 2024).
Source code in xaytune/recipes/align/simpo.py
ORPO¶
orpo_loss(*, sft_loss, policy_chosen_logps, policy_rejected_logps, lambda_weight=1.0)
¶
Compute Odds Ratio Preference Optimization loss (Hong et al., 2024).
Source code in xaytune/recipes/align/orpo.py
GRPO¶
grpo_loss(*, logprobs, ref_logprobs=None, advantages, kl_coeff=0.04)
¶
Compute Group Relative Policy Optimization loss (Shao et al., 2024).
Source code in xaytune/recipes/align/grpo.py
compute_group_advantages(rewards)
¶
Normalize rewards to zero-mean unit-variance advantages.
Source code in xaytune/recipes/align/grpo.py
PPO / REINFORCE¶
ppo_clip_loss(*, logprobs, old_logprobs, advantages, clip_eps=0.2)
¶
Compute the clipped surrogate policy gradient objective.
This implements only the clipped loss term from PPO (Schulman et al., 2017). It does NOT include rollout buffers, GAE, value model training, or multiple optimization epochs. See module docstring for details.
Source code in xaytune/recipes/align/ppo.py
ppo_value_loss(*, values, returns)
¶
Compute value function MSE loss (used alongside the clipped policy gradient).
reinforce_loss(*, logprobs, advantages)
¶
Log-Probabilities¶
get_per_token_logps(logits, labels)
¶
Compute per-token log probabilities from logits and label ids.
Source code in xaytune/recipes/align/logprobs.py
get_sequence_logps(logits, labels, mask=None, prompt_length=0)
¶
Sum per-token log probabilities into a sequence-level log probability.
When prompt_length is provided, tokens before that position are
excluded from the sum so only response tokens contribute.
Source code in xaytune/recipes/align/logprobs.py
get_model_logps(model, input_ids, attention_mask=None, labels=None)
¶
Run a forward pass and return sequence log probabilities (no grad).
Source code in xaytune/recipes/align/logprobs.py
Rewards¶
default_reward(prompt, response)
¶
length_penalty_reward(prompt, response, *, target_length=200, penalty_scale=0.001)
¶
Penalize responses that deviate from target_length characters.
Source code in xaytune/recipes/align/rewards.py
format_check_reward(prompt, response, *, required_markers=None)
¶
Reward based on the fraction of required_markers present in the response.
Source code in xaytune/recipes/align/rewards.py
composite_reward(prompt, response, *, reward_names=None, weights=None)
¶
Weighted combination of multiple registered reward functions.
Source code in xaytune/recipes/align/rewards.py
Agent Rewards¶
Reward functions for agent alignment with GRPO/PPO. Score agent responses based on tool usage quality, task completion, and efficiency. All rewards use <tool_call> tag parsing with pluggable custom parsers.
# In training config:
online_rl:
reward_name: agent_composite
reward_kwargs:
expected_tools: ["search", "calculator"]
success_markers: ["Done"]
max_steps: 5
tool_use_quality_reward(prompt, response, *, expected_tools=None, required_args=None, parser=None)
¶
Reward based on using the expected tools with required arguments.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prompt
|
str
|
The input prompt |
required |
response
|
str
|
The agent's response |
required |
expected_tools
|
list[str] | None
|
List of tool names that should be used |
None
|
required_args
|
dict[str, list[str]] | None
|
Dict mapping tool names to lists of required argument names |
None
|
parser
|
Callable | None
|
Optional custom parser |
None
|
Returns:
| Type | Description |
|---|---|
float
|
Score from 0.0 to 1.0 |
Source code in xaytune/recipes/align/agent_rewards.py
task_completion_reward(prompt, response, *, success_markers=None, failure_markers=None, parser=None)
¶
Reward based on task completion indicators.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prompt
|
str
|
The input prompt |
required |
response
|
str
|
The agent's response |
required |
success_markers
|
list[str] | None
|
Phrases indicating successful completion |
None
|
failure_markers
|
list[str] | None
|
Phrases indicating failure |
None
|
parser
|
Callable | None
|
Optional custom parser (not used here) |
None
|
Returns:
| Type | Description |
|---|---|
float
|
Score from 0.0 to 1.0 |
Source code in xaytune/recipes/align/agent_rewards.py
efficiency_reward(prompt, response, *, max_steps=10, optimal_steps=None, parser=None)
¶
Reward based on efficiency (fewer tool calls is better).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
prompt
|
str
|
The input prompt |
required |
response
|
str
|
The agent's response |
required |
max_steps
|
int
|
Maximum acceptable number of tool calls |
10
|
optimal_steps
|
int | None
|
Optimal number of tool calls (if known) |
None
|
parser
|
Callable | None
|
Optional custom parser |
None
|
Returns:
| Type | Description |
|---|---|
float
|
Score from 0.0 to 1.0 |
Source code in xaytune/recipes/align/agent_rewards.py
agent_composite_reward(prompt, response, *, quality_weight=0.4, completion_weight=0.4, efficiency_weight=0.2, parser=None, expected_tools=None, required_args=None, success_markers=None, failure_markers=None, max_steps=10, optimal_steps=None)
¶
Weighted combination of tool_use_quality, task_completion, and efficiency.
Source code in xaytune/recipes/align/agent_rewards.py
parse_tool_calls(text, parser=None)
¶
Parse tool calls from text containing
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text
|
str
|
Text potentially containing tool calls |
required |
parser
|
Callable[[str], list[ParsedToolCall]] | None
|
Optional custom parser function |
None
|
Returns:
| Type | Description |
|---|---|
list[ParsedToolCall]
|
List of ParsedToolCall objects |
Source code in xaytune/recipes/align/agent_rewards.py
ParsedToolCall(name, arguments)
dataclass
¶
Represents a parsed tool call from agent output.