Repository Public Research preview
1#!/usr/bin/env bash2# Minimum vertical slice (zero API spend): corpus → splits → mock rewrites → validated pairs → tokenizer →3# tiny M1 training → predictions (+ baselines) → metrics. Usage: scripts/vertical_slice.sh [corpus_dir] [n_passages]4set -euo pipefail5cd "$(dirname "$0")/.."6PY=.venv/bin/python7CORPUS=${1:-data/parsed/smoke}8N=${2:-120}9NAME=$(basename "$CORPUS")10JOB=vs_${NAME}11$PY scripts/make_splits.py --corpus "$CORPUS" --heldout-disciplines physics --heldout-before-year 199012rm -rf "data/pairs/$JOB"13$PY scripts/rewrite.py --corpus "$CORPUS" --job "$JOB" --n-passages "$N" --seed 1 --splits "data/splits/$NAME/splits.jsonl"14$PY scripts/validate_pairs.py --corpus "$CORPUS" --job "$JOB" --no-embeddings15$PY scripts/train_tokenizer.py --pairs "data/pairs/$JOB/validated/pairs.jsonl" --splits "data/splits/$NAME/splits.jsonl" --out "artifacts/tokenizers/$JOB" --vocab 800016$PY scripts/train.py --pairs "data/pairs/$JOB/validated/pairs.jsonl" --splits "data/splits/$NAME/splits.jsonl" --tokenizer "artifacts/tokenizers/$JOB" --run "$JOB-m1-nano" --preset m1 --size nano --overfit-test17$PY scripts/train.py --pairs "data/pairs/$JOB/validated/pairs.jsonl" --splits "data/splits/$NAME/splits.jsonl" --tokenizer "artifacts/tokenizers/$JOB" --run "$JOB-m1-nano" --preset m1 --size nano --max-steps 300 --eval-every 100 --warmup 30 --max-tokens 4096 --patience 318$PY scripts/predict.py --pairs "data/pairs/$JOB/validated/pairs.jsonl" --splits "data/splits/$NAME/splits.jsonl" --split test --baselines --checkpoint "artifacts/runs/$JOB-m1-nano/best" --out "artifacts/predictions/$JOB" --limit 6019$PY scripts/evaluate.py --pairs "data/pairs/$JOB/validated/pairs.jsonl" --outputs-dir "artifacts/predictions/$JOB" --name "$JOB"20echo "VERTICAL SLICE OK: $JOB"21