Extract climax role graph wording
This commit is contained in:
@@ -1135,6 +1135,88 @@ def smoke_double_front_back_route() -> None:
|
||||
_expect("role graph:" not in prompt and "sexual scene:" not in prompt, "double route Krea leaked raw labels")
|
||||
|
||||
|
||||
def smoke_climax_position_routes() -> None:
|
||||
cases = [
|
||||
(
|
||||
"climax_face_down",
|
||||
"face_down_ass_up",
|
||||
4001,
|
||||
_character_cast(),
|
||||
1,
|
||||
1,
|
||||
("lies face-down", "lower back and ass"),
|
||||
("face-down", "lower back and ass"),
|
||||
),
|
||||
(
|
||||
"climax_side_lying",
|
||||
"side_lying",
|
||||
4042,
|
||||
_character_cast(),
|
||||
1,
|
||||
1,
|
||||
("lies on her side", "thighs and pussy"),
|
||||
("lies on her side", "thighs and pussy"),
|
||||
),
|
||||
(
|
||||
"climax_lotus_lap",
|
||||
"lotus_lap",
|
||||
4001,
|
||||
_character_cast(),
|
||||
1,
|
||||
1,
|
||||
("sits in man a's lap", "legs wrapped"),
|
||||
("sits in the man's lap", "legs wrapped"),
|
||||
),
|
||||
(
|
||||
"climax_open_thighs",
|
||||
"open_thighs",
|
||||
4001,
|
||||
_character_cast(),
|
||||
1,
|
||||
1,
|
||||
("lies on her back", "thighs open"),
|
||||
("lies on her back", "thighs open"),
|
||||
),
|
||||
(
|
||||
"climax_front_back",
|
||||
"front_back",
|
||||
4090,
|
||||
_character_cast_two_men(),
|
||||
1,
|
||||
2,
|
||||
("lies between man a and man b", "man a under her hips"),
|
||||
("lies between man a and man b", "visible semen lands"),
|
||||
),
|
||||
]
|
||||
for name, position_key, seed, cast, women_count, men_count, role_terms, krea_terms in cases:
|
||||
row = _prompt_row(
|
||||
name=name,
|
||||
category="Hardcore sexual poses",
|
||||
subcategory="Cumshot and climax",
|
||||
seed=seed,
|
||||
character_cast=cast,
|
||||
women_count=women_count,
|
||||
men_count=men_count,
|
||||
hardcore_position_config=_position_filter("climax_only", "climax", [position_key]),
|
||||
)
|
||||
_expect_custom_row(row, name)
|
||||
_expect(row.get("action_family") == "climax", f"{name} action_family should be climax")
|
||||
_expect(row.get("position_family") == "climax", f"{name} position_family should be climax")
|
||||
_expect(position_key in (row.get("position_keys") or []), f"{name} lost position key {position_key!r}")
|
||||
role_graph = _expect_text(f"{name}.source_role_graph", row.get("source_role_graph"), 40).lower()
|
||||
for term in role_terms:
|
||||
_expect(term in role_graph, f"{name} role graph missing {term!r}: {role_graph}")
|
||||
krea = krea_formatter.format_krea2_prompt("", metadata_json=_json(row), target="single")
|
||||
prompt = _expect_text(f"{name}.krea_prompt", krea.get("krea_prompt"), 60).lower()
|
||||
_expect("metadata" in krea.get("method", ""), f"{name}.krea did not use metadata")
|
||||
_expect("role graph:" not in prompt and "sexual scene:" not in prompt, f"{name} Krea leaked raw labels")
|
||||
for term in krea_terms:
|
||||
_expect(term in prompt, f"{name} Krea prompt missing {term!r}: {prompt}")
|
||||
if position_key == "side_lying":
|
||||
_expect("lower back and ass" not in prompt, f"{name} Krea kept conflicting rear-entry fluid location: {prompt}")
|
||||
_expect_formatter_outputs(row, name, target="single")
|
||||
|
||||
|
||||
def smoke_no_expression_fallback() -> None:
|
||||
cast = pb.build_character_slot_json(
|
||||
subject_type="woman",
|
||||
@@ -1271,6 +1353,7 @@ SMOKE_CASES: list[tuple[str, Callable[[], None]]] = [
|
||||
("pov_penetration_position_routes", smoke_pov_penetration_position_routes),
|
||||
("pov_anal_position_routes", smoke_pov_anal_position_routes),
|
||||
("double_front_back_route", smoke_double_front_back_route),
|
||||
("climax_position_routes", smoke_climax_position_routes),
|
||||
("expression_disabled", smoke_no_expression_fallback),
|
||||
("formatter_metadata_fixtures", smoke_formatter_metadata_fixtures),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user