#!/bin/bash
# Generate ACT vs PARA comparison video at specific OOD conditions.
#
# Sequence:
#   1. ACT succeeds at left-side (in-dist) position
#   2. ACT fails at right-side (OOD) position
#   3. ACT fails at OOD viewpoint (default position)
#   4. PARA succeeds at same right-side (OOD) position
#   5. PARA succeeds at same OOD viewpoint
#
# Uses the left→right trained models (trained on left-half positions, default viewpoint).

set -e

export PYTHONPATH=/data/cameron/LIBERO:$PYTHONPATH
export DINO_REPO_DIR=/data/cameron/keygrip/dinov3
export DINO_WEIGHTS_PATH=/data/cameron/keygrip/dinov3/weights/dinov3_vits16plus_pretrain_lvd1689m-4057cbaa.pth

EVAL_SCRIPT=/data/cameron/para_normalized_losses/libero/eval.py
ACT_CKPT=/data/cameron/para_normalized_losses/libero/checkpoints/act_v2_exp3_left/best.pth
PARA_CKPT=/data/cameron/para_normalized_losses/libero/checkpoints/para_v2_exp3_left/best.pth

OUT_BASE=/data/cameron/para/ood_libero/comparison_video_clips

# In-distribution position (left side) — both should succeed
IN_DX=-0.10
IN_DY=-0.08

# OOD position (right side, outside training range)
OOD_DX=-0.05
OOD_DY=0.15

# OOD viewpoint (theta=15°, phi=45° — ACT should fail, PARA may succeed)
OOD_THETA=15.0
OOD_PHI=45.0

COMMON_ARGS="--benchmark libero_spatial --task_id 0 --n_episodes 3 \
    --teleport --zero_rotation --clean_scene --max_steps 600 \
    --save_video --video_fps 15"

echo "=== 1/5: ACT at in-dist position (should succeed) ==="
python $EVAL_SCRIPT --model_type act --checkpoint $ACT_CKPT \
    --shift_dx $IN_DX --shift_dy $IN_DY \
    --out_dir $OUT_BASE/act_indist \
    $COMMON_ARGS

echo "=== 2/5: ACT at OOD position (should fail) ==="
python $EVAL_SCRIPT --model_type act --checkpoint $ACT_CKPT \
    --shift_dx $OOD_DX --shift_dy $OOD_DY \
    --out_dir $OUT_BASE/act_ood_pos \
    $COMMON_ARGS

echo "=== 3/5: ACT at OOD viewpoint (should fail) ==="
python $EVAL_SCRIPT --model_type act --checkpoint $ACT_CKPT \
    --shift_dx $IN_DX --shift_dy $IN_DY \
    --cam_theta $OOD_THETA --cam_phi $OOD_PHI \
    --out_dir $OUT_BASE/act_ood_view \
    $COMMON_ARGS

echo "=== 4/5: PARA at OOD position (should succeed) ==="
python $EVAL_SCRIPT --model_type para --checkpoint $PARA_CKPT \
    --shift_dx $OOD_DX --shift_dy $OOD_DY \
    --out_dir $OUT_BASE/para_ood_pos \
    $COMMON_ARGS

echo "=== 5/5: PARA at OOD viewpoint (should succeed) ==="
python $EVAL_SCRIPT --model_type para --checkpoint $PARA_CKPT \
    --shift_dx $IN_DX --shift_dy $IN_DY \
    --cam_theta $OOD_THETA --cam_phi $OOD_PHI \
    --out_dir $OUT_BASE/para_ood_view \
    $COMMON_ARGS

echo ""
echo "=== All evals complete ==="
echo "Videos saved to: $OUT_BASE/"
echo ""
echo "Next: review videos, pick best success/failure episodes, and stitch together."
echo "Look in each subfolder's videos/task_0/ for the MP4s."
find $OUT_BASE -name "*.mp4" | sort
