Centralize formatter input hints
This commit is contained in:
+38
-1
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user