File size: 3,351 Bytes
f340984
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/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[@]}"