• Stefy Lanza (nextime / spora )'s avatar
    say which face_match profile was unusable, and why · 1d4728cd
    Stefy Lanza (nextime / spora ) authored
    Found by running the endpoint against the live server. A request naming
    `face_match.character_profiles` came back
    
        400: face_match was requested with no reference images
    
    which is the opposite of the truth -- the caller HAD supplied references. The
    cause was a bare `except Exception: pass` around the per-profile lookup, so a
    misspelt name, a profile with no saved images, and a characters directory the
    server resolves elsewhere all collapsed into that one message with nothing to
    distinguish them. Establishing which it was took a long sequence of probes
    against a running server: the field is declared (a bad type 422s with
    loc body.face_match.character_profiles), the profile exists under both
    candidate paths in the container, and resolve_character_profiles returns its
    four images when called in-process -- so the swallowed exception was the only
    thing standing between the symptom and the cause, and it is the defect.
    
    Now each profile is resolved separately and its failure is named. When none
    resolve the 400 lists them; when some do, the request proceeds (there ARE
    references to match against) and the unusable ones are logged, because a
    performer the caller believes is enrolled and is not would make a genuine face
    read as "matches no consenting performer" for the wrong reason.
    
    Verified live on the same server, all four checks against a real face:
    nsfw 0.0003, one face at det_score 0.879, age 38.0 with the interval 30.0-46.0
    and minor_probability 0.0, face_match similarity 1.0 matched against itself,
    unmatched_faces 0, flagged false.
    Co-Authored-By: 's avatarClaude Opus 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_014T3rZnmWyKjWZerwsb27jZ
    1d4728cd
moderation.py 29.6 KB