Spaces:
Runtime error
Runtime error
File size: 4,900 Bytes
0c696ac 4c68c58 4ee9eee 0c696ac 4c68c58 a72960c 4c68c58 0c696ac 0810df2 0c696ac 0810df2 66f7296 0c696ac 17cff25 0c696ac df32c6d 0c696ac df32c6d 0c696ac 8f115fa 833c8dd 0c696ac 833c8dd 4c68c58 833c8dd 84519dc 4c68c58 ecbc1ab 4c68c58 a72960c 4c68c58 84519dc 4c68c58 e457e19 4c68c58 ecbc1ab e457e19 ecbc1ab 4c68c58 e457e19 4c68c58 e457e19 4c68c58 40e5857 4c68c58 40e5857 833c8dd 4c68c58 40e5857 4c68c58 833c8dd 4c68c58 |
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 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
from asyncio import constants
import gradio as gr
import requests
import os
import re
import random
# GPT-J-6B API
API_URL = "https://api-inference.huggingface.co/models/EleutherAI/gpt-j-6B"
#HF_TOKEN = os.environ["HF_TOKEN"]
#headers = {"Authorization": f"Bearer {HF_TOKEN}"}
prompt = """
Bilbo is a hobbit rogue who wears a brown cloak and carries a ring.
Bremen is a human wizard, he wears a blue robe and carries a wand.
"""
examples = [["river"], ["night"], ["trees"],["table"],["laughs"]]
def npc_randomize():
#name is a random combination of syllables
vowels = list("aeiou")
constants = list("bcdfghjklmnpqrstvwxyz")
seperators=list("-'")
name =""
for i in range(random.randint(2,4)):
name += random.choice(constants)
name += random.choice(vowels)
if random.random()<0.5:
name += random.choice(constants)
if random.random()<0.1:
name += random.choice(seperators)
#capitalize first letter
name = name[0].upper() + name[1:]
races="""Dwarf
Elf
Halfling
Human
Dragonborn
Gnome
Half-elf
Half-orc
Tiefling
Aarakocra
Genasi
Goliath""".split("\n")
races=[x.strip() for x in races]
race=random.choice(races)
print("foo",races,race)
classes="""Barbarian
Bard
Cleric
Druid
Fighter
Monk
Paladin
Ranger
Rogue
Sorcerer
Warlock
Wizard""".split("\n")
classes=[x.strip() for x in classes]
characterClass=random.choice(classes)
pronoun=random.choices(["he","she","they"],weights=[0.45,0.45,0.1],k=1)[0]
return name,race,characterClass,pronoun
def npc_generate(name,race,characterClass,pronoun):
desc="{name} is a {race} {characterClass}, {pronoun}".format(name=name,race=race,characterClass=characterClass,pronoun=pronoun)
p = prompt + "\n"+desc
print(f"*****Inside poem_generate - Prompt is :{p}")
json_ = {"inputs": p,
"parameters":
{
"top_p": 0.9,
"temperature": 1.1,
"max_new_tokens": 50,
"return_full_text": False,
}}
#response = requests.post(API_URL, headers=headers, json=json_)
response = requests.post(API_URL, json=json_)
output = response.json()
print(f"If there was an error? Reason is : {output}")
output_tmp = output[0]['generated_text']
print(f"GPTJ response without splits is: {output_tmp}")
#poem = output[0]['generated_text'].split("\n\n")[0] # +"."
if "\n\n" not in output_tmp:
if output_tmp.find('.') != -1:
idx = output_tmp.find('.')
poem = output_tmp[:idx+1]
else:
idx = output_tmp.rfind('\n')
poem = output_tmp[:idx]
else:
poem = output_tmp.split("\n\n")[0] # +"."
poem = poem.replace('?','')
print(f"Poem being returned is: {poem}")
return desc+poem
def poem_to_image(poem):
print("*****Inside Poem_to_image")
poem = " ".join(poem.split('\n'))
poem = poem + ", character art, concept art, artstation"
steps, width, height, images, diversity = '50','256','256','1',15
iface = gr.Interface.load("spaces/multimodalart/latentdiffusion")
print("about to die",iface,dir(iface))
prompt = re.sub(r'[^a-zA-Z0-9 .]', '', poem)
print("about to die",prompt)
img=iface(poem, steps, width, height, images, diversity)[0]
return img
demo = gr.Blocks()
with demo:
gr.Markdown("<h1><center>NPC Generator</center></h1>")
gr.Markdown(
"based on <a href=https://huggingface.co/spaces/Gradio-Blocks/GPTJ6B_Poetry_LatentDiff_Illustration> Gradio poetry generator</a>."
"<div>first input name, race and class (or generate them randomly)</div>"
"<div>Next, use GPT-J to generate a short description</div>"
"<div>Finally, Generate an illustration 🎨 provided by Latent Diffusion model.</div>"
)
with gr.Row():
b0 = gr.Button("Randomize name,race and class")
b1 = gr.Button("Generate NPC")
b2 = gr.Button("Generate Image")
with gr.Row():
input_name = gr.Textbox(label="name",placeholder="Drizzt")
input_race = gr.Textbox(label="race",placeholder="dark elf")
input_class = gr.Textbox(label="class",placeholder="ranger")
input_pronoun = gr.Textbox(label="pronoun",placeholder="he")
with gr.Row():
poem_txt = gr.Textbox(label="description",lines=7)
output_image = gr.Image(label="portrait",type="filepath", shape=(256,256))
b0.click(npc_randomize,inputs=[],outputs=[input_name,input_race,input_class,input_pronoun])
b1.click(npc_generate, inputs=[ input_name,input_race,input_class,input_pronoun], outputs=poem_txt)
b2.click(poem_to_image, poem_txt, output_image)
#examples=examples
demo.launch(enable_queue=True, debug=True) |