Spaces:
Runtime error
Runtime error
import gradio as gr | |
import torch | |
from mario_gpt.dataset import MarioDataset | |
from mario_gpt.prompter import Prompter | |
from mario_gpt.lm import MarioLM | |
from mario_gpt.utils import view_level, convert_level_to_png | |
mario_lm = MarioLM() | |
device = torch.device('cuda') | |
mario_lm = mario_lm.to(device) | |
TILE_DIR = "data/tiles" | |
def update(pipes, enemies, blocks, elevation, temperature = 2.0, level_size = 1399, prompt = ""): | |
if prompt == "": | |
prompt = f"{pipes} pipes, {enemies} enemies, {blocks} blocks, {elevation} elevation" | |
print(f"Using prompt: {prompt}") | |
prompts = [prompt] | |
generated_level = mario_lm.sample( | |
prompts=prompts, | |
num_steps=level_size, | |
temperature=temperature, | |
use_tqdm=True | |
) | |
img = convert_level_to_png(generated_level.squeeze(), TILE_DIR, mario_lm.tokenizer)[0] | |
return img | |
with gr.Blocks() as demo: | |
gr.Markdown("## Demo for ['MarioGPT: Open-Ended Text2Level Generation through Large Language Models'](https://github.com/shyamsn97/mario-gpt). Enter a text prompt or select parameters from below!") | |
text_prompt = gr.Textbox(value="", label="Enter your MarioGPT prompt. ex: 'many pipes, many enemies, some blocks, low elevation', or compose your prompts below") | |
with gr.Accordion(label="Compose your prompt", open=False): | |
pipes = gr.Radio(["no", "little", "some", "many"], label="pipes") | |
enemies = gr.Radio(["no", "little", "some", "many"], label="enemies") | |
blocks = gr.Radio(["little", "some", "many"], label="blocks") | |
elevation = gr.Radio(["low", "high"], label="elevation") | |
temperature = gr.Number(value=2.0, label="temperature: Increase these for more stochastic, but lower quality, generations") | |
level_size = gr.Number(value=1399, precision=0, label="level_size") | |
btn = gr.Button("Generate level") | |
level_image = gr.Image() | |
btn.click(fn=update, inputs=[pipes, enemies, blocks, elevation, temperature, level_size, text_prompt], outputs=level_image) | |
gr.Examples( | |
examples=[ | |
["many", "many", "some", "high"], | |
["no", "some", "many", "high", 2.0], | |
["many", "many", "little", "low", 2.0], | |
["no", "no", "many", "high", 2.4], | |
], | |
inputs=[pipes, enemies, blocks, elevation], | |
outputs=level_image, | |
fn=update, | |
cache_examples=True, | |
) | |
demo.launch() | |