dougvk/Unlimited-OCR-RDNA4
0
1#!/usr/bin/env bash2set -euo pipefail3 4ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)5CLI=${CLI:-$ROOT/.venv/bin/unlimited-ocr-rdna4}6PYTHON=${PYTHON:-$ROOT/.venv/bin/python}7DEVICE=${UNLIMITED_OCR_DEVICE:-0}8MODEL_DIR=${UNLIMITED_OCR_MODEL_DIR:-}9AMD_SMI_GPU=${AMD_SMI_GPU:-}10NETWORK_ISOLATED=${VALIDATION_NETWORK_ISOLATED:-0}11EXPECTED_IMAGE_SHA256=${EXPECTED_IMAGE_SHA256:-13df40051aceb3bd14f75622697dda1f2a96515bb95c0483e0920cd4d41cbc01}12EXPECTED_PDF_SHA256=${EXPECTED_PDF_SHA256:-fb17a6396c3e73a025e388a09f73357960ca0bf95124e38179e06a2e64442438}13EVIDENCE_OUTPUT=${VALIDATION_EVIDENCE_OUTPUT:-}14CACHE_BASE=${XDG_CACHE_HOME:-${HOME}/.cache}/unlimited-ocr-rdna415FIXTURE_IMAGE="$ROOT/tests/fixtures/rdna4-smoke.png"16FIXTURE_PDF="$ROOT/tests/fixtures/rdna4-smoke.pdf"17mkdir -p "$CACHE_BASE"18WORK_DIR=$(mktemp -d "$CACHE_BASE/validation.XXXXXX")19trap 'rm -rf -- "$WORK_DIR"' EXIT20 21printf '%s %s\n' \22 'f5099e17be868abfb4213dbdab220deac82a2db93ba87ab22f03219178246972' "$FIXTURE_IMAGE" \23 'cdd2b484d0ac90bd98b489dd97565a65eb17246f713359524cddd41d78cc10cb' "$FIXTURE_PDF" |24 sha256sum --check --status25 26MODEL_ARGS=()27if [[ -n $MODEL_DIR ]]; then28 MODEL_ARGS=(--model-dir "$MODEL_DIR")29fi30 31run_isolated() {32 sudo -n systemd-run \33 --quiet --wait --pipe --collect \34 -p PrivateNetwork=yes \35 -p "User=$(id -un)" \36 -p "WorkingDirectory=$ROOT" \37 -p "Environment=HOME=$HOME" \38 -- "$@"39}40 41run_ocr() {42 if [[ $NETWORK_ISOLATED == 1 ]]; then43 run_isolated "$@"44 else45 "$@"46 fi47}48 49if [[ $NETWORK_ISOLATED == 1 ]]; then50 if run_isolated /usr/bin/python3 -c \51 'import socket; socket.create_connection(("1.1.1.1", 80), timeout=0.25)' \52 >"$WORK_DIR/network-probe.out" 2>"$WORK_DIR/network-probe.err"; then53 printf 'error: PrivateNetwork validation probe unexpectedly reached the network\n' >&254 exit 555 fi56fi57 58"$CLI" doctor --device "$DEVICE" --require-model --json "${MODEL_ARGS[@]}" >"$WORK_DIR/doctor.json"59 60run_ocr "$CLI" run \61 --input "$FIXTURE_IMAGE" \62 --output "$WORK_DIR/smoke-image-1.md" \63 --device "$DEVICE" \64 --json \65 "${MODEL_ARGS[@]}" >"$WORK_DIR/image-1.json"66 67run_ocr "$CLI" run \68 --input "$FIXTURE_IMAGE" \69 --output "$WORK_DIR/smoke-image-2.md" \70 --device "$DEVICE" \71 --json \72 "${MODEL_ARGS[@]}" >"$WORK_DIR/image-2.json"73 74run_ocr "$CLI" run \75 --input "$FIXTURE_PDF" \76 --output "$WORK_DIR/smoke-pdf.md" \77 --device "$DEVICE" \78 --dpi 150 \79 --max-pages 1 \80 --json \81 "${MODEL_ARGS[@]}" >"$WORK_DIR/pdf.json"82 83if [[ -n $AMD_SMI_GPU ]]; then84 amd-smi process -g "$AMD_SMI_GPU" --json >"$WORK_DIR/gpu-processes.json"85fi86 87CHECK_ARGS=(88 --doctor "$WORK_DIR/doctor.json"89 --image-run "$WORK_DIR/image-1.json"90 --image-run "$WORK_DIR/image-2.json"91 --pdf-run "$WORK_DIR/pdf.json"92 --image-output "$WORK_DIR/smoke-image-1.md"93 --image-output "$WORK_DIR/smoke-image-2.md"94 --pdf-output "$WORK_DIR/smoke-pdf.md"95)96CHECK_ARGS+=(--expected-image-sha256 "$EXPECTED_IMAGE_SHA256")97CHECK_ARGS+=(--expected-pdf-sha256 "$EXPECTED_PDF_SHA256")98if [[ $NETWORK_ISOLATED == 1 ]]; then99 CHECK_ARGS+=(--network-isolated)100fi101if [[ -n $AMD_SMI_GPU ]]; then102 CHECK_ARGS+=(--gpu-processes "$WORK_DIR/gpu-processes.json")103fi104if [[ -n $EVIDENCE_OUTPUT ]]; then105 CHECK_ARGS+=(--evidence-output "$EVIDENCE_OUTPUT")106fi107 108"$PYTHON" "$ROOT/scripts/check-validation.py" "${CHECK_ARGS[@]}"109 