Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from typing import Dict, List, Union | |
| from src.frontend import ( | |
| continue_story_screen, | |
| story_information_widgets | |
| ) | |
| from src.utils.init_openai import init_client | |
| button_row = gr.Row( | |
| key='start_screen_button_row', | |
| preserved_by_key='key' | |
| ) | |
| new_story_button = gr.Button( | |
| value='Begin a new adventure!', | |
| visible=True, | |
| interactive=True, | |
| key='new_story_button', | |
| preserved_by_key='key' | |
| ) | |
| continue_story_button = gr.Button( | |
| value='Continue an existing adventure!', | |
| visible=True, | |
| interactive=True, | |
| key='continue_story_button', | |
| preserved_by_key='key' | |
| ) | |
| api_key_textbox = gr.Text( | |
| type='password', | |
| label='OpenAI API Key', | |
| placeholder='Enter your OpenAI API key', | |
| interactive=True, | |
| visible=True, | |
| key='api_key_textbox', | |
| preserved_by_key='key' | |
| ) | |
| def get_widgets() -> List[Union[gr.Text, gr.Button, gr.Row]]: | |
| return [ | |
| button_row, | |
| new_story_button, | |
| continue_story_button, | |
| api_key_textbox | |
| ] | |
| def get_wigets_updates( | |
| is_visible: bool = False | |
| ) -> Dict[Union[gr.Text, gr.Button, gr.Row], Union[gr.update, gr.Row]]: | |
| return { | |
| widget: gr.Row(visible=is_visible) if isinstance(widget, gr.Row) else \ | |
| gr.update(visible=is_visible) | |
| for widget in get_widgets() | |
| } | |
| def on_submit_new_story( | |
| api_key: str | |
| ) -> Dict[Union[gr.Text, gr.Slider, gr.Button], Union[gr.Row, gr.update]]: | |
| if init_client(api_key): | |
| return get_wigets_updates(False) | \ | |
| story_information_widgets.get_widgets_updates(True) | |
| return get_wigets_updates(True) | \ | |
| story_information_widgets.get_widgets_updates(False) | |
| def on_submit_continue_story( | |
| api_key: str | |
| ) -> Dict[Union[gr.Text, gr.Slider, gr.Button], Union[gr.Row, gr.update]]: | |
| if init_client(api_key): | |
| return get_wigets_updates(False) | \ | |
| continue_story_screen.get_widgets_updates(True) | |
| return get_wigets_updates(True) | \ | |
| continue_story_screen.get_widgets_updates(False) | |
| def render(): | |
| api_key_textbox.render() | |
| button_row.render() | |
| with button_row: | |
| new_story_button.render() | |
| continue_story_button.render() | |
| new_story_button.click( | |
| fn=on_submit_new_story, | |
| inputs=[api_key_textbox], | |
| outputs=get_widgets() + \ | |
| story_information_widgets.get_widgets() | |
| ) | |
| continue_story_button.click( | |
| fn=on_submit_continue_story, | |
| inputs=[api_key_textbox], | |
| outputs=get_widgets() + \ | |
| continue_story_screen.get_widgets() | |
| ) | |