Spaces:
Runtime error
Runtime error
File size: 4,225 Bytes
2de3774 |
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
import gradio as gr
from shared import tokenizer
import random
import re
from random_prompt.build_dynamic_prompt import createpromptvariant
def add_evolve_tab(prompt, image_number, run_event):
def tokenize_and_randomize(prompt, strength):
all_tokens = list(tokenizer.get_vocab().keys())
tokens = tokenizer.tokenize(prompt)
res = []
for token in tokens:
if random.random() < float(strength / 100.0):
res += [
all_tokens[random.randint(0, len(all_tokens) - 3)]
] # Skip <|startoftext> & <|endoftext|>
else:
res += [token]
return tokenizer.convert_tokens_to_string(res).strip()
def randomize_words(prompt, strength):
with open("wildcards_official/words.txt", "r", encoding="utf-8") as f:
word_list = f.read().lower().splitlines()
words = re.split(r"\b", prompt)
res = []
for word in words:
if (
not word.isdigit()
and word.lower() in word_list
and random.random() < float(strength / 100.0)
):
res += [word_list[random.randint(0, len(word_list) - 1)]]
else:
res += [word]
return "".join(res).strip()
def four_evolved_prompts(prompt, mode, strength):
res = []
for i in range(4):
match mode:
case "Words":
res.append(randomize_words(prompt, strength))
case "OBP Variant":
res.append(
createpromptvariant(
prompt, max(int(strength / 10), 3), advancedprompting=False
)
)
case _: # Use "Tokens" as default
res.append(tokenize_and_randomize(prompt, strength))
return res
def evolve(
button,
mode,
strength,
prompt,
run_event,
):
prompts = prompt.split("---")
in_txt = prompts[min(int(button), len(prompts)) - 1]
if mode == "Copy to Prompt...":
result = (
gr.update(value=in_txt),
gr.update(),
run_event,
)
else:
res = (
four_evolved_prompts(in_txt, mode, strength)
+ [in_txt]
+ four_evolved_prompts(in_txt, mode, strength)
)
result = (
gr.update(value="\n---\n".join(res)),
gr.update(value=1),
run_event + 1,
)
return result
with gr.Accordion(label="Evolve", open=False):
evolve_btn = {}
for x in range(0, 3):
with gr.Row():
for y in range(1, 4):
evolve_btn[3 * x + y] = gr.Button(
value=str(3 * x + y),
min_width=1,
)
with gr.Group():
evolve_modes = [
"Tokens",
"Words",
"OBP Variant",
"Copy to Prompt..."
]
evolve_mode = gr.Dropdown(
evolve_modes,
value=evolve_modes[0],
label="Mode",
)
evolve_strength = gr.Slider(
minimum=0, maximum=100, value=10, step=1, label="Evolve chance %:"
)
# with gr.Row():
# evo_help = gr.HTML(value='''
# Start with any prompt or random chunk of letters.<br>
# Click on the number of the image you like best.<br>
# Repeat.<br>
# For best result, set a static seed.<br>
# ''')
for i in range(1, 10):
evolve_btn[i].click(
evolve,
inputs=[
evolve_btn[i],
evolve_mode,
evolve_strength,
prompt,
run_event,
],
outputs=[prompt, image_number, run_event],
)
|