File size: 1,962 Bytes
6fecfbe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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)