|
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 |
|
**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 |
|
- 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. |
|
|
|
## π 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 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) |
|
|
|
|
|
|
|
|
|
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] |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def build_side_by_side_ui_named(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 |
|
- 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. |
|
|
|
## π 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_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) |
|
|
|
|
|
|
|
|
|
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], |
|
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] |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
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 |
|
) |
|
|
|
|