Update z-sd-webui-neutral-prompt-workYEAH7/lib_neutral_prompt/prompt_parser_hijack.py
Browse files
z-sd-webui-neutral-prompt-workYEAH7/lib_neutral_prompt/prompt_parser_hijack.py
CHANGED
|
@@ -35,6 +35,39 @@ prompt_parser_hijacker = hijacker.ModuleHijacker.install_or_get(
|
|
| 35 |
on_uninstall=script_callbacks.on_script_unloaded,
|
| 36 |
)
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
@prompt_parser_hijacker.hijack("get_multicond_prompt_list")
|
| 39 |
def get_multicond_prompt_list_hijack(prompts, original_function):
|
| 40 |
if not getattr(global_state, "is_enabled", False):
|
|
|
|
| 35 |
on_uninstall=script_callbacks.on_script_unloaded,
|
| 36 |
)
|
| 37 |
|
| 38 |
+
def parse_prompts(prompts):
|
| 39 |
+
"""
|
| 40 |
+
Принимает: строку, список/кортеж строк, или prompt_parser.SdConditioning.
|
| 41 |
+
Возвращает: List[str] — вебуишные строки вида "(text:weight) AND (...)".
|
| 42 |
+
Параллельно сохраняет raw_prompts и разобранные expr'ы в global_state.
|
| 43 |
+
"""
|
| 44 |
+
# 1) Нормализуем вход к List[str]
|
| 45 |
+
SdConditioning = getattr(prompt_parser, "SdConditioning", None)
|
| 46 |
+
|
| 47 |
+
if SdConditioning is not None and isinstance(prompts, SdConditioning):
|
| 48 |
+
# SdConditioning может быть итерируемым набором саб-промптов
|
| 49 |
+
try:
|
| 50 |
+
webui_prompts = [str(p) for p in prompts]
|
| 51 |
+
except Exception:
|
| 52 |
+
webui_prompts = list(prompts)
|
| 53 |
+
elif isinstance(prompts, (list, tuple)):
|
| 54 |
+
webui_prompts = ["" if p is None else str(p) for p in prompts]
|
| 55 |
+
elif prompts is None:
|
| 56 |
+
webui_prompts = [""]
|
| 57 |
+
else:
|
| 58 |
+
webui_prompts = [str(prompts)]
|
| 59 |
+
|
| 60 |
+
# 2) Сохраняем «сырые» промпты для расписаний WebUI
|
| 61 |
+
global_state.raw_prompts = webui_prompts[:]
|
| 62 |
+
|
| 63 |
+
# 3) Парсим в expr-деревья и кладём в глобальное состояние
|
| 64 |
+
exprs = [neutral_prompt_parser.parse_root(p) for p in webui_prompts]
|
| 65 |
+
global_state.prompt_exprs = exprs
|
| 66 |
+
|
| 67 |
+
# 4) Транспилируем expr -> webui-строки совместимые с get_multicond_prompt_list
|
| 68 |
+
visitor = WebuiPromptVisitor()
|
| 69 |
+
return [expr.accept(visitor) for expr in exprs]
|
| 70 |
+
|
| 71 |
@prompt_parser_hijacker.hijack("get_multicond_prompt_list")
|
| 72 |
def get_multicond_prompt_list_hijack(prompts, original_function):
|
| 73 |
if not getattr(global_state, "is_enabled", False):
|