3v324v23's picture
feat: add NNGen project under NNGen/ and ignore local secrets
0bdbec3
raw
history blame contribute delete
997 Bytes
from __future__ import annotations
from pathlib import Path
from typing import List
from ..state import AppState, ImageArtifact
def run(state: AppState) -> AppState:
scores = sorted(state.get("scores", []), key=lambda s: s["score"], reverse=True)
if not scores:
return state
best = scores[0]
best_img_path = best["image_path"]
# find the corresponding ImageArtifact
best_image: ImageArtifact | None = None
for im in state.get("images", []):
if im.path == best_img_path:
best_image = im
break
vios = [str(v) for v in best.get("violations", [])]
# Identify hard violations: explicit HARD marker or labels missing heuristic
hard = [v for v in vios if v.strip().lower().startswith("hard:")]
if not hard:
hard = [v for v in vios if ("labels" in v.lower() and "missing" in v.lower())]
state["best_image"] = best_image
state["violations"] = vios
state["hard_violations"] = hard
return state