import torch from diffusers import StableDiffusionPipeline from torch import autocast import numpy as np import gradio as gr import openai import os pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=os.environ.get('hugging-token')) device="cpu" openai.api_key = os.environ['openai-key'] pipe = pipe.to(device) def generateStory(theme1, theme2): prompt_text = "Write the first paragraph of a story integrates the themes \"{}\" and \"{}\" in a creative way in the style of Kurt Vonnegut.\n\nFirst paragraph of story:\n\n".format(theme1,theme2) response = openai.Completion.create( engine="text-davinci-002", prompt=prompt_text, temperature=0.7, max_tokens=250, top_p=1, frequency_penalty=0, presence_penalty=0 ) story = response["choices"][0]["text"] content_to_classify = "Your content here" response = openai.Completion.create( model="content-filter-alpha", prompt = "<|endoftext|>"+story+"\n--\nLabel:", temperature=0, max_tokens=1, top_p=0, logprobs=10 ) output_label = response["choices"][0]["text"] # This is the probability at which we evaluate that a "2" is likely real # vs. should be discarded as a false positive toxic_threshold = -0.355 if output_label == "2": story='Please generate again' if story.startswith('\n\n'): story = story[2:] return story def illustratedStory(story): if story != 'Please generate again': illustration_response = openai.Completion.create( model="text-davinci-002", prompt="Transform the following story into a caption of an accompanying illustration. Start with 'Beautiful digital illustration of':\n\nStory:\n\nI stand at the edge of the Blue Mountains and gaze out at the vastness before me. It's a beautiful day, and the sun is shining. I can see for miles and miles, and it feels like I'm standing at the edge of the world. I'm here with the person I love, and we're about to embark on a great adventure. I can't wait to explore every inch of this place with them.\n\nIllustration caption:\n\nBeautiful digital illustration of two people standing by the edge of a mountain holding hands looking out\n\nStory:\n\n{}\n\nIllustration caption:".format(story), temperature=0.7, max_tokens=256, top_p=1, frequency_penalty=0, presence_penalty=0 ) image_prompt = illustration_response["choices"][0]["text"] generator = torch.Generator('cpu') image = pipe(image_prompt).images[0] # image here is in [PIL format](https://pillow.readthedocs.io/en/stable/) else: image = np.zeros([100,100,3],dtype=np.uint8) image.fill(255) # or img[:] = 255 return image ''' demo = gr.Interface( fn=themes, inputs=["text", "text"], outputs=["text", "image"], ) demo.launch() ''' def continueStory(inputStory): prompt_text = inputStory response = openai.Completion.create( engine="text-davinci-002", prompt=prompt_text, temperature=0.7, max_tokens=250, top_p=1, frequency_penalty=0, presence_penalty=0 ) story = response["choices"][0]["text"] content_to_classify = "Your content here" response = openai.Completion.create( model="content-filter-alpha", prompt = "<|endoftext|>"+story+"\n--\nLabel:", temperature=0, max_tokens=1, top_p=0, logprobs=10 ) output_label = response["choices"][0]["text"] # This is the probability at which we evaluate that a "2" is likely real # vs. should be discarded as a false positive toxic_threshold = -0.355 if output_label == "2": story='Please generate again' if story.startswith('\n\n'): story = story[2:] return inputStory + story ''' demo = gr.Interface( fn=themes, inputs=["text", "text"], outputs=["text", "image"], ) demo.launch() ''' with gr.Blocks(css=''' .h1 { font-family: HK Grotesk; font-style: normal; font-weight: bold; font-size: 100px; line-height: 105%; margin: 0; } ''') as demo: title = gr.HTML( """

Illustrated Narrative Device

A playful AI co-writer!


Illustrations can take up to 10 minutes to generate. See it as an exercise in patience, amidst a sea of immediacy!

') with gr.Row(): illustration = gr.Image(label='Illustration') gr.HTML('

Compute credits are expensive. Please help me keep this experiment running by buying me a coffee here :)


') gr.HTML('

Built with GPT-3, Stable Diffusion, the Diffusers library and Gradio, by Rodolfo Ocampo

') b1.click(generateStory, inputs=[theme1,theme2], outputs=[story_output]) b2.click(illustratedStory, inputs=[story_output], outputs=[illustration]) b3.click(continueStory, inputs=[story_output], outputs=[story_output]) demo.launch(debug=True)