Spaces:
Running
on
Zero
Running
on
Zero
| from .utils import * | |
| from .vote_utils import ( | |
| upvote_last_response_ie as upvote_last_response, | |
| downvote_last_response_ie as downvote_last_response, | |
| flag_last_response_ie as flag_last_response, | |
| leftvote_last_response_iem as leftvote_last_response, | |
| rightvote_last_response_iem as rightvote_last_response, | |
| tievote_last_response_iem as tievote_last_response, | |
| bothbad_vote_last_response_iem as bothbad_vote_last_response, | |
| share_click_iem as share_click, | |
| generate_ie, | |
| generate_ie_museum, | |
| generate_iem, | |
| generate_iem_museum, | |
| generate_iem_annoy, | |
| generate_iem_annoy_museum, | |
| share_js | |
| ) | |
| from functools import partial | |
| def build_side_by_side_ui_anony_ie(models): | |
| notice_markdown = """ | |
| # βοΈ GenAI-Arena βοΈ : Benchmarking Visual Generative Models in the Wild | |
| **GenAI-Arena is an open evaluation plaform focused on Image Generation, Image Editing, and Video Generation tasks.** | |
| | [Code](https://huggingface.co/spaces/TIGER-Lab/GenAI-Arena/tree/main) | [Paper](https://arxiv.org/abs/2406.04485v1) | [Dataset](https://huggingface.co/datasets/TIGER-Lab/GenAI-Bench) | | |
| ## π Rules | |
| - Edit with two selected models side-by-side and vote! | |
| - Upload a source image that you want to edit. | |
| - Input source prompt, target prompt and instruct prompt. | |
| - Wait to see the results after edition. | |
| - Click "New Round" to start a new round. | |
| - Vote won't be counted if model identity is revealed during generation. | |
| - The model coulmodel_selector_left.changed output a totally black image or noise. It's not a bug but the failure case of the model. | |
| ## β οΈ Data Collection Consent | |
| - Your input and votes will be collected for research purposes only. | |
| - By using this service, you agree to the collection of your input and votes for research purposes. | |
| - Your data will be anonymized and will not be used for commercial purposes. | |
| ## π User Guidelines for AI Content Generation | |
| - No NSFW Content: All user inputs must adhere to our content guidelines. Prompts containing NSFW (Not Safe For Work) content are strictly prohibited. | |
| - Automatic Filtering: Any input deemed inappropriate or NSFW will be automatically filtered out. Users will be prompted to re-enter a suitable request. | |
| - Content Guidelines: Please avoid using language or descriptions that could be considered offensive, explicit, or inappropriate. This includes, but is not limited to, sexual content, violence, and hate speech. | |
| - Respectful Use: We encourage all users to create content that is respectful and suitable for all audiences. | |
| ## π Arena Elo | |
| Find out who is the π₯conditional image edition models! | |
| ## π Editing now! | |
| """ | |
| model_list = models.model_ie_list | |
| state0, state1 = gr.State(), gr.State() | |
| gen_func = partial(generate_iem_annoy, models.generate_image_ie_parallel_anony) | |
| gen_func_random = partial(generate_iem_annoy_museum, models.generate_image_ie_museum_parallel_anony) | |
| gr.Markdown(notice_markdown, elem_id="notice_markdown") | |
| with gr.Group(elem_id="share-region-anony"): | |
| with gr.Accordion("π Expand to see all Arena players", open=False): | |
| model_description_md = get_model_description_md(model_list) | |
| gr.Markdown(model_description_md, elem_id="model_description_markdown") | |
| with gr.Row(): | |
| with gr.Column(): | |
| chatbot_left = gr.Image(width=512, type="pil") | |
| with gr.Column(): | |
| chatbot_right = gr.Image(width=512, type="pil") | |
| with gr.Row(): | |
| with gr.Column(): | |
| model_selector_left =gr.Markdown("", visible=False) | |
| with gr.Column(): | |
| model_selector_right = gr.Markdown("", visible=False) | |
| with gr.Row(): | |
| slow_warning = gr.Markdown("", elem_id="notice_markdown") | |
| with gr.Row(): | |
| leftvote_btn = gr.Button( | |
| value="π A is better", visible=False, interactive=False | |
| ) | |
| rightvote_btn = gr.Button( | |
| value="π B is better", visible=False, interactive=False | |
| ) | |
| tie_btn = gr.Button(value="π€ Tie", visible=False, interactive=False) | |
| bothbad_btn = gr.Button( | |
| value="π Both are bad", visible=False, interactive=False | |
| ) | |
| with gr.Row(): | |
| textbox_source = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your source prompt", | |
| elem_id="input_box_s", | |
| ) | |
| textbox_target = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your target prompt", | |
| elem_id="input_box_t", | |
| ) | |
| textbox_instruct = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your instruct prompt", | |
| elem_id="input_box_t", | |
| ) | |
| with gr.Row(): | |
| source_image = gr.Image(type="pil") | |
| send_btn = gr.Button(value="Send", variant="primary", scale=0) | |
| draw_btn = gr.Button(value="π² Random sample", variant="primary", scale=0) | |
| with gr.Row() as button_row: | |
| clear_btn = gr.Button(value="π² New Round", interactive=False) | |
| regenerate_btn = gr.Button(value="π Regenerate", interactive=False) | |
| # share_btn = gr.Button(value="π· Share") | |
| #gr.Markdown(acknowledgment_md, elem_id="ack_markdown") | |
| gr.Examples( | |
| examples=[ | |
| ["a bowl of strawberries", "a bowl of oranges", "change strawberries to oranges", | |
| os.path.join("./examples", "strawberries.jpg")], | |
| ["a pig is eating an ice cream", "a rabbit is eating an ice cream", "change pig to rabbit", | |
| os.path.join("./examples", "pig.jpg")], | |
| ["a rubber duck in a swimming pool", "a rubber duck with a hat in a swimming pool", "add a hat to the duck", | |
| os.path.join("./examples", "duck.jpg")], | |
| ["a photo of a cat", "a photo of a mouse", "change cat to mouse", | |
| os.path.join("./examples", "cat.jpeg")]], | |
| inputs=[textbox_source, textbox_target, textbox_instruct, source_image]) | |
| # random_models = random.sample([model for model in model_list], 2) | |
| # model_selector_left =gr.Markdown(random_models[0]) | |
| # model_selector_right =gr.Markdown(random_models[1]) | |
| btn_list = [leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, regenerate_btn, clear_btn] | |
| send_btn.click( | |
| gen_func, | |
| inputs=[ | |
| state0, | |
| state1, | |
| textbox_source, | |
| textbox_target, | |
| textbox_instruct, | |
| source_image, | |
| model_selector_left, | |
| model_selector_right | |
| ], | |
| outputs=[state0, state1, chatbot_left, chatbot_right, model_selector_left, model_selector_right], | |
| api_name="send_btn_side_by_side_anony" | |
| ).then( | |
| enable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| draw_btn.click( | |
| gen_func_random, | |
| inputs=[ | |
| state0, | |
| state1, | |
| model_selector_left, | |
| model_selector_right | |
| ], | |
| outputs=[state0, state1, chatbot_left, chatbot_right, | |
| source_image, textbox_source, textbox_target, textbox_instruct, | |
| model_selector_left, model_selector_right], | |
| api_name="draw_btn_side_by_side_anony" | |
| ).then( | |
| enable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| regenerate_btn.click( | |
| gen_func, | |
| inputs=[ | |
| state0, | |
| state1, | |
| textbox_source, | |
| textbox_target, | |
| textbox_instruct, | |
| source_image, | |
| model_selector_left, | |
| model_selector_right | |
| ], | |
| outputs=[state0, state1, chatbot_left, chatbot_right, model_selector_left, model_selector_right], | |
| api_name="regenerate_btn_side_by_side_anony" | |
| ).then( | |
| enable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| clear_btn.click( | |
| clear_history_side_by_side_ie_anony, | |
| inputs=None, | |
| outputs=[state0, state1, textbox_source, textbox_target, textbox_instruct, | |
| source_image, chatbot_left, chatbot_right, | |
| model_selector_left, model_selector_right], | |
| api_name="clear_btn_side_by_side_anony" | |
| ).then( | |
| disable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| vote_btns = [leftvote_btn, rightvote_btn, tie_btn, bothbad_btn] | |
| input_list = [textbox_source, textbox_target, source_image, textbox_instruct] | |
| dummy_left_model = gr.State("") | |
| dummy_right_model = gr.State("") | |
| leftvote_btn.click( | |
| leftvote_last_response, | |
| inputs=[state0, state1, dummy_left_model, dummy_right_model], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| rightvote_btn.click( | |
| rightvote_last_response, | |
| inputs=[state0, state1, dummy_left_model, dummy_right_model], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| tie_btn.click( | |
| tievote_last_response, | |
| inputs=[state0, state1, dummy_left_model, dummy_right_model], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| bothbad_btn.click( | |
| bothbad_vote_last_response, | |
| inputs=[state0, state1, dummy_left_model, dummy_right_model], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| def build_side_by_side_ui_named_ie(models): | |
| notice_markdown = """ | |
| # βοΈ GenAI-Arena βοΈ : Benchmarking Visual Generative Models in the Wild | |
| **GenAI-Arena is an open evaluation plaform focused on Image Generation, Image Editing, and Video Generation tasks.** | |
| | [Code](https://huggingface.co/spaces/TIGER-Lab/GenAI-Arena/tree/main) | [Paper](https://arxiv.org/abs/2406.04485v1) | [Dataset](https://huggingface.co/datasets/TIGER-Lab/GenAI-Bench) | | |
| ## π Rules | |
| - Edit with two selected models side-by-side and vote! | |
| - Upload a source image that you want to edit. | |
| - Input source prompt, target prompt and instruct prompt. | |
| - Wait to see the results after edition. | |
| - Click "Clear history" to start a new round. | |
| - The model could output a totally black image or noise. It's not a bug but the failure case of the model. | |
| ## β οΈ Data Collection Consent | |
| - Your input and votes will be collected for research purposes only. | |
| - By using this service, you agree to the collection of your input and votes for research purposes. | |
| - Your data will be anonymized and will not be used for commercial purposes. | |
| ## π User Guidelines for AI Content Generation | |
| - No NSFW Content: All user inputs must adhere to our content guidelines. Prompts containing NSFW (Not Safe For Work) content are strictly prohibited. | |
| - Automatic Filtering: Any input deemed inappropriate or NSFW will be automatically filtered out. Users will be prompted to re-enter a suitable request. | |
| - Content Guidelines: Please avoid using language or descriptions that could be considered offensive, explicit, or inappropriate. This includes, but is not limited to, sexual content, violence, and hate speech. | |
| - Respectful Use: We encourage all users to create content that is respectful and suitable for all audiences. | |
| ## π€ Choose two models to compare | |
| """ | |
| model_list = models.model_ie_list | |
| state0, state1 = gr.State(), gr.State() | |
| gen_func = partial(generate_iem, models.generate_image_ie_parallel) | |
| gen_func_random = partial(generate_iem_museum, models.generate_image_ie_museum_parallel) | |
| gr.Markdown(notice_markdown, elem_id="notice_markdown") | |
| with gr.Group(elem_id="share-region-named"): | |
| with gr.Row(): | |
| with gr.Column(): | |
| model_selector_left = gr.Dropdown( | |
| choices=model_list, | |
| value=model_list[0] if len(model_list) > 0 else "", | |
| interactive=True, | |
| show_label=False, | |
| container=False, | |
| ) | |
| with gr.Column(): | |
| model_selector_right = gr.Dropdown( | |
| choices=model_list, | |
| value=model_list[1] if len(model_list) > 1 else "", | |
| interactive=True, | |
| show_label=False, | |
| container=False, | |
| ) | |
| with gr.Row(): | |
| with gr.Accordion("π Expand to see all model descriptions", open=False): | |
| model_description_md = get_model_description_md(model_list) | |
| gr.Markdown(model_description_md, elem_id="model_description_markdown") | |
| with gr.Row(): | |
| with gr.Column(): | |
| chatbot_left = gr.Image(width=512, label = "Model A") | |
| with gr.Column(): | |
| chatbot_right = gr.Image(width=512, label = "Model B") | |
| with gr.Row(): | |
| leftvote_btn = gr.Button( | |
| value="π A is better", visible=False, interactive=False | |
| ) | |
| rightvote_btn = gr.Button( | |
| value="π B is better", visible=False, interactive=False | |
| ) | |
| tie_btn = gr.Button(value="π€ Tie", visible=False, interactive=False) | |
| bothbad_btn = gr.Button( | |
| value="π Both are bad", visible=False, interactive=False | |
| ) | |
| with gr.Row(): | |
| textbox_source = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your source prompt", | |
| elem_id="input_box_s", | |
| ) | |
| textbox_target = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your target prompt", | |
| elem_id="input_box_t", | |
| ) | |
| textbox_instruct = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your instruct prompt", | |
| elem_id="input_box_t", | |
| ) | |
| with gr.Row(): | |
| source_image = gr.Image(type="pil") | |
| send_btn = gr.Button(value="Send", variant="primary", scale=0) | |
| draw_btn = gr.Button(value="π² Random sample", variant="primary", scale=0) | |
| with gr.Row() as button_row: | |
| clear_btn = gr.Button(value="ποΈ Clear history", interactive=False) | |
| regenerate_btn = gr.Button(value="π Regenerate", interactive=False) | |
| # share_btn = gr.Button(value="π· Share") | |
| #gr.Markdown(acknowledgment_md, elem_id="ack_markdown") | |
| gr.Examples( | |
| examples=[ | |
| ["a bowl of strawberries", "a bowl of oranges", "change strawberries to oranges", | |
| os.path.join("./examples", "strawberries.jpg")], | |
| ["a pig is eating an ice cream", "a rabbit is eating an ice cream", "change pig to rabbit", | |
| os.path.join("./examples", "pig.jpg")], | |
| ["a rubber duck in a swimming pool", "a rubber duck with a hat in a swimming pool", "add a hat to the duck", | |
| os.path.join("./examples", "duck.jpg")], | |
| ["a photo of a cat", "a photo of a mouse", "change cat to mouse", | |
| os.path.join("./examples", "cat.jpeg")]], | |
| inputs=[textbox_source, textbox_target, textbox_instruct, source_image]) | |
| # model_selector_left.change( | |
| # clear_history_side_by_side_ie, | |
| # inputs=None, | |
| # outputs=[state0, state1, textbox_source, textbox_target, textbox_instruct, | |
| # source_image, chatbot_left, chatbot_right | |
| # ], | |
| # api_name="model_selector_left_side_by_side") | |
| # model_selector_right.change(clear_history_side_by_side_ie, inputs=None, outputs=[state0, state1, textbox_source, textbox_target, textbox_instruct, source_image, chatbot_left, chatbot_right], api_name="model_selector_right_side_by_side") | |
| btn_list = [leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, regenerate_btn, clear_btn] | |
| send_btn.click( | |
| gen_func, | |
| inputs=[ | |
| state0, | |
| state1, | |
| textbox_source, | |
| textbox_target, | |
| textbox_instruct, | |
| source_image, | |
| model_selector_left, | |
| model_selector_right | |
| ], | |
| outputs=[state0, state1, chatbot_left, chatbot_right], | |
| api_name="send_btn_side_by_side" | |
| ).then( | |
| enable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| draw_btn.click( | |
| gen_func_random, | |
| inputs=[ | |
| state0, | |
| state1, | |
| model_selector_left, | |
| model_selector_right | |
| ], | |
| outputs=[state0, state1, chatbot_left, chatbot_right, | |
| source_image, textbox_source, textbox_target, textbox_instruct | |
| ], | |
| api_name="draw_btn_side_by_side" | |
| ).then( | |
| enable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| regenerate_btn.click( | |
| gen_func, | |
| inputs=[ | |
| state0, | |
| state1, | |
| textbox_source, | |
| textbox_target, | |
| textbox_instruct, | |
| source_image, | |
| model_selector_left, | |
| model_selector_right | |
| ], | |
| outputs=[state0, state1, chatbot_left, chatbot_right], | |
| api_name="regenerate_btn_side_by_side" | |
| ).then( | |
| enable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| clear_btn.click( | |
| clear_history_side_by_side_ie, | |
| inputs=None, | |
| outputs=[state0, state1, textbox_source, textbox_target, textbox_instruct, | |
| source_image, chatbot_left, chatbot_right], | |
| api_name="clear_btn_side_by_side" | |
| ).then( | |
| disable_buttons_side_by_side, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| vote_btns = [leftvote_btn, rightvote_btn, tie_btn, bothbad_btn] | |
| input_list = [textbox_source, textbox_target, source_image, textbox_instruct] | |
| leftvote_btn.click( | |
| leftvote_last_response, | |
| inputs=[state0, state1, model_selector_left, model_selector_right], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| rightvote_btn.click( | |
| rightvote_last_response, | |
| inputs=[state0, state1, model_selector_left, model_selector_right], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| tie_btn.click( | |
| tievote_last_response, | |
| inputs=[state0, state1, model_selector_left, model_selector_right], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| bothbad_btn.click( | |
| bothbad_vote_last_response, | |
| inputs=[state0, state1, model_selector_left, model_selector_right], | |
| outputs=[model_selector_left, model_selector_right] + input_list + vote_btns, | |
| ) | |
| def build_single_model_ui_ie(models, add_promotion_links=False): | |
| promotion = ( | |
| """ | |
| - | [Code](https://huggingface.co/spaces/TIGER-Lab/GenAI-Arena/tree/main) | [Paper](https://arxiv.org/abs/2406.04485v1) | [Dataset](https://huggingface.co/datasets/TIGER-Lab/GenAI-Bench) | | |
| """ | |
| if add_promotion_links | |
| else "" | |
| ) | |
| notice_markdown = f""" | |
| # ποΈ Play with Image Edition Models | |
| {promotion} | |
| ## π€ Choose any model to edit image | |
| """ | |
| gr.Markdown(notice_markdown, elem_id="notice_markdown") | |
| state = gr.State() | |
| gen_func = partial(generate_ie, models.generate_image_ie) | |
| gen_func_random = partial(generate_ie_museum, models.generate_image_ie_museum) | |
| model_list = models.model_ie_list | |
| with gr.Row(elem_id="model_selector_row"): | |
| model_selector = gr.Dropdown( | |
| choices=model_list, | |
| value=model_list[0] if len(model_list) > 0 else "", | |
| interactive=True, | |
| show_label=False | |
| ) | |
| with gr.Row(): | |
| with gr.Accordion( | |
| "π Expand to see all model descriptions", | |
| open=False, | |
| elem_id="model_description_accordion", | |
| ): | |
| model_description_md = get_model_description_md(model_list) | |
| gr.Markdown(model_description_md, elem_id="model_description_markdown") | |
| with gr.Row(): | |
| textbox_source = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your source prompt", | |
| elem_id="input_box_s", | |
| ) | |
| textbox_target = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your target prompt", | |
| elem_id="input_box_t", | |
| ) | |
| textbox_instruct = gr.Textbox( | |
| show_label=False, | |
| placeholder="π Enter your instruct prompt", | |
| elem_id="input_box_t", | |
| ) | |
| with gr.Row(): | |
| source_image = gr.Image(type="pil") | |
| send_btn = gr.Button(value="Send", variant="primary", scale=0) | |
| draw_btn = gr.Button(value="π² Random sample", variant="primary", scale=0) | |
| with gr.Row(): | |
| chatbot = gr.Image() | |
| with gr.Row() as button_row: | |
| upvote_btn = gr.Button(value="π Upvote", interactive=False) | |
| downvote_btn = gr.Button(value="π Downvote", interactive=False) | |
| flag_btn = gr.Button(value="β οΈ Flag", interactive=False) | |
| regenerate_btn = gr.Button(value="π Regenerate", interactive=False) | |
| clear_btn = gr.Button(value="ποΈ Clear history", interactive=False) | |
| if add_promotion_links: | |
| #gr.Markdown(acknowledgment_md, elem_id="ack_markdown") | |
| pass | |
| gr.Examples( | |
| examples=[ | |
| ["a bowl of strawberries", "a bowl of oranges", "change strawberries to oranges", | |
| os.path.join("./examples", "strawberries.jpg")], | |
| ["a pig is eating an ice cream", "a rabbit is eating an ice cream", "change pig to rabbit", | |
| os.path.join("./examples", "pig.jpg")], | |
| ["a rubber duck in a swimming pool", "a rubber duck with a hat in a swimming pool", "add a hat to the duck", | |
| os.path.join("./examples", "duck.jpg")], | |
| ["a photo of a cat", "a photo of a mouse", "change cat to mouse", | |
| os.path.join("./examples", "cat.jpeg")]], | |
| inputs=[textbox_source, textbox_target, textbox_instruct, source_image]) | |
| # Register listeners | |
| btn_list = [upvote_btn, downvote_btn, flag_btn, regenerate_btn, clear_btn] | |
| model_selector.change(clear_history_ie, inputs=None, outputs=[state, textbox_source, textbox_target, textbox_instruct, source_image, chatbot], api_name="model_selector_single") | |
| btn_list = [upvote_btn, downvote_btn, flag_btn, regenerate_btn, clear_btn] | |
| send_btn.click( | |
| gen_func, | |
| inputs=[state, textbox_source, textbox_target, textbox_instruct, source_image, model_selector], | |
| outputs=[state, chatbot], | |
| api_name="send_btn_single", | |
| show_progress = "full" | |
| ).then( | |
| enable_buttons, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| draw_btn.click( | |
| gen_func_random, | |
| inputs=[state, model_selector], | |
| outputs=[state, chatbot, source_image, textbox_source, textbox_target, textbox_instruct], | |
| api_name="send_btn_single", | |
| show_progress = "full" | |
| ).then( | |
| enable_buttons, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| vote_btns = [upvote_btn, downvote_btn, flag_btn] | |
| model_inputs = [textbox_source, textbox_instruct, source_image, textbox_target] | |
| upvote_btn.click( | |
| upvote_last_response, | |
| inputs=[state, model_selector], | |
| outputs=model_inputs + vote_btns, | |
| ) | |
| downvote_btn.click( | |
| downvote_last_response, | |
| inputs=[state, model_selector], | |
| outputs=model_inputs + vote_btns, | |
| ) | |
| flag_btn.click( | |
| flag_last_response, | |
| inputs=[state, model_selector], | |
| outputs=model_inputs + vote_btns, | |
| ) | |
| regenerate_btn.click( | |
| gen_func, | |
| inputs=[state, textbox_source, textbox_target, textbox_instruct, source_image, model_selector], | |
| outputs=[state, chatbot], | |
| api_name="regenerate_btn_single", | |
| show_progress = "full" | |
| ).then( | |
| enable_buttons, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |
| clear_btn.click( | |
| clear_history_ie, | |
| inputs=None, | |
| outputs=[state, textbox_source, textbox_target, textbox_instruct, source_image, chatbot], | |
| api_name="clear_history_single", | |
| show_progress="full" | |
| ).then( | |
| disable_buttons, | |
| inputs=None, | |
| outputs=btn_list | |
| ) | |