Stop retrying a provider that took the app down

The probe runs in the app's process, and a provider can fail by aborting
rather than by returning an error — XNNPACK did on SCRFD. A rung that does
that once would do it on every launch, before the first photograph is on
screen.

Every session build above the CPU, the probe's and each background
compile's, now writes what it is attempting to `attempt` in the cache
directory first and removes it after. After two launches in a row that
died inside the same attempt it is refused and recorded — a rung in
`failed`, an engine in the new `refused` — until the fingerprint changes.
Two, not one, because quitting during a TensorRT compile leaves the same
file.
This commit is contained in:
2026-09-29 21:33:02 -04:00
parent 3b783d7bd4
commit b23527d5dc
4 changed files with 129 additions and 4 deletions
+8
View File
@@ -270,6 +270,14 @@ What the probe may not do:
- **Retry a rung that failed within a session.** A failed probe is cached as a failure with the
same inputs; the rung is tried again when an input changes. Otherwise a wedged driver means a
thirty-second stall on every launch.
- **Crash the app twice for the same reason.** The probe runs in the app's process, and a provider
can fail by aborting rather than by returning an error (XNNPACK on SCRFD, §2). Every session build
on a rung above the CPU — the probe's, and each background compile of §6 — writes what it is
attempting to `attempt` in the cache directory first and removes it after. A launch that finds the
file knows the last one died inside that attempt; after two such launches in a row the attempt is
refused and recorded like any other failure (a rung in `failed`, an engine in `refused`), until
the fingerprint changes. Two, not one, because quitting during a forty-second TensorRT compile
leaves the same file.
- **Choose for the user without saying so.** Settings gains one row, *Inference backend*, showing
what was chosen and why in one line ("Hexagon NPU · int8 · QNN 2.42"; "CPU · ONNX Runtime 1.30 ·
TensorRT probe failed: cuDNN 8 required"), with an override to force any lower rung. The about