VENV=.venv/bin
PY=$(VENV)/python
PACK ?= ramayana

.DEFAULT_GOAL := help

.PHONY: help setup train eval serve ui report clean swap counter reflexion test serve-ui

help:
	@echo "expertpacks (MLX). Targets:"
	@echo "  make setup PACK=<name>          ingest a pack (pdf/text) -> processed + corpus report"
	@echo "  make datagen PACK=<name>        generate training data (deterministic templates)"
	@echo "  make train PACK=<name>          datagen + LoRA train + register adapter"
	@echo "  make eval PACK=<name>           closed-book A/B eval (base vs trained)"
	@echo "  make serve PACK=<name> [PORT=xx] OpenAI-compatible server with the pack adapter"
	@echo "  make ui                        web UI (upload, train, chat, admin)"
	@echo "  make swap                     pack-swap + cross-contamination tests"
	@echo "  make counter                  counterfactual test (ramayana_cf)"
	@echo "  make test                     run the whole eval suite on a pack"
	@echo "  make reflexion PACK=<name>     reflexion report after eval"

setup:
	$(PY) -m engine.ingest.pdf $(PACK) 2>&1 | tee -a logs/ingest_$(PACK).log
	$(PY) -c "from engine.structure.corpus_model import build_corpus_model, write_corpus_report; from engine.common.pack import load_pack; p=load_pack('$(PACK)'); write_corpus_report(p, build_corpus_model(p)); print('corpus model written')"

datagen:
	$(PY) -m engine.datagen.run $(PACK)

train:
	$(PY) -m engine.datagen.run $(PACK) --no-mlx
	$(PY) -m engine.train.trainer $(PACK)

eval:
	$(PY) -m engine.eval.pipeline $(PACK) --variants base trained --max-items 80 2>&1 | tee logs/eval_$(PACK).log

serve:
	$(PY) -m engine.serve.api $(PACK) --port $(if $(PORT),$(PORT),8080)

ui:
	$(PY) -m engine.ui.app

swap:
	$(PY) -m engine.eval.swap_tests --test cross 2>&1 | tee logs/swap.log

counter:
	$(PY) -m engine.eval.swap_tests --test counter 2>&1 | tee logs/counter.log

test:
	$(MAKE) datagen PACK=$(PACK)
	$(MAKE) eval PACK=$(PACK)

reflexion:
	@mkdir -p packs/$(PACK)/reports
	@echo "see packs/$(PACK)/reports/ for eval_*.json; write reflexion_<n>.md per LESSONS.md conventions"

report:
	$(PY) -m engine.eval.report $(PACK)