Add typed pair route contracts

This commit is contained in:
2026-06-27 10:49:58 +02:00
parent 2c978c7eab
commit 28612f9d00
7 changed files with 439 additions and 74 deletions
+94 -18
View File
@@ -1,5 +1,6 @@
from __future__ import annotations
from dataclasses import dataclass
from typing import Any, Callable
@@ -23,7 +24,43 @@ def camera_config_with_detail(
return camera_config
def resolve_insta_pair_camera(
@dataclass(frozen=True)
class InstaPairCameraRoute:
soft_row: dict[str, Any]
hard_row: dict[str, Any]
hard_scene: str
hard_composition: str
soft_camera_config: dict[str, Any]
hard_camera_config: dict[str, Any]
soft_camera_directive: str
hard_camera_directive: str
soft_camera_scene_directive: str
hard_camera_scene_directive: str
soft_camera_scene_sentence: str
hard_camera_scene_sentence: str
soft_camera_sentence: str
hard_camera_sentence: str
def as_dict(self) -> dict[str, Any]:
return {
"soft_row": self.soft_row,
"hard_row": self.hard_row,
"hard_scene": self.hard_scene,
"hard_composition": self.hard_composition,
"soft_camera_config": dict(self.soft_camera_config),
"hard_camera_config": dict(self.hard_camera_config),
"soft_camera_directive": self.soft_camera_directive,
"hard_camera_directive": self.hard_camera_directive,
"soft_camera_scene_directive": self.soft_camera_scene_directive,
"hard_camera_scene_directive": self.hard_camera_scene_directive,
"soft_camera_scene_sentence": self.soft_camera_scene_sentence,
"hard_camera_scene_sentence": self.hard_camera_scene_sentence,
"soft_camera_sentence": self.soft_camera_sentence,
"hard_camera_sentence": self.hard_camera_sentence,
}
def resolve_insta_pair_camera_result(
*,
soft_row: dict[str, Any],
hard_row: dict[str, Any],
@@ -41,7 +78,7 @@ def resolve_insta_pair_camera(
contextual_composition_prompt: CompositionPrompt,
composition_prompt: Callable[[Any], str],
camera_scene_directive_for_context: CameraSceneDirective,
) -> dict[str, Any]:
) -> InstaPairCameraRoute:
hard_camera_mode = str(options["hardcore_camera_mode"])
soft_camera_source = softcore_camera_config or camera_config
hard_camera_source = hardcore_camera_config or camera_config
@@ -108,19 +145,58 @@ def resolve_insta_pair_camera(
hard_row["camera_directive"] = hard_camera_directive
hard_row["camera_scene_directive"] = hard_camera_scene_directive
return {
"soft_row": soft_row,
"hard_row": hard_row,
"hard_scene": hard_scene,
"hard_composition": hard_composition,
"soft_camera_config": soft_camera_config_dict,
"hard_camera_config": hard_camera_config_dict,
"soft_camera_directive": soft_camera_directive,
"hard_camera_directive": hard_camera_directive,
"soft_camera_scene_directive": soft_camera_scene_directive,
"hard_camera_scene_directive": hard_camera_scene_directive,
"soft_camera_scene_sentence": f"{soft_camera_scene_directive} " if soft_camera_scene_directive else "",
"hard_camera_scene_sentence": f"{hard_camera_scene_directive} " if hard_camera_scene_directive else "",
"soft_camera_sentence": f"Camera control: {soft_camera_directive} " if soft_camera_directive else "",
"hard_camera_sentence": f"Camera control: {hard_camera_directive} " if hard_camera_directive else "",
}
return InstaPairCameraRoute(
soft_row=soft_row,
hard_row=hard_row,
hard_scene=hard_scene,
hard_composition=hard_composition,
soft_camera_config=soft_camera_config_dict,
hard_camera_config=hard_camera_config_dict,
soft_camera_directive=soft_camera_directive,
hard_camera_directive=hard_camera_directive,
soft_camera_scene_directive=soft_camera_scene_directive,
hard_camera_scene_directive=hard_camera_scene_directive,
soft_camera_scene_sentence=f"{soft_camera_scene_directive} " if soft_camera_scene_directive else "",
hard_camera_scene_sentence=f"{hard_camera_scene_directive} " if hard_camera_scene_directive else "",
soft_camera_sentence=f"Camera control: {soft_camera_directive} " if soft_camera_directive else "",
hard_camera_sentence=f"Camera control: {hard_camera_directive} " if hard_camera_directive else "",
)
def resolve_insta_pair_camera(
*,
soft_row: dict[str, Any],
hard_row: dict[str, Any],
options: dict[str, Any],
camera_config: str | dict[str, Any] | None,
softcore_camera_config: str | dict[str, Any] | None,
hardcore_camera_config: str | dict[str, Any] | None,
hard_women_count: int,
hard_men_count: int,
pov_character_labels: list[str],
camera_detail_choices: list[str] | tuple[str, ...],
camera_config_with_mode: CameraConfigWithMode,
camera_directive: CameraDirective,
apply_contextual_composition: ApplyComposition,
contextual_composition_prompt: CompositionPrompt,
composition_prompt: Callable[[Any], str],
camera_scene_directive_for_context: CameraSceneDirective,
) -> dict[str, Any]:
return resolve_insta_pair_camera_result(
soft_row=soft_row,
hard_row=hard_row,
options=options,
camera_config=camera_config,
softcore_camera_config=softcore_camera_config,
hardcore_camera_config=hardcore_camera_config,
hard_women_count=hard_women_count,
hard_men_count=hard_men_count,
pov_character_labels=pov_character_labels,
camera_detail_choices=camera_detail_choices,
camera_config_with_mode=camera_config_with_mode,
camera_directive=camera_directive,
apply_contextual_composition=apply_contextual_composition,
contextual_composition_prompt=contextual_composition_prompt,
composition_prompt=composition_prompt,
camera_scene_directive_for_context=camera_scene_directive_for_context,
).as_dict()