Centralize formatter input hints

This commit is contained in:
2026-06-27 13:45:36 +02:00
parent c4d5477bf9
commit bd3adfcd5a
5 changed files with 101 additions and 5 deletions
+38 -1
View File
@@ -29,6 +29,26 @@ DEFAULT_PROMPT_FIELD_LABELS = (
"Avoid",
)
INPUT_HINT_AUTO = "auto"
INPUT_HINT_METADATA = "metadata_json"
INPUT_HINT_PROMPT = "prompt"
INPUT_HINT_CAPTION_OR_PROMPT = "caption_or_prompt"
TEXT_INPUT_HINTS = (INPUT_HINT_PROMPT, INPUT_HINT_CAPTION_OR_PROMPT)
FORMATTER_INPUT_HINTS = (INPUT_HINT_AUTO, INPUT_HINT_METADATA, INPUT_HINT_PROMPT, INPUT_HINT_CAPTION_OR_PROMPT)
METADATA_INPUT_HINTS = (INPUT_HINT_AUTO, INPUT_HINT_METADATA)
_INPUT_HINT_ALIASES = {
"caption": INPUT_HINT_CAPTION_OR_PROMPT,
"caption_prompt": INPUT_HINT_CAPTION_OR_PROMPT,
"caption_or_text": INPUT_HINT_CAPTION_OR_PROMPT,
"metadata": INPUT_HINT_METADATA,
"metadata json": INPUT_HINT_METADATA,
"source_json": INPUT_HINT_AUTO,
"source text": INPUT_HINT_PROMPT,
"source_text": INPUT_HINT_PROMPT,
"text": INPUT_HINT_PROMPT,
}
def prompt_field_labels() -> tuple[str, ...]:
return DEFAULT_PROMPT_FIELD_LABELS
@@ -53,13 +73,30 @@ def maybe_json(text: Any) -> dict[str, Any] | None:
return value if isinstance(value, dict) else None
def normalize_input_hint(value: Any, *, text_hint: str = INPUT_HINT_PROMPT) -> str:
hint = clean_text(value).lower().replace("-", "_")
hint = _INPUT_HINT_ALIASES.get(hint, hint)
if hint in (INPUT_HINT_AUTO, INPUT_HINT_METADATA):
return hint
if hint in TEXT_INPUT_HINTS:
return text_hint if text_hint in TEXT_INPUT_HINTS else hint
return INPUT_HINT_AUTO
def input_hint_choices(*, text_hint: str = INPUT_HINT_PROMPT) -> list[str]:
text_hint = text_hint if text_hint in TEXT_INPUT_HINTS else INPUT_HINT_PROMPT
return [INPUT_HINT_AUTO, INPUT_HINT_METADATA, text_hint]
def row_from_inputs(
source_text: str,
metadata_json: str,
input_hint: str,
*,
metadata_methods: tuple[str, ...] = ("auto", "metadata_json"),
metadata_methods: tuple[str, ...] = METADATA_INPUT_HINTS,
text_hint: str = INPUT_HINT_PROMPT,
) -> tuple[dict[str, Any] | None, str]:
input_hint = normalize_input_hint(input_hint, text_hint=text_hint)
if input_hint in metadata_methods:
for text, method in ((metadata_json, "metadata_json"), (source_text, "source_json")):
row = maybe_json(text)