#!/usr/bin/env bash

RESULTS="bench-models-results.txt"
: > "$RESULTS"

ARGS_BB="-c 270336 -npp 512,4096,8192 -npl 1,2,4,8,16,32 -ntg 32"
ARGS_B="-d 0,4096,8192,16384,32768 -p 2048 -n 32"

QUICK=0
while (( "$#" )); do
  case "$1" in
    --quick) QUICK=1; shift ;;
    *) shift ;;
  esac
done

if (( QUICK )); then
  ARGS_BB="-c 20480 -npp 512,4096 -npl 1,2,4 -ntg 32"
  ARGS_B="-d 0 -p 2048 -n 32"
fi

run_model() {
  local HFR=$1
  local HFF=$2

  printf "## ${HFR}\n" | tee -a "$RESULTS"
  printf "\n" | tee -a "$RESULTS"
  printf "Model: https://huggingface.co/${HFR}\n" | tee -a "$RESULTS"
  printf "\n" | tee -a "$RESULTS"

  printf -- "- \`llama-batched-bench\`\n" | tee -a "$RESULTS"
  printf "\n" | tee -a "$RESULTS"

  ./bin/llama-batched-bench \
    -hfr "${HFR}" -hff "${HFF}" \
    -m "${HFF}" -fa 1 -ub 2048 --no-mmap \
    ${ARGS_BB} | tee -a "$RESULTS"

  printf "\n" | tee -a "$RESULTS"

  printf -- "- \`llama-bench\`\n" | tee -a "$RESULTS"
  printf "\n" | tee -a "$RESULTS"

  ./bin/llama-bench \
    -m "${HFF}" -fa 1 -ub 2048 -mmp 0 \
    ${ARGS_B} | tee -a "$RESULTS"

  printf "\n" | tee -a "$RESULTS"

  printf "\n"
}

run_model "ggml-org/gpt-oss-20b-GGUF"                       "gpt-oss-20b-mxfp4.gguf"
run_model "ggml-org/gpt-oss-120b-GGUF"                      "gpt-oss-120b-mxfp4-00001-of-00003.gguf"
run_model "ggml-org/Qwen3-Coder-30B-A3B-Instruct-Q8_0-GGUF" "qwen3-coder-30b-a3b-instruct-q8_0.gguf"
run_model "ggml-org/Qwen2.5-Coder-7B-Q8_0-GGUF"             "qwen2.5-coder-7b-q8_0.gguf"
run_model "ggml-org/gemma-3-4b-it-qat-GGUF"                 "gemma-3-4b-it-qat-Q4_0.gguf"

if [[ -f models-extra.txt ]]; then
    while read -r HFR HFF; do
        [[ -z "$HFR" ]] && continue
        run_model "$HFR" "$HFF"
    done < models-extra.txt
fi

printf "\n=====================================\n"
printf "\n"

cat "$RESULTS"

printf "\n"
printf "Done! Results are written to $RESULTS\n"
printf "\n"

