Align outercourse action routing

This commit is contained in:
2026-06-27 16:15:27 +02:00
parent ff6195473b
commit 002c3b79d4
10 changed files with 393 additions and 67 deletions
+69 -2
View File
@@ -4,12 +4,14 @@ import re
from typing import Any
try:
from . import outercourse_action_policy as outercourse_policy
from .krea_action_context import (
is_close_foreplay_text,
position_context_text,
)
from .krea_detail import detail_clauses, join_detail_clauses
except ImportError: # Allows local smoke tests with `python -c`.
import outercourse_action_policy as outercourse_policy
from krea_action_context import (
is_close_foreplay_text,
position_context_text,
@@ -253,11 +255,16 @@ def dedupe_outercourse_detail(detail: str, role_graph: str, hard_item: str = "",
return ""
context = position_context_text(role_graph, hard_item, "", axis_values)
context_lower = context.lower()
breast_sex = any(term in context_lower for term in ("boobjob", "titjob", "breast sex", "breast-sex"))
position_text = ""
if isinstance(axis_values, dict):
position_text = _clean(axis_values.get("position", "")).lower()
action_kind = outercourse_policy.infer_outercourse_action_kind(position_text)
if action_kind == outercourse_policy.OUTERCOURSE_GENERIC:
action_kind = outercourse_policy.infer_outercourse_action_kind(context_lower)
clauses: list[str] = []
for clause in detail_clauses(detail):
lower = clause.lower()
if breast_sex:
if action_kind == outercourse_policy.OUTERCOURSE_BOOBJOB:
if lower in ("penis", "breasts", "mouth clearly visible"):
continue
if any(
@@ -283,6 +290,66 @@ def dedupe_outercourse_detail(detail: str, role_graph: str, hard_item: str = "",
)
):
continue
elif action_kind == outercourse_policy.OUTERCOURSE_TESTICLE:
if any(
term in lower
for term in (
"testicle",
"balls licking",
"balls-licking",
"balls held",
"balls close",
"balls and mouth",
"mouth and tongue",
"mouth visible",
"mouth contact",
)
):
continue
elif action_kind == outercourse_policy.OUTERCOURSE_PENIS_LICKING:
if any(
term in lower
for term in (
"penis licking",
"penis-licking",
"tongue along",
"tongue licking",
"underside of the penis",
"tongue contact on the penis",
"one hand steadies the base",
)
):
continue
elif action_kind == outercourse_policy.OUTERCOURSE_HANDJOB:
if any(
term in lower
for term in (
"handjob",
"hand job",
"hand wrapped",
"one hand wrapped",
"two-handed",
"both hands stroking",
"hand and penis centered",
"fingers and palm visibly stroking",
)
):
continue
elif action_kind == outercourse_policy.OUTERCOURSE_FOOTJOB:
if any(
term in lower
for term in (
"footjob",
"foot job",
"both soles",
"soles pressing",
"soles wrap",
"toes curled",
"feet and penis",
"soles and penis",
)
):
continue
clauses.append(clause)
return join_detail_clauses(clauses)