#!/usr/bin/env bash set -euo pipefail ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd) CLI=${CLI:-$ROOT/.venv/bin/unlimited-ocr-rdna4} PYTHON=${PYTHON:-$ROOT/.venv/bin/python} DEVICE=${UNLIMITED_OCR_DEVICE:-0} MODEL_DIR=${UNLIMITED_OCR_MODEL_DIR:-} AMD_SMI_GPU=${AMD_SMI_GPU:-} NETWORK_ISOLATED=${VALIDATION_NETWORK_ISOLATED:-0} EXPECTED_IMAGE_SHA256=${EXPECTED_IMAGE_SHA256:-13df40051aceb3bd14f75622697dda1f2a96515bb95c0483e0920cd4d41cbc01} EXPECTED_PDF_SHA256=${EXPECTED_PDF_SHA256:-fb17a6396c3e73a025e388a09f73357960ca0bf95124e38179e06a2e64442438} EVIDENCE_OUTPUT=${VALIDATION_EVIDENCE_OUTPUT:-} CACHE_BASE=${XDG_CACHE_HOME:-${HOME}/.cache}/unlimited-ocr-rdna4 FIXTURE_IMAGE="$ROOT/tests/fixtures/rdna4-smoke.png" FIXTURE_PDF="$ROOT/tests/fixtures/rdna4-smoke.pdf" mkdir -p "$CACHE_BASE" WORK_DIR=$(mktemp -d "$CACHE_BASE/validation.XXXXXX") trap 'rm -rf -- "$WORK_DIR"' EXIT printf '%s %s\n' \ 'f5099e17be868abfb4213dbdab220deac82a2db93ba87ab22f03219178246972' "$FIXTURE_IMAGE" \ 'cdd2b484d0ac90bd98b489dd97565a65eb17246f713359524cddd41d78cc10cb' "$FIXTURE_PDF" | sha256sum --check --status MODEL_ARGS=() if [[ -n $MODEL_DIR ]]; then MODEL_ARGS=(--model-dir "$MODEL_DIR") fi run_isolated() { sudo -n systemd-run \ --quiet --wait --pipe --collect \ -p PrivateNetwork=yes \ -p "User=$(id -un)" \ -p "WorkingDirectory=$ROOT" \ -p "Environment=HOME=$HOME" \ -- "$@" } run_ocr() { if [[ $NETWORK_ISOLATED == 1 ]]; then run_isolated "$@" else "$@" fi } if [[ $NETWORK_ISOLATED == 1 ]]; then if run_isolated /usr/bin/python3 -c \ 'import socket; socket.create_connection(("1.1.1.1", 80), timeout=0.25)' \ >"$WORK_DIR/network-probe.out" 2>"$WORK_DIR/network-probe.err"; then printf 'error: PrivateNetwork validation probe unexpectedly reached the network\n' >&2 exit 5 fi fi "$CLI" doctor --device "$DEVICE" --require-model --json "${MODEL_ARGS[@]}" >"$WORK_DIR/doctor.json" run_ocr "$CLI" run \ --input "$FIXTURE_IMAGE" \ --output "$WORK_DIR/smoke-image-1.md" \ --device "$DEVICE" \ --json \ "${MODEL_ARGS[@]}" >"$WORK_DIR/image-1.json" run_ocr "$CLI" run \ --input "$FIXTURE_IMAGE" \ --output "$WORK_DIR/smoke-image-2.md" \ --device "$DEVICE" \ --json \ "${MODEL_ARGS[@]}" >"$WORK_DIR/image-2.json" run_ocr "$CLI" run \ --input "$FIXTURE_PDF" \ --output "$WORK_DIR/smoke-pdf.md" \ --device "$DEVICE" \ --dpi 150 \ --max-pages 1 \ --json \ "${MODEL_ARGS[@]}" >"$WORK_DIR/pdf.json" if [[ -n $AMD_SMI_GPU ]]; then amd-smi process -g "$AMD_SMI_GPU" --json >"$WORK_DIR/gpu-processes.json" fi CHECK_ARGS=( --doctor "$WORK_DIR/doctor.json" --image-run "$WORK_DIR/image-1.json" --image-run "$WORK_DIR/image-2.json" --pdf-run "$WORK_DIR/pdf.json" --image-output "$WORK_DIR/smoke-image-1.md" --image-output "$WORK_DIR/smoke-image-2.md" --pdf-output "$WORK_DIR/smoke-pdf.md" ) CHECK_ARGS+=(--expected-image-sha256 "$EXPECTED_IMAGE_SHA256") CHECK_ARGS+=(--expected-pdf-sha256 "$EXPECTED_PDF_SHA256") if [[ $NETWORK_ISOLATED == 1 ]]; then CHECK_ARGS+=(--network-isolated) fi if [[ -n $AMD_SMI_GPU ]]; then CHECK_ARGS+=(--gpu-processes "$WORK_DIR/gpu-processes.json") fi if [[ -n $EVIDENCE_OUTPUT ]]; then CHECK_ARGS+=(--evidence-output "$EVIDENCE_OUTPUT") fi "$PYTHON" "$ROOT/scripts/check-validation.py" "${CHECK_ARGS[@]}"