Extract row prompt axes policy
This commit is contained in:
+88
-60
@@ -40,6 +40,7 @@ try:
|
||||
from . import row_generation as row_generation_policy
|
||||
from . import row_item as row_item_policy
|
||||
from . import row_location as row_location_policy
|
||||
from . import row_prompt_axes as row_prompt_axes_policy
|
||||
from . import row_pools as row_pool_policy
|
||||
from . import row_rendering as row_rendering_policy
|
||||
from . import row_route_metadata as row_route_policy
|
||||
@@ -87,6 +88,7 @@ except ImportError: # Allows local smoke tests with `python -c`.
|
||||
import row_generation as row_generation_policy
|
||||
import row_item as row_item_policy
|
||||
import row_location as row_location_policy
|
||||
import row_prompt_axes as row_prompt_axes_policy
|
||||
import row_pools as row_pool_policy
|
||||
import row_rendering as row_rendering_policy
|
||||
import row_route_metadata as row_route_policy
|
||||
@@ -2029,6 +2031,59 @@ def _composition_pool(
|
||||
return row_pool_policy.composition_pool(category, subcategory, item, subject_type, composition_config)
|
||||
|
||||
|
||||
def _prompt_axes_route(
|
||||
*,
|
||||
category: dict[str, Any],
|
||||
subcategory: dict[str, Any],
|
||||
item: Any,
|
||||
subject_type: str,
|
||||
context: dict[str, Any],
|
||||
poses: str,
|
||||
women_count: int,
|
||||
men_count: int,
|
||||
scene_rng: random.Random,
|
||||
pose_rng: random.Random,
|
||||
expression_rng: random.Random,
|
||||
composition_rng: random.Random,
|
||||
expression_disabled: bool,
|
||||
expression_intensity: float,
|
||||
character_slots: list[dict[str, Any]] | None = None,
|
||||
character_slot_map: dict[str, dict[str, Any]] | None = None,
|
||||
expression_phase: str = "",
|
||||
source_role_graph: Any = "",
|
||||
item_axis_values: dict[str, Any] | None = None,
|
||||
is_pose_category: bool = False,
|
||||
pov_character_labels: list[str] | None = None,
|
||||
location_config: dict[str, Any] | None = None,
|
||||
composition_config: dict[str, Any] | None = None,
|
||||
) -> dict[str, Any]:
|
||||
return row_prompt_axes_policy.resolve_prompt_axes(
|
||||
category=category,
|
||||
subcategory=subcategory,
|
||||
item=item,
|
||||
subject_type=subject_type,
|
||||
context=context,
|
||||
poses=poses,
|
||||
women_count=women_count,
|
||||
men_count=men_count,
|
||||
scene_rng=scene_rng,
|
||||
pose_rng=pose_rng,
|
||||
expression_rng=expression_rng,
|
||||
composition_rng=composition_rng,
|
||||
expression_disabled=expression_disabled,
|
||||
expression_intensity=expression_intensity,
|
||||
character_slots=character_slots,
|
||||
character_slot_map=character_slot_map,
|
||||
expression_phase=expression_phase,
|
||||
source_role_graph=source_role_graph,
|
||||
item_axis_values=item_axis_values,
|
||||
is_pose_category=is_pose_category,
|
||||
pov_character_labels=pov_character_labels,
|
||||
location_config=location_config,
|
||||
composition_config=composition_config,
|
||||
)
|
||||
|
||||
|
||||
def _build_custom_row(
|
||||
category_choice: str,
|
||||
subcategory_choice: str,
|
||||
@@ -2140,67 +2195,40 @@ def _build_custom_row(
|
||||
if expression_intensity is None:
|
||||
expression_disabled = True
|
||||
|
||||
scene_slug, scene = _choose_pair(
|
||||
scene_rng,
|
||||
_compatible_entries(
|
||||
_scene_pool(category, subcategory, item, subject_type, parsed_location_config),
|
||||
women_count,
|
||||
men_count,
|
||||
),
|
||||
prompt_axes = _prompt_axes_route(
|
||||
category=category,
|
||||
subcategory=subcategory,
|
||||
item=item,
|
||||
subject_type=subject_type,
|
||||
context=context,
|
||||
poses=poses,
|
||||
women_count=women_count,
|
||||
men_count=men_count,
|
||||
scene_rng=scene_rng,
|
||||
pose_rng=pose_rng,
|
||||
expression_rng=expression_rng,
|
||||
composition_rng=composition_rng,
|
||||
expression_disabled=expression_disabled,
|
||||
expression_intensity=expression_intensity,
|
||||
character_slots=character_slots,
|
||||
character_slot_map=character_slot_map,
|
||||
expression_phase=expression_phase,
|
||||
source_role_graph=source_role_graph,
|
||||
item_axis_values=item_axis_values,
|
||||
is_pose_category=is_pose_category,
|
||||
pov_character_labels=pov_character_labels,
|
||||
location_config=parsed_location_config,
|
||||
composition_config=parsed_composition_config,
|
||||
)
|
||||
pose = str(_merged_field(category, subcategory, item, "pose", "") or context.get("fallback_pose") or _choose_text(
|
||||
pose_rng, _compatible_entries(_pose_pool(category, subcategory, item, subject_type, poses), women_count, men_count)
|
||||
))
|
||||
if is_pose_category:
|
||||
pose = _sanitize_hardcore_environment_anchors(pose)
|
||||
expression_pool = _expression_pool(category, subcategory, item)
|
||||
if expression_disabled:
|
||||
expression = ""
|
||||
else:
|
||||
expression_entries = _compatible_entries(
|
||||
_expression_entries_for_intensity(expression_pool, expression_intensity),
|
||||
women_count,
|
||||
men_count,
|
||||
)
|
||||
expression = _choose_text(expression_rng, expression_entries)
|
||||
if subject_type in ("couple", "group") and ";" not in expression:
|
||||
secondary_expression = _choose_distinct_text(expression_rng, expression_entries, expression)
|
||||
if secondary_expression:
|
||||
expression = f"{expression}; {secondary_expression}"
|
||||
shared_expression = expression
|
||||
character_expressions: list[str] = []
|
||||
character_expression_text = ""
|
||||
if not expression_disabled and subject_type == "configured_cast" and character_slots:
|
||||
character_expressions = _character_expression_entries(
|
||||
expression_rng,
|
||||
expression_pool,
|
||||
expression_intensity,
|
||||
character_slot_map,
|
||||
women_count,
|
||||
men_count,
|
||||
expression_phase,
|
||||
)
|
||||
character_expression_text = "; ".join(character_expressions)
|
||||
character_expression_text = _sanitize_character_expression_text_for_action(
|
||||
character_expression_text,
|
||||
source_role_graph,
|
||||
item,
|
||||
item_axis_values,
|
||||
)
|
||||
character_expressions = [part.strip() for part in character_expression_text.split(";") if part.strip()]
|
||||
if character_expression_text:
|
||||
expression = character_expression_text
|
||||
source_composition = _choose_text(
|
||||
composition_rng,
|
||||
_compatible_entries(
|
||||
_composition_pool(category, subcategory, item, subject_type, parsed_composition_config),
|
||||
women_count,
|
||||
men_count,
|
||||
),
|
||||
)
|
||||
if is_pose_category:
|
||||
source_composition = _sanitize_hardcore_environment_anchors(source_composition)
|
||||
composition = _pov_composition_prompt(source_composition, pov_character_labels)
|
||||
scene_slug = str(prompt_axes.get("scene_slug") or "")
|
||||
scene = str(prompt_axes.get("scene") or "")
|
||||
pose = str(prompt_axes.get("pose") or "")
|
||||
expression = str(prompt_axes.get("expression") or "")
|
||||
shared_expression = str(prompt_axes.get("shared_expression") or "")
|
||||
character_expressions = list(prompt_axes.get("character_expressions") or [])
|
||||
character_expression_text = str(prompt_axes.get("character_expression_text") or "")
|
||||
source_composition = str(prompt_axes.get("source_composition") or "")
|
||||
composition = str(prompt_axes.get("composition") or "")
|
||||
action_route = _action_position_route_metadata(
|
||||
is_pose_category=is_pose_category,
|
||||
subcategory=subcategory,
|
||||
|
||||
Reference in New Issue
Block a user