#!/usr/bin/env bash
# Ultralytics YOLO11n fine-tune on COCO128, 100 epochs at 640, then validation of best.pt.
set -o pipefail
cd "$(dirname "$0")"
D=$(cd .. && pwd)
export YOLO_CONFIG_DIR="$D/data/cfg"
YOLO="$D/env/bin/yolo"
RUNS="$D/data/runs"
SEED=0
rm -rf "$RUNS/kv_train" "$RUNS/kv_val"
echo "KVERITAS_INPUT src=seed:$SEED"
echo "KVERITAS_PHASE name=train"
"$YOLO" detect train data=coco128.yaml model="$D/data/yolo11n.pt" epochs=100 imgsz=640 seed=$SEED \
  project="$RUNS" name=kv_train exist_ok=True workers=8 plots=False 2>&1 || exit 1
"$D/env/bin/python" - "$RUNS/kv_train/results.csv" <<'PY'
import csv, sys
for r in csv.DictReader(open(sys.argv[1])):
    r = {k.strip(): v.strip() for k, v in r.items()}
    for k, n in (("train/box_loss", "train_box_loss"), ("metrics/mAP50(B)", "mAP50"), ("metrics/mAP50-95(B)", "mAP50_95")):
        print(f"KVERITAS_METRIC name={n} value={r[k]} step={r['epoch']}")
PY
echo "KVERITAS_PHASE name=val"
"$YOLO" detect val data=coco128.yaml model="$RUNS/kv_train/weights/best.pt" imgsz=640 \
  project="$RUNS" name=kv_val exist_ok=True plots=False 2>&1 | awk '
{ print; fflush() }
$1=="all" && NF==7 {
  printf "KVERITAS_CLAIM metric=val_precision value=%s\nKVERITAS_CLAIM metric=val_recall value=%s\n", $4, $5
  printf "KVERITAS_CLAIM metric=val_mAP50 value=%s\nKVERITAS_CLAIM metric=val_mAP50_95 value=%s\n", $6, $7
  fflush()
}'
