Spaces:
Running
on
Zero
Running
on
Zero
from .utils import * | |
from .vote_utils import ( | |
upvote_last_response_ig as upvote_last_response, | |
downvote_last_response_ig as downvote_last_response, | |
flag_last_response_ig as flag_last_response, | |
leftvote_last_response_igm as leftvote_last_response, | |
rightvote_last_response_igm as rightvote_last_response, | |
tievote_last_response_igm as tievote_last_response, | |
bothbad_vote_last_response_igm as bothbad_vote_last_response, | |
share_click_igm as share_click, | |
generate_ig, | |
generate_ig_museum, | |
generate_igm, | |
generate_igm_museum, | |
generate_igm_annoy, | |
generate_igm_annoy_museum, | |
share_js | |
) | |
from functools import partial | |
def build_side_by_side_ui_anony(models): | |
notice_markdown = """ | |
# βοΈ GenAI-Arena βοΈ : Benchmarking Visual Generative Models in the Wild | |
| [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 | |
- Input prompt to two anonymous models in same area (e.g., LCM, SDXL, SDXL-turbo in Text-guided Image Generation Model, MagicBrush, InstructPix2Pix in Text-guided Image Editing Model) and vote for the better one! | |
- When the results are ready, click the button below to vote. | |
- Vote won't be counted if model identity is revealed during conversation. | |
- Click "New Round" to start a new round. | |
## β οΈ 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. | |
## π Arena Elo | |
Find out who is the π₯conditional image generation models! More models are going to be supported. | |
## π Generating now! | |
""" | |
model_list = models.model_ig_list | |
state0 = gr.State() | |
state1 = gr.State() | |
gen_func = partial(generate_igm_annoy, models.generate_image_ig_parallel_anony) | |
gen_func_random = partial(generate_igm_annoy_museum, models.generate_image_ig_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, label = "Model A") | |
with gr.Column(): | |
chatbot_right = gr.Image(width=512, label = "Model B") | |
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 = gr.Textbox( | |
show_label=False, | |
placeholder="π Enter your prompt and press ENTER", | |
container=True, | |
elem_id="input_box", | |
) | |
send_btn = gr.Button(value="Send", variant="primary", scale=0) | |
draw_btn = gr.Button(value="π² Random sample", variant="primary", scale=0) | |
with gr.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") | |
dummy_img_output = gr.Image(width=512, visible=False) | |
gr.Examples( | |
examples=[["a cute dog is playing a ball", os.path.join("./examples", "dog.jpg")], | |
["Buildings on fire, old film still", os.path.join("./examples", "fire.jpg")], | |
["Lonely evil bananas on a table, hard light chiaroscuro, realistic",os.path.join("./examples", "banana.jpg")], | |
["A futuristic hopeful busy city, purple and green color scheme", os.path.join("./examples", "city.jpg")]], | |
inputs = [textbox, dummy_img_output]) | |
btn_list = [leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, regenerate_btn, clear_btn,] | |
textbox.submit( | |
gen_func, | |
inputs=[state0, state1, textbox, model_selector_left, model_selector_right], | |
outputs=[state0, state1, chatbot_left, chatbot_right, model_selector_left, model_selector_right], | |
api_name="submit_btn_annony" | |
).then( | |
enable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
send_btn.click( | |
gen_func, | |
inputs=[state0, state1, textbox, model_selector_left, model_selector_right], | |
outputs=[state0, state1, chatbot_left, chatbot_right, model_selector_left, model_selector_right], | |
api_name="send_btn_annony" | |
).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, textbox, model_selector_left, model_selector_right], | |
api_name="draw_btn_annony" | |
).then( | |
enable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
clear_btn.click( | |
clear_history_side_by_side_anony, | |
inputs=None, | |
outputs=[state0, state1, textbox, chatbot_left, chatbot_right, model_selector_left, model_selector_right], | |
api_name="clear_btn_annony" | |
).then( | |
disable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
regenerate_btn.click( | |
gen_func, | |
inputs=[state0, state1, textbox, model_selector_left, model_selector_right], | |
outputs=[state0, state1, chatbot_left, chatbot_right, model_selector_left, model_selector_right], | |
api_name="regenerate_btn_annony" | |
).then( | |
enable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
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=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
rightvote_btn.click( | |
rightvote_last_response, | |
inputs=[state0, state1, dummy_left_model, dummy_right_model], | |
outputs=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
tie_btn.click( | |
tievote_last_response, | |
inputs=[state0, state1, dummy_left_model, dummy_right_model], | |
outputs=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
bothbad_btn.click( | |
bothbad_vote_last_response, | |
inputs=[state0, state1, dummy_left_model, dummy_right_model], | |
outputs=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
# share_btn.click( | |
# share_click, | |
# inputs=[state0, state1, model_selector_left, model_selector_right], | |
# outputs=[], | |
# js=share_js | |
# ) | |
def build_side_by_side_ui_named(models): | |
notice_markdown = """ | |
# βοΈ GenAI-Arena βοΈ : Benchmarking Visual Generative Models in the Wild | |
| [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 | |
- Generate with any two selected models side-by-side and vote! | |
- Input prompt you want to generate. | |
- Click "Send" to submit the prompt. | |
- Click "Clear history" to start a new round. | |
## β οΈ 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. | |
## π€ Choose two models to compare | |
""" | |
model_list = models.model_ig_list | |
state0 = gr.State() | |
state1 = gr.State() | |
anony = False | |
gen_func = partial(generate_igm, models.generate_image_ig_parallel) | |
gen_func_random = partial(generate_igm_museum, models.generate_image_ig_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, | |
allow_custom_value=True | |
) | |
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, | |
allow_custom_value=True | |
) | |
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 = gr.Textbox( | |
show_label=False, | |
placeholder="π Enter your prompt and press ENTER", | |
elem_id="input_box" | |
) | |
send_btn = gr.Button(value="Send", variant="primary", scale=0) | |
draw_btn = gr.Button(value="π² Random sample", variant="primary", scale=0) | |
with gr.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") | |
dummy_img_output = gr.Image(width=512, visible=False) | |
gr.Examples( | |
examples=[["a cute dog is playing a ball", os.path.join("./examples", "dog.jpg")], | |
["Buildings on fire, old film still", os.path.join("./examples", "fire.jpg")], | |
["Lonely evil bananas on a table, hard light chiaroscuro, realistic",os.path.join("./examples", "banana.jpg")], | |
["A futuristic hopeful busy city, purple and green color scheme", os.path.join("./examples", "city.jpg")]], | |
inputs = [textbox, dummy_img_output]) | |
# model_selector_left.change(clear_history_side_by_side, inputs=None, outputs=[state0, state1, textbox, chatbot_left, chatbot_right], api_name="model_selector_left_side_by_side") | |
# model_selector_right.change(clear_history_side_by_side, inputs=None, outputs=[state0, state1, textbox, 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] | |
textbox.submit( | |
gen_func, | |
inputs=[state0, state1, textbox, model_selector_left, model_selector_right], | |
outputs=[state0, state1, chatbot_left, chatbot_right], | |
api_name="textbox_side_by_side" | |
).then( | |
enable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
send_btn.click( | |
gen_func, | |
inputs=[state0, state1, textbox, model_selector_left, model_selector_right], | |
outputs=[state0, state1, chatbot_left, chatbot_right], | |
api_name="send_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, textbox], | |
api_name="draw_side_by_side" | |
).then( | |
enable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
regenerate_btn.click( | |
gen_func, | |
inputs=[state0, state1, textbox, model_selector_left, model_selector_right], | |
outputs=[state0, state1, chatbot_left, chatbot_right], | |
api_name="regenerate_side_by_side" | |
).then( | |
enable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
clear_btn.click( | |
clear_history_side_by_side, | |
inputs=None, | |
outputs=[state0, state1, textbox, chatbot_left, chatbot_right], | |
api_name="clear_btn_side_by_side" | |
).then( | |
disable_buttons_side_by_side, | |
inputs=None, | |
outputs=btn_list | |
) | |
leftvote_btn.click( | |
leftvote_last_response, | |
inputs=[state0, state1, model_selector_left, model_selector_right], | |
outputs=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
rightvote_btn.click( | |
rightvote_last_response, | |
inputs=[state0, state1, model_selector_left, model_selector_right], | |
outputs=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
tie_btn.click( | |
tievote_last_response, | |
inputs=[state0, state1, model_selector_left, model_selector_right], | |
outputs=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
bothbad_btn.click( | |
bothbad_vote_last_response, | |
inputs=[state0, state1, model_selector_left, model_selector_right], | |
outputs=[textbox, leftvote_btn, rightvote_btn, tie_btn, bothbad_btn, model_selector_left, model_selector_right] | |
) | |
# share_btn.click( | |
# share_click, | |
# inputs=[state0, state1, model_selector_left, model_selector_right], | |
# outputs=[], | |
# js=share_js | |
# ) | |
def build_single_model_ui(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 Generation Models | |
{promotion} | |
## π€ Choose any model to generate | |
""" | |
state = gr.State() | |
gen_func = partial(generate_ig, models.generate_image_ig) | |
gen_func_random = partial(generate_ig_museum, models.generate_image_ig_museum) | |
gr.Markdown(notice_markdown, elem_id="notice_markdown") | |
model_list = models.model_ig_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 = gr.Textbox( | |
show_label=False, | |
placeholder="π Enter your prompt and press ENTER", | |
elem_id="input_box" | |
) | |
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 | |
dummy_img_output = gr.Image(visible=False) | |
gr.Examples( | |
examples=[["a cute dog is playing a ball", os.path.join("./examples", "dog.jpg")], | |
["Buildings on fire, old film still", os.path.join("./examples", "fire.jpg")], | |
["Lonely evil bananas on a table, hard light chiaroscuro, realistic",os.path.join("./examples", "banana.jpg")], | |
["A futuristic hopeful busy city, purple and green color scheme", os.path.join("./examples", "city.jpg")]], | |
inputs = [textbox, dummy_img_output]) | |
model_selector.change(clear_history, inputs=None, outputs=[state, textbox, chatbot], api_name="model_selector_single") | |
btn_list = [upvote_btn, downvote_btn, flag_btn, regenerate_btn, clear_btn] | |
textbox.submit( | |
gen_func, | |
inputs=[state, textbox, model_selector], | |
outputs=[state, chatbot], | |
api_name="submit_btn_single", | |
show_progress = "full" | |
).success( | |
enable_buttons, | |
inputs=None, | |
outputs=btn_list | |
) | |
send_btn.click( | |
gen_func, | |
inputs=[state, textbox, model_selector], | |
outputs=[state, chatbot], | |
api_name="send_btn_single", | |
show_progress = "full" | |
).success( | |
enable_buttons, | |
inputs=None, | |
outputs=btn_list | |
) | |
draw_btn.click( | |
gen_func_random, | |
inputs=[state, model_selector], | |
outputs=[state, chatbot, textbox], | |
api_name="draw_btn_single", | |
show_progress = "full" | |
).success( | |
enable_buttons, | |
inputs=None, | |
outputs=btn_list | |
) | |
upvote_btn.click( | |
upvote_last_response, | |
inputs=[state, model_selector], | |
outputs=[textbox, upvote_btn, downvote_btn, flag_btn] | |
) | |
downvote_btn.click( | |
downvote_last_response, | |
inputs=[state, model_selector], | |
outputs=[textbox, upvote_btn, downvote_btn, flag_btn] | |
) | |
flag_btn.click( | |
flag_last_response, | |
inputs=[state, model_selector], | |
outputs=[textbox, upvote_btn, downvote_btn, flag_btn] | |
) | |
regenerate_btn.click( | |
gen_func, | |
inputs=[state, textbox, model_selector], | |
outputs=[state, chatbot], | |
api_name="regenerate_btn_single", | |
show_progress = "full" | |
).success( | |
enable_buttons, | |
inputs=None, | |
outputs=btn_list | |
) | |
clear_btn.click( | |
clear_history, | |
inputs=None, | |
outputs=[state, textbox, chatbot], | |
api_name="clear_history_single", | |
show_progress="full" | |
).then( | |
disable_buttons, | |
inputs=None, | |
outputs=btn_list | |
) | |