import os from . import VyroParams from dynamicprompts.generators import RandomPromptGenerator from dynamicprompts.wildcards import WildcardManager wildcard_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../wildcards') wm = WildcardManager(wildcard_path) def calc_prompt(params:VyroParams, prompt_tree:dict) -> (str, str): """ Calculates the prompt string from the given VyroParams object. Updates the params with final_positive_prompt and final_negative_prompt. Returns: (str, str): The prompt strings for the positive prompt, negative prompt. """ if prompt_tree is None: raise ValueError("Prompt tree is None") if params.style is None or params.style == "": raise ValueError("Style is None") if params.style not in prompt_tree.keys(): raise ValueError("Style not in prompt tree") style = prompt_tree[params.style] rpg = RandomPromptGenerator(wildcard_manager=wm,seed=params.seed) if not params.is_raw: final_positive_prompt = rpg.generate(style['prompt'].replace('{prompt}', params.user_prompt)) final_negative_prompt = style['negative_prompt'] if params.user_neg_prompt != "": final_negative_prompt = f'{params.user_neg_prompt}, {final_negative_prompt}' final_negative_prompt = rpg.generate(final_negative_prompt) else: final_positive_prompt = rpg.generate(params.user_prompt) final_negative_prompt = rpg.generate(params.user_neg_prompt if params.user_neg_prompt != "" else ' ') if isinstance(final_positive_prompt, list): final_positive_prompt = final_positive_prompt[0] if isinstance(final_negative_prompt, list): final_negative_prompt = final_negative_prompt[0] params.final_positive_prompt = final_positive_prompt params.final_negative_prompt = final_negative_prompt return (final_positive_prompt, final_negative_prompt)