---
name: Always use latest.pth (never best.pth) for inference pulls
description: When the user asks for a model checkpoint to deploy/test on the robot, always send the latest.pth, not best.pth — val-loss is not a reliable signal for these heatmap models.
type: feedback
originSessionId: 531aff41-3330-4729-8ba1-09499450783f
---
When the user asks to "pull a model for inference", "copy the checkpoint to mac", "give me a checkpoint", or otherwise prepare a trained model for downstream use (test_deploy_model.py, test_deploy_trajectory.py, vis_umi.py, etc.), **always send `<run_dir>/latest.pth`, never `<run_dir>/best.pth`**.

**Why:** For Cameron's PARA training runs (smith300/UMI heatmap models with small datasets), the validation loss does NOT correlate with model quality at deploy time. Val loss tends to climb after a few dozen epochs as the model overfits the tiny dataset's exact pixel positions, but the actually-deployed model behavior (heatmap focus, gripper prediction, rotation accuracy) keeps improving with more training. `best.pth` (saved at lowest val loss) typically lands ~50-100 epochs in, which is too early — the model hasn't finished learning the gripper/rotation heads. `latest.pth` (saved every 50 epochs) reflects the actual converged state.

**How to apply:** any time you would otherwise reach for `checkpoints/<run_name>/best.pth`, substitute `latest.pth` instead. If `latest.pth` doesn't exist yet (training is in early epochs and hasn't hit the every-50-epochs save yet), tell the user that and ask whether to wait or use what's there. Don't quietly fall back to `best.pth`.
