Centralize item axis value flattening

This commit is contained in:
2026-06-27 18:12:34 +02:00
parent 8ae689f0e7
commit 867916ee51
6 changed files with 170 additions and 102 deletions
+4 -31
View File
@@ -5,12 +5,14 @@ from typing import Any
try:
from . import formatter_input as input_policy
from . import item_axis_policy
from . import route_metadata as route_metadata_policy
from . import sdxl_presets as sdxl_policy
from . import sdxl_tag_routes
from . import softcore_text_policy
except ImportError: # Allows local smoke tests with `python -c`.
import formatter_input as input_policy
import item_axis_policy
import route_metadata as route_metadata_policy
import sdxl_presets as sdxl_policy
import sdxl_tag_routes
@@ -102,40 +104,11 @@ def formatter_hint_tags(*rows: dict[str, Any]) -> list[str]:
return tags
def _axis_value_texts(value: Any) -> list[str]:
if isinstance(value, str):
text = clean(value)
return [text] if text and text.lower() not in ("any", "auto", "random", "none") else []
if isinstance(value, (int, float, bool)) or value is None:
return []
if isinstance(value, list):
texts: list[str] = []
for item in value:
texts.extend(_axis_value_texts(item))
return texts
if isinstance(value, dict):
for preferred in ("text", "prompt", "template", "value", "name"):
preferred_texts = _axis_value_texts(value.get(preferred))
if preferred_texts:
return preferred_texts
texts: list[str] = []
for item in value.values():
texts.extend(_axis_value_texts(item))
return texts
return []
def axis_value_tags(row: dict[str, Any]) -> list[str]:
if not isinstance(row, dict):
return []
axis_values = row.get("item_axis_values")
if not isinstance(axis_values, dict):
return []
tags: list[str] = []
seen: set[str] = set()
for value in axis_values.values():
for text in _axis_value_texts(value):
add(tags, seen, text)
for text in item_axis_policy.row_axis_value_texts(row):
add(tags, seen, text)
return tags