#!/usr/bin/env sh # Single-turn evaluation driver (README stage 4). # Reuses the eval-only path of 3-2's train_attn_kl_clean.py: loads a base model + # a trained LoRA adapter, then runs the TopicAttack-style single-turn eval. # # Required env (usually set by a combos/ wrapper): # MODEL_PATH base model dir # LORA_PATH trained adapter dir (e.g. .../outputs_lora//final) # EVAL_DATA_PATH cross-source injection_qa json (squad-trained -> tri, and vice versa) # EVAL_CONFIG prompt_based_separator | native_tool_response_only | native_tool_empty_query # EVAL_OUTPUT output json path # Optional: EVAL_TOPIC_PATH EVAL_ATTACKS EVAL_ATTACK_SIDE EVAL_SIZE EVAL_BATCH_SIZE EVAL_MAX_NEW_TOKENS set -eu export CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0} export PYTORCH_ALLOC_CONF=${PYTORCH_ALLOC_CONF:-expandable_segments:True} CONDA_BIN=${CONDA_BIN:-} if [ -z "$CONDA_BIN" ]; then if command -v conda >/dev/null 2>&1; then CONDA_BIN=$(command -v conda) elif [ -x /opt/miniconda/bin/conda ]; then CONDA_BIN=/opt/miniconda/bin/conda fi fi if [ -n "$CONDA_BIN" ]; then eval "$("$CONDA_BIN" shell.bash hook)" conda activate focallora4 fi SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) BASE=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd) ROOT=$(CDPATH= cd -- "$BASE/.." && pwd) TRAIN_PY="$BASE/3-2_model_training/train_attn_kl_clean.py" MODEL_PATH=${MODEL_PATH:-$ROOT/models/Qwen2-7B-Instruct} LORA_PATH=${LORA_PATH:?set LORA_PATH to a trained adapter dir} EVAL_DATA_PATH=${EVAL_DATA_PATH:-$BASE/1_raw_dataset/topicattack/data/crafted_instruction_data_tri_injection_qa.json} EVAL_TOPIC_PATH=${EVAL_TOPIC_PATH:-$BASE/1_raw_dataset/topicattack/data/crafted_instruction_data_tri_conversation_attack_complete.json} EVAL_CONFIG=${EVAL_CONFIG:-native_tool_response_only} EVAL_OUTPUT=${EVAL_OUTPUT:-$SCRIPT_DIR/results/eval.json} python "$TRAIN_PY" \ --eval-only \ --eval-topicattack \ --model-path "$MODEL_PATH" \ --lora-path "$LORA_PATH" \ --eval-data-path "$EVAL_DATA_PATH" \ --eval-topicattack-path "$EVAL_TOPIC_PATH" \ --eval-config "$EVAL_CONFIG" \ --eval-output "$EVAL_OUTPUT" \ --eval-attacks "${EVAL_ATTACKS:-none,naive,ignore,escape_separation,completion_realcmb,conv_attack}" \ --eval-attack-side "${EVAL_ATTACK_SIDE:-end}" \ --eval-size "${EVAL_SIZE:--1}" \ --eval-batch-size "${EVAL_BATCH_SIZE:-4}" \ --eval-max-new-tokens "${EVAL_MAX_NEW_TOKENS:-256}" \ ${EVAL_MMLU:+--eval-mmlu}