SDPO vs GRPO on tau-bench retail with a rubric judge, Qwen3.5-4B LoRA
Stopped before training: literal SDPO reference-loss parity failed on a retained CPU fixture (0.135404 error versus 0.00193417 tolerance), while on-policy full gradients matched. The hypothesis remains untested; resolve the surrogate/lag and zero-gradient acceptance contracts and rerun correctness before any GPU pilot.
Result 2 kept from interim updates
No arm results yet.
- discovery_seconds
- 1.254
- optimizer_updates
- 0
- retail_train_tasks_available
- 500
- retail_test_tasks_available
- 115
- created_training_clients
- 0
- correctness_on_policy_sdpo_loss_absolute_error
- 0.1354
- correctness_on_policy_sdpo_gradient_max_absolute_error
- 0
- correctness_stale_sdpo_gradient_relative_l2_error
- 0.807
- completed_comparison_steps
- 0
- correctness_on_policy_sdpo_loss_acceptance_bound
- 0.001934
- correctness_stale_sdpo_gradient_cosine
- 0.5952
- correctness_cpu_seconds
- 0.03523
Changes from the spec 0 · original hypothesis not tested
Original hypothesis tested: no
Tested instead: Offline CPU float32 synthetic linear-softmax fixture with complete 55-parameter gradients, variable-length token masks and packed/unpacked on-policy and stale-input cases; no Qwen rollout or model update.
Checks · activation unverified · evaluator unknown · feasibility unknown
Parity errors and accepted tolerances
[
{
"check": "baseline_loss",
"measured": {
"cosine_similarity": 1.0,
"max_abs_error": 0.0,
"reference_max_abs": 0.00714289303869009,
"relative_l2_error": 0.0
},
"path": "grpo_judge_advantage_via_custom_path",
"status": "passed",
"tolerance": {
"atol": 0.0001,
"rtol": 0.001
}
},
{
"check": "baseline_gradient",
"measured": {
"cosine_similarity": 0.9999999999999998,
"max_abs_error": 0.0,
"reference_max_abs": 0.0452161505818367,
"relative_l2_error": 0.0
},
"path": "grpo_judge_advantage_via_custom_path",
"status": "passed",
"tolerance": {
"atol": 0.0001,
"min_cosine": 0.999,
"rtol": 0.01
}
},
{
"check": "reference_loss",
"measured": {
"cosine_similarity": 1.0,
"max_abs_error": 0.0,
"reference_max_abs": 0.00714289303869009,
"relative_l2_error": 0.0
},
"path": "grpo_judge_advantage_via_custom_path",
"status": "passed",
"tolerance": {
"atol": 0.0001,
"rtol": 0.001
}
},
{
"check": "reference_gradient",
"measured": {
"cosine_similarity": 0.9999999999999998,
"max_abs_error": 0.0,
"reference_max_abs": 0.0452161505818367,
"relative_l2_error": 0.0
},
"path": "grpo_judge_advantage_via_custom_path",
"status": "passed",
"tolerance": {
"atol": 0.0001,
"min_cosine": 0.999,
"rtol": 0.01
}
},
{
"check": "baseline_loss",
"measured": {
"cosine_similarity": null,
"max_abs_error": 0.0,
"reference_max_abs": 0.0,
"relative_l2_error": null
},
"path": "sdpo_self_teacher_advantage",
"status": "passed",
"tolerance": {
"atol": 0.0001,
"rtol": 0.001
}
},
{
"check": "baseline_gradient",
"measured": {
"cosine_similarity": null,
"max_abs_error": 0.0,
"reference_max_abs": 0.0,
"relative_l2_error": null
},
"path": "sdpo_self_teacher_advantage",
"status": "unverified",
"tolerance": {
"atol": 0.0001,
"min_cosine": 0.999,
"rtol": 0.01
}
},
{
"check": "reference_loss",
"measured": {
"cosine_similarity": -1.0,
"max_abs_error": 0.13540398702025414,
"reference_max_abs": 0.0934171825647354,
"relative_l2_error": 1.4494548358533836
},
"path": "sdpo_self_teacher_advantage",
"status": "failed",
"tolerance": {
"atol": 0.001,
"rtol": 0.01
}
},
{
"check": "reference_gradient",
"measured": {
"cosine_similarity": 1.0,
"max_abs_error": 0.0,
"reference_max_abs": 0.04461999982595444,
"relative_l2_error": 0.0
},
"path": "sdpo_self_teacher_advantage",
"status": "passed",
"tolerance": {
"atol": 0.001,
"min_cosine": 0.995,
"rtol": 0.02
}
}
]- executed_base_model
- not reported needs one of Qwen/Qwen3.5-4B · missing
- sdpo_frac_rollouts_with_nonempty_critique
- not reported needs >= 0.5 and <= 1 · missing
- sdpo_mean_abs_token_advantage_nats
- not reported needs >= 0.01 and <= 2 · missing
- sdpo_p99_abs_token_advantage_nats
- not reported needs <= 10 · missing
- grpo_frac_groups_nonzero_reward_variance
- not reported needs >= 0.25 and <= 1 · missing
- judge_parse_rate
- not reported needs >= 0.95 and <= 1 · missing
- Projected wall time
- unknown
- Projected GPU allocation
- unknown
- Measured feasibility not recorded
Timing, sample counts and allocation evidence
{
"gpu_hours": null,
"known_gpu_hours": 0,
"phases": {},
"problems": [
"Measured feasibility not recorded"
],
"record": null,
"recorded_at": 1793797069.1672747,
"status": "unknown",
"wall_seconds": null
}Spec exp_e2a84210d9
Hypothesis
At equal rollout budget, SDPO using the judge's written critique as teacher context beats GRPO using the same judge's scalar score on tau-bench retail test pass^1 by at least 5 points.
Success criterion
SDPO minus GRPO pass^1 on the 115 tau-bench retail test tasks exceeds 0.05. The lower bound of the paired Hoeffding 95% interval must be above 0.05. A point gain above 0.05 that fails the interval is reported as inconclusive. Per-dimension judge deltas are reported descriptively only.
Method
Baseline
Full spec
{
"activation_gate": {
"applicable": true,
"checks": [
{
"measures": "model name reported by the created training client",
"metric": "executed_base_model",
"one_of": [
"Qwen/Qwen3.5-4B"
]
},
{
"max": 1.0,
"measures": "share of pilot rollouts where the judge returned a non-empty critique used as teacher context",
"metric": "sdpo_frac_rollouts_with_nonempty_critique",
"min": 0.5
},
{
"max": 2.0,
"measures": "mean |teacher_logprob - student_logprob| over agent loss tokens",
"metric": "sdpo_mean_abs_token_advantage_nats",
"min": 0.01
},
{
"max": 10.0,
"measures": "p99 of |teacher_logprob - student_logprob| over agent loss tokens, catching blow-ups from template mismatch",
"metric": "sdpo_p99_abs_token_advantage_nats"
},
{
"max": 1.0,
"measures": "share of task groups whose judge scores are not all equal",
"metric": "grpo_frac_groups_nonzero_reward_variance",
"min": 0.25
},
{
"max": 1.0,
"measures": "share of judge calls returning valid 3-dimension JSON scores",
"metric": "judge_parse_rate",
"min": 0.95
}
],
"reason": "SDPO only acts when the critique-conditioned teacher assigns different logprobs than the student to the student's own tokens. GRPO only acts when judge scores vary within a group. A 2-step pilot of each arm checks both, plus the executed config."
},
"arms": [
{
"advantage": "judge scalar minus group mean",
"lr": 4e-05,
"name": "grpo_seed0",
"seed": 0,
"steps": 20
},
{
"advantage": "self-teacher logprob minus student logprob, critique-conditioned",
"lr": 4e-05,
"name": "sdpo_seed0",
"seed": 0,
"steps": 20
}
],
"base_model": "Qwen/Qwen3.5-4B",
"baseline": "GRPO with the judge's scalar mean-of-rubric reward and a group-mean baseline. It uses the same model, LoRA init, tasks, task order, group size, turn cap, LR, steps, simulator, judge and eval as the treatment.",
"batch_size": 8,
"budget": {
"gpu_hours": 2.0,
"max_wall_minutes": 240
},
"command": "Custom tinker SDK script (client-side custom part = advantage computation only). svc = tinker.ServiceClient(base_url=os.environ['TINKER_BASE_URL']); for arm in ['grpo','sdpo']: tc = svc.create_lora_training_client(base_model='Qwen/Qwen3.5-4B', rank=32, seed=0). sim = judge = svc.create_sampling_client(base_model='Qwen/Qwen3.5-9B'). Tasks come from the pinned tau-bench retail train split: the first 160 in fixed order, 8 per step, identical across arms. Per step: pol = tc.save_weights_and_get_sampling_client(); roll out 4 trajectories per task (max 10 turns, max_tokens 1024 per turn) against the tau-bench retail tools and the simulator. The judge returns JSON {invalid_tool_use, ungrounded_claims, clarification, critique}, and reward = mean of the three scores. GRPO adv = reward - group mean on every agent token. SDPO adv per token = pol.compute_logprobs(critique+best_demo+trajectory)[agent tokens] - sampled logprobs. Then tc.forward_backward(datums, loss_fn='importance_sampling'); tc.optim_step(tinker.AdamParams(learning_rate=4e-5, beta1=0.9, beta2=0.95, eps=1e-8)). Log activation-gate metrics every step. After step 20, run save_weights_for_sampler and evaluate on all 115 retail test tasks at temperature 0 with the tau-bench env reward; also log judge per-dimension scores. Activation-failure plan: first run offline forced checks. Empty critique must give near-zero SDPO advantage, and an injected wrong-answer critique must give nonzero advantage. Gradient checks follow per the correctness preflight. The 2-step pilot is kept as-is; if a gate fails, record a revised spec/deviation before changing the teacher template or turn cap. Gates are never relaxed. Update cap is 20 steps per arm; the wall cap is 240 min total.",
"correctness_preflight": {
"paths": [
{
"baseline_revision": "UNRESOLVED: pin tinker-cookbook commit SHA of stock rl importance_sampling + group-mean advantage",
"id": "grpo_judge_advantage_via_custom_path",
"kind": "loss",
"reference_revision": "UNRESOLVED: same pinned tinker-cookbook SHA (forked baseline must reproduce stock exactly)",
"tolerances": {
"baseline_gradient": {
"atol": 0.0001,
"min_cosine": 0.999,
"rtol": 0.01
},
"baseline_loss": {
"atol": 0.0001,
"rtol": 0.001
},
"reference_gradient": {
"atol": 0.0001,
"min_cosine": 0.999,
"rtol": 0.01
},
"reference_loss": {
"atol": 0.0001,
"rtol": 0.001
}
}
},
{
"baseline_revision": "UNRESOLVED: pinned tinker-cookbook SHA; with teacher context empty the SDPO path must reproduce stock on-policy-distillation zero advantage / stock loss",
"id": "sdpo_self_teacher_advantage",
"kind": "loss",
"reference_revision": "UNRESOLVED: pinned commit of the SDPO authors' reference code for arXiv 2601.20802",
"tolerances": {
"baseline_gradient": {
"atol": 0.0001,
"min_cosine": 0.999,
"rtol": 0.01
},
"baseline_loss": {
"atol": 0.0001,
"rtol": 0.001
},
"reference_gradient": {
"atol": 0.001,
"min_cosine": 0.995,
"rtol": 0.02
},
"reference_loss": {
"atol": 0.001,
"rtol": 0.01
}
}
}
],
"reason": "SDPO is a custom advantage path. The paper digest failed, and no pinned SDPO reference implementation or exact teacher-context and loss form has been established. The required SHAs below must be filled before any training. Until then: no full sweep.",
"required": true,
"status": "unresolved"
},
"dataset": {
"hf_path": null,
"n_examples": 160,
"name": "tau-bench retail (train tasks for RL, test tasks for eval)",
"split": "train"
},
"decision_rule": {
"alpha": 0.05,
"criteria": [
{
"bounds": [
0,
1
],
"id": "primary",
"margin": 0.05,
"metric": "pass_at_1",
"weights": {
"baseline": -1,
"treatment": 1
}
}
],
"estimand": "Difference in tau-bench retail test pass^1 between the SDPO-trained and GRPO-trained Qwen3.5-4B LoRA at step 20, conditional on these checkpoints; larger is better",
"method": "paired_hoeffding",
"seeds": [
0
],
"unit": "fixed_checkpoint_items",
"version": 1
},
"eval": {
"aggregation": null,
"benchmark": "tau-bench retail test (pinned sierra-research/tau-bench release), user simulator = frozen Qwen3.5-9B, temperature 0",
"metric": "pass^1 (fraction of tasks where the environment's final database-state reward = 1)",
"n_examples": 115
},
"experiment_features": {
"adaptive_selection": false,
"checkpoint_restore": false,
"custom_loss": true,
"custom_optimizer": false,
"generated_training_data": false,
"heldout_loss": false,
"learned_generator": false,
"paired_comparison": true,
"paired_training_arms": true,
"warmup_adaptation": false
},
"feasibility_check": {
"gpu_hours": null,
"known_gpu_hours": 0,
"phases": {},
"problems": [
"Measured feasibility not recorded"
],
"status": "unknown",
"wall_seconds": null
},
"feasibility_required": true,
"generation_audit": {
"answer_comparison": "numeric_exact",
"max_eval_overlaps": 0,
"max_label_errors": 0,
"min_sample_size": 100,
"required": false
},
"hypothesis": "At equal rollout budget, SDPO using the judge's written critique as teacher context beats GRPO using the same judge's scalar score on tau-bench retail test pass^1 by at least 5 points.",
"lora_rank": 32,
"max_seq_len": 16384,
"method": "Policy: Qwen/Qwen3.5-4B with a LoRA adapter, acting as the tau-bench retail tool-calling agent. Frozen Qwen/Qwen3.5-9B base sampling clients serve as the tau-bench user simulator and as a rubric judge. The judge scores each finished trajectory 0-1 on three dimensions: invalid tool use, ungrounded claims, and clarifying ambiguous intent. It also writes a short critique. Both arms train from the same fresh LoRA init on the same task order and the same sampled groups per step: 8 train tasks x group 4, at most 10 agent turns. Baseline (GRPO): the advantage is the judge mean score minus the group mean, applied to all agent tokens, using the stock importance_sampling loss. Treatment (SDPO): the same model is re-prompted with the judge critique, plus the best same-group trajectory if its score is at least 0.8, inserted before the original turns. This makes it a self-teacher. Teacher logprobs come from compute_logprobs on the agent's own response tokens. The per-token advantage is teacher_logprob - student_logprob, the reverse-KL distillation used for on-policy distillation in tinker-cookbook, and goes through the same importance_sampling loss. The arms therefore differ only in how token advantages are computed. The SDPO paper's digest failed, so the exact SDPO formulation (teacher context template, any mixing with the outcome reward, clipping) must be confirmed from the paper and a pinned reference implementation before any training run. The correctness preflight is unresolved, so no full sweep runs until it is resolved. tau-bench is taken from the pinned sierra-research/tau-bench GitHub release, not from HF; its retail train split supplies training tasks, and its test split is used only for eval. Primary eval uses tau-bench's own database-state reward, not the judge, to avoid scoring the arms with the training reward. Per-dimension judge scores on the test trajectories are secondary and descriptive. No Spindle fork is needed.",
"optimizer": {
"lr": 4e-05,
"name": "adam"
},
"preflight": {
"probe": "Resolve the correctness preflight SHAs and run its loss and gradient checks first. Then create both arms' training clients exactly as configured (Qwen3.5-4B, rank 32, seed 0, Adam lr 4e-5, betas 0.9/0.95, eps 1e-8). Run one rollout of one train task, one judge call, and one teacher compute_logprobs. Then one forward_backward(importance_sampling) and one optim_step per arm. Confirm the fixed-batch logprobs match across the arms before the update.",
"riskiest_assumption": "The self-teacher (same 4B model conditioned on a 9B judge's critique) produces a meaningful, stable token-level signal on long multi-turn tool-use trajectories within the context limit, and the SDPO form we implement matches the paper.",
"tuning": "Both arms use the same optimizer (Adam) and a single fixed LR of 4e-5, the cookbook LoRA RL default, with no per-arm grid and no adaptive selection, because the budget does not allow one. A clear loss scale mismatch in the pilot (SDPO mean |adv| outside the gate) requires a recorded spec revision, not post-hoc tuning."
},
"primary_endpoint": "tau-bench retail test pass^1 (115 tasks, environment reward, step-20 checkpoints)",
"restoration_preflight": {
"applicable": true,
"fixed_batch_required": true,
"groups": [
{
"arms": [
{
"name": "grpo_seed0",
"optimizer": "adam",
"optimizer_config": {
"beta1": 0.9,
"beta2": 0.95,
"eps": 1e-08,
"learning_rate": 4e-05
}
},
{
"name": "sdpo_seed0",
"optimizer": "adam",
"optimizer_config": {
"beta1": 0.9,
"beta2": 0.95,
"eps": 1e-08,
"learning_rate": 4e-05
}
}
]
}
],
"reason": "Both arms train from a fresh LoRA on the same base. Initial identity must be shown by matching logprobs on a fixed tokenized batch before the first update, and the active Adam config must be verified after creation."
},
"spec_preflight": {
"findings": [],
"status": "passed"
},
"steps": 20,
"success_criterion": "SDPO minus GRPO pass^1 on the 115 tau-bench retail test tasks exceeds 0.05. The lower bound of the paired Hoeffding 95% interval must be above 0.05. A point gain above 0.05 that fails the interval is reported as inconclusive. Per-dimension judge deltas are reported descriptively only.",
"title": "SDPO vs GRPO on tau-bench retail with a rubric judge, Qwen3.5-4B LoRA",
"training_type": "rl"
}Evidence 20
- launch-instructions-ce6b64e8bbf7.md · instructions · 40431 bytes
- launch-instructions.md · instructions · 40431 bytes
- discover.py · script · 1410 bytes
- check_correctness.py · script · 9451 bytes
- build_report.py · script · 16335 bytes
- reference-extracts.py · script · 10550 bytes
- spec.json · effective config · 12829 bytes
- effective-spec-pinned.json · effective config · 12568 bytes
- fixed-fixture.json · effective config · 8848 bytes
- cookbook-distillation-source.py · code revision · 20156 bytes
- code-revisions.json · code revision · 980 bytes
- dataset-discovery.json · code revision · 383 bytes
- reference-notes.md · code revision · 12469 bytes
- discovery.json · metrics · 2754 bytes
- correctness-preflight.json · metrics · 3621 bytes
- correctness-results.json · metrics · 15564 bytes
- full-gradients.json · metrics · 19355 bytes
- validator-stdout.json · metrics · 2547 bytes
- resource-ledger.json · metrics · 529 bytes
- run-report.md · metrics · 4374 bytes
All metrics
- discovery_seconds
- 1.254
- optimizer_updates
- 0
- retail_train_tasks_available
- 500
- retail_test_tasks_available
- 115
- created_training_clients
- 0
- correctness_on_policy_sdpo_loss_absolute_error
- 0.1354
- correctness_on_policy_sdpo_gradient_max_absolute_error
- 0
- correctness_stale_sdpo_gradient_relative_l2_error
- 0.807
- completed_comparison_steps
- 0
- correctness_on_policy_sdpo_loss_acceptance_bound
- 0.001934
- correctness_stale_sdpo_gradient_cosine
- 0.5952
- correctness_cpu_seconds
- 0.03523
Interim updates from Devin (6, first Nov 4, 12:58 UTC)
- instructions · launch-instructions.md sha256 ce6b64e8bbf7
- script · discover.py sha256 b395f48cc050
- script · check_correctness.py sha256 d2c1edd7b28e
- script · build_report.py sha256 92173a7e7a8e
- script · reference-extracts.py sha256 a85127a98335
- effective_config · spec.json sha256 8a18e7a19e69
- effective_config · effective-spec-pinned.json sha256 8b3dbbc28c69
- effective_config · fixed-fixture.json sha256 35ceda61dccc
- effective_config · authors-actor.yaml sha256 38fd7f75508b
- code_revision · cookbook-distillation-source.py sha256 16fb7309b009
- code_revision · code-revisions.json sha256 36a50c43108b
- code_revision · dataset-discovery.json sha256 226f637c482e
- code_revision · reference-notes.md sha256 d481c8a2eae6
- metrics · discovery.json sha256 93a9b1d0d883
- metrics · correctness-preflight.json sha256 e1c4ffb398e8
- metrics · correctness-results.json sha256 94b245f899b7
- metrics · full-gradients.json sha256 e5039176e8b7
- metrics · validator-stdout.json sha256 63cf1500c33b
- metrics · resource-ledger.json sha256 67ccdd29bca1
- metrics · run-report.md sha256 ecb00de8e166
- Nov 4, 13:07 UTC · failed · Stopped before training: literal SDPO reference-loss parity failed on a retained CPU fixture (0.135404 error versus 0.00193417 tolerance), while on-policy full gradients matched. The hypothesis remai…
- Nov 4, 13:04 UTC · running · Correctness gate adjudicated as failed; full training prohibited. CPU float32 fixture and full parameter gradients retained, validator exited 1 as expected. Evidence assembly remains.
- Nov 4, 13:02 UTC · running · Instruction integrity verified. Offline necessary-condition correctness fixture blocks training: specified SDPO importance-sampling scalar loss exceeds reference tolerance; on-policy full gradients m…
- Nov 4, 13:01 UTC · running · Both required models are served; pinned data has 500 retail train and 115 test tasks. Checking the specified IS surrogate against the SDPO authors' sampled reverse-KL loss before allocating training …
- Nov 4, 13:00 UTC · running · Spindle serves both required models (Qwen3.5-4B and Qwen3.5-9B); pinned SDPO, cookbook, and tau-bench references. No training clients or optimizer updates yet.
- Nov 4, 12:58 UTC · running · Verified SHA256 and read all 552 launch-instruction lines; resolving pinned algorithm/data references before any training.
Artifacts
- correctness_preflight
- {'required': True, 'paths': [{'id': 'grpo_judge_advantage_via_custom_path', 'fixed_input': {'sha256': '35ceda61dccc81731e96c435d31ae788035c8e00a875820651125d82bd376cc6', 'description': 'fixed-fixture.json: CPU float32 synthetic linear-softmax policy, identical weights, token identities, masks; full parameter gradients. No optimizer or remote execution.'}, 'baseline_revision': '6daabe0838736557f0e802020b710073eb340287', 'reference_revision': '6daabe0838736557f0e802020b710073eb340287', 'implementation_revision': 'd2c1edd7b28edd82aad3a5409ab5cde86c3d6b76d594957071d94bbfd142e513', 'precision': 'CPU torch.float32; no mixed precision; not a Spindle backend parity test', 'normalization': 'sum of masked token losses / 14 loss tokens; no reward mixing; no clipping in specified IS path', 'errors': {'baseline_loss': {'max_abs_error': 0.0, 'reference_max_abs': 0.00714289303869009, 'relative_l2_error': 0.0, 'cosine_similarity': 1.0}, 'baseline_gradient': {'max_abs_error': 0.0, 'reference_max_abs': 0.0452161505818367, 'relative_l2_error': 0.0, 'cosine_similarity': 0.9999999999999998}, 'reference_loss': {'max_abs_error': 0.0, 'reference_max_abs': 0.00714289303869009, 'relative_l2_error': 0.0, 'cosine_similarity': 1.0}, 'reference_gradient': {'max_abs_error': 0.0, 'reference_max_abs': 0.0452161505818367, 'relative_l2_error': 0.0, 'cosine_similarity': 0.9999999999999998}}, 'lr_scaling': [], 'scope': 'Necessary-condition offline test only; cannot certify server precision, init, or optimizer.'}, {'id': 'sdpo_self_teacher_advantage', 'fixed_input': {'sha256': '35ceda61dccc81731e96c435d31ae788035c8e00a875820651125d82bd376cc6', 'description': 'fixed-fixture.json: CPU float32 synthetic linear-softmax policy, identical weights, token identities, masks; full parameter gradients. No optimizer or remote execution.'}, 'baseline_revision': '6daabe0838736557f0e802020b710073eb340287', 'reference_revision': '7c457fc1b1f636ae794eb0362ba37d4743b06fbc', 'implementation_revision': 'd2c1edd7b28edd82aad3a5409ab5cde86c3d6b76d594957071d94bbfd142e513', 'precision': 'CPU torch.float32; no mixed precision; not a Spindle backend parity test', 'normalization': 'sum of masked token losses / 14 loss tokens; no reward mixing; no clipping in specified IS path', 'errors': {'baseline_loss': {'max_abs_error': 0.0, 'reference_max_abs': 0.0, 'relative_l2_error': None, 'cosine_similarity': None}, 'baseline_gradient': {'max_abs_error': 0.0, 'reference_max_abs': 0.0, 'relative_l2_error': None, 'cosine_similarity': None}, 'reference_loss': {'max_abs_error': 0.13540398702025414, 'reference_max_abs': 0.0934171825647354, 'relative_l2_error': 1.4494548358533836, 'cosine_similarity': -1.0}, 'reference_gradient': {'max_abs_error': 0.0, 'reference_max_abs': 0.04461999982595444, 'relative_l2_error': 0.0, 'cosine_similarity': 1.0}}, 'lr_scaling': [], 'scope': 'Necessary-condition offline test only; cannot certify server precision, init, or optimizer.'}]}
- correctness_validation
- {'status': 'failed', 'required': True, 'checks': [{'path': 'grpo_judge_advantage_via_custom_path', 'check': 'baseline_loss', 'status': 'passed', 'tolerance': {'atol': 0.0001, 'rtol': 0.001}, 'measured': {'max_abs_error': 0.0, 'reference_max_abs': 0.00714289303869009, 'relative_l2_error': 0.0, 'cosine_similarity': 1.0}}, {'path': 'grpo_judge_advantage_via_custom_path', 'check': 'baseline_gradient', 'status': 'passed', 'tolerance': {'atol': 0.0001, 'rtol': 0.01, 'min_cosine': 0.999}, 'measured': {'max_abs_error': 0.0, 'reference_max_abs': 0.0452161505818367, 'relative_l2_error': 0.0, 'cosine_similarity': 0.9999999999999998}}, {'path': 'grpo_judge_advantage_via_custom_path', 'check': 'reference_loss', 'status': 'passed', 'tolerance': {'atol': 0.0001, 'rtol': 0.001}, 'measured': {'max_abs_error': 0.0, 'reference_max_abs': 0.00714289303869009, 'relative_l2_error': 0.0, 'cosine_similarity': 1.0}}, {'path': 'grpo_judge_advantage_via_custom_path', 'check': 'reference_gradient', 'status': 'passed', 'tolerance': {'atol': 0.0001, 'rtol': 0.01, 'min_cosine': 0.999}, 'measured': {'max_abs_error': 0.0, 'reference_max_abs': 0.0452161505818367, 'relative_l2_error': 0.0, 'cosine_similarity': 0.9999999999999998}}, {'path': 'sdpo_self_teacher_advantage', 'check': 'baseline_loss', 'status': 'passed', 'tolerance': {'atol': 0.0001, 'rtol': 0.001}, 'measured': {'max_abs_error': 0.0, 'reference_max_abs': 0.0, 'relative_l2_error': None, 'cosine_similarity': None}}, {'path': 'sdpo_self_teacher_advantage', 'check': 'baseline_gradient', 'status': 'unverified', 'tolerance': {'atol': 0.0001, 'rtol': 0.01, 'min_cosine': 0.999}, 'measured': {'max_abs_error': 0.0, 'reference_max_abs': 0.0, 'relative_l2_error': None, 'cosine_similarity': None}}, {'path': 'sdpo_self_teacher_advantage', 'check': 'reference_loss', 'status': 'failed', 'tolerance': {'atol': 0.001, 'rtol': 0.01}, 'measured': {'max_abs_error': 0.13540398702025414, 'reference_max_abs': 0.0934171825647354, 'relative_l2_error': 1.4494548358533836, 'cosine_similarity': -1.0}}, {'path': 'sdpo_self_teacher_advantage', 'check': 'reference_gradient', 'status': 'passed', 'tolerance': {'atol': 0.001, 'rtol': 0.02, 'min_cosine': 0.995}, 'measured': {'max_abs_error': 0.0, 'reference_max_abs': 0.04461999982595444, 'relative_l2_error': 0.0, 'cosine_similarity': 1.0}}], 'reason': 'sdpo_self_teacher_advantage: reference_loss; grpo_judge_advantage_via_custom_path: matching reference_revision; grpo_judge_advantage_via_custom_path: matching baseline_revision; sdpo_self_teacher_advantage: matching reference_revision; sdpo_self_teacher_advantage: matching baseline_revision; sdpo_self_teacher_advantage: baseline_gradient cosine/tolerance', 'evidence_source': 'executor report; remote execution is not attested', 'applicability': 'required', 'reported_verdict': 'inconclusive'}
- decision_validation
- {'status': 'uncertain', 'issues': ['Decision evidence was not recorded.'], 'criteria': [], 'outcome_reason': 'insufficient_evidence', 'unit': 'fixed_checkpoint_items', 'n_seeds': 1, 'alpha': 0.05, 'method': 'paired_hoeffding', 'applicability': {'check': 'decision_rule', 'status': 'required', 'enforce': True, 'reasons': ['experiment_features: paired_comparison is true'], 'features': {'paired_comparison': True, 'adaptive_selection': False}}}
- feasibility
- {'status': 'unknown', 'problems': ['Measured feasibility not recorded'], 'wall_seconds': None, 'gpu_hours': None, 'known_gpu_hours': 0, 'phases': {}, 'record': None, 'recorded_at': 1793797069.1672747}
- feasibility_required
- True
- generation_audit_validation
- {'status': 'not_applicable', 'reasons': ['spec.generation_audit opts out and no feature it covers is true'], 'applicability': {'check': 'generation_audit', 'status': 'not_applicable', 'enforce': False, 'reasons': ['spec.generation_audit opts out and no feature it covers is true'], 'features': {'generated_training_data': False}}}
- launch
- {'experiment_id': 'exp_e2a84210d9', 'context_status': 'snapshotted', 'superseded': False, 'mode': 'ordinary', 'purpose': 'Execute the selected saved experiment version.'}
- launch_instructions
- {'name': 'launch-instructions-ce6b64e8bbf7.md', 'sha256': 'ce6b64e8bbf72916acd8309c1888a1e3dbf86b3c9ed8e0522e26ee5b5b95b935', 'url': 'https://rx.modal.dev/api/runs/run_299304ba85/evidence/ce6b64e8bbf72916acd8309c1888a1e3dbf86b3c9ed8e0522e26ee5b5b95b935'}
- reported_outcome_reason
- incomplete_execution
- reported_verdict
- inconclusive
- restoration_validation
- {'status': 'unverified', 'required': True, 'checks': [{'check': 'format', 'status': 'unverified', 'reason': 'Missing initialization_provenance version 1.'}, {'check': 'grpo_seed0', 'status': 'unverified', 'reason': 'grpo_seed0: missing or duplicate arm evidence.'}, {'check': 'sdpo_seed0', 'status': 'unverified', 'reason': 'sdpo_seed0: missing or duplicate arm evidence.'}], 'reason': 'Missing initialization_provenance version 1.', 'applicability': 'required'}
- slack_started
- True
- verdict_report
- {'margin': 0.05, 'reasoning': 'The specified IS surrogate and the authors sampled reverse-KL surrogate are first-order equivalent on this on-policy fixture but have different scalar values; stale-input gradients also differ. This is a reference/acceptance-contract blocker, not a scientific comparison result. Runtime initialization, optimizer, activation and feasibility remain unverified.'}
Agent trace full trace with commands in Devin ↗
Details
- run
- run_299304ba85
- backend
- Devin
- session
- devin-87f5a13e50c34f97b30ded541c7eeb34
- experiment
- exp_e2a84210d9
- created
- Nov 4, 12:57 UTC
- started
- Nov 4, 12:57 UTC
- finished
- Nov 4, 13:07 UTC
- duration
- 10m 05s
- GPU-h budget
- 2.0
- wall budget
- 240 min
- base model
- Qwen/Qwen3.5-4B
- training
- RL
- dataset
- tau-bench retail (train tasks for RL, test tasks for eval)
- result
- final
- outcome reason
- insufficient evidence