.PHONY: run strict model briefs local baseline clean test

# Pinned llama.cpp server image (linux/amd64 + linux/arm64). Digest verified 2026-10-14.
LLAMA_IMAGE ?= ghcr.io/ggml-org/llama.cpp:server-b11610@sha256:89f180f16f295ee496fe00924ec2118cae2efec519d1a82c605420af09d2a6df
MODEL_URL   ?= https://huggingface.co/Colby/apertus-v1.5-8b-text-Q4_K_M-GGUF/resolve/main/apertus-v1.5-8b-text-q4_k_m.gguf
MODEL_FILE  ?= models/apertus-v1.5-8b-q4_k_m.gguf
MODEL_SHA   ?= a037df8d87ff6caacee794ee85f55342f2152e0d359b7389033300c3bee5f299

# Judges / Mac mini: download model once, then docker compose up.
# Prints "N briefs: M published, K blocked" and exits 0 by default.
run: model
	LLAMA_IMAGE=$(LLAMA_IMAGE) docker compose up --build --abort-on-container-exit --exit-code-from app

model:
	@mkdir -p models
	@if [ ! -f $(MODEL_FILE) ]; then \
	  echo "Downloading $(MODEL_FILE) (~4.7 GB)…"; \
	  curl -L --fail -o $(MODEL_FILE).part $(MODEL_URL) && mv $(MODEL_FILE).part $(MODEL_FILE); \
	fi
	@echo "$(MODEL_SHA)  $$(basename $(MODEL_FILE))" > $(MODEL_FILE).sha256
	@cd $$(dirname $(MODEL_FILE)) && (if command -v sha256sum >/dev/null; then sha256sum -c $$(basename $(MODEL_FILE)).sha256; else shasum -a 256 -c $$(basename $(MODEL_FILE)).sha256; fi)

strict: model
	LLAMA_IMAGE=$(LLAMA_IMAGE) docker compose run --rm app python src/brief.py --fail-on-block

test:
	python3 -m unittest discover -s tests -v

local:
	python3 src/brief.py

baseline:
	python3 src/baseline.py --langs en,de

clean:
	rm -rf outputs/*.json outputs/blocked outputs/drafts outputs/baseline outputs/summary.json
