Add analysis profiles with distance/proximity-aware axes

A discrete verdict collapses magnitude and a generic axis can hide what you're
calibrating (a blowjob where the head is 20cm away still reads sexual_act=oral ->
MATCH). New 'profile' input selects an act-specialized axis set (general / oral /
penetration / handjob / solo) whose act-critical axes capture distance explicitly
(mouth_genital_distance: touching/<5cm/10-20cm/>20cm, oral_depth, insertion_depth,
stroke_position, ...). axes now overrides the profile when set. agent_bridge gains
--profile; workflows + docs updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-27 00:48:46 +02:00
parent 06992506d7
commit 887dfc0bbb
6 changed files with 95 additions and 7 deletions
+7 -2
View File
@@ -48,7 +48,7 @@ def _http_json(url: str, payload: dict | None = None, timeout: int = 30):
def _inject(graph: dict, prompt: str, negative: str, seed: int, run_tag: str, mode: str,
reference_description: str = ""):
reference_description: str = "", profile: str = ""):
"""Set the receptor's prompt/seed and the judge's mode/run_tag in-place.
compare mode needs a receptor (to inject the prompt). describe mode is the first
@@ -69,6 +69,8 @@ def _inject(graph: dict, prompt: str, negative: str, seed: int, run_tag: str, mo
inputs["prompt_used"] = prompt
if reference_description:
inputs["reference_description"] = reference_description
if profile:
inputs["profile"] = profile
if mode == "compare" and not found_receptor:
raise SystemExit(
f"[agent_bridge] no '{RECEPTOR_CLASS}' node in the workflow — add the "
@@ -115,6 +117,8 @@ def main(argv=None):
ap.add_argument("--negative", default="")
ap.add_argument("--seed", type=int, default=0)
ap.add_argument("--run-tag", default="")
ap.add_argument("--profile", default="",
help="analysis profile on the judge (general/oral/penetration/handjob/solo)")
ap.add_argument("--ref-desc", default="",
help="canonical reference text to anchor compare on (from the describe pass)")
ap.add_argument("--ref-desc-file", default="",
@@ -138,7 +142,8 @@ def main(argv=None):
with open(args.workflow, "r", encoding="utf-8") as f:
graph = json.load(f)
_inject(graph, args.prompt, args.negative, args.seed, args.run_tag, args.mode, ref_desc)
_inject(graph, args.prompt, args.negative, args.seed, args.run_tag, args.mode, ref_desc,
args.profile)
client_id = uuid.uuid4().hex
try: