#!/bin/bash
# VLM eval at 4 viewpoints. Variant supplied as $1 = full|vision.
set -e
cd /data/cameron/para/libero
VARIANT=${1:-vision}
if [ "$VARIANT" = "vision" ]; then
    CKPT=/data/cameron/para/libero/checkpoints/libero_vlm_vision_v0/latest.pth
    GPUS=(5 6 7 8)
else
    CKPT=/data/cameron/para/libero/checkpoints/libero_vlm_full_v0/latest.pth
    GPUS=(0 1 2 9)
fi
LOG_DIR=/data/cameron/para/libero/logs/vlm_${VARIANT}_eval
mkdir -p $LOG_DIR

declare -a TVS=(
    " 0    0    indist_default"
    "14   45    indist_left   "
    "10  180    OOD_back      "
    "14  225    OOD_backleft  "
)

run_cell() {
    local TH=$1; local PH=$2; local LABEL=$3; local GPU=$4
    PYTHONPATH=/data/cameron/LIBERO LIBERO_DATA_PATH=/data/libero CUDA_VISIBLE_DEVICES=$GPU \
    DINO_REPO_DIR=/data/cameron/keygrip/dinov3 \
    DINO_WEIGHTS_PATH=/data/cameron/keygrip/dinov3/weights/dinov3_vits16plus_pretrain_lvd1689m-4057cbaa.pth \
    MUJOCO_GL=osmesa PYOPENGL_PLATFORM=osmesa \
    python eval_libero_vlm_ood.py --checkpoint $CKPT \
        --n_episodes 10 --max_steps 600 \
        --teleport --zero_rotation --clean_scene \
        --cam_theta $TH --cam_phi $PH \
        > $LOG_DIR/th${TH}_ph${PH}_${LABEL}.log 2>&1
}

i=0
for cell in "${TVS[@]}"; do
    read -r TH PH LABEL <<< "$cell"
    GPU=${GPUS[$i]}
    (run_cell $TH $PH $LABEL $GPU) &
    i=$((i+1))
done
wait

echo "=== VLM ${VARIANT} eval ==="
for cell in "${TVS[@]}"; do
    read -r TH PH LABEL <<< "$cell"
    FILE=$LOG_DIR/th${TH}_ph${PH}_${LABEL}.log
    SR=$(grep "Success Rate" $FILE 2>/dev/null | head -1 | sed 's/.*Success Rate: //')
    echo "  th=$TH ph=$PH ($LABEL): $SR"
done
