#!/usr/bin/env bash
# examples/train_lora/qwen3_lora_sft.yaml as shipped (LoRA SFT of Qwen3-4B-Instruct-2507 on identity +
# alpaca_en_demo, 3 epochs); kv_qwen3_lora_sft.yaml differs only in the local model and output paths.
# Metrics are read from trainer_log.jsonl and train_results.json written during the run.
set -o pipefail
ROW=/var/tmp/kv-repro/028-hiyouga-LlamaFactory
export HOME=$ROW/data/home
mkdir -p "$HOME"
rm -rf "$ROW/data/run"
echo "KVERITAS_PHASE name=train"
llamafactory-cli train kv_qwen3_lora_sft.yaml 2>&1 | tr '\r' '\n' | grep -vE "it/s\]$|s/it\]$" | tail -30 || exit 1
python - "$ROW/data/run" <<'PY'
import json, os, sys
out = sys.argv[1]
for line in open(os.path.join(out, "trainer_log.jsonl")):
    r = json.loads(line)
    if "loss" in r:
        print(f"KVERITAS_METRIC name=train_loss value={r['loss']} step={r['current_steps']}")
res = json.load(open(os.path.join(out, "train_results.json")))
print(f"KVERITAS_METRIC name=train_runtime_s value={res['train_runtime']}")
print(f"KVERITAS_METRIC name=train_samples_per_second value={res['train_samples_per_second']}")
print(f"KVERITAS_CLAIM metric=train_loss value={res['train_loss']:.6g}")
PY
