Visione: output NaN/None di uno strumento → TypeError non gestita (500) #16

Closed
opened 2026-09-21 20:14:43 +00:00 by Adriano · 3 comments
Owner

GRAVITÀ: alta
FILE: src/backend/services/vision_service.py:149,177 ; src/vision/runner.py:121-122
COSA: il runner accetta NaN, inf, bool. Il worker serializza NaN come null. Il controllo «every quote or none» guarda solo la presenza della chiave, poi float(None) → TypeError.
INPUT: strumento che restituisce NaN per una quota mappata (il vendor emette già «Mean of empty slice» in caliper.py:112).
VERIFICATO: probe pytest con worker finto {"t1.diameter": None} → "TypeError float() argument must be ... not 'NoneType'".
PRESUNTO: che vs-measure emetta davvero NaN su immagine reale.

ORIGINE: revisione fable del 21/09/2026 su ramo V3.0.0, commit 8cc5e82. Documento completo: _output/2026-09-21-TieMeasureFlow-revisione.md su Wasabi.

GRAVITÀ: alta FILE: src/backend/services/vision_service.py:149,177 ; src/vision/runner.py:121-122 COSA: il runner accetta NaN, inf, bool. Il worker serializza NaN come null. Il controllo «every quote or none» guarda solo la presenza della chiave, poi `float(None)` → TypeError. INPUT: strumento che restituisce NaN per una quota mappata (il vendor emette già «Mean of empty slice» in caliper.py:112). VERIFICATO: probe pytest con worker finto `{"t1.diameter": None}` → "TypeError float() argument must be ... not 'NoneType'". PRESUNTO: che vs-measure emetta davvero NaN su immagine reale. ORIGINE: revisione fable del 21/09/2026 su ramo `V3.0.0`, commit 8cc5e82. Documento completo: `_output/2026-09-21-TieMeasureFlow-revisione.md` su Wasabi.
Adriano added the bug label 2026-09-21 20:14:43 +00:00
Adriano added the assegnata:jeeg label 2026-09-21 20:22:36 +00:00
Author
Owner

⚡ jeeg — preso in carico 2026-09-21T20:22:37Z
ramo: lavoro/jeeg · capacità: docker, gpu, systemd

⚡ jeeg — **preso in carico** 2026-09-21T20:22:37Z ramo: `lavoro/jeeg` · capacità: docker, gpu, systemd
Author
Owner

ANALISI (passo 1) — ramo lavoro/jeeg, worktree ~/lavoro/TieMeasureFlow su jeeg, lotto C1

MODIFICHE: src/vision/runner.py:121-122 — output numerico: escludi bool, e NaN/±inf diventano assenti con un motivo in outcome (es. elenco invalid_outputs). src/vision_worker/main.py non deve serializzare NaN. src/backend/services/vision_service.py:149,177 — una quota mappata con valore None/assente/non finito conta come «non prodotta» → il 422 esistente «the graph did not produce …» con il nome dell'output.
TEST: runner con strumento finto che dà NaN → output assente; backend con worker finto {"t1.diameter": None} → 422.

ANALISI (passo 1) — ramo `lavoro/jeeg`, worktree `~/lavoro/TieMeasureFlow` su jeeg, lotto C1 MODIFICHE: src/vision/runner.py:121-122 — output numerico: escludi `bool`, e NaN/±inf diventano assenti con un motivo in `outcome` (es. elenco `invalid_outputs`). src/vision_worker/main.py non deve serializzare NaN. src/backend/services/vision_service.py:149,177 — una quota mappata con valore None/assente/non finito conta come «non prodotta» → il 422 esistente «the graph did not produce …» con il nome dell'output. TEST: runner con strumento finto che dà NaN → output assente; backend con worker finto `{"t1.diameter": None}` → 422.
Author
Owner

Soluzione

ESITO: fatto
COSA: Il runner scarta bool, NaN e ±inf (invalid_outputs); il backend considera prodotta una quota solo se il valore è un numero finito (_is_measurable). Prova originale rilanciata: {"t1.diameter": None} → 422 «the graph did not produce t1.diameter».
COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): 20957e5
PROVA: uv run --extra server --extra client --extra dev pytest -q → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).

**Soluzione** ESITO: fatto COSA: Il runner scarta bool, NaN e ±inf (`invalid_outputs`); il backend considera prodotta una quota solo se il valore è un numero finito (`_is_measurable`). Prova originale rilanciata: `{"t1.diameter": None}` → 422 «the graph did not produce t1.diameter». COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a d483fa1): 20957e5 PROVA: `uv run --extra server --extra client --extra dev pytest -q` → 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).
Adriano removed the assegnata:jeeg label 2026-09-21 21:56:20 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#16