Spaces:
Runtime error
Runtime error
| 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], | |
| ) | |