Spaces:
Runtime error
Runtime error
| import os | |
| import random | |
| import gradio as gr | |
| import os | |
| import random | |
| import openai | |
| os.environ['OPENAI_KEY'] = "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" | |
| def continueStory(story, blank): | |
| start = story.replace("___", blank) | |
| openai.api_key = os.environ['OPENAI_KEY'] | |
| messageHistory = [] | |
| messageHistory.append({"role": "user", "content": f"""Generate a humorous, engaging, creative and witty story continuing from the following starting line: | |
| {start} | |
| This will be a short story of at most 5 sentences. Make sure to keep the starting line in the text you write. Write using dry humour and witty style."""}) | |
| response = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", | |
| messages = messageHistory | |
| ) | |
| story = response["choices"][0]["message"]["content"] | |
| messageHistory.append(response["choices"][0]["message"]) | |
| return story, messageHistory | |
| with gr.Blocks(css=''' | |
| .gradio-container { | |
| display: flex; | |
| flex-direction: column; | |
| justify-content: center; | |
| align-items: center; | |
| background-image: url('file=https://cdn.discordapp.com/attachments/941582479117127680/1080730421425344542/rodotcom_colorful_abstract_illustration_for_the_background_of_c_f1b331d7-6493-4a33-9063-345d31a66ddb.png'); | |
| } | |
| h1 { | |
| font-size: 3rem; | |
| font-weight: 700; | |
| margin-top: 1rem; | |
| margin-bottom: 1rem; | |
| color: white; | |
| } | |
| p { | |
| font-size: 1.25rem; | |
| margin-bottom: 2rem; | |
| color: white; | |
| } | |
| label { | |
| font-size: 1.25rem; | |
| font-weight: 500; | |
| margin-bottom: 0.5rem; | |
| } | |
| input[type="text"], textarea { | |
| font-size: 1.25rem; | |
| padding: 0.5rem; | |
| border: 2px solid #ccc; | |
| border-radius: 5px; | |
| width: 100%; | |
| } | |
| .gradio-button { | |
| background-color: #2196f3; | |
| color: #fff; | |
| font-size: 1.25rem; | |
| font-weight: 500; | |
| padding: 0.75rem 1.5rem; | |
| border-radius: 5px; | |
| cursor: pointer; | |
| transition: all 0.2s ease-in-out; | |
| } | |
| .gradio-button:hover { | |
| background-color: #0c7cd5; | |
| } | |
| ''') as demo: | |
| title = gr.HTML(''' | |
| <div style="text-align: center;"> | |
| <h1 style="color: white; font-size: 3rem; font-weight: 700; margin-bottom: 1rem; color: white;">Infinite Stories</h1> | |
| </div> | |
| ''') | |
| messageHistory = gr.State() | |
| beginBtn = gr.Button("Start!", elem_id="generate-btn") | |
| story_output = gr.Textbox(label='Story') | |
| blank = gr.Textbox(label='How will you fill the blank?', elem_id = 'blank') | |
| with gr.Column(visible=True) as continueStoryCol: | |
| continueBtn = gr.Button("Continue Story", elem_id="continue-btn") | |
| with gr.Column(visible=False) as newStoryCol: | |
| newStoryBtn = gr.Button("Create New Story", elem_id="new-story-btn") | |
| with gr.Column(visible=True) as finishCol: | |
| finishBtn = gr.Button("Finish Story", elem_id="finish-btn") | |
| with gr.Column(visible=False) as mesHistoryCol: | |
| messageHistoryTextBox = gr.Textbox(label='Fill in the blank?', elem_id = 'blank', value=messageHistory) | |
| # the submit feedback btn needs to: send the feedback, | |
| # hide the elements and provide a message saying thanks for your feedback | |
| def generateStory(): | |
| file_path = './starters.txt' | |
| with open(file_path, 'r') as f: | |
| lines = f.readlines() | |
| # Randomly select a line and save it to the variable 'start' | |
| start = random.choice(lines).strip() | |
| return start | |
| def finishStory(blank, messageHistory): | |
| openai.api_key = openai.api_key = os.environ['OPENAI_KEY'] | |
| messageHistory.append({"role": "user", "content": blank + "\n\nNow bring the story to a close. Write the necessary paragraphs to make it have a happy or funny ending. No need to leave a blank anymore."}) | |
| response = openai.ChatCompletion.create( | |
| model="gpt-3.5-turbo", | |
| messages = messageHistory | |
| ) | |
| story = response["choices"][0]["message"]["content"] | |
| messageHistory.append(response["choices"][0]["message"]) | |
| return story, messageHistory | |
| def createNewStory(): | |
| return {character: gr.update(value=""), story_output: gr.update(value=""), blank: gr.update(value="")} | |
| def hideContinueBtn(): | |
| return {continueStoryCol: gr.update(visible=False), newStoryCol: gr.update(visible=True), finishCol: gr.update(visible=False)} | |
| def createNewCharacter(): | |
| if characterDropdownCol.visible == True: | |
| return {characterDropdownCol: gr.update(visible=False), characterTextCol: gr.update(visible=True), createNewCharacterBtn: gr.update(value="Or select a character!")} | |
| elif characterDropdownCol.visible == False: | |
| return {characterDropdownCol: gr.update(visible=True), characterTextCol: gr.update(visible=False), createNewCharacterBtn: gr.update(value="Or create your own!")} | |
| beginBtn.click(generateStory, outputs=[story_output]) | |
| continueBtn.click(continueStory, inputs=[story_output, blank], outputs=[story_output, messageHistory]) | |
| #finishBtn.click(finishStory, inputs=[blank, messageHistory], outputs=[story_output, messageHistory]) | |
| #finishBtn.click(hideContinueBtn, [], [continueStoryCol, newStoryCol, finishCol]) | |
| newStoryBtn.click(createNewStory, [], [story_output, blank]) | |
| demo.launch(share=False) |