Extract Krea format dispatch route

This commit is contained in:
2026-06-27 12:22:22 +02:00
parent 84c369c190
commit 837299be6c
5 changed files with 280 additions and 52 deletions
+32 -51
View File
@@ -5,6 +5,7 @@ from typing import Any
try:
from . import formatter_input as input_policy
from . import krea_format_route
from . import route_metadata as route_metadata_policy
from .krea_action_context import (
is_close_foreplay_text as _is_close_foreplay_text,
@@ -40,6 +41,7 @@ try:
from .prompt_hygiene import sanitize_negative_text, sanitize_prose_text
except ImportError: # Allows local smoke tests with `python -c`.
import formatter_input as input_policy
import krea_format_route
import route_metadata as route_metadata_policy
from krea_action_context import (
is_close_foreplay_text as _is_close_foreplay_text,
@@ -604,6 +606,21 @@ def _fallback_text_to_krea(
return _paragraph([positive]), negative, "text(fallback)"
def _krea_format_dependencies() -> krea_format_route.KreaFormatDependencies:
return krea_format_route.KreaFormatDependencies(
trigger_candidates=TRIGGER_CANDIDATES,
clean=_clean,
row_from_inputs=_row_from_inputs,
normal_row_to_krea=_normal_row_to_krea,
insta_pair_to_krea=_insta_pair_to_krea,
fallback_text_to_krea=_fallback_text_to_krea,
append_formatter_hints=_append_formatter_hints,
combine_negative=_combine_negative,
sanitize_prose_text=sanitize_prose_text,
sanitize_negative_text=sanitize_negative_text,
)
def format_krea2_prompt(
source_text: str,
metadata_json: str = "",
@@ -616,54 +633,18 @@ def format_krea2_prompt(
extra_positive: str = "",
extra_negative: str = "",
) -> dict[str, str]:
detail_level = detail_level if detail_level in ("concise", "balanced", "dense") else "balanced"
style_mode = style_mode if style_mode in ("preserve", "photographic", "minimal") else "preserve"
target = target if target in ("auto", "single", "softcore", "hardcore") else "auto"
row, method = _row_from_inputs(source_text, metadata_json, input_hint)
extracted_negative = ""
if row and row.get("mode") == "Insta/OF":
soft_prompt, soft_negative, hard_prompt, hard_negative = _insta_pair_to_krea(row, detail_level, style_mode)
soft_row = row.get("softcore_row") if isinstance(row.get("softcore_row"), dict) else {}
hard_row = row.get("hardcore_row") if isinstance(row.get("hardcore_row"), dict) else {}
soft_prompt = _append_formatter_hints(soft_prompt, row, soft_row)
hard_prompt = _append_formatter_hints(hard_prompt, row, hard_row)
if extra_positive.strip():
soft_prompt = f"{soft_prompt.rstrip()} {extra_positive.strip()}"
hard_prompt = f"{hard_prompt.rstrip()} {extra_positive.strip()}"
soft_prompt = sanitize_prose_text(soft_prompt, triggers=TRIGGER_CANDIDATES)
hard_prompt = sanitize_prose_text(hard_prompt, triggers=TRIGGER_CANDIDATES)
selected = hard_prompt if target == "hardcore" else soft_prompt if target == "softcore" else soft_prompt
selected_negative = hard_negative if target == "hardcore" else soft_negative
negative = sanitize_negative_text(_combine_negative(selected_negative, negative_prompt, extra_negative))
return {
"krea_prompt": selected,
"negative_prompt": negative,
"krea_softcore_prompt": soft_prompt,
"krea_hardcore_prompt": hard_prompt,
"softcore_negative_prompt": sanitize_negative_text(_combine_negative(soft_negative, extra_negative)),
"hardcore_negative_prompt": sanitize_negative_text(_combine_negative(hard_negative, extra_negative)),
"method": f"{method}:krea2(insta_of_pair)",
}
if row:
prompt, kind = _normal_row_to_krea(row, detail_level, style_mode)
prompt = _append_formatter_hints(prompt, row)
extracted_negative = _clean(row.get("negative_prompt"))
method = f"{method}:krea2({kind})"
else:
prompt, extracted_negative, method = _fallback_text_to_krea(source_text, preserve_trigger, detail_level, style_mode)
if extra_positive.strip():
prompt = f"{prompt.rstrip()} {extra_positive.strip()}"
prompt = sanitize_prose_text(prompt, triggers=TRIGGER_CANDIDATES)
negative = sanitize_negative_text(_combine_negative(extracted_negative, negative_prompt, extra_negative))
return {
"krea_prompt": prompt,
"negative_prompt": negative,
"krea_softcore_prompt": "",
"krea_hardcore_prompt": "",
"softcore_negative_prompt": "",
"hardcore_negative_prompt": "",
"method": method,
}
return krea_format_route.format_krea2_prompt(
krea_format_route.KreaFormatRequest(
source_text=source_text,
metadata_json=metadata_json,
negative_prompt=negative_prompt,
input_hint=input_hint,
target=target,
detail_level=detail_level,
style_mode=style_mode,
preserve_trigger=preserve_trigger,
extra_positive=extra_positive,
extra_negative=extra_negative,
),
_krea_format_dependencies(),
)