dikdimon commited on
Commit
9f02b35
·
verified ·
1 Parent(s): 8191c37

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):