from __future__ import annotations from typing import Any try: from . import generate_prompt_batches as g from . import pov_policy from . import row_camera as row_camera_policy from . import row_expression as row_expression_policy from . import row_rendering as row_rendering_policy except ImportError: # Allows local smoke tests from the repository root. import generate_prompt_batches as g import pov_policy import row_camera as row_camera_policy import row_expression as row_expression_policy import row_rendering as row_rendering_policy def assemble_custom_row( *, row_number: int, start_index: int, category: dict[str, Any], subcategory: dict[str, Any], item: Any, context: dict[str, Any], subject_type: str, item_text: str, item_name: str, item_axis_values: dict[str, Any], item_template_metadata: dict[str, Any], formatter_hints: dict[str, Any], item_label: str, style: str, positive_suffix: str, negative_prompt: str, scene_slug: str, scene: str, pose: str, expression: str, shared_expression: str, character_expressions: list[str], character_expression_text: str, expression_disabled: bool, expression_intensity: float | None, expression_intensity_source: str, composition: str, source_composition: str, role_graph: str, source_role_graph: str, action_family: str, position_family: str, position_key: str, position_keys: list[str], pov_character_labels: list[str], cast_descriptors: list[str], cast_descriptor_text: str, seed_config: dict[str, int], hardcore_position_config: dict[str, Any] | None = None, location_config: dict[str, Any] | None = None, composition_config: dict[str, Any] | None = None, content_seed_axis: str = "content", count_adjustment: dict[str, Any] | None = None, applied_profile: dict[str, Any] | None = None, profile_status: str = "none", applied_slot: dict[str, Any] | None = None, slot_status: str = "none", character_slots: list[dict[str, Any]] | None = None, ) -> dict[str, Any]: render_context = dict(context) pov_prompt_directive = pov_policy.pov_prompt_directive(pov_character_labels) render_context.update( { "trigger": g.TRIGGER, "main_category": category["name"], "subcategory": subcategory["name"], "category": category["name"], "item": item_text, "item_name": item_name, "item_label": item_label, "style": style, "scene": scene, "scene_slug": scene_slug, "pose": pose, "expression": expression, "shared_expression": shared_expression, "character_expressions": character_expressions, "character_expression_text": character_expression_text, "expression_enabled": not expression_disabled, "expression_disabled": expression_disabled, "expression_intensity": expression_intensity, "expression_intensity_source": expression_intensity_source, "composition": composition, "source_composition": source_composition, "composition_prompt": row_camera_policy.composition_prompt(composition), "composition_config": composition_config or {}, "role_graph": role_graph, "source_role_graph": source_role_graph, "action_family": action_family, "position_family": position_family, "position_key": position_key, "position_keys": position_keys, "pov_character_labels": pov_character_labels, "pov_prompt_directive": pov_prompt_directive, "cast_descriptors": cast_descriptor_text, "positive_suffix": positive_suffix, "negative_prompt": negative_prompt, } ) rendered = row_rendering_policy.render_prompt_caption( item=item, subcategory=subcategory, category=category, subject_type=subject_type, context=render_context, cast_descriptor_text=cast_descriptor_text, pov_prompt_directive=pov_prompt_directive if pov_character_labels else "", ) batch = max(1, ((row_number - 1) // g.BATCH_SIZE) + 1) index = start_index + row_number - 1 row = g.row_base( index, batch, render_context["subject"], render_context["age"], render_context["body"], scene_slug, composition, ) row.update( { "prompt": rendered["prompt"], "caption": rendered["caption"], "negative_prompt": negative_prompt, "expression": expression, "main_category": category["name"], "subcategory": subcategory["name"], "category_slug": category["slug"], "subcategory_slug": subcategory["slug"], "subject_type": subject_type, "subject_phrase": render_context.get("subject_phrase", ""), "body_phrase": render_context.get("body_phrase", ""), "skin": render_context.get("skin", ""), "hair": render_context.get("hair", ""), "eyes": render_context.get("eyes", ""), "style": style, "item": item_text, "item_label": item_label, "positive_suffix": positive_suffix, "custom_item": item_name, "item_axis_values": item_axis_values, "item_template_metadata": item_template_metadata, "formatter_hints": formatter_hints, "scene_text": scene, "location_config": location_config or {}, "pose": pose, "seed_config": seed_config, "hardcore_position_config": hardcore_position_config or {}, "content_seed_axis": content_seed_axis, "role_graph": role_graph, "source_role_graph": source_role_graph, "action_family": action_family, "position_family": position_family, "position_key": position_key, "position_keys": position_keys, "source_composition": source_composition, "pov_character_labels": pov_character_labels, "pov_prompt_directive": pov_prompt_directive, "shared_expression": shared_expression, "character_expressions": character_expressions, "character_expression_text": character_expression_text, "expression_enabled": not expression_disabled, "expression_disabled": expression_disabled, "cast_summary": render_context.get("cast_summary", ""), "cast_descriptors": cast_descriptors, "cast_descriptor_text": cast_descriptor_text, "scene_kind": render_context.get("scene_kind", ""), "women_count": render_context.get("women_count", ""), "men_count": render_context.get("men_count", ""), "person_count": render_context.get("person_count", ""), "cast_count_adjustment": count_adjustment if subject_type == "configured_cast" else {}, "character_profile": applied_profile or {}, "character_profile_status": profile_status, "character_slot": applied_slot or {}, "character_slot_status": slot_status, "character_cast_slots": character_slots or [], "expression_intensity": expression_intensity, "expression_intensity_source": expression_intensity_source, "source": "json_category", } ) if render_context.get("figure"): row["figure"] = render_context["figure"] if expression_disabled: row = row_expression_policy.disable_row_expression(row, expression_intensity_source) return row